(تابع للمقال الأول)
مع الحفاظ على التفكير الموجه للكائنات طوال الوقت، يبدو هذا الموضوع كبيرًا بعض الشيء. ما قلته للتو وذكرته هنا هو في الواقع مجرد بعض المشكلات البسيطة التي يجب الانتباه إليها عند البرمجة. ولذلك، قد يكون من الأفضل تغيير المصطلح "طوال الوقت" إلى "ضع في الاعتبار".
بعض التعليقات على بعض مميزات دلفي:
أتساءل عما إذا كنت قد لاحظت أن جميع المكونات (بما في ذلك عناصر التحكم) الموضوعة في نموذج دلفي مرئية للنماذج الأخرى. على وجه الدقة، هذه المكونات هي محتويات الجزء العام من النموذج. من ناحية، هذه النتيجة جيدة، نظرًا لمرونتها، يمكن للفئات الأخرى الرجوع بسهولة إلى هذه المكونات في النموذج، وتعيين خصائصها، وتنفيذ أساليبها، وأحداثها، وما إلى ذلك، ولكن من ناحية أخرى، فإن عيوبها واضحة أيضًا نعم، يؤدي ذلك إلى فقدان تغليف النموذج. في رأيي، هذه المكونات الموضوعة في النموذج، بقدر ما يتعلق الأمر بنية المستخدم، يجب أن تكون موجودة كخصائص خاصة للنموذج ويجب ألا تكون مرئية للفئات الأخرى أو النماذج الأخرى. حتى إذا كنت بحاجة إلى الوصول إليها، فيجب عليك الوصول إليها بشكل غير مباشر من خلال سلسلة من طرق الملكية التي يوفرها النموذج.
أعط مثالاً لمنح الجميع بعض الفهم الإدراكي:
الإجراء TForm1.Button1Click(Sender: TObject);
يبدأ
Form2.Edit1.Text := 'abc'; // <-- لا أتفق مع طريقة كتابة هذه الجملة.
نهاية؛
قد لا يكون لدى العديد من الأشخاص مفهوم التغليف في أذهانهم عند كتابة مثل هذا الكود، ولكن بعد قراءة هذه المقالة، لن تفعل مثل هذا الشيء مرة أخرى (غير طرقك!). في رأيي، TForm1 هو TForm1، و TForm2 هو TForm2. جميعها موجودة لتحقيق وظائف محددة معينة، لذا فهي توفر بعض الواجهات للعالم الخارجي (بعض السمات والأساليب والأحداث. بالمعنى الدقيق للكلمة، الأحداث هي أيضًا سمات. ) تحقيق وظائفهم الموعودة. أما بالنسبة للتنفيذ المحدد لهذه الواجهات، فيجب الحفاظ عليها من تلقاء نفسها، وليست هناك حاجة أو طريقة لتدخل العالم الخارجي. تتوافق هذه الفكرة مع التطبيقات العملية، أي مسألة ما إذا كان يجب الوصول إلى Form2.Edit1 مباشرة بواسطة From1. أنا شخصياً أفضل التنفيذ التالي:
//ما يلي جزء من محتوى TForm1 في الوحدة1
الإجراء TForm1.Button1Click(Sender: TObject);
يبدأ
TForm2(FAnotherForm).EditText := 'abc'; // <-- يجسد هذا التنفيذ فكرة التغليف
نهاية؛
// فيما يلي تعريف TForm2 في الوحدة2
يكتب
TForm2 = الفئة(TForm)
تحرير 1: تحرير؛
خاص
وظيفة GetEditText: سلسلة؛
إجراء SetEditText(قيمة ثابتة: سلسلة);
عام
الخاصية EditText: قراءة السلسلة GetEditText والكتابة SetEditText؛
// <-- الاستخدام الموصى به؛
نهاية؛
…
الدالة TForm2.GetEditText: سلسلة؛
يبدأ
النتيجة := Edit1.Text;
نهاية؛
الإجراء TForm2.SetEditText(قيمة ثابتة: سلسلة);
يبدأ
إذا كانت القيمة <> EditText بعد ذلك
Edit1.Text := القيمة؛
نهاية؛
FAnotherForm هنا هي خاصية خاصة لـ TForm1، وهي مؤشر إلى مثيل TForm2 (تم التأكيد على هذا الاستخدام في المقالة الأولى). الوصول إلى خاصية EditText الخاصة بـ TForm2 بدلاً من الوصول المباشر إلى Edit1 بشكل متهور. نص TForm2 يجسد فكرة، أي فكرة تقسيم العمل والتعاون، أي فكرة الاستقلال، أي فكرة التغليف.
(لم يكتمل، يتبع)
المزيد من المقالات