4563456

810 views

Published on

Published in: Business, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
810
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

4563456

  1. 1. หนวยที่ 9 โพลีมอรฟซึม (Polymorphism)OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 1
  2. 2. วัตถุประสงคเพื่อใหผูเรียน เขาใจหลักการโพลีมอรฟซม ึ สามารถประยุกตใชโพลีมอรฟซึมในการออกแบบ  โปรแกรมได สามารถเขียนโปรแกรมที่ใชโพลีมอรฟซมได ึ เขาใจอินเตอรเฟสในจาวา เขาใจการใชอนเตอรเฟสในการเขียนโปรแกรม ิOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 2
  3. 3. โพลีมอรฟซึม (Polymorphism) หรือการพองรูป หมายความวา พฤติกรรมเดียวกันสามารถแสดงออก ตางกันไดหลายรูปแบบ ขึ้นอยูกับชนิดของอ็อบเจกต เปนการที่ออบเจกตตางคลาสกันสามารถรับเมสเสจ ็ เดียวกันได แตทํางานตอบสนองแตกตางกันไปตามวิธี ของตัวเองOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 3
  4. 4. ประโยชนของโพลีมอรฟซึม  ชวยใหสามารถเขียนโคดที่งายตอการแกไขและ ขยาย เพราะชวยลดผลกระทบทีเกิดขึนกับโคดเดิม เมือมี ่ ้ ่ การเพิ่มคลาสOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 4
  5. 5. การใชโพลีมอรฟซึม โพลีมอรฟซม ทําใหตวแปรตัวเดียวอางถึงอ็อบเจกต ึ ั ของหลายคลาส ที่มเมธอดเหมือนกันได ี ทําใหคําสั่งเดียวสามารถเรียกใชเมธอดของคลาสที่ ตางกันได โดยเมธอดใดจะถูกเรียกใหทางาน ขึ้นอยูกับวา ํ อ็อบเจกตที่รับเมสเสจเปนอ็อบเจกตของคลาสใด เทคนิคทีใชในการทําโพลีมอรฟซึมสําหรับจาวา คือ ่  เลทบายดิ้ง (late binding) การทําโพลีมอรฟซึมมักใชรวมกับการสืบทอด   คุณสมบัติ หรือ อินเตอรเฟสOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 5
  6. 6. การเลือกใชเมธอด เออลีบายดิ้ง (early binding) หรือ สแตติกบายดิ้ง ่ (static binding) คือการที่คอมไพเลอรเลือก เมธอดตอนคอมไพลโปรแกรม (compile time) เลทบายดิ้ง (late binding) หรือ ไดนามิคบายดิ้ง (dynamic binding) คือการที่เวอรชวลแมทชีน (virtual machine) เลือกเมธอดที่จะรันขณะโปรแกรม ทํางาน (runtime) โดยการหาชนิด อ็อบเจกตเพื่อกําหนดเมธอดทีจะรันใหเหมาะสม ่OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 6
  7. 7. โพลีมอรฟซึม และการสืบทอด คุณสมบัติ ตัวแปรตัวเดียวสามารถใชอางถึงอ็อบเจกตของ คลาสที่ใชในการประกาศตัวแปร และคลาสทีสบ ่ ื ทอดคุณสมบัตของคลาสนี้ได ิ เชน ถา Cat และ Dog เปนซับคลาสของ Pet คําสั่งตอไปนี้ใชได Pet myPet; myPet = new Pet(); myPet = new Cat(); myPet = new Dog();OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 7
  8. 8. โพลีมอรฟซึม และการสืบทอด คุณสมบัติ กําหนดเมธอดที่จะทําโพลีมอรฟซึมไวในซุปเปอรคลาส  เขียนเมธอดนั้นไวซับคลาสดวย โดยใชการ โอเวอรไรดเมธอด ถาใชคําสั่ง myPet.toString(); เมธอด toString() ของคลาส Pet Cat หรือ Dog จะถูกเลือกใหทางานขึ้นอยูกับวา myPet เปน ํ อ็อบเจกตของคลาสใดOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 8
  9. 9. โอเปอเรเตอร instanceof ใชในการหาคลาสของอ็อบเจกต โดยตรวจสอบวาอ็อบเจกตเปนของคลาสที่ระบุ หรือไม อ็อบเจกต instanceof ชือคลาส ่ ตัวอยาง if (myPet instanceof Cat) { System.out.println(“สัตวเลี้ยงตัวนี้เปนแมว”); }OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 9
  10. 10. อินเตอรเฟส (Interface) อินเตอรเฟส (interface) หรือ จาวาอินเตอรเฟส (Java interface) ขอกําหนดความสามารถ โดยไมระบุ การอิมพลีเมนต อินเตอรเฟส ประกอบดวยขอกําหนดของเมธอด ในรูปของรายการเมธอด และลายเซ็นของเมธอดแตละ ตัว ประโยชนของอินเตอรเฟส คือใชกําหนดพฤติกรรม มาตรฐานของคลาส ในรูปของรายการเมธอดที่คลาส ตองมี และรูปแบบการใชงานของเมธอด อินเตอรเฟส ตองถูกอิมพลีเมนตโดยคลาส ถึงจะ นําไปใชงานไดOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 10
  11. 11. ลักษณะของอินเตอรเฟส ทุกเมธอดในอินเตอรเฟสเปนแอบสแตร็กเมธอด (abstract method) หมายความวา มีแตชอ ื่ พารามิเตอร และชนิดขอมูลสงคืน ไมมการอิมพลีเมนต ี ทุกเมธอดในอินเตอรเฟสเปนพับบลิค (public) อินเตอรเฟสไมอินสแตนซแอททริบิว (instance attribute)OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 11
  12. 12. การประกาศอินเตอรเฟส public interface ชื่ออินเตอรเฟส { // ลายเซ็นตเมธอด } ตัวอยาง public interface Measurable { double getMeasure(); }OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 12
  13. 13. การอิมพลีเมนตอินเตอรเฟส public class ชื่อคลาส implements ชืออินเตอรเฟส , ชื่ออินเตอรเฟส , ... ่ { // แอททริบิว // เมธอด }OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 13
  14. 14. ตัวอยางการอิมพลีเมนตอินเตอรเฟส ตัวอยาง public class BankAccount implements Measurable { // เมธอดอื่นๆ public double getMeasure() { // คําสั่งอิมพลีเมนตเมธอด } }OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 14
  15. 15. โพลีมอรฟซึม และอินเตอรเฟส  ตัวแปรตัวเดียวสามารถใชอางถึงอ็อบเจกตของทุก คลาสทีอมพลีเมนตอินเตอรเฟสที่ใชในการประกาศตัว ่ ิ แปรได เชน ถา Coin และ BankAccount อิมพลีเมนต อินเตอรเฟส Measurable คําสั่งตอไปนี้ใชได Measurable x; x = new Coin (); x = new BankAccount();OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 15
  16. 16. กรณีศึกษา: การออกแบบคลาสนักศึกษา นักศึกษามี 2 กลุม: ระดับปริญญาตรี และปริญญาโท  นักศึกษาแตละคนมีขอมูลดังนี: ชือ, คะแนนสอบ 3  ้ ่ ครั้ง, เกรด (ผาน/ไมผาน) การตัดเกรด นักศึกษา การคิดเกรด ปริญญาตรี ผาน ถา (test1+test2+test3)/3 >= 70 ปริญญาโท ผาน ถา (test1+test2+test3)/3 >= 80OOP 1/2551 part time ดร.สุขสถิต มีสถิตย 16
  17. 17. การออกแบบ Student UndergraduateStudent GraduateStudentOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 17
  18. 18. การใชออกแบบโดยใชโพลีมอรฟซึม กับกรณีศึกษา การใชโพลีมอรฟซมชวยใหสามารถใชอารเรยเพียงชุด ึ เดียวในเก็บขอมูลตางชนิดกันได ทําใหการสราง โปรแกรมงายขึ้น ชวยใหสะดวกในการแกไขโปรแกรม เชน การเพิ่ม ประเภทนักศึกษาOOP 1/2551 part time ดร.สุขสถิต มีสถิตย 18

×