ภาษาคอมพิวเตอร์ได้พัฒนาจากภาษาเครื่องเป็นภาษาระดับสูงจากภาษาซับซ้อนเป็นภาษาง่าย (จริงๆ แล้วมันไม่ง่ายเลย) ซึ่งสะท้อนถึงพัฒนาการของวิทยาการคอมพิวเตอร์และเทคโนโลยี ยิ่งภาษาคอมพิวเตอร์มีความก้าวหน้ามากเท่าใด ภาษาที่เป็นนามธรรมและเป็นมนุษย์ก็จะยิ่งมากขึ้นเท่านั้น ไม่จำเป็นต้องเกี่ยวข้องกับฮาร์ดแวร์ระดับต่ำอีกต่อไป และยิ่งสะดวกในการใช้งานมากขึ้นเท่านั้น แต่ไม่ว่าภาษาคอมพิวเตอร์จะก้าวหน้าแค่ไหนมันก็ถือเป็นนามธรรมของชั้นระบบปฏิบัติการดังนั้นเราจึงสามารถค้นหากฎเกณฑ์เบื้องหลังการทำความเข้าใจภาษาระดับสูงได้เสมอนั่นคือรหัสที่เขียนด้วยภาษาระดับสูงเท่านั้น เพื่ออธิบายความต้องการของผู้คนและรหัสเหล่านี้จะต้องผ่าน "นักแปล" แปลเป็นรูปแบบภาษาเครื่องเพื่อให้คอมพิวเตอร์สามารถรับรู้และดำเนินการได้ มีสองวิธีที่เรียกว่าการแปล: วิธีแรกคือวิธีการคอมไพล์ ซึ่งโค้ดจะถูกสร้างขึ้นในภาษาเครื่องโดยคอมไพเลอร์ล่วงหน้า จากนั้นจึงกำหนดเวลาและดำเนินการโดยระบบปฏิบัติการ เช่น ภาษา Delphi, ภาษา C++ เป็นต้น ; อีกวิธีหนึ่งคือวิธีการตีความซึ่งเป็นข้อได้เปรียบในการคำนวณ ไม่มีผลกระทบต่อโปรแกรมเป้าหมาย เช่น ภาษาพื้นฐาน ภาษาสคริปต์ เป็นต้น ลักษณะของวิธีการตีความคือความเร็วในการทำงานที่ช้าและมีความต้องการฮาร์ดแวร์คอมพิวเตอร์ที่ค่อนข้างสูง
ภาษาคอมพิวเตอร์กำหนดกฎเกณฑ์ที่อธิบายความต้องการของผู้คน เบื้องหลังภาษาคือผู้เรียบเรียงหรือล่าม งานหลักของคอมไพเลอร์หรือล่ามคือการแปลโค้ดและเป็นช่องทางหลักในการสื่อสารระหว่างมนุษย์กับคอมพิวเตอร์ ด้วยวิธีนี้ เมื่อระบบปฏิบัติการยังคงไม่เปลี่ยนแปลง เครื่องมือการพัฒนาต่างๆ จะแสดงความสามารถเฉพาะตัว แต่ในท้ายที่สุดแล้ว พวกเขาจะต้องสร้างโค้ดปฏิบัติการของคอมพิวเตอร์ ดังนั้นไม่ว่าโปรแกรมจะเขียนด้วยภาษาคอมพิวเตอร์ใด ไม่ว่าจะดีหรือไม่ดีก็ขึ้นอยู่กับคอมไพเลอร์หรือล่ามของภาษานั้นเป็นหลัก คอมไพเลอร์ของ Delphi ยังคงเป็นคอมไพเลอร์ที่ทันสมัย ดีที่สุด และมีประสิทธิภาพมากที่สุดในโลก
จากมุมมองของคุณลักษณะของภาษาระดับสูง โดยทั่วไปแล้วภาษาเหล่านี้จะห่อหุ้มอินเทอร์เฟซบริการที่ระบบปฏิบัติการจัดเตรียมไว้ และบนพื้นฐานนี้จะเพิ่มคุณลักษณะภาษาของตนเอง เช่น OOP พอยน์เตอร์ โหมดการจัดการหน่วยความจำ เป็นต้น
จากสถาปัตยกรรมทั้งหมดของภาษา Delphi เมื่อเราเขียนโปรแกรม เราใช้ VCL โดยตรง เรียกใช้ API ที่ได้รับจากระบบปฏิบัติการ ใช้บริการ Com หรือใช้ภาษาแอสเซมบลีโดยตรงเพื่อทำงานของเราให้เสร็จสมบูรณ์
แกนหลักและสิ่งที่ยอดเยี่ยมที่สุดเกี่ยวกับ Delphi คือ Visual Component Library (VCL - Visual Component Library) และไลบรารีส่วนประกอบข้ามแพลตฟอร์ม (CLX - aComponent Library สำหรับ Cross-Platform) ซึ่งคล้ายกับ Microsoft MFC แต่สถาปัตยกรรมของมันคืออย่างน้อย ล้ำหน้ากว่า MFC สามชั่วอายุคนสองถึงสามปี เมื่อเขียนโปรแกรมใน Delphi คุณสามารถเลือก VCL หรือไม่เริ่มจากศูนย์ก็ได้ สมมติว่าคุณเขียนโปรแกรมที่สร้างหน้าต่างและแสดง "Hello world" หากคุณไม่ได้ใช้ VCL คุณต้องเริ่มต้นด้วยการเรียก CreateWindow ของ API นี่เป็นสิ่งที่ยุ่งยากมาก แต่ก็ขึ้นอยู่กับความต้องการของคุณ นี่แสดงให้เห็นว่าเป็นไปไม่ได้เลยที่จะใช้การเขียนโปรแกรม Delphi โดยไม่มี VCL เช่นโปรแกรมคอนโซล
VCL เป็นไลบรารีคลาสที่ทรงพลัง ซึ่งเป็นสาระสำคัญและการตกผลึกของคุณสมบัติเชิงวัตถุของภาษา Delphi โครงสร้างไดอะแกรมของคลาสมีดังนี้:
นี่คือโครงสร้างไดอะแกรมคลาสแบบย่อ แต่เป็นตัวแทนอย่างมาก จากคลาสไดอะแกรม เราจะเห็นได้ว่า VCL มีรูทเดียวเท่านั้น - TObjct และแต่ละคลาสที่ได้รับมีบรรพบุรุษเพียงอันเดียว นี่คือคุณลักษณะเชิงวัตถุของภาษา Delphi บรรพบุรุษดั้งเดิมที่สุดของคลาสทั้งหมดคือ TObjcet และวิธีการสืบทอดคือการสืบทอดเดี่ยว สิ่งที่ต้องอธิบายคือ:
แม้ว่าการออกแบบ VCL จะคลาสสิกและใหญ่โต แต่อย่ากังวลกับสิ่งนี้ พูดตรงๆ ก็คือคลาสไลบรารี่ซึ่งคลาสต่างๆ ที่เกี่ยวข้องกันจะถูกรวมเข้าด้วยกันเพื่อทำหน้าที่บางอย่างให้สมบูรณ์ คลาสเหล่านี้อาจห่อหุ้ม Windows APIs เรียกใช้บริการ Windows COM หรือใช้แอสเซมบลีเพื่อดำเนินการหน่วยความจำโดยตรง ดังที่ได้กล่าวไปแล้ว เราสามารถเขียนโปรแกรมโดยมีหรือไม่มี VCL ก็ได้ ซึ่งหมายความว่า VCL นั้นไม่จำเป็น หากจำเป็น เราสามารถสืบทอดและขยายคลาสใดๆ เพื่อทำให้เป็นคลาสที่ตรงตามข้อกำหนดของเราเอง ตัวอย่างเช่น หากเราต้องการขยายคลาส TPanal เหตุการณ์ที่เกี่ยวข้อง (OnMouseEnter/OnMouseLeave) สามารถถูกทริกเกอร์เมื่อเมาส์เข้าและออก เช่น ฟังก์ชันของแผง QQ
สร้างหน่วยใหม่จาก [ไฟล์]->[ใหม่]->[หน่วย]
เขียนโค้ดดังต่อไปนี้ จากนั้นบันทึกหน่วยเป็น MyPanelUnit
หน่วย MyPanelUnit;
อินเตอร์เฟซ
ใช้คลาส, ExtCtrls, ข้อความ, การควบคุม;
พิมพ์
TMouseActionEvent = PROcedure (ผู้ส่ง: TObject) ของวัตถุ;
TMyPanel = คลาส (TPanel)
ส่วนตัว
FOnMouseEnter, FOnMouseLeave:
เหตุการณ์ FouseAction;
//สกัดกั้นข้อความรายการเมาส์
ขั้นตอน WMMouseEnter (ข้อความ var:
TMessage); ข้อความ CM_MOUSEENTER;
//สกัดกั้นข้อความเลื่อนเมาส์
ขั้นตอน WMMouseLeave (ข้อความ var:
TMessage); ข้อความ CM_MOUSELEAVE;
ที่ตีพิมพ์
คุณสมบัติ OnMouseEnter: อ่าน TMouseActionEvent
FOnMouseEnter เขียน FOnMouseEnter;
คุณสมบัติ OnMouseLeave: อ่าน TMouseActionEvent แล้ว
FOnMouseLeave เขียน FOnMouseLeave;
จบ;
//โปรดทราบว่า "R" ใน "Register" จะต้องเป็นตัวพิมพ์ใหญ่ นี่เป็นที่เดียวในภาษา Delphi ที่ต้องให้ความสนใจกับขนาด
ขั้นตอนการลงทะเบียน;
การดำเนินการ
{TMyPanel}
ขั้นตอนการลงทะเบียน;
เริ่ม
//ลงทะเบียนส่วนประกอบใน IDE ของ Delphi และแสดงบนแผง "MyControl"
RegisterComponents('MyControl', [TMyPanel]);
จบ;
ขั้นตอน TMyPanel.WMMouseEnter (ข้อความ var: TMessage);
เริ่ม
//ตรวจสอบว่ามีโค้ดเมื่อเมาส์เข้ามาหรือไม่ และมันถูกดำเนินการหรือไม่
ถ้าได้รับมอบหมาย (FOnMouseEnter) แล้ว
FOnMouseEnter(ตนเอง);
จบ;
ขั้นตอน TMyPanel.WMMouseLeave (ข้อความ var: TMessage);
เริ่ม
//ตรวจสอบว่ามีโค้ดเมื่อเมาส์เข้ามาหรือไม่ และมันถูกดำเนินการหรือไม่
ถ้าได้รับมอบหมาย (FOnMouseLeave) แล้ว
FOnMouseLeave(ตัวเอง);
จบ;
จบ.
จากนั้นคลิก [Component]->[Install Component…] ดังที่แสดงด้านล่าง:
เลือกหน่วยที่เราเพิ่งสร้างขึ้น MyPanelUnit.pas ใน "ชื่อไฟล์หน่วย" และปล่อยให้ตัวเลือกอื่นเป็นค่าเริ่มต้น จากนั้นคลิก "ตกลง" เลือก "ใช่" ใน "แพ็คเกจ dclusr.bpk จะถูกสร้างขึ้นแล้วติดตั้ง ดำเนินการต่อ?" และบันทึกหลังจากการคอมไพล์และติดตั้ง ด้วยวิธีนี้ ตัวควบคุม TmyPanel จะถูกติดตั้งใน Delphi เลื่อนแผงควบคุม Delphi ไปจนสุดแล้วคุณจะเห็นหน้าควบคุม MyControl ดังที่แสดงด้านล่าง:
จากนั้นสร้างโปรเจ็กต์ใหม่ คลิก [ไฟล์]->[ใหม่]->[แอปพลิเคชัน] ลาก MyPanel จากหน้า MyControl ไปที่แบบฟอร์ม กดปุ่ม F11 และสลับไปที่หน้าเหตุการณ์ ดังนี้:
เปรียบเทียบกับ TPanel เพื่อดูว่ามีเหตุการณ์ OnMouseEnter และ OnMouseLeave เพิ่มเติมหรือไม่ ดับเบิลคลิก OnMouseEnter แล้วเขียนโค้ดดังนี้:
ขั้นตอน TForm1.MyPanel1MouseEnter (ผู้ส่ง: TObject);
เริ่ม
ShowMessage('เมาส์เข้าสู่ MyPanel1');
จบ;
จากนั้นกด F9 เพื่อเรียกใช้ เลื่อนเมาส์ไปที่ MyPanel1 และดูผลลัพธ์
มันง่ายมาก เราได้ขยาย TPanel ให้มีความสามารถในการจัดการกับเหตุการณ์การเข้าและการลบเมาส์ ดังนั้น VCL จึงไม่ใช่เรื่องลึกลับ ใครๆ ก็สามารถเขียนส่วนประกอบ (คลาส) ภายในใหม่เพื่อให้เป็นไปตามที่พวกเขาต้องการได้
l Delphi รองรับการสืบทอดอินเทอร์เฟซ ซึ่งในแง่หนึ่งใช้การสืบทอดหลายรายการ ตัวอย่างเช่น TComponent ถูกกำหนดไว้ดังนี้:
TComponent = คลาส (TPersistent, IInterface,
IInterfaceComponentReference)
l อย่าสร้างอินสแตนซ์ของคลาสนามธรรม ตราบใดที่วิธีหนึ่งในคลาสเป็นวิธีนามธรรม คลาสนั้นก็เป็นคลาสนามธรรม ตัวอย่างเช่น TStrings ถูกกำหนดไว้ดังนี้:
TStream = คลาส (TObject)
ส่วนตัว
-
ได้รับการคุ้มครอง
-
สาธารณะ
ฟังก์ชั่นอ่าน (var Buffer; จำนวน: Longint): Longint เสมือน;
ฟังก์ชั่นเขียน (const Buffer; Count: Longint): Longint เสมือน;
-
จบ;
ตราบใดที่มีคำสำคัญที่เป็นนามธรรมในคำจำกัดความของวิธีการ มันก็เป็นวิธีการที่เป็นนามธรรม ไม่มีประโยชน์ในการใช้คลาสนามธรรมเพื่อสร้างอินสแตนซ์ เนื่องจากไม่ได้ใช้งานการอ่านและเขียน และตัวอย่างจะปรากฏขึ้นหากเรียกใช้
(ยังไม่เสร็จ โปรดดูเบื้องหลังของ Delphi --- ข้อมูลอ้างอิงสำหรับผู้เริ่มต้น ตอนที่ 2 (2))
(หากต้องการพิมพ์ซ้ำกรุณาระบุแหล่งที่มาและผู้แต่ง http://haitian.myrice.com)