ไปที่เนื้อหา


รูปภาพ

[Topic] สัพเพเหระกับ Delphi


  • กรุณาลงชื่อเข้าใช้เพื่อตอบกระทู้
มี 14 โพสต์ตอบกลับกระทู้นี้

#1 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 20 December 2006 - 07:44:08 AM

มาเปิดหัวข้อไว้ก่อนครับ แล้วจะตามมาโพสทีหลัง

#2 X CroSs

X CroSs

    Truebot Co-Developer

  • Root Administrator
  • 102427 โพสต์
  • Gender:Male

โพสต์เมื่อ 20 December 2006 - 06:56:13 PM

เสียดายความรู้ครั้งที่แล้ว ยังมะได้อ่านเลย -.-

ts.gif

manutd18wm.png


#3 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 21 December 2006 - 05:02:41 PM

มะเป็งไรคับ เด๋วเอามาโพสใหม่ก็ได้ครับ พอดีวันนี้มาประชุมเลยยังไม่มีเวลาโพส

#4 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 22 December 2006 - 08:07:38 AM

มาแล้วๆ biggrin.gif ตามคำเรียกร้องครับ

[Knowledge] ภาษาโปรแกรมมิ่งที่มีลักษณะของ OOP ตามมาตรฐาน ANSI : เรียบเรียงจากหนังสือ Borland Delphi 3.0 Amazing Components โดย อ.จิรายุ วิริยะพิบูล
1. Abstraction ภาษานั้นๆต้องมีความสามารถอธิบายโครงสร้างของชีวิตจริงได้ และต้องเป็นโครงสร้างบังคับของภาษานั้นๆ
เช่นในภาษา JAVA จะประกาศเช่นนี้
  public class LoginDlg extends JFrame {}

และของเดลไฟก็
  Public
    TCustomer = class(TDBManager)
    
    end;

ซึ่งธรรมเนียมปฏิบัติในการตั้งชื่อคลาสของเดลไฟนั้นจะใช้ตัว T นำหน้าชื่อคลาสเสมอ ซึ่งถ้าคุณไม่ทำตามนี้ก็ไม่เป็นไรแต่ว่าถ้าโปรแกรมเมอร์ท่านอื่นๆมาเห็นมันจะดูตลกๆเท่านั้นเอง laugh.gif
เอาไว้จะมาต่ออีกข้อในกระทู้ถัดไปนะครับ

#5 X CroSs

X CroSs

    Truebot Co-Developer

  • Root Administrator
  • 102427 โพสต์
  • Gender:Male

โพสต์เมื่อ 22 December 2006 - 02:42:53 PM

นั่นสิ สงสัยมานานแล้ว ทำไมต้องด้วย T ?? ไม่เป็น P(ascal) หรือ D(elphi) ???
ในขณะที่ vb มันก้อใช้ vb เลย เช่น vbCrLf , vbRed , vbTab อะไรงี้

ts.gif

manutd18wm.png


#6 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 23 December 2006 - 08:01:18 AM

(X CroSs @ Dec 22 2006, 02:42 PM) ดูโพสต์

นั่นสิ สงสัยมานานแล้ว ทำไมต้องด้วย T ?? ไม่เป็น P(ascal) หรือ D(elphi) ???
ในขณะที่ vb มันก้อใช้ vb เลย เช่น vbCrLf , vbRed , vbTab อะไรงี้


ที่ต้องขึ้นต้นด้วย T เพราะว่าเวลาจะประกาศวันต้องประกาศภายใต้ Reserve word "Type" ครับ
แบบนี้ไงครับ

type
  TVAT = class(TObject)

  end;


เพิ่มเติมอีกอย่างนึงเวลาเราประกาศตัวแปรภายในคลาส (ที่ประกาศอยู่ใน private section) นั้นธรรมเนียมปฏิบัติของเดลไฟจะขึ้นต้นด้วย F ครับ อันนี้ไม่รู้ว่าทำไมเหมือนกัน

แบบนี้ครับ

type
  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 ให้อัตโนมัติ จากตัวอย่างข้างบนนั้น ผมเขียนแค่นี้ก่อนก็พอ

type
  TVAT = class(TObject)
  public
    property Rate : Integer;
  end;


หลังจากนั้นก็กด Ctrl+Shift+C ก็จะได้ผลลัพธ์แบบนี้อัตโนมัติ

type
  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 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 23 December 2006 - 10:05:30 AM

มาต่อกันครับ
2. Encapsulation หมายถึงคลาสทุกคลาสต้องมีการทำงานจบในตัวมันเอง และมีตัวแปร,Method อยู่ในตัวมันเอง โดยที่ไม่ไปเรียกตัวแปรของคลาสอื่นตรงๆ แต่อาจจะเรียกผ่าน Method ที่คลาสนั้นๆ public เอาไว้

EX.
type
  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 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 23 December 2006 - 12:21:46 PM

3. Inheritance หมายถึงการถ่ายทอดคุณสมบัติจากรุ่นสู่รุ่นครับ เปรียบเทียบกับเครื่องยนต์ก็ได้ เช่น บ.โตโยต้าผลิตเครื่องยนต์ D4D คอมมอนเรล มาเพื่อใช้งานกับรถกระบะ Tiger ซึ่งเครื่องยนต์ชนิดนี้ได้รับความนิยมมาก ทำให้บริษัทค่ายรถอื่นๆเกิดความสนใจและทำการขอซื้อลิขสิทธิ์เครื่องยนต์ชนิดนี้ เพื่อไปทำการผลิตเป็นเครื่องยนต์ของตนเอง เช่น บ.อีซุซุ ก็ไปผลิตเป็น อีซุซุ คอมมอนเรล ซึ่งจะได้คุณสมบัติต่างๆของ D4D คอมมอนเรลจากโตโยต้าไปทั้งหมด แต่บางครั้งโตโยต้าอาจจะกั๊กบางสิ่งบางอย่างเอาไว้ เช่นอุปกรณ์บางชิ้นต้องใช้อุปกรณ์ที่โตโยต้าทำการผลิตขึ้นมาเองเท่านั้น ดังนั้นเมื่ออีซุซุซื้อไปแต่ไม่รู้วิธ๊การผลิตอุปกรณ์ชิ้นนี้ก็เลยต้องจำใจใช้ของที่โตโยต้าผลิต ซึ่งเหตุการณ์นี้ก็จะไปสอดคล้องกับ concept private และ public ของ OOP พอดิบพอดี ซึ่งเครื่องยนต์ คอมมอนเรล ของอีซุซุ ไม่สามารถรู้กระบวนการทำงานของอุปกรณ์บางชิ้นของ D4D ได้เพราะอุปกรณ์ชิ้นนั้นอยู่ในส่วนของ Private ครับ แบบว่าเป็นความลับเฉพาะคลาสนั้นๆที่สามารถเข้าถึงทรัพยากรในส่วนนี้ได้ แต่คลาสที่ทำการสืบทอดไปนั้นไม่สามารถรู้กระบวนการได้ แต่ถ้ามีการเปิด method ที่เรีกใช้ในส่วน public นั้นจะสามารถเอาไปใช้งานได้อย่างเดียว แต่ไม่สามารถรู้กระบวนการภายในได้


อธิบายมาซะยืดยาว มาดูตัวอย่างกันดีกว่า

อันนี้เป็นคลาสของ D4D Commonrail

type
  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 มาก็เอามาสืบทอดต่อแบบนี้ โดยที่ไม่ได้ดัแปลงอะไรเลย

type
  TSuperCommonrail = class(TD4DCommonrail)

  end;


แล้วเวลาที่รถ D-Max จ่ายน้ำมันก็จะสั่งแบบนี้
var
  DmaxEngine : TSuperCommonrail;

  DmaxEngine.FeedingOil;


ซึ่งเครื่องยนต์ของอีซุซุสามารถจ่ายน้ำมันได้เหมือน D4D โดยที่ไม่ต้องรู้ว่า D4D จ่ายน้ำมันอย่างไรด้วยครับ

เอาไว้หัวข้อหน้าจะสนุกกว่านี้อีกครับ โปรดติดตาม Rep ต่อไป หุหุ

#9 MunTho

MunTho

    Exclusive Member

  • Exclusive Programmer
  • 10020 โพสต์

โพสต์เมื่อ 23 December 2006 - 07:54:03 PM

เข้ามาศึกษาหาความรู้ แต่ไม่มีเวลาลองเล่น หุหุ
ว่าแต่ รอกระทู้ทำบอทอยู่ เตรียมคำถามไว้พอสมควร * *

#10 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 25 December 2006 - 08:02:04 AM

(MunTho @ Dec 23 2006, 07:54 PM) ดูโพสต์

เข้ามาศึกษาหาความรู้ แต่ไม่มีเวลาลองเล่น หุหุ
ว่าแต่ รอกระทู้ทำบอทอยู่ เตรียมคำถามไว้พอสมควร * *



กระทู้ทำบอทคงต้องรอคุณจูนเอาข้อมูลเก่ากลับมาก่อนน่ะครับ เพราะว่าลืมๆไปหมดแล้ว และยังไม่รู้จะเริ่มต้นตรงไหนดี

#11 KoRnRoom99

KoRnRoom99

    Exclusive Member

  • Exclusive Programmer
  • 10104 โพสต์

โพสต์เมื่อ 25 December 2006 - 10:09:27 AM

แจ่ม!!
IPB Image
IPB Image
Works: KoRnBot Project,TSLoadDatFile
Thanks X CroSs, Truebot, TSBot, Solars, JackY, some1, Storm24, AssertionFailed from www.skjune.com
IPB ImageIPB ImageIPB ImageIPB ImageIPB ImageIPB Image

#12 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 02 January 2007 - 11:53:23 AM

หวัดดีปีใหม่เจ้าข้าเอ๊ย ...... และ ....... ขอประนามไอ้คนใจ Animal ที่วางระเบิดสร้างความวุ่นวาย เลวชาติจริงๆ ไม่ตายดีแน่ ทั้งคนทำ และ คนบงการ

#13 supersim

supersim

    จอมยุทธใหม่

  • Members
  • 2 โพสต์

โพสต์เมื่อ 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 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 02 May 2007 - 11:45:19 AM

เยี่ยมเลยครับ เพิ่งรู้นะเนี่ยว่า F มานมีที่มายังไง เขียนเดลไฟมา 5-6 ปี เพิ่งตาสว่างวันนี้เอง อิอิ

#15 JackY

JackY

    หนี Microsoft ไม่พ้นซักทีเรา

  • Exclusive Programmer
  • 10072 โพสต์
  • Location:ซอกเล็กๆในหัวใจเธอ

โพสต์เมื่อ 16 June 2007 - 12:35:05 PM

ในที่สุดก็ได้กลับมากระทู้ตัวเองซะที และที่สำคัญ ตอนนี้ได้ Delphi2007 มาไว้ในมือแล้ว และกำลัง Develop โปรแกรมให้ที่ทำงานโดยใช้มันอยู่ ประสิทธิภาพเป็นไงจะมาเล่าให้ฟังนะครับ และอีกไม่นานนี้เราจะมาต่อกันในกฎ OOP ข้อที่ 4 ที่ค้างเติ่งมานานนะครับ




1 สมาชิกกำลังอ่านกระทู้นี้

0 สมาชิก, 1 ผู้เยี่ยมชม, 0 ผู้ใช้งานที่ซ่อนตัว