418342 ภาคปลาย 2552/ปฏิบัติการที่ 3

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

ในปฏิบัติการที่สามนี้คุณจะได้เขียนคลาสสำหรับจัดการพหุนามที่มีสัมประสิทธิ์เป็นจำนวนตรรกยะ นอกจากนี้ยังจะได้เรียนรู้เรื่องการใช้เครื่องมือสร้าง 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

เพื่อส่งผลงานของคุณไปเกิดที่เซิร์ฟเวอร์กลางต่อไป