[size=24]
السلام عليكم ورحمة الله وبركاته..
في الدرس السابق قمنا بعمل مهم جداً. و سنقوم اليوم بنفس العمل و لكن بطريقة أسهل.
باستخدام مفهوم الـ Constructor.
أرجو أن تقوم بقراءة المقدّمة على الأقل من
الدرس السابق (إن لم تكن فعلت) و الأفضل أن تطلع عليه بأكمله حتى تكون على علم بما
نفعله هنا.
لننظر إلى هذه البرامج الثلاثة سابقة الذكر و الشرح في الدرس السابق :
لقد قمنا بتعريف فئة النقطة في
الدرس السابق بهذا الشكل:
<blockquote>
</blockquote>
ان تعريف لفئة النقطة بهذا الشكل يجعلها تواجه
مشكلة. و هي أننا نضطر لإعطاء قيماً لمتغيراتها x و
y بشكل يدوي في الفئات الأخرى التي تستخدمها و تستدعيها.
كما فعلنا في هذه الخطوات من فئة Painter:
<blockquote>
</blockquote>
إذا نحن بحاجة لوسيلة تجعلنا أثناء تكوين
أي عضو من فئة النقطة Point أن نعطي قيماً لمتغيراته.
ما أقصده بالتكوين هو هذه الجملة:
<blockquote>
</blockquote>
إن عبارة
تعني أننا سنقوم باستخدام بتكوين عضو فعلي من فئة النقطة
Point. هممو لكن ألا تلاحظون شيئاً؟.. لاحظو معي أن
اسم الفئة نفسه يليه قوسان. و هذا ما يعرف بالـ Constructor.
وهو عبارة عن طريقة التكوين التي يتم بها انشاء العضو من الفئة.
| كيف نقوم بإعادة تعريف الConstructor؟ | |
إن
يعرف باسم: Default Constructor. و هي الذي توفره أي فئة
موجودة في الآلة التخيلية. و لا يحتاج المبرمج لتعريفه و لا للإشارة إليه.
و يمكن للمبرمج إذا أراد أن يقوم بتعريف الـ Constructor
الذي يريده. لنفرض مثلاً في فئة النقطة. أننا أردنا يقوم المبرمج بتمرير قيماً
صحيحة للمتغيرين x و y أثناء
تكوين العضو من فئة النقطة Point. أي لنفرض أنه أراد أن
يكتب هذه الجملة:
بدلاً من هذه الطريقة:
الطريقة الأولى طريقة لطيفة أليس كذلك؟ أفضل و اسهل عند استخراج
الأعضاء من فئة النقطة.
لنتأمّل الكود التالي الجديد لفئة النقطة نفسها:
<blockquote>
</blockquote>
لاحظ السطر 6. ستجد أننا كتبنا كوداً قد يبدو
عجيباً للوهلة الأولى:
<blockquote>
</blockquote>
نلاحظ أننا كتبنا اسم الفئة، و هي في حالتنا
Point، ثم فتحنا أقواساً. و في داخل الأقواس قمنا بتعريف
سلسلة من المتغيرات تفصل بينهما الفاصلة (,).
من الضروري جداً جداً أن نكتب سلسلة المتغيرات
بترتيب محدد. أي أننا نقوم بتوقع الاحداثي السيني، ثم الاحداثي الصادي و ليس العكس.
<blockquote>
</blockquote>
لاحظ في نهاية السطر السادس يوجد قوس مجموعة.
مما يعني أننا سنقوم بكتابة بعض الكود و لا تنس أن تغلق قوس المجموعة بعد الانتهاء
من كتابة ما تريد.
والآن لننظر إلى داخل الـ Constructor.
ما الذي قمنا بتعريفه. في السطر 7 و 8. نلاحظ أننا أخذنا القيم من المتغيرات التي
مررت لنا عبر تكوين العضو، و وضعناها في المتغيرات الخاصة بالعضو.
المتغيرات الممررة xx
و yy هي متغيرات مؤقتة. تنتهي بمجرد الانتهاء من تكوين
العضو (و الوصول لقوس المجموعة الموجود في السطر التاسع. و لعلنا نفصّل في هذا أكثر
في درس الوظائف ان شاء الله.
نقطة توقف.. |
عندما تحدثنا عن الـ Constructor الافتراضي. و قلنا أنه يتوفّر بشكل افتراضي لأي فئة. فإن ذلك يتم إذا كانت الفئة لا تحتوي على Constructor أما اذا قام المبرمج بتعريف Constructor خاص به، فإن الـ Constructor الافتراضي أو default constructor ذو القوسين الفارغين لا يتم ايجاده. أي أن عبارة ستنتج خطأً في الترجمة. ذلك أن الconstructor الموجود يختلف في عدد المتغيرات الممررة عن . إذا رغب المبرمج في constructor ذو سلسلة متغيرات ممررة فارغة مثل: ، فعليه أن يكتبه بنفسه. يمكن للفئة أن يكون لها أكثر من constructor. كل منهم يختلف عن الآخر في عدد أو نوع المتغيرات في السلسلة الممررة لكل منهم، أو كلاهما.
|
آن و قد تعلمنا الـ constructors.
نستطيع كتابة البرامج الموجودة في الدرس السابق بشكل أفضل مما سبق. فبرنامج النقطة سيكون بهذا الشكل كما كتبناه معاً قبل قليل:
<blockquote>
</blockquote>
تيبع الدرس السادس عشر