คือ 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 อย่างง่าย มีรูปแบบดังนี้
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;
คือ คุณสมบัติของ 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;