Table of Contents

Class

คือ Structural Type ชนิดหนึ่ง ซึ่งมีทั้ง Field, Method และ Property เหมือนกับ Object แต่มีรายละเอียดที่ซับซ้อนมากกว่า

คำว่า Class จริงๆแล้วนั้น หมายถึง ต้นแบบ ซึ่งในการนำไปใช้งานจริงนั้น จำเป็นต้องสร้างตัวผลิตภัณท์ของ Class นั้นขึ้นมาอีกที ในที่นี้ เราเรียกว่า Instance

เพื่อให้เห็นภาพ ขอยกตัวอย่างเรื่องการสร้างรถยนต์ Class ในที่นี้ เปรียบเสมือน“พิมพ์เขียว”ของรถยนต์ ส่วน Instance คือ รถยนต์จริงๆที่ถูกผลิตขึ้นโดยใช้พิมพ์เขียวดังกล่าว ซึ่งแน่นอนว่ารถยนต์เหล่านี้ ย่อมมีคุณสมบัติแตกต่างกัน เช่น สีรถ เครื่องยนต์ หรืออุปกรณ์มาตรฐานต่างๆ เป็นต้น

หากลองสังเกต Component ต่างๆที่ใช้ในการเขียนโปรแกรมสมัยนี้ รวมไปถึง Control ต่างๆที่ใช้ใน GUI Application (เช่น LCL เป็นต้น) ล้วนแล้วแต่ถูกเขียนขึ้นมาจาก Class ทั้งนั้น จะเห็นได้ชัดว่า Class ถูกใช้อย่างแพร่หลายภายใต้การเขียนโปรแกรมเชิงวัตถุ (Object Oriented Programming) เพราะความสามารถที่มีเพิ่มมากขึ้น และมีความยืดหยุ่นมากกว่า Object

สิ่งที่แตกต่างระหว่าง Class กับ Object มีดังนี้

Access Modifier Descriptions
private มองเห็นได้เฉพาะที่อยู่ใน Unit เดียวกันกับ Class นี้เท่านั้น
protect มองเห็นได้เฉพาะ Derived-Class (Class ที่สืบทอด) เท่านั้น
public มองเห็นได้จากทุกที่ที่ uses Unit นี้
published เหมือนกันกับ Public แต่จะสร้าง Run Time Type Information (RTTI) ขึ้นมา เพื่อประโยชน์ในการ Streaming ข้อมูล
ไม่ระบุ หมายถึง public



การสร้าง Class

การสร้าง Class อย่างง่าย มีรูปแบบดังนี้

Type
 TMyClass = class
   {Field, Method, Property...}  
 end;

การสร้าง Class สืบทอดจาก Class อื่น มีรูปแบบดังนี้ ()

Type
 TMyClass = class(TObject)
   {Field, Method, Property...}    
 end;

หมายเหตุ - ในการสร้าง Class ทุกๆครั้งที่ไม่ได้ระบุว่าสืบทอดมาจาก Class ใด จะเป็นการสร้าง Class สืบทอดจาก TObject ซึ่งเป็น Class พื้นฐานของ FPC เสมอ

ตัวอย่างการสร้าง Class แบบละเอียด

Type
  TMyClass = class(TObject)
   private
     FName:string;
     FValue:integer;      
   protected
     function GetIsOK:boolean;
   public
     constructor create;
     destructor destroy; override;
     procedure DoSomeThing;         
   published
     property Name:string read FName write FName;
     property Value:integer read FValue write FValue default 0; 
     property IsOK:boolean read GetIsOK; 
   end;


Property

คือ คุณสมบัติของ Class (หรือ Object) เช่น ความยาว ความกว้าง ตำแหน่ง เป็นต้น โครงสร้างของ property นั้นประกอบไปด้วย Getter (คำสั่งหลัง read) และ Setter (คำสั่งหลัง write)

เพื่อเป็นการอธิบายให้เห็นภาพ จะขอยกตัวอย่าง

property ValueX:integer read GetValueX write SetValueX;

จากตัวอย่างดังกล่าว Getter คือ GetValueX ส่วน Setter คือ SetValueX
Getter จะถูกเรียกใช้งาน เมื่อมีการเรียกใช้ค่าของ Property ดังเช่น

writeln(ValueX);

Setter จะถูกเรียกใช้งาน เมื่อมีการใส่ค่าให้ Property เช่น

ValueX:=12;

ทำไมต้องมี Getter Setter ให้ยุ่งยาก แทนที่จะใช้ var หรือ Field อย่างเดียว? ประโยชน์ของการใช้งาน Property มีดังนี้ครับ

รูปแบบการเขียน Property มีหลักๆดังนี้

property Value:integer read FValue write FValue;
property ValueX:integer read GetValueX write SetValueX;
function GetValueX:integer;
procedure SetValueX(Value:integer);
property IsOK:boolean read GetIsOK;