بسم الله الرحمن الرحيم
والصلاة والسلام على سيدنا
محمد صل الله عليه وسلم
النهارده إن شاء الله هنكمل كلامنا عن ال polymorphism وهو جزء
أخير اللى فاضل فى موضوع ده وهو :
-
Up
Cast && Down Cast : مبدئياً كده ال Cast بيحصل فى حالة ال inheritance
أولاً : Up
Cast : زى ما قولنا بيحصل فى حالة ال inheritance وفى حالة ال
upcast بنحول ال child classإلى parent class يعنى ايه الكلام ده ؟
مثال :
-
لو لاحظنا
فى المثال السابق هنلاقى حاجه غريبة ، ايه ده ؟؟ احنا واخدين object من Shape وبعد كده بنقول new Rectangle() !! احنا مش متعودين على
كده ، احنا متعودين ان الطرفين زى بعض يعنى ال class اللى بناخد منها object فى الطرف الشمال هى هى اللى بنعمل ليها new فى
الطرف اليمين ، امال ايه معناه الكلام ده ؟؟
اولاً: S ده مش object من Shape ، فى الحاله ديه هو Reference ل Shape لان اللى يخلينا نقول عليه object من Shape ان يكون مكتوب بعديه = new Shape() ، new ديه هى اللى بتفتح مكان جديد فى ال memory من
نوع ال Class الموجودة بعدها ، فبنقول ده object من ال Class اللى كتبنا اسمها بعد كلمه new .
-
معنى كده
ان ال Class اللى كتبناها بعد كلمه new هى Rectangle يعنى S عبارة عن object من Rectangle ، الكلام ده جديدعلينا ، هوضح الكلام ده كله
بصورة :
-
معنى
الصورة ان ال S هو عباره عن Rectangle بس شايف كل حاجات ال Shape ، بس لو عندى method فى ال parent class اللى هو ال shape مثلا وال method ديه معمول ليها override فى child class اللى هو هنا ال rectangle تفتكروا S هيشوف مين فيهم ؟؟؟ طبعا هيشوف اللى فى ال rectangle اللى معمول ليها override لأن هو شايف كل حاجات ال Shape بس بعين ال Rectangle يعنى لو موجود من الحاجات اللى فى ال Shape منها فى ال Rectangle فهو هيشوف اللى فى ال Rectangle غير
كده هيشوف اللى فى ال Shape .
-
بس ناخد
بالنا العكس غير صحيح يعنى ما ينفعش اعمل كدة :
-
لأن فى
الحالة ديه s هتكون
عبارة عن object من ال Shape بس ما تقدرش تشوف كل اللى فى ال Rectangle لأن ممكن حاجات زيادة نحطها فى الchild class ما
تكونش موجودة فى ال parent class لكن فى حالة العكس احنا بنكون فى ال child class شايفين كل الحاجات بتاعت ال parent class ، باختصار child class يقدر يشوف كل حاجات ال parent class لكن ال parent class ما يقدرش يشوف كل حاجات ال child class ، عشان نعمل المثال اللى
فوق صح لازم نمشى على القاعده ديه :
Parent obj =new Child() ;
-
مثال آخر
لتوضيح ال upcast :
-
وفى المثال
السابق عرّفنا object من نوع Rectangle وبعد كده فى السطر التالى عملنا upcast لل object r وخليناه بقه Shape ووضعناه فى ال s على صورة Shape .
-
ديه صورة
توضح كل الحالات اللى فاتت :
ثانياً : Down Cast : وهو العكس يعنى التحويل من ال parent الى ال child
والصورة ديه بتوضح الفرق بين upcast & downcast :
والصورة ديه بتوضح الفرق بين upcast & downcast :
-
مثال :
-
ده نفس
المثال اللى فى ال upcast بس ضيفنا عليه اخر سطر واخر سطر ده هو اللى بيمثل ال downcast وهو التحويل من ال parent الى ال child .
-
طبعا واحنا
بنطبق ال downcast مش لازم قبله على طول كده نكون عاملين ال upcast بس ناخد بالنا من حاجه مهمه وهى ان عشان
اعمل downcast ل
object عشان احوله ل Class معينه لازم اصلا ال object يكون اصله نفس ال class اللى بنعمل ليها downcast ، يعنى ايه الكلام ده ؟؟
كما فى المثال السابق ال S اللى هعملناله downcast للنوع Rectangle اصلاً هو فى الاصل كان Rectangle بس كان قبل كده معمول له upcast ل Shape .
-
ليه الكلام
ده كله ؟ عشان لو بعمل downcast لobject وهو اصلة كان Circle ومعمول له upcast لShape وبعد
كده جينا لل Shape عملناله downcast ل Rectangle هيكون خطأ طبعا لأن ممكن ال Rectangle يكون فيها method مش موجوده فى ال Circle حتى لو موجوده كل واحده وليها قوانين مختلفة
حتى لو ال methods ليها نفس الاسم بس الكود بتاعهم هيكون مختلف عن بعض فلازم ناخد
بالنا واحنا بنعمل downcast ان ال object يكون اصله نفس ال Class اللى بحول ال object ليها .
-
ممكن ما
يكنش واضح دلوقتى احنا ممكن نستخدم upcast
and downcast فى ايه ، المهم بالنسبالى دلوقتى اننا نفهم ال
concept بتاع ال upcast and downcast ، ونفهم هما عبارة عن ايه مش لازم نتخيل هما ايه فايدتهم حالياً ،
لأننا هنستخدمهم كتير جداً فى الاندرويد وهيكون استخدامهم اسهل من كده بكتييير ،
انا دلوقتى بشرح الموضوع من أوله عشان يتفهم كويس لكن لما نستخدمهم هتلاقوا
الموضوع سهل جداً إن شاء الله .
-
كده خلصنا
ال polymorphism كلها ويارب تكونوا استفدوا
من درس النهارده ولو عايزين أمثلة على الموضوع ده عشان تفهموا اكتر اعملوا بحث فى
جوجل على upcast and downcast
examples وان شاء الله هتلاقوا أمثلة كتيرة جدا ولو
فيه اى حاجه مش واضحه ابعتوا السؤال فى كومنت على الدرس وبالتوفيق إن شاء الله .
السلام عليكم ورحمة الله
وبركاته
No comments:
Post a Comment