User Tools

Site Tools


Sidebar


Introduction


Basic Tutorials


Advance Tutorials


Useful Techniques


Examples

  • Simple Pipe Weight Calculator
  • Unit Convertor

Sidebar

tutorial:oop

This is an old revision of the document!


Object Oriented Programming (OOP)

OOP คืออะไร

Object Oriented Programming (OOP) คือการเขียนโปรแกรมเชิงวัตถุ เป็นการมองสิ่งต่างๆเป็นวัตถุที่ประกอบไปด้วยคุณสมบัติ(Property) และกระบวนการ (Method) หากเราลองมองย้อนกลับไปยุคแรกๆของภาษาคอมพิวเตอร์ เช่น C, Pascal, VB,.. ในยุคนั้น ยังเป็นภาษาระดับสูงแบบธรรมดาที่รันบนหน้าจอ console เท่านั้น หลักการ OOP เพิ่งเกิดขึ้นมาทีหลัง

ผลของการนำ OOP มาประยุกต์ใช้คือการเกิดโปรแกรมในลักษณะที่จับต้องได้ ยกตัวอย่างเช่น Form-Based Application หรือเรียกอีกอย่างว่า Graphic User Interface (GUI) เป็นต้น ภาษาคอมพิวเตอร์ในยุคหลังๆจึงได้ถูกพัฒนาให้รองรับ OOP ได้เป็นพื้นฐาน ยกตัวอย่าง คือ C++, C#, VB. Net, Object Pascal, เป็นต้น

หลักการ OOP จึงสำคัญมากสำหรับการเขียนโปรแกรมสมัยใหม่ เพราะทำให้ code ลดลงและเป็นระเบียบมากขึ้น ง่ายแก่การจัดการ

OOP มีอะไรบ้าง

โดยทั่วไป หลักการ OOP ในหลายๆภาษาจะคล้ายคลึงกัน แตกต่างกันเพียงแค่ Syntax เท่านั้น โดยหลักการดังกล่าว มักจะประกอบไปด้วยส่วนต่างๆดังต่อไปนี้

1. Class and Instance

หากเราจำเป็นต้องสร้างโค๊ดเกี่ยวกับอะไรสักอย่างหนึ่ง ยกตัวอย่าง เช่น รถยนต์ โดยที่รถยนต์ที่เราจะสร้างขึ้นมานั้น มีหลายคัน คงจะลำบากไม่ใช่น้อยที่จะต้องมาเขียนโค๊ดสำหรับรถยนต์เหล่านั้นไปทีละตัวจนหมด ปัญหาเหล่านี้จะหมดไป หากเรารู้จักการเขียน Class และ Object(Instance)

Class คือ ต้นแบบ เปรียบเสมือนการออกแบบรถยนต์ว่าควรประกอบไปด้วยคุณสมบัติอะไรบ้าง เช่น โครงสร้าง เครื่องยนต์ ช่วงล่าง ระบบส่งกำลัง ตัวถัง เป็นต้น ทั้งหมดที่กล่าวมานี้ เราเรียกว่า Property แค่นั้นยังไม่พอ รถยนต์ควรจะมีความสามารถอะไรบ้าง นั่นคือ ขับได้ วิ่งไปมาด้วยความรวดเร็วได้ เบรคได้ เราเรียกสิ่งนี้ว่า Method

Object (Instance) คือ ผลิตภัณท์ที่เกิดจากต้นแบบ (Class) เช่น เราผลิตรถยนต์ขึ้นมาใช้งานจริง 5 คัน ซึ่งใน 5 คันนี้ อาจมี Property ที่ต่างกันไป แต่ทุกคันมี Method ที่เหมือนกัน เราเรียกรถยนต์เหล่านี้ว่า Object หรือ Instance เป็นต้น แต่เนื่องจากคำว่า Object มีใช้ในภาษา Pascal เช่นกัน และเป็นคำเฉพาะซึ่งหมายถึงการสร้างวัตถุที่เป็นต้นแบบขึ้นมาเหมือนกัน (คล้าย Class) ดังนั้นต่อไปนี้จะขอใช้คำว่า Instance แทน

หมายเหตุ - Object สำหรับภาษา Pascal หมายถึงการสร้างวัตถุที่มีทั้งคุณสมบัติ (Property) และกระบวนการ (method) เหมือนกันกับ Class เพียงแต่ Class นั้นเพิ่งเกิดมาในภายหลัง ทั้งคู่มีความแตกต่างกันในเรื่องของการเรียกใช้งาน โดย Object จะคล้ายกับ Record ที่มี Property กับ Method นั่นเอง หรือ ที่เรียกว่า Advance Record
ในโปรแกรม Turbo Pascal สมัยก่อน Object ถูกใช้ทำหน้าที่เหมือนกันกับ Class ในสมัยนี้ แต่ต่อมาภายหลัง เมื่อมีการเปิดตัว Delphi จึงได้มีการคิดค้น Class ขึ้นมาเพื่อใช้งานแทน Object แต่อย่างไรก็ตาม Object ก็ยังเป็นที่นิยมใช้กันมาปกติจนถึงปัจจุบัน สิ่งที่แต่ต่างกัน ระหว่าง Class กับ Object คือ

  • Object ใช้หน่วยความจำแบบ Stack ส่วน Class ใช้หน่วยความจำแบบ Heave นั่นทำให้ทุกครั้งที่มีการสร้าง Instance จาก Class ขึ้นมาใช้งาน จำเป็นต้องมีการกำจัด Instance เมื่อใช้งานเสร็จเสมอ เพื่อไม่ให้เกิดปัญหา Memory Leak
  • Object ใช้การอ้างอิงตัวแปรแบบ Value ส่วน Class ใช้การอ้างอิงตัวแปรแบบ Reference เพื่อให้เห็นภาพ ขอยกตัวอย่าง หากให้ A,B เป็น Object เมื่อใช้คำสั่ง B:=A ; จะหมายถึง มี B เกิดขึ้นมาอีกหนึ่งตัวซึ่งเกิดจากการคัดลอก A ผลก็คือหากเราทำอะไรกับ B ก็จะไม่ส่งผลกับ A เพราะเป็นคนละตัวกัน แต่หากเราให้ A,B เป็น Instance ของ Class เมื่อใช้คำสั่ง B:=A ; จะกลายเป็นว่า B อ้างอิงไปที่ A ไม่ได้เกิดการคัดลอกใดๆ ทีนี้หากเราทำการเปลี่ยนแปลง B จะหมายถึงการเปลี่ยนแปลง A ด้วยเช่นกัน

1.1 Class

การสร้าง Class เริ่มต้น ทำได้ดังนี้

Type
   TMyClass = class
     Item:integer;
     Procedure DoSomething;     
   end;

การสร้าง Class ต่อจาก Class อื่น หรือเรียกว่าการสืบทอด (Inheritance) ทำได้ดังนี้

Type
   TMyClass = class(TBaseClass)
     Item:integer;
     Procedure DoSomething;     
   end;

องค์ประกอบของ Class แบบละเอียด มีดังนี้

Type
  TMyItem = class(TPersistent);
   private
     FName:string;
     FValue:integer; 
     function GetIsOK:boolean;  
   protected
     procedure DoSomeThing1; 
     procedure DoSomeThing2; virtual;
   public
     constructor Create; override;
     destructor Destroy; override;
     procedure Assign(Source: TPersistent); override;
     property IsOK:boolean read GetIsOK;  
   published
     property Name:string read FName write FName;
     property Value:integer read FValue write FValue default 0;

2. Encapsulation

3. Inheritance

4. Polymorphism

5. Overriding

6. Overloading

tutorial/oop.1545712402.txt.gz · Last modified: 2018/12/25 11:33 by admin