Lesson 8

بسم الله الرحمن الرحيم

والصلاة والسلام على سيدنا محمد صل الله عليه وسلم

النهارده إن شاء الله هنكمل كلامنا عن ال 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 وهو التحويل من ال 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