Sunday, November 8, 2015

Object-Oriented Programming Concepts

Object-Oriented Programming Concepts

หลักการการโปรแกรมเชิงวัตถุมีคุณลักษณะที่สำคัญอยู่ 3 ประการ
1. คลาส (Class)  คลาส ตามที่หลายๆคนต่างรู้จักว่าแบบพิมพ์ (template) หรือแม่พิมพ์ จริงแล้ว    คลาสคือโครงสร้างที่จะถูกนำไปใช้ในการสร้างวัตถุหรืออ็อบเจกต์ (object)  ในทางคณิตศาสตร์คลาส อาจเปรียบได้กับการเป็นเซต  ซึ่งมีสมาชิก (Instance) คือ อ็อบเจกต์ โดยอ็อบเจกต์มีข้อมูลที่เกิดขึ้นในระหว่างการประมวลผลโปรแกรม  คลาสมีพฤติกรรมซึ่งพฤติกรรมแสดงด้วยเมธอด (method) และมีคุณลักษณะหรือแอททริบิวต์ (attribute) ซึ่งแสดงด้วยตัวแปรต่างๆ  ซึ่งจะถูกกำหนดให้เป็นตัวแปรของคลาส (Class variable) หรือตัวแปรของอินสแตนส์ (Instance variable) โดยเมธอดก็จะถูกกำหนดให้เป็นเมธอดของคลาส หรืออินสแตนส์เช่นเดียวกัน 

public class Vehicle{
      public static  int  countInstance; //Class variable - ถูกสร้างสำหรับคลาสเท่านั้น
      public int gear;    //Instance variable - ถูกสร้างให้กับ Object หนึ่งๆ
      public int wheel;  //Instance variable - ถูกสร้างให้กับ Object หนึ่งๆ   
      public vehicle( ){ //Constructor - ถูกเรียกเมื่อมีการสร้าง Instance วัตถุประสงค์การใช้งานเพื่อ
                               //กำหนดค่าข้อมูลเริ่มต้นให้กับอ็อบเจกต์ 
             this.countInstance++;
      }
     public static void main(String[] args){  // ถูกสร้างให้กับคลาสเท่านั้น
            Vehicle  myFirstVehicle = new Vehicle();
            Vehicle  mySecondVehicle = new Vehicle();              
     }
     public void setGear(int g){  //ถูกสร้างให้กับอ็อบเจกต์
         this.gear = g; 
     }
     public void setWheel(int w){ //ถูกสร้างให้กับอ็อบเจกต์
         this.wheel = w; 
    }
}

Class variable ใน Java กำหนดด้วย static หากไม่มี static จะเป็น Instance variable
ใน Object ที่ถูกสร้างขึ้นจะไม่มีตัวแปร Class variable ดังนั้นจะไม่สามารถ access ไปยังตัวแปรที่เป็น class variable ได้
วัตถุประสงค์ของการใช้ Class variable ในโปรแกรม คือ ต้องการนับจำนวนของอ็อบเจ็กต์ที่ถูกสร้าง  เนื่องจากถูกๆครั้งที่คำสั่ง new ถูกเรียก จะเรียก Constructor ทำงานซึ่งจะทำการเพิ่มค่าของ countInstance เสมอ  ตัวแปร Class variable เสมือนมีเพียงหนึ่งสำเนาต่อหนึ่งคลาส  ส่วนตัวแปร Instance variable จะถูกสำเนาขึ้นสำหรับอ็อบเจ็กต์หนึ่งๆ

2. การถ่ายทอด (Inheritance) ในการสร้างคลาส  อาจมีความต้องการในการกำหนดความสัมพันธ์ระหว่างคลาสในลักษณะ IS-A relationship ซึ่งจะทำให้เกิดคลาสที่เราเรียกว่า Superclass และ Subclass โดย Superclass จะมีคุณลักษณะพื้นฐานของการเป็นคลาส  ส่วน Subclass จะมีคุณลักษณะที่เฉพาะมากขึ้น  ซึ่งบางคุณลักษณะได้รับการถ่ายทอดจาก Superclass
คุณลักษณะเฉพาะของ Subclass เกิดจาก
- การเพิ่มแอททริบิวต์ให้กับคลาส  (เพิ่มตัวแปรต่างๆ)
- การเพิ่มพฤติกรรมให้กับคลาส (เพิ่มเมธอด) อาจมีการสร้าง Overloaded method (เมธอดที่มีชื่อเดียวกันแต่มีความแตกต่างของ Signature (Formal parameter และ/หรือ Return type)
- การแก้ไขเมธอด (อาจเรียกว่าเขียนทับ) ซึ่งหมายถึงการแก้ไขโค้ดของเมธอดที่ได้รับการถ่ายทอดมากจาก Superclass

3. Polymorphism (ภาษาไทยไม่ทราบว่าจะใช้คำว่าอะไรดี) ในเรื่องของ Polymorphism นั้น เกี่ยวข้องกับการสร้าง Polymorphic variable หรือตัวแปรอ็อบเจกต์ที่ถูกสร้างขึ้นจาก Descendant class (คลาสที่เป็น subclass หรือคลาสที่อยู่ต่ำกว่าใน Hierarchy ที่แสดงความสัมพันธ์ IS-A ของคลาส)   แทนที่จะสร้างอ็อบเจกต์จากคลาสโดยตรงก็ไปสร้างจากคลาสที่อยู่ในระดับต่ำกว่า  เนื่องจากโดยหลักการ Object-Oriented Programming นั้นจะมีข้อสมมติหนึ่งว่าในเมื่อ Superclass มีคุณลักษณะพื้นฐานของคลาสซึ่งถูกถ่ายทอดให้กับ Subclass แล้วดังนั้นก็สามารถที่จะสร้าง Instance ของคลาสจากคลาสที่เป็น Subclass หรือคลาสที่อยู่ต่ำกว่าลงไปได้เช่น

class Vehicle{
    ...
}
class MotorVehicle extends Vehicle
{
   ...
}

class Car extends MotorVehicle{
  ...
}

public class MyFactory{
      public static void main(String[] args){
          Vehicle  myVehicle = new Car();
          MotorVehicle   myCar = new Car();       
      }
}
อ็อบเจกต์ myVehicle และ myCar คือ Polymorphic variable จะมีคุณลักษณะพื้นฐานตามคลาสที่กำหนดด้วยคำสั่ง new อย่างไรก็ตามการสร้าง message อาจเรียกไปยังเมธอดของคลาสซึ่งอ็อบเจกต์นั้นเป็นสมาชิกอยู่ก็ได้   ซึ่ง myVehicle เป็นสมาชิกของคลาส Vehicle ส่วน myCar เป็นสมาชิกของคลาส MotorVehicle
การเกิด Polymorphism นี้ทำให้เกิด Dynamic Binding คือการทำเมสเสสไปยังเมธอดของคลาสที่เกี่ยวข้อง 


No comments:

Post a Comment