418342 ภาคปลาย 2552/ปฏิบัติการที่ 3
ในปฏิบัติการที่สามนี้คุณจะได้เขียนคลาสสำหรับจัดการพหุนามที่มีสัมประสิทธิ์เป็นจำนวนตรรกยะ นอกจากนี้ยังจะได้เรียนรู้เรื่องการใช้เครื่องมือสร้าง documetation ชื่อ RDOC และการเขียนใช้ unit testing ในภาษา Ruby ด้วย
เนื้อหา
Clone, Pull, และ Update
ถ้าเครื่องคุณยังไม่มี repository ส่วนตัวของคุณ ให้คุณทำการ clone repository ของตัวเองจาก
https://theory.cpe.ku.ac.th/418342_<<ชื่อ account เกษตรของคุณ>>
หลังจากนั้นให้ทำการ pull จาก master repository โดยสั่ง
hg pull https://theory.cpe.ku.ac.th/418342_master
คุณอาจจะพบว่า pull มาแล้วอาจจะเกิด conflict ซึ่งถ้าเกิดเหตุการณ์เช่นนี้ ให้คุณสั่ง
hg merge
แล้วจึงสั่ง
hg commit
แล้วจึง update ด้วยการสั่ง
hg update
คุณจะพบว่าใน repository ของตัวเองจะมี directory ชื่อ lab-03 อยู่
สร้าง API Documentation ด้วย RDOC
RDOC เป็นเครื่องมีใช้สร้าง API documentation ของภาษา Ruby ซึ่งมีลักษณะคล้ายๆ กับ javadoc ให้คุณเข้าไปใน directory ชื่อ lab-03 ที่เพิ่งถูก pull เข้ามาใหม่
cd lab-03
แล้วจึีงสั่ง
rdoc RatNum.rb RatTerm.rb RatPoly.rb --all
คุณจะเห็นว่า RDOC จะทำการสร้าง directory ชื่อ doc ขึ้นใน directory lab-03 ให้คุณเข้าไปสำรวจ directory นี้ แล้วเปิดไฟล์ชื่อ index.html ในเบราเซอร์ที่คุณชอบ
คำถามที่ 1
ใน API documentation ที่สร้างขึ้นมามีคลาสอะไรปรากฏอยู่บ้าง? คลาส String เป็นคลาสที่ใช้ทำอะไร? ทำไมมีเมธอดแค่ 3 เมธอดในคลาสสตริง? จริงๆ แล้วคลาส String มีเมธอดแค่ 3 เมธอดนี้หรือเปล่า? ในภาษา Java หรือ C# คุณจะสามารถทำอย่างนี้กลับคลาส String ได้หรือไม่? เพราะอะไร?
RatNum
คำถามที่ 2
ให้อ่าน API ของคลาสที่ชื่อ RatNum คลาสนี้มีไว้ทำอะไร? มันมีฟีลด์อยู่กี่ฟีลด์และแต่ละฟีลด์แทนค่าอะไร?
คำถามที่ 3
ถ้าคุณต้องการสร้าง instance ของคลาส RatNum ที่แทนจำนวน 17/3 คุณสามารถสร้างมันขึ้นมาอย่างใดได้บ้าง?
หลังจากตอบคำถามที่ 2 และ 3 แล้วให้คุณเปิดไฟล์ RatNum.rb ขึ้นมาดู แล้วศึกษาวิธีการเขียนเมธอดต่างๆ โดยเฉพาะเมธอด +, -, *, /, -@, และ initialize
ภาษา Ruby มีไลบรารีสำหรับการทำ unit testing ติดมาพร้อมกับตัวภาษาเลย คุณสามารถ run unit test ของคลาส RatNum ได้ด้วยการ run คำสั่ง
ruby test_RatNum.rb
คุณจะพบว่าเมื่อ run unit test แล้วจะ run ผ่านทั้งหมด
ต่อไปให้คุณเปิดไฟล์ TestRatNum.rb ขึ้นมาอ่านเพื่อศึกษาว่า unit test ของภาษา ruby เขียนขึ้นมาได้อย่างไร คุณสามารถหารายละเอียดเพิ่มเติมของการสร้าง unit test ในภาษา Ruby ได้ที่ http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html
RatTerm
ให้คุณอ่าน API documentation ของคลาส RatTerm แล้วลอง run
ruby test_RatTerm.rb
คุณจะพบว่ามี test รันไม่ผ่านอยู่หลาย case มาก
ที่เป็นเช่นนี้เพราะว่าคลาส RatTerm นั้นยังไม่สมบูรณ์ ให้คุณเปิด RatTerm.rb ขึ้นมาแก้ไขโดยเติมเมธอดต่างๆ ให้สมบูรณ์ เมธอดที่ไม่สมบูรณ์คือเมธอดที่ตัวของมันมีแค่คำสั่ง
raise NotImplementedError
อยู่เท่านั้น จงอ่าน API documentation แล้วเติมเมธอดต่างๆ ให้สมบูรณ์ตามนั้น
แล้วคุณจะแน่ใจได้เมื่อไหร่ว่าคุณจะเติมคลาส RatTerm.rb ได้สมบูรณ์แล้ว? คำตอบคือก็ต่อเมื่อ unit test รันผ่านทั้งหมดแล้วเท่านั้น
RatPoly
หลังจากคุณเติม RatTerm ได้สมบูรณ์แล้วให้ไปเติมคลาส RatPoly ซึ่งอยู่ในไฟล์ RatPoly.rb ให้สมบูรณ์บ้าง คุณจะแน่ใจว่าคุณเติมคลาสได้สมบูรณ์แล้วก็ต่อเมื่อคุณ run
ruby test_RatPoly.rb
แล้วผ่าน test ทุก test แล้วเท่านั้น
Commit และ Push
หลังจากเติม RatPoly ให้สมบูรณ์แล้วให้สั่ง
hg commit
เพื่อ commit ความเปลี่ยนแปลงต่างๆ ที่คุณได้สร้างขึ้น แล้วจึงสั่ง
hg push
เพื่อส่งผลงานของคุณไปเกิดที่เซิร์ฟเวอร์กลางต่อไป