الربط المتأخر يسمى أيضا الربط الديناميكي أو الربط أثناء التنفيذً .
جميع عمليات الربط في جفا هي عمليات ربط متأخر باستثناء الطرق التي تكون من نوع 61081
حيث أنه عندما تكون طريقة ما 6021 فأنه لا يمكن إعادة تعريفها عند الأبناء و بالتالي لا يمكن استدعائها إلا من غرض
مثال الأشكال الهندسية :
أي بإمكاتنا أن نقول بكل وضوح أن الدائرة هي شكل .. و كثلك بالنسبة لبقية الأشكال
لاحظ الشكل التلي :
0 الماع
0و 0 سورك
عملية ال 25808»من يمكن أن تحدث في التعليمة التالية :
لنفرض أننا قمنا باستدعاء طريقة موجودة في الصف شكل و التي قمنا بإعادة تعريفها في الصف الابن
من المتوقع أنه سيتم استدعاء الطريقة الموجودة في الصف شكل و لكن بالحقيقة سيتم استدعاء الطريقة الخاصة بلصف
بسبب وجود الربط المتأخر ( تعدد أشكال )
) عصمطة دعمته
() ()أسفعة فثه»
)١ )قمع فته»
) ()اسفعة قثه»
) (لععدعة قثه»
١ () ععوعة . ع تمعد ") ل استعم .يه لسع و57
) ()أسفعة 4ته»
) )معد فثه»
١ () ععوعة .ع توصم ذع1 ") ل متعم .اه لسع 7ر5
() ممطكفصوع عصقطة متعماه علطم
() علوصف ع2 معدم باع :2 ععفوة
اعلتقء #مطاعم عخطم«مسوتمم ععلوكد 1
الصف شكل يقوم بتقديم واجهة لكل صف يرث منه . الصفوف المشتقة تقوم بإعادة تعريف طرق الواجهة بشكل يخص كل
تتم مناقشة الكود و تنفيذه عدة مرات خطوة خطوة و ملاحظة كيفية عملية الربط المتأخر ..
بلعودة لمثال الآلات الموسيقية و
()©» . لذلك نقول عن ١
الأساسي (الأب)
ة لتعادية الأشكال يمكننا إضافة صفوف جديدة إلى النظام من دون تغيير الطريقة
عن طريق الوراثة من الصف
لنفرض أثنا أضفنا للنظام صفوف
تلاقام فتولا
5010960 مأععناهم 8
لاقام 018لا (ألاقاط 010لا ()لاقاظ 018لا
(إلقام 08لا (إلرقام 060لا
28305800 فافلا 80 50109
جميع هذه الصفوف الجديدة تعمل بشكل صحيح من دون تغيير الطريقة() 800
هنا الكود الموافق للمخطط السابق :
نلاحظ أن الطريقة () عدرن» مع كل التغييرات و الاضفات قد تم تجاهلها ( أي لم يتم التطرق لجسمها ) و هي لا تزال
ل :0 دية الأشكال "هو فصل الأشياء التي لا تتغير عن الأشياء التي تتغير'"
الطريقة () © ج:1م تعيد سلسلة باسم الصف .
التحميل الزائد و إعادة التعريف.
الفكرة الأساسية في تعادية الأشكال أن طرائق الواجهة الخاصة بالصف الأساسي يتم إعادة تعريفها و ليس تحميلها بشكل
زائد .. و عند القيام بعملية التحميل الزائد يلتغي مفهوم تعدد الأشكال
) الاامعسيع عصت دعمته
من الخرج تلاحظ أنه تم استدعاء الطريقة الخاصة بالصف الأب .. و نلاحظ هنا أنه تم الغاء مفهوم تعددية الأشكال
ول مطاعمه قصة 2265عففك عم عوطم
في مثال الآلات الموسيقية .. الطرائق الموجودة في الصف الأب هي طرائق ذا باستدعاء أي منها فإن
النتائج التي نحصل عليها ستكون خاطئة و ذلك بسبب ان الصف الأب مهمته فقط تأمين واجهة للصفوف المشتقة
لتجنب الأخطاء التي يمكن الحصول عليها في البرنامج السابق نقوم بجعل الصف الأب هو صف مجرد .
نقوم بإنشاء صف مجرد فقط عندما نريد معلجة مجموعة من الصفوف من خلال واجهة مشتركة . تكون هذه الواجهة
المشتركة معرفة في الصف المجرد .
إذا كان لدينا صف مجرد فإن إنشاء أغراض من هذا الصف هي عملية بلا معنى و ذلك كون الصف المجرد يعبر فقط عن
واجهة .. و لذلك المترجم يمنع عملية تهيئة أغراض من نوع الصف المجرد ..
يمكن التصريح عن غرض و لكن لا يمكن تهينته بنفس نوع الصف المجرد .. إلا أنه يمكن القيام بععلية التهينة عن طريق
صف ابن للصف المجرد ( 68580( ).
تؤمن لغة جافا طريقة لجعل طريقة ما مجردة أي غير مكتملة ..
الطريقة .
نقوم بالتصريح عن الطريقة و لكن لا نكتب جسم
أي أن الصف المجرد يمكن أن يحتوي طرائق مجردة و غير مجردة
يكون الصف مجرد ( المترجم يجبرنا على ذلك )
الآن .. عندما نقوم بالوراثة من صف مجرد يجب علينا إعادة تعريف جميع الطرق المجردة الموجودة في الصف الأب
و المترجم يجبرنا على القيام بذلك
إذا كان لدينا صف يحوي طريقة مجرد
نعود لمثال الآلات الموسيقية ... يمكن تحويل الصف 10503000808 إلى صف مجرد و نقوم بجعل بعض الطرق فيه مجردة
و الصفوف الأخرى ترث منه و تقوم بإعادة تعريف الطرائق المجردة
و بالتتلي لدينا الشكل التلي :
لإلاهام تفلا ()37اظ 058لا (لاقام 019لا
سس التسشرعي شرع
(ألاقاظ 010لا لاقام 018لا
و هنا الكود الموافق للشكل التالي :
الخو سباع عد " ماوع
() فلم خض فت طيصر
() افلم خم متلطيم
لع 1] عسي ع20) لتهعمي قخصدم متعمعه
(حجة بطعومع 1ه > 4 00 جل غعصة) جوع
7 - 1 غصة
() ص1 سعد
()دده تع قبع 2 وعد
() 82295 سعد
() 1100134 سعد [++1] مع دعط<0
من المفيد جدا إنشاء صفوف و طرائق مجردة لأنها تجعل تجريد الصف أكثر وضوحا و تخبر كلا من المستخدم و المترجم ما
هو الهدف من إنشاء هكذا صفوف و طرائق ( فقط واجهات للأبناء ) ..
البواني و تعادية الأشكال :
ستناقشها من خلال الأمور التالية :
أولا - ترتيب استدعاء البواني :
استدعاء البواني تمت مناقشته سابقا .. باني الأب يتم استدعاؤه دائما في بواني الأبناء و ذلك حسب
السبب في ذلك هو أن الصف الابن يمكنه الوصول لحقوله الخاصة و لكن لا يمكنه الوصول لحقول الصف الأب ( إذا كات
01/34 ) ... فقط باني الأب يمكنه الوصول و تهيئة حقوله الخاصة..
و كما ذكرنا .. إذا لم يتم استدعاء الباني صراحة فإن المترجم يقوم باستدعاء الباني الافتراضي .. و إذا لم يكن هناك باني
افتراضي فإن المترحم يجبرنا على استدعاء أحد البوائي الموجودة ..
المثال التالي يوضح تأثير الوراثة و التركيب و تعددية الأشكال على ترتيب استدعاء البواني
) تفعكز دعمك
) لقمععة دعم
)م8 سعد - ط فف<2
٠ () عفععط0 معد جام عفع عط
)جاه تشقصة5 سعد
هذا المثال يقوم بإنشاء صف معقد من صفوف أخرى -
الصف الأهم هو الصف .1ه :»53:04 و الذي يعكس ثلاث مستويات وراثة و يحتوي على ثلاث حقول .
من خرج البرنامج نلاحظ أن عملية استدعاء البواني تتم كمايلي :
- يتم استدعاء باني الأب .. و هذه العملية عود؛
- يتم تهيئة الحقول الاعضاء بحسب ترتيب تعريفهم
- يتم تنفيذ جسم باني الصف الابن
أي يتم الصعود لأعلى حتى يتم أولا استدعاء باني الأب الأول
لنفرض أننا قمنا باستدعاء طريقة متعددة الشكل داخل الباني .. ما الذي يمكن أن يحدث ؟؟؟'
بالنسبة للطرائق العادية .. عملية استدعاء طريقة متعددة الشكل يتم تحديدها في وقت التنفيذ
أما بالنسبة للبواني فإنه يتم استدعاء الطريقة التي تم إعادة تعريفها في الابن .. و لكن ذلك يبدو غريبا
مهمة الباني هي جلب الغرض للحياة ( جاه قابل للاستخدام ) ..
داخل باني الابن يتم استدعاء كأول تعليمة باني الأب .. و بذلك فإنه فقط غرض الأب تمت تهيئته .