26.04.2015 Views

البرمجة الغرضية التوجه في دلفي

البرمجة الغرضية التوجه في دلفي

البرمجة الغرضية التوجه في دلفي

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>البرمجة</strong> <strong>الغرضية</strong> <strong>التوجه</strong> <strong>في</strong> دل<strong>في</strong><br />

عروة عيسى<br />

إعادة تعريف المناهج والمناهج المهيمنة:‏<br />

كما رأينا ، لجعل منهج متأخر التحديد مهيمنا <strong>في</strong> صنف مشتق نقوم بإستخدام الكلمة المفتاحية<br />

ذلك يمكن أن يحدث فقط إذا كان المنهج معرفا كمنهج إفتراضي<br />

، override<br />

(virtual)<br />

(Dynamic)<br />

أما إذا كان معرفا كمنهج ساكن<br />

إلا بتغيير شفرة الصنف السلف نفسها<br />

(static)<br />

<strong>في</strong> الصنف السلف ‏،أي ديناميكي<br />

فلا توجد طريقة عندها لتفعيل التحديد المتأخر<br />

تذكر أنك<br />

(late binding)<br />

.<br />

قواعد هذة العملية ليست صعبة<br />

:<br />

تقوم بإخفائة بمنهج إفتراضي جديد يحمل نفس الإسم<br />

المنهج المعرف كمنهج ساكن (Static) سيبقى ساكنا <strong>في</strong> كل الأصناف المورثة<br />

، حتى<br />

.<br />

المنهج المعرف كمنهج إفتراضي<br />

<strong>في</strong> كل الأصناف المورثة ‏(إلا إذا قمت بإخفائة بمنهج ساكن ‏،وذلك يعتبر عملا غبيا جدا<br />

التصرف<br />

(Vertioal)<br />

. (<br />

،<br />

لإن المترجم سيولد شفرة مختلفة من أجل مناهج التحديد المتأخر<br />

.<br />

يبقى متأخر التحديد<br />

لاتوجد طريقة لتغيير هذا<br />

لإعادة تعريف منهج ساكن<br />

،<br />

أضف تعريف المنهج <strong>في</strong> الصنف المشتق بدون أي إضافات<br />

مختلفة عن المنهج الأصل <strong>في</strong> هذة الحالة . لجعل منهج إفتراضي ما منهجا مهيمنا<br />

،<br />

،<br />

، override<br />

و<strong>في</strong> هذة الحالة يجب أن يملك المنهج نفس بارمترات المنهج الأصل<br />

تستطيع جعل منهج ما مهيمنا بطريقتين<br />

.<br />

وبإمكانة أن يملك بارمترات<br />

يجب أن تستخدم الكلمة المفتاحية<br />

type<br />

TmyClass = class<br />

procedure One; virtual;<br />

procedure Two; {static method}<br />

end;<br />

TmyDerivedClass = class (MyClass)<br />

procedure One; override;<br />

procedure Two;<br />

end;<br />

:<br />

الثانية هي إضافة شفرات إضا<strong>في</strong>ة إلى المنهج الموجود<br />

الأولى هي إستبدال منهج الصنف الأصل بواحد جديد<br />

.<br />

،<br />

المنهج الخاص بالصنف الأصل ضمن شفرة منهج الصنف المشتق<br />

ولتحقيق ذلك نستخدم الكلمة المفتاحية<br />

inherited لإستدعاء<br />

procedure TmyDerivedClass.One;<br />

begin<br />

// new code<br />

…<br />

inherited One; // call inherited procedure MyClass.One<br />

end;<br />

.<br />

٣٨

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!