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 ไม่เป็นบ้าง จะได้ฝึกทำให้ได้ซะ)

ใช้เก็บเวลาที่จะทำอาหาร ทั้งส่วนนาทีและวินาที
มีการทำงานของคลาสดังนี้

เมธอดที่ CookingTime ต้องมี
  1. คอนสตรัคเตอร์ ที่ initialize ค่า ทั้งนาทีและวินาทีได้ 
  2. คอนสตรัคเตอร์ที่ initialize ค่าเป็น 0 ทั้งคู่
  3. public int getMinute() ซึ่งรีเทิร์นค่านาทีออกมา
  4. public int getSecond() ซึ่งรีเทิร์นค่าวินาทีออกมา
  5. public void setMinute(int m) เซ็ตค่านาที ของออบเจ็ค CookingTime ปัจจุบัน ให้มีค่าเป็น m อย่าลืมว่าค่าต้องอยู่ในช่วงที่ใช้งานได้จริงเท่านั้น
  6. public void setSecond(int s) เซ็ตค่าวินาทีของออบเจ็ค CookingTime ปัจจุบัน ให้มีค่าเป็น s อย่าลืมว่าค่าต้องอยู่ในช่วงที่ใช้งานได้จริงเท่านั้น
  7. public boolean isDone() รีเทิร์น true ถ้าเวลาเป็น 0 ไม่งั้นรีเทิร์น false
  8. 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 นะ