[Topic] สัพเพเหระกับ Delphi
#1
โพสต์เมื่อ 20 December 2006 - 07:44:08 AM
#2
โพสต์เมื่อ 20 December 2006 - 06:56:13 PM
#3
โพสต์เมื่อ 21 December 2006 - 05:02:41 PM
#4
โพสต์เมื่อ 22 December 2006 - 08:07:38 AM
[Knowledge] ภาษาโปรแกรมมิ่งที่มีลักษณะของ OOP ตามมาตรฐาน ANSI : เรียบเรียงจากหนังสือ Borland Delphi 3.0 Amazing Components โดย อ.จิรายุ วิริยะพิบูล
1. Abstraction ภาษานั้นๆต้องมีความสามารถอธิบายโครงสร้างของชีวิตจริงได้ และต้องเป็นโครงสร้างบังคับของภาษานั้นๆ
public class LoginDlg extends JFrame {}
และของเดลไฟก็
Public
TCustomer = class(TDBManager)
end;
ซึ่งธรรมเนียมปฏิบัติในการตั้งชื่อคลาสของเดลไฟนั้นจะใช้ตัว T นำหน้าชื่อคลาสเสมอ ซึ่งถ้าคุณไม่ทำตามนี้ก็ไม่เป็นไรแต่ว่าถ้าโปรแกรมเมอร์ท่านอื่นๆมาเห็นมันจะดูตลกๆเท่านั้นเอง
เอาไว้จะมาต่ออีกข้อในกระทู้ถัดไปนะครับ
#5
โพสต์เมื่อ 22 December 2006 - 02:42:53 PM
ในขณะที่ vb มันก้อใช้ vb เลย เช่น vbCrLf , vbRed , vbTab อะไรงี้
#6
โพสต์เมื่อ 23 December 2006 - 08:01:18 AM
นั่นสิ สงสัยมานานแล้ว ทำไมต้องด้วย T ?? ไม่เป็น P(ascal) หรือ D(elphi) ???
ในขณะที่ vb มันก้อใช้ vb เลย เช่น vbCrLf , vbRed , vbTab อะไรงี้
ที่ต้องขึ้นต้นด้วย T เพราะว่าเวลาจะประกาศวันต้องประกาศภายใต้ Reserve word "Type" ครับ
แบบนี้ไงครับ
TVAT = class(TObject)
end;
เพิ่มเติมอีกอย่างนึงเวลาเราประกาศตัวแปรภายในคลาส (ที่ประกาศอยู่ใน private section) นั้นธรรมเนียมปฏิบัติของเดลไฟจะขึ้นต้นด้วย F ครับ อันนี้ไม่รู้ว่าทำไมเหมือนกัน
แบบนี้ครับ
TVAT = class(TObject)
private
FRate : Integer;
procedure SetRate(Value : Integer);
public
property Rate : Integer read FRate write SetRate;
end;
ซึ่งข้อดีของเดลไฟอีกอย่างนึงที่ผมชอบคือเดลไฟมีการทำ Class Completion ให้ด้วยการกด Ctrl+Shift+C ครับ ซึ่งเวลากดวันจะไปทำการประกาศตัวแปรภายใน section private และเขียนตัว Body ของ procedure ให้อัตโนมัติ จากตัวอย่างข้างบนนั้น ผมเขียนแค่นี้ก่อนก็พอ
TVAT = class(TObject)
public
property Rate : Integer;
end;
หลังจากนั้นก็กด Ctrl+Shift+C ก็จะได้ผลลัพธ์แบบนี้อัตโนมัติ
TVAT = class(TObject)
private
FRate : Integer;
procedure SetRate(Value : Integer);
public
property Rate : Integer read FRate write SetRate;
end;
implementation
{TVAT}
procedure TVAT.SetRate(Value : Integer);
begin
FRate := Value;
end;
เห็นมั้ยครับว่าสบายขนาดไหน หุหุ
#7
โพสต์เมื่อ 23 December 2006 - 10:05:30 AM
2. Encapsulation หมายถึงคลาสทุกคลาสต้องมีการทำงานจบในตัวมันเอง และมีตัวแปร,Method อยู่ในตัวมันเอง โดยที่ไม่ไปเรียกตัวแปรของคลาสอื่นตรงๆ แต่อาจจะเรียกผ่าน Method ที่คลาสนั้นๆ public เอาไว้
EX.
TEngine = class
private
FStarted : Boolean;
public
procedure StartEngine;
end;
TSportCar = class(TCar)
private
FEngine : TEngine
public
procedure StartCar;
end;
implementation
procedure TEngine.StartEngine;
begin
ShowMessage('Engine Start!');
FStarted := True;
end;
procedure TSportCar.StartCar;
begin
ShowMessage('Start!');
FEngine.StartEngine;
end;
จากตัวอย่างข้างต้นคลาส TSportCar ทำการเปลี่ยนแปลงค่า FStarted ของคลาส TEngine เป็น True แต่ว่าไม่ได้ Access เข้าไปตรงๆ แต่ทำงานผ่าน Method ที่ชื่อ "StartEngine" นั่นเองครับ
พอเข้าใจไหมเอ่ย ไม่เข้าใจถามได้นะครับ
#8
โพสต์เมื่อ 23 December 2006 - 12:21:46 PM
อธิบายมาซะยืดยาว มาดูตัวอย่างกันดีกว่า
อันนี้เป็นคลาสของ D4D Commonrail
TOilFeeder = class(TToyotaFeeder)
private
FOilCPU : TToyotaOilCPU;
public
function CalculateOilQuantity(AGearPosition,ACurrentSpeed : Integer) : Integer;
procedure FeedingOil;
end;
TD4DCommonrail = class
private
FOilFeeder : TOilFeeder;
public
procedure FeedingOil;
end;
implementation
function TOilFeeder.CalculateOilQuantity(AGearPosition,ACurrentSpeed : Integer) : Integer;
begin
result := AGearPosition * ACurrentSpeed;
end;
procedure TOilFeeder.FeedingOil;
begin
ShowMessage('Feed Oil : ' + InttoStr(CalculateOilQuantity(5,140));
end;
procedure TD4DCommonrail.FeedingOil;
begin
FOilFeeder.FeedingOil;
end;
หลังจากที่อีซุซุซื้อ License มาก็เอามาสืบทอดต่อแบบนี้ โดยที่ไม่ได้ดัแปลงอะไรเลย
TSuperCommonrail = class(TD4DCommonrail)
end;
แล้วเวลาที่รถ D-Max จ่ายน้ำมันก็จะสั่งแบบนี้
DmaxEngine : TSuperCommonrail;
DmaxEngine.FeedingOil;
ซึ่งเครื่องยนต์ของอีซุซุสามารถจ่ายน้ำมันได้เหมือน D4D โดยที่ไม่ต้องรู้ว่า D4D จ่ายน้ำมันอย่างไรด้วยครับ
เอาไว้หัวข้อหน้าจะสนุกกว่านี้อีกครับ โปรดติดตาม Rep ต่อไป หุหุ
#9
โพสต์เมื่อ 23 December 2006 - 07:54:03 PM
ว่าแต่ รอกระทู้ทำบอทอยู่ เตรียมคำถามไว้พอสมควร * *
#11
โพสต์เมื่อ 25 December 2006 - 10:09:27 AM
Works: KoRnBot Project,TSLoadDatFile
Thanks X CroSs, Truebot, TSBot, Solars, JackY, some1, Storm24, AssertionFailed from www.skjune.com
#12
โพสต์เมื่อ 02 January 2007 - 11:53:23 AM
#13
โพสต์เมื่อ 27 April 2007 - 04:49:40 PM
เสริม จาก คุณ Jacky ตอบครับ
จริงๆ แล้ว Delphi มีกฏปฏิบัติ หลายประการ เพื่อให้ ชาว เดลไฟ สามารถอ่านโค้ด ของตนเองและ ของคนอื่นได้อย่างรวดเร็ว
ตัวอย่าง
ทำไม ขึ้นต้นด้วย T
อย่างที่ คุณ Jacky ตอบ เพราะมันเป็น Type ครับ
ซึ่งโดยปกติ Class ทั้งหมด จะขึ้นต้นด้วย T เพื่อให้ดูปุ๊บรู้เลยว่าเป็น Class
Type
TMyChar = Class
end;
หรือ
Type
TMyChar = Class(THuman)
end;
ส่วน ตัวแปรทำไมต้องขึ้นต้น ด้วย F
อันนี้จะสื่อ ความหมายถึง Field Data
โดยใน Encape.. จะแยกส่วน ระหว่าง Method และ Field ออกจากกัน
ซึ่งตามกฏก็ต้อง ประกาศ Field Data มาก่อน Method เสมอ
ซึ่งกฏระเบียบนี้ จะถูกบังคับในเรื่องของการ เขียนคอมโพเน้นท์ (เพราะมีการเขียนคลาส มากที่สุด)
- - จบข่าว
#14
โพสต์เมื่อ 02 May 2007 - 11:45:19 AM
#15
โพสต์เมื่อ 16 June 2007 - 12:35:05 PM
2 สมาชิกกำลังอ่านกระทู้นี้
0 สมาชิก, 2 ผู้เยี่ยมชม, 0 ผู้ใช้งานที่ซ่อนตัว