SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
หนวยที่ 9
                        โพลีมอรฟซึม
                       (Polymorphism)


OOP 1/2551 part time       ดร.สุขสถิต มีสถิตย   1
วัตถุประสงค
เพื่อใหผูเรียน
  เขาใจหลักการโพลีมอรฟซม
                          ึ
  สามารถประยุกตใชโพลีมอรฟซึมในการออกแบบ
                            
  โปรแกรมได
  สามารถเขียนโปรแกรมที่ใชโพลีมอรฟซมได
                                     ึ
  เขาใจอินเตอรเฟสในจาวา
  เขาใจการใชอนเตอรเฟสในการเขียนโปรแกรม
                 ิ



OOP 1/2551 part time   ดร.สุขสถิต มีสถิตย   2
โพลีมอรฟซึม (Polymorphism)
      หรือการพองรูป
      หมายความวา พฤติกรรมเดียวกันสามารถแสดงออก
      ตางกันไดหลายรูปแบบ ขึ้นอยูกับชนิดของอ็อบเจกต
      เปนการที่ออบเจกตตางคลาสกันสามารถรับเมสเสจ
                 ็
      เดียวกันได แตทํางานตอบสนองแตกตางกันไปตามวิธี
      ของตัวเอง




OOP 1/2551 part time     ดร.สุขสถิต มีสถิตย         3
ประโยชนของโพลีมอรฟซึม
                    
        ชวยใหสามารถเขียนโคดที่งายตอการแกไขและ
        ขยาย
        เพราะชวยลดผลกระทบทีเกิดขึนกับโคดเดิม เมือมี
                              ่      ้             ่
        การเพิ่มคลาส




OOP 1/2551 part time       ดร.สุขสถิต มีสถิตย          4
การใชโพลีมอรฟซึม
      โพลีมอรฟซม ทําใหตวแปรตัวเดียวอางถึงอ็อบเจกต
                    ึ        ั
      ของหลายคลาส ที่มเมธอดเหมือนกันได
                           ี
      ทําใหคําสั่งเดียวสามารถเรียกใชเมธอดของคลาสที่
      ตางกันได
      โดยเมธอดใดจะถูกเรียกใหทางาน ขึ้นอยูกับวา
                                    ํ
      อ็อบเจกตที่รับเมสเสจเปนอ็อบเจกตของคลาสใด
      เทคนิคทีใชในการทําโพลีมอรฟซึมสําหรับจาวา คือ
               ่                      
      เลทบายดิ้ง (late binding)
      การทําโพลีมอรฟซึมมักใชรวมกับการสืบทอด
                                 
      คุณสมบัติ หรือ อินเตอรเฟส
OOP 1/2551 part time      ดร.สุขสถิต มีสถิตย            5
การเลือกใชเมธอด
     เออลีบายดิ้ง (early binding) หรือ สแตติกบายดิ้ง
           ่
     (static binding) คือการที่คอมไพเลอรเลือก
     เมธอดตอนคอมไพลโปรแกรม (compile time)
     เลทบายดิ้ง (late binding) หรือ ไดนามิคบายดิ้ง
     (dynamic binding) คือการที่เวอรชวลแมทชีน
     (virtual machine) เลือกเมธอดที่จะรันขณะโปรแกรม
     ทํางาน (runtime) โดยการหาชนิด
     อ็อบเจกตเพื่อกําหนดเมธอดทีจะรันใหเหมาะสม
                                  ่



OOP 1/2551 part time     ดร.สุขสถิต มีสถิตย           6
โพลีมอรฟซึม และการสืบทอด
          
คุณสมบัติ
     ตัวแปรตัวเดียวสามารถใชอางถึงอ็อบเจกตของ
     คลาสที่ใชในการประกาศตัวแปร และคลาสทีสบ  ่ ื
     ทอดคุณสมบัตของคลาสนี้ได
                     ิ
     เชน ถา Cat และ Dog เปนซับคลาสของ Pet
     คําสั่งตอไปนี้ใชได

                       Pet myPet;
                       myPet = new Pet();
                       myPet = new Cat();
                       myPet = new Dog();


OOP 1/2551 part time          ดร.สุขสถิต มีสถิตย   7
โพลีมอรฟซึม และการสืบทอด
          
คุณสมบัติ
      กําหนดเมธอดที่จะทําโพลีมอรฟซึมไวในซุปเปอรคลาส
                                   
      เขียนเมธอดนั้นไวซับคลาสดวย โดยใชการ
      โอเวอรไรดเมธอด
      ถาใชคําสั่ง
                       myPet.toString();

      เมธอด toString() ของคลาส Pet Cat หรือ Dog
      จะถูกเลือกใหทางานขึ้นอยูกับวา myPet เปน
                    ํ
      อ็อบเจกตของคลาสใด

OOP 1/2551 part time              ดร.สุขสถิต มีสถิตย   8
โอเปอเรเตอร instanceof
     ใชในการหาคลาสของอ็อบเจกต
     โดยตรวจสอบวาอ็อบเจกตเปนของคลาสที่ระบุ
     หรือไม
                       อ็อบเจกต instanceof ชือคลาส
                                              ่

   ตัวอยาง

         if (myPet instanceof Cat) {
            System.out.println(“สัตวเลี้ยงตัวนี้เปนแมว”);
         }
OOP 1/2551 part time              ดร.สุขสถิต มีสถิตย         9
อินเตอรเฟส (Interface)
     อินเตอรเฟส (interface) หรือ จาวาอินเตอรเฟส (Java
     interface) ขอกําหนดความสามารถ โดยไมระบุ
     การอิมพลีเมนต
     อินเตอรเฟส ประกอบดวยขอกําหนดของเมธอด
     ในรูปของรายการเมธอด และลายเซ็นของเมธอดแตละ
     ตัว
     ประโยชนของอินเตอรเฟส คือใชกําหนดพฤติกรรม
     มาตรฐานของคลาส ในรูปของรายการเมธอดที่คลาส
     ตองมี และรูปแบบการใชงานของเมธอด
     อินเตอรเฟส ตองถูกอิมพลีเมนตโดยคลาส ถึงจะ
     นําไปใชงานได
OOP 1/2551 part time     ดร.สุขสถิต มีสถิตย          10
ลักษณะของอินเตอรเฟส
     ทุกเมธอดในอินเตอรเฟสเปนแอบสแตร็กเมธอด
     (abstract method) หมายความวา มีแตชอ ื่
     พารามิเตอร และชนิดขอมูลสงคืน ไมมการอิมพลีเมนต
                                         ี
     ทุกเมธอดในอินเตอรเฟสเปนพับบลิค (public)
     อินเตอรเฟสไมอินสแตนซแอททริบิว (instance
     attribute)




OOP 1/2551 part time     ดร.สุขสถิต มีสถิตย          11
การประกาศอินเตอรเฟส
            public interface ชื่ออินเตอรเฟส {
              // ลายเซ็นตเมธอด
            }


         ตัวอยาง

              public interface Measurable {
                double getMeasure();
              }


OOP 1/2551 part time         ดร.สุขสถิต มีสถิตย   12
การอิมพลีเมนตอินเตอรเฟส
         public class ชื่อคลาส
             implements ชืออินเตอรเฟส , ชื่ออินเตอรเฟส , ...
                            ่
          {
               // แอททริบิว
               // เมธอด
          }




OOP 1/2551 part time          ดร.สุขสถิต มีสถิตย                13
ตัวอยางการอิมพลีเมนตอินเตอรเฟส
 ตัวอยาง

     public class BankAccount implements
    Measurable {
       // เมธอดอื่นๆ
       public double getMeasure() {
          // คําสั่งอิมพลีเมนตเมธอด
       }
     }



OOP 1/2551 part time   ดร.สุขสถิต มีสถิตย   14
โพลีมอรฟซึม และอินเตอรเฟส
         
     ตัวแปรตัวเดียวสามารถใชอางถึงอ็อบเจกตของทุก
     คลาสทีอมพลีเมนตอินเตอรเฟสที่ใชในการประกาศตัว
             ่ ิ
     แปรได
     เชน ถา Coin และ BankAccount อิมพลีเมนต
     อินเตอรเฟส Measurable คําสั่งตอไปนี้ใชได

                       Measurable x;
                       x = new Coin ();
                       x = new BankAccount();


OOP 1/2551 part time              ดร.สุขสถิต มีสถิตย   15
กรณีศึกษา: การออกแบบคลาส
นักศึกษา
     นักศึกษามี 2 กลุม: ระดับปริญญาตรี และปริญญาโท
                      
     นักศึกษาแตละคนมีขอมูลดังนี: ชือ, คะแนนสอบ 3
                                ้ ่
     ครั้ง, เกรด (ผาน/ไมผาน)
     การตัดเกรด

             นักศึกษา                              การคิดเกรด
   ปริญญาตรี            ผาน ถา (test1+test2+test3)/3 >= 70


   ปริญญาโท             ผาน ถา (test1+test2+test3)/3 >= 80


OOP 1/2551 part time         ดร.สุขสถิต มีสถิตย                16
การออกแบบ

                            Student



          UndergraduateStudent                     GraduateStudent




OOP 1/2551 part time         ดร.สุขสถิต มีสถิตย                     17
การใชออกแบบโดยใช
โพลีมอรฟซึม กับกรณีศึกษา
     การใชโพลีมอรฟซมชวยใหสามารถใชอารเรยเพียงชุด
                       ึ
     เดียวในเก็บขอมูลตางชนิดกันได ทําใหการสราง
     โปรแกรมงายขึ้น
     ชวยใหสะดวกในการแกไขโปรแกรม เชน การเพิ่ม
     ประเภทนักศึกษา




OOP 1/2551 part time      ดร.สุขสถิต มีสถิตย         18

Contenu connexe

Tendances

Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตThanachart Numnonda
 
การเขียนคำสั่งควบคุมแบบมีทางเลือก.
การเขียนคำสั่งควบคุมแบบมีทางเลือก.การเขียนคำสั่งควบคุมแบบมีทางเลือก.
การเขียนคำสั่งควบคุมแบบมีทางเลือก.Mink Kamolwan
 
การเขียนผังงาน(Flowchart)
การเขียนผังงาน(Flowchart)การเขียนผังงาน(Flowchart)
การเขียนผังงาน(Flowchart)Kroopop Su
 
การเขียนคำสั่งควบคุมแบบมีทางเลือก
การเขียนคำสั่งควบคุมแบบมีทางเลือกการเขียนคำสั่งควบคุมแบบมีทางเลือก
การเขียนคำสั่งควบคุมแบบมีทางเลือกSupicha Ploy
 
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือก
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือกกลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือก
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือกNaphamas
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมThanachart Numnonda
 
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingJava-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingWongyos Keardsri
 
อัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาอัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาsupatra178
 
Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : ThreadIMC Institute
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นPp'dan Phuengkun
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นParn Nichakorn
 
Java Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingJava Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingIMC Institute
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Thanachart Numnonda
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาSarocha Makranit
 
คลาสและการเขียนโปรแกรมเชิงวัตถุ
คลาสและการเขียนโปรแกรมเชิงวัตถุคลาสและการเขียนโปรแกรมเชิงวัตถุ
คลาสและการเขียนโปรแกรมเชิงวัตถุBoOm mm
 

Tendances (20)

Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุต
 
การเขียนคำสั่งควบคุมแบบมีทางเลือก.
การเขียนคำสั่งควบคุมแบบมีทางเลือก.การเขียนคำสั่งควบคุมแบบมีทางเลือก.
การเขียนคำสั่งควบคุมแบบมีทางเลือก.
 
การเขียนผังงาน(Flowchart)
การเขียนผังงาน(Flowchart)การเขียนผังงาน(Flowchart)
การเขียนผังงาน(Flowchart)
 
การเขียนคำสั่งควบคุมแบบมีทางเลือก
การเขียนคำสั่งควบคุมแบบมีทางเลือกการเขียนคำสั่งควบคุมแบบมีทางเลือก
การเขียนคำสั่งควบคุมแบบมีทางเลือก
 
Lab Computer Programming 1
Lab Computer Programming 1Lab Computer Programming 1
Lab Computer Programming 1
 
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือก
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือกกลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือก
กลุ่ม3การเขียนคำสั่งควบคุมแบบมีทางเลือก
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
 
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingJava-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java Programming
 
อัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาอัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหา
 
Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : Thread
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
3.2 ตัวแปรและคำสงวน
3.2 ตัวแปรและคำสงวน3.2 ตัวแปรและคำสงวน
3.2 ตัวแปรและคำสงวน
 
ตัวแปรและคำสงวน
ตัวแปรและคำสงวนตัวแปรและคำสงวน
ตัวแปรและคำสงวน
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
Java Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception HandlingJava Programming [9/12]: Exception Handling
Java Programming [9/12]: Exception Handling
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
 
™Pbl8.2
™Pbl8.2™Pbl8.2
™Pbl8.2
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1
 
คลาสและการเขียนโปรแกรมเชิงวัตถุ
คลาสและการเขียนโปรแกรมเชิงวัตถุคลาสและการเขียนโปรแกรมเชิงวัตถุ
คลาสและการเขียนโปรแกรมเชิงวัตถุ
 

En vedette

Case study Hacking vs ShanZhai model
Case study Hacking vs ShanZhai modelCase study Hacking vs ShanZhai model
Case study Hacking vs ShanZhai modelpantapong
 
NIADEI the innovation's method
NIADEI the innovation's methodNIADEI the innovation's method
NIADEI the innovation's methodpantapong
 
Cuadernillo examen udea
Cuadernillo examen udeaCuadernillo examen udea
Cuadernillo examen udeaMauricio Rua
 
Shareslide presentation
Shareslide presentationShareslide presentation
Shareslide presentationksross
 
NIA PEA Conference 2016
NIA PEA Conference 2016NIA PEA Conference 2016
NIA PEA Conference 2016pantapong
 
The impact of innovation on travel and tourism industries (World Travel Marke...
The impact of innovation on travel and tourism industries (World Travel Marke...The impact of innovation on travel and tourism industries (World Travel Marke...
The impact of innovation on travel and tourism industries (World Travel Marke...Brian Solis
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Lemi Orhan Ergin
 
What's Next in Growth? 2016
What's Next in Growth? 2016What's Next in Growth? 2016
What's Next in Growth? 2016Andrew Chen
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsBarry Feldman
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome EconomyHelge Tennø
 

En vedette (11)

Pet care after_flooding
Pet care after_floodingPet care after_flooding
Pet care after_flooding
 
Case study Hacking vs ShanZhai model
Case study Hacking vs ShanZhai modelCase study Hacking vs ShanZhai model
Case study Hacking vs ShanZhai model
 
NIADEI the innovation's method
NIADEI the innovation's methodNIADEI the innovation's method
NIADEI the innovation's method
 
Cuadernillo examen udea
Cuadernillo examen udeaCuadernillo examen udea
Cuadernillo examen udea
 
Shareslide presentation
Shareslide presentationShareslide presentation
Shareslide presentation
 
NIA PEA Conference 2016
NIA PEA Conference 2016NIA PEA Conference 2016
NIA PEA Conference 2016
 
The impact of innovation on travel and tourism industries (World Travel Marke...
The impact of innovation on travel and tourism industries (World Travel Marke...The impact of innovation on travel and tourism industries (World Travel Marke...
The impact of innovation on travel and tourism industries (World Travel Marke...
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016
 
What's Next in Growth? 2016
What's Next in Growth? 2016What's Next in Growth? 2016
What's Next in Growth? 2016
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post Formats
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 

Similaire à 4563456 (20)

Unit07
Unit07Unit07
Unit07
 
4678467846
46784678464678467846
4678467846
 
Six
SixSix
Six
 
งาน Pbl4.1
งาน Pbl4.1งาน Pbl4.1
งาน Pbl4.1
 
งาน Pbl4.1
งาน Pbl4.1งาน Pbl4.1
งาน Pbl4.1
 
Pbl 3
Pbl 3Pbl 3
Pbl 3
 
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
 
Pbl 3
Pbl 3Pbl 3
Pbl 3
 
56785774
5678577456785774
56785774
 
Unit04
Unit04Unit04
Unit04
 
6784678467
67846784676784678467
6784678467
 
Unit03
Unit03Unit03
Unit03
 
โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์
 
การเขียนผังงาน (Flowchart)
การเขียนผังงาน (Flowchart)การเขียนผังงาน (Flowchart)
การเขียนผังงาน (Flowchart)
 
Computer 3
Computer 3Computer 3
Computer 3
 
Pbl4.1
Pbl4.1Pbl4.1
Pbl4.1
 
11
1111
11
 
งาน Pbl4.2
งาน Pbl4.2งาน Pbl4.2
งาน Pbl4.2
 
งาน Pbl4.2
งาน Pbl4.2งาน Pbl4.2
งาน Pbl4.2
 
โครงร่างคอม
โครงร่างคอมโครงร่างคอม
โครงร่างคอม
 

Plus de TaiMe Sakdisri (20)

Chapter005
Chapter005Chapter005
Chapter005
 
546345
546345546345
546345
 
456245345
456245345456245345
456245345
 
Unit02
Unit02Unit02
Unit02
 
Unit01
Unit01Unit01
Unit01
 
Thai hci
Thai hciThai hci
Thai hci
 
Original 02 hci_principles
Original 02 hci_principlesOriginal 02 hci_principles
Original 02 hci_principles
 
Original 01 hci_principles
Original 01 hci_principlesOriginal 01 hci_principles
Original 01 hci_principles
 
Email system
Email systemEmail system
Email system
 
D1 overview
D1 overviewD1 overview
D1 overview
 
Chapter009
Chapter009Chapter009
Chapter009
 
Chapter008
Chapter008Chapter008
Chapter008
 
Chapter006 (1)
Chapter006 (1)Chapter006 (1)
Chapter006 (1)
 
Chapter006
Chapter006Chapter006
Chapter006
 
Chapter004
Chapter004Chapter004
Chapter004
 
Chapter003
Chapter003Chapter003
Chapter003
 
56456456
5645645656456456
56456456
 
654569
654569654569
654569
 
Chap1 updated
Chap1 updatedChap1 updated
Chap1 updated
 
546656
546656546656
546656
 

4563456

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