LAB :- Object Oriented Programming: Simple Review
วันนี้เราจะมาทำเตาไมโครเวฟจำลอง ดังรูปนะ

โดย
เราจะทำให้เวฟทำงานได้ด้วยการ ก่อนอื่นตั้งเวลาที่จะทำอาหารก่อน
โดยเราสามารถกดเลขเวลาเข้าไปได้สี่ตัว (กดน้อยกว่านั้นก็ได้) เช่นถ้ากดแค่
5 ก็จะได้ผลดังรูป

แต่ถ้ากดต่อไป เช่น กด 4 กับ 3 ต่อ ก็จะได้เป็น

กดได้มากสุดสี่ตัวเลข ถ้ากดมากกว่านั้น จะไม่เข้า ต้องแก้ด้วยการกด Clear เท่านั้น
เมื่อจะให้เริ่มทำอาหาร
ให้กด Start กระจกเครื่องจะเปลี่ยนเป็นสีเหลือง
ค่าตัวเลขจะลดลง ตามวินาที จนพอรันจบ ตัวเตาจะแสดง ข้อความ
Done!
---> 
ระหว่างรันนั้น คนสามารถกด Clear ได้ ซึ่งถ้าทำอย่างนั้น จะต้องรีเซ็ตทุกอย่างกลับไปยังสภาพเริ่มต้นเหมือนดังรูปบนสุด
การใส่เลขนั้น
ขอให้เขียนดักไว้ด้วย ว่าตอนเริ่มรันนั้น
ทั้งจำนวนนาทีและวินาทีจะต้องไม่เกิน 59 ถ้าเกินขึ้นมา
จำนวนนั้นจะต้องถูกรีเซ็ตเป็น 0 ตอนกด Start ตัวอย่างเช่น ถ้าเราพิมพ์
7235 ลงไป ตอนกด Start นั้น ตัวเลขบนไมโครเวฟจะเปลี่ยนเป็น 00:35
เพราะว่าเลข 72 นั้นเกิน 59
โครงไฟล์ของคลาสไมโครเวฟอยู่นี่
การคิดคะแนน
คะแนนของแล็บนี้
แบ่งเป็นสามส่วนเท่ากัน ส่วนแรกจะมาจากการเขียนคลาส CookingTime
ส่วนที่สองมาจากการทำ JUnit ของคลาส cookingTime ส่วนที่สามมาจาก user
interface
ส่วนแรก คลาส CookingTime (ตรงนี้แหละคือการทวน ว่า ใครยังนิยาม object ไม่เป็นบ้าง จะได้ฝึกทำให้ได้ซะ)
ใช้เก็บเวลาที่จะทำอาหาร ทั้งส่วนนาทีและวินาที
มีการทำงานของคลาสดังนี้
- เมื่อตัว object ของคลาสนี้ถูกสร้างขึ้น
- ให้เซ็ตจำนวนนาทีและวินาทีเป็น 0 ทั้งคู่
- เมื่อเซ็ตค่าของนาที
- ถ้าค่าของนาทีมีค่าตั้งแต่ 1 ถึง 59 ก็ให้ตั้งค่านาทีตามที่เซ็ตนั้น
- ถ้าไม่งั้น ต้องให้จำนวนนาทีกลายเป็น 0
- เมื่อเซ็ตค่าของวินาที
- ถ้าค่าของวินาทีมีค่าตั้งแต่ 1 ถึง 59 ก็ให้ตั้งค่าวินาทีตามที่เซ็ตนั้น
- ถ้าไม่งั้น ต้องให้จำนวนวินาทีกลายเป็น 0
- เมื่อมีการลดเวลา
- ถ้าค่าของวินาทีมากกว่า 0 ให้ลดค่านั้นไป 1 หน่วย
- มิฉะนั้น ถ้าจำนวนนาทีมากกว่า 0 ให้ลดค่านาทีไป 1 หน่วยแล้วตั้งค่าวินาทีเป็น 59
เมธอดที่ CookingTime ต้องมี
- คอนสตรัคเตอร์ ที่ initialize ค่า ทั้งนาทีและวินาทีได้
- คอนสตรัคเตอร์ที่ initialize ค่าเป็น 0 ทั้งคู่
- public int getMinute() ซึ่งรีเทิร์นค่านาทีออกมา
- public int getSecond() ซึ่งรีเทิร์นค่าวินาทีออกมา
- public
void setMinute(int m) เซ็ตค่านาที ของออบเจ็ค CookingTime ปัจจุบัน
ให้มีค่าเป็น m อย่าลืมว่าค่าต้องอยู่ในช่วงที่ใช้งานได้จริงเท่านั้น
- public
void setSecond(int s) เซ็ตค่าวินาทีของออบเจ็ค CookingTime ปัจจุบัน
ให้มีค่าเป็น s อย่าลืมว่าค่าต้องอยู่ในช่วงที่ใช้งานได้จริงเท่านั้น
- public boolean isDone() รีเทิร์น true ถ้าเวลาเป็น 0 ไม่งั้นรีเทิร์น false
- public void tick() เป็นเมธอดที่ลดเวลาทำอาหารไปหนึ่งวินาที เมธอดนี้จะถูกเรียกใช้โดยตัวไมโครเวฟในทุกๆหนึ่งวินาทีนั่นเอง
ส่วนที่สอง การสร้าง JUnit สำหรับทดสอบทุกเมธอด รวมทั้งคอนสตรัคเตอร์ ของ CookingTime
ส่วนนี้ใช้ความรู้เรื่อง JUnit เหมือนแล็บครั้งก่อน ก็ทำเมธอดสำหรับทดสอบมาให้ครบนะ
ส่วนที่สาม User Interface
ทำให้ได้โปรแกรมออกมาตามที่บรรยายไว้ด้านบนสุด
็Hint: การสร้าง event ทุกวินาที โดยไม่ต้องใช้ thread
ใช้คลาส Timer
ตัวอย่างเช่น
clockTimer
= new Timer(1000, timerActionListener) ; เป็นการสร้างตัว Timer
ที่ปล่อย event ออกมาทุก 1000 มิลลิวินาที โดย ตัว Listener
ที่เป็นพารามิเตอร์ที่สองของคอนสตรัคเตอร์นี้จะเป็นตัวจับ event
ที่ถูกส่งออกมา
ส่วน clockTimer จะเริ่มทำงานได้นั้น ต้องสั่ง clockTimer.start() และก็สั่งหยุดทำงานได้ด้วยคำสั่ง stop()
ต้องไปเขียน clockTimerActionPerformed (ActionEvent event) หน่อยนะ ในโค้ดมีโครงการใช้งานให้ดูแล้ว
ตัว CookingTime และ JUnit ของมัน ต้องส่งในวันที่ทำแล็บ ภายในเวลาเที่ยงคืน ส่งในรูปของ jar file นะ ส่งเมล์โปรแกรมที่ทำเสร็จแล้วมาที่ progmethcp@gmail.com โดยในเมล์ subject ต้องเขียนเป็น
studentID_labObject_secNumber และไฟล์ต้องมีชื่อว่า studentID_labObject_secNumber.jar
studentID คือเลขประจำตัวนิสิต
secNumber คือเบอร์ตอนเรียน
ส่วน user interface ที่ทำงานแล้วนั้น ส่งมาภายในเที่ยงคืนวันอาทิตย์ หลังจากวันที่ทำแล็บนี้ โดยใน subject ต้องเขียนเป็น
studentID_labObject02_secNumber และไฟล์ต้องมีชื่อว่า studentID_labObject02_secNumber.jar ซึ่งต้องทำเป็น executable นะ