(ต่อจากบทความแรก)
หัวข้อนี้ดูเหมือนจะใหญ่ไปหน่อย ด้วยการคิดเชิงวัตถุตลอด สิ่งที่ฉันเพิ่งพูดและกล่าวถึงที่นี่เป็นเพียงปัญหาเล็กๆ น้อยๆ ที่ควรคำนึงถึงเมื่อเขียนโค้ด ดังนั้นจึงอาจเหมาะสมกว่าที่จะเปลี่ยนคำว่า 'ตลอด' เป็น 'จำไว้'
ความคิดเห็นบางส่วนเกี่ยวกับคุณสมบัติบางอย่างของ Delphi:
ฉันสงสัยว่าคุณสังเกตเห็นหรือไม่ว่าส่วนประกอบทั้งหมด (รวมถึงส่วนควบคุม) ที่อยู่ในแบบฟอร์ม Delphi นั้นจะปรากฏแก่แบบฟอร์มอื่น ๆ เพื่อให้ชัดเจน ส่วนประกอบเหล่านี้เป็นเนื้อหาของส่วนสาธารณะของแบบฟอร์ม ในอีกด้านหนึ่ง ผลลัพธ์นี้ดี เนื่องจากมีความยืดหยุ่น คลาสอื่นๆ จึงสามารถอ้างอิงส่วนประกอบเหล่านี้บนแบบฟอร์ม ตั้งค่าคุณสมบัติ ดำเนินการวิธีการ เหตุการณ์ ฯลฯ ได้อย่างง่ายดาย แต่ในทางกลับกัน ข้อบกพร่องของมันก็ชัดเจนเช่นกัน ใช่ นั่นนำไปสู่การสูญเสียการห่อหุ้มของฟอร์ม ในความคิดของฉัน องค์ประกอบเหล่านี้ที่อยู่ในแบบฟอร์ม เท่าที่คำนึงถึงจุดประสงค์ของผู้ใช้ ควรจะคงอยู่เป็นทรัพย์สินส่วนตัวของแบบฟอร์ม และไม่ควรปรากฏให้ชั้นเรียนอื่นหรือแบบฟอร์มอื่นเห็น แม้ว่าคุณจำเป็นต้องเข้าถึงข้อมูลเหล่านี้ คุณก็ควรเข้าถึงข้อมูลเหล่านี้โดยอ้อมผ่านวิธีการรับทรัพย์สินหลายรูปแบบที่แบบฟอร์มให้ไว้
ยกตัวอย่างเพื่อให้ทุกคนมีความเข้าใจในการรับรู้:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
Form2.Edit1.Text := 'abc'; // <-- ฉันไม่เห็นด้วยกับวิธีการเขียนประโยคนี้
จบ;
หลายๆ คนอาจจะไม่มีแนวคิดเรื่องการห่อหุ้มอยู่ในใจเวลาเขียนโค้ดประเภทนี้ แต่หลังจากอ่านบทความนี้แล้ว คุณจะไม่ทำแบบนี้อีก (โปรดเปลี่ยนแนวทาง!) ในความคิดของฉัน TForm1 คือ TForm1 และ TForm2 คือ TForm2 สิ่งเหล่านี้มีอยู่เพื่อให้บรรลุฟังก์ชันเฉพาะบางประการ ดังนั้นจึงจัดเตรียมอินเทอร์เฟซบางส่วนให้กับโลกภายนอก (คุณลักษณะ วิธีการ และเหตุการณ์บางอย่าง พูดอย่างเคร่งครัด เหตุการณ์ก็เป็นคุณลักษณะเช่นกัน) บรรลุหน้าที่ตามที่สัญญาไว้ สำหรับการใช้งานอินเทอร์เฟซเหล่านี้โดยเฉพาะ ควรบำรุงรักษาด้วยตนเอง ไม่มีความจำเป็นหรือวิธีใดที่โลกภายนอกจะเข้ามาแทรกแซง แนวคิดนี้สอดคล้องกับการใช้งานจริง นั่นคือ คำถามที่ว่า From1 จำเป็นต้องเข้าถึง Form2.Edit1 โดยตรงหรือไม่ โดยส่วนตัวแล้วฉันชอบการใช้งานต่อไปนี้:
//ต่อไปนี้เป็นส่วนหนึ่งของเนื้อหาของ TForm1 ใน Unit1
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
TForm2(FAnotherForm).EditText := 'abc'; // <-- การใช้งานนี้รวบรวมแนวคิดของการห่อหุ้ม
จบ;
//ต่อไปนี้เป็นคำจำกัดความของ TForm2 ใน Unit2
พิมพ์
TForm2 = คลาส (TForm)
แก้ไข 1: TEdit;
ส่วนตัว
ฟังก์ชั่น GetEditText: สตริง;
ขั้นตอน SetEditText (ค่า const: string);
สาธารณะ
คุณสมบัติ EditText: สตริงอ่าน GetEditText เขียน SetEditText;
// <-- การใช้งานที่แนะนำของฉัน;
จบ;
-
ฟังก์ชั่น TForm2.GetEditText: สตริง;
เริ่ม
ผลลัพธ์ := Edit1.Text;
จบ;
ขั้นตอน TForm2.SetEditText (ค่า const: string);
เริ่ม
ถ้าค่า <> แก้ไขข้อความแล้ว
แก้ไข1.ข้อความ := ค่า;
จบ;
FAnotherForm ในที่นี้เป็นทรัพย์สินส่วนตัวของ TForm1 ซึ่งเป็นตัวชี้ไปยังอินสแตนซ์ของ TForm2 (การใช้งานนี้เน้นย้ำในบทความแรก) การเข้าถึงคุณสมบัติ EditText ของ TForm2 แทนที่จะเข้าถึง Edit1 โดยตรงโดยประมาท ข้อความของ TForm2 รวบรวมแนวคิดนั่นคือแนวคิดเรื่องการแบ่งงานและการทำงานร่วมกันนั่นคือแนวคิดเรื่องความเป็นอิสระนั่นคือแนวคิดของ การห่อหุ้ม
(ยังไม่จบมีต่อ)
บทความเพิ่มเติม