Lesson 7

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

النهارده هنكمل كلامنا عن ال OOP ناخد ثالث سمه من سماته وهى ال polymorphism

3- Polymorphism :  والكلمه ديه لو ترجمنا المعنى الحرفى ليها هنلاقيهه تعدد الأشكال وده بالظبط الوظيفه اللى بتقوم بيها وده بيظهر من خلال :


-         Overloading : يعنى ايه ال overloading  اولاً هى عمليه بنعملها فى ال method وهى كالتالى اننا لو عندنا sum method وال method ديه بتجمع رقمين كما فى الصورة :


-         نقدر نعمل لل method ديه overload بحيث انها ممكن تاخد 3 ارقام وتجمعهم وبرده تفضل الmethod اللى بتاخد رقمين زى ما هى بس الفرق اننا لما نستخدم ال sum method اقدر استخدمها بأكتر من طريقه على حسب احتياجنا يعنى ممكن نستخدم اللى بتجمع رقمين لو عايزين نجمع رقمين أو نستخدم اللى بتجمع 3 أرقام كما فى الصورة :

-         فى الصورة السابقه عملنا overload لل sum method يعنى خليناها تاخد input parameter مختلفة هنشوف فى المثال التالى ازاى بنقدر نستخدمهم :


-         زى ما احنا شايفين فى المثال السابق عشان نستخدم ال sum method ، اولاً خدناobject  من ال class اللى هى فيها وبعد كده جهزنا variable int من نفس نوع ال return type عشان يستقبل النتيجة من ال method وبعد كده كتبنا اسم ال object اللى هو t. ثم ظهر لى 2 method بنفس الاسم اللى هو sum  بس كل واحده ب input parameters  مختلف عن التانيه واحنا اللى نختار نستخدم مين فيهم على حسب احتياجنا وهنا طبقنا مبدأ ال polymorphism بأن ال method الواحده ممكن يتعدد شكلها ب input parameters مختلفة .

-         شروط ال overload :
هما شرطين مهمين بدونهم لا يتحقق ال overload وهما :

n    لازم كل ال method  اللى عايزين يتعمل ليهم overload يكونوا بنفس الاسم يعنى لو اعتبرت ان اول method اسمها sum1 والتانيه اسمها sum2 البرنامج هيتعامل على ان كل واحده method لوحدها لكن عشان يفهم ان ده overload لازم نخليهم بنفس الاسم .

n    ثانى شرط لازم يكون ليهم input parameter مختلفة يعنى ما ينفعش اعمل 2 method بنفس الاسم وبنفس ال input parameters كده هيطلعلنا خطأ فى البرنامج وناخد مثال عليه :



-         زى ما احنا شايفين البرنامج عامل خطوط حمراء على اول اتنين methods لان ليهم نفس الاسم وليهم نفس ال input parameters ، ممكن حد يفكر ويقول ازاى ليهم نفس ال input parameters مع ان اول واحده ال input  بتاعها num1 and num2 وال method التانيه ال input  بتاعها num3 and num4  ، الموضوع ده مقصود اننا نخلى ال input اساميها مختلفة عشان نتعلم حاجه مهمه جدا وهى ان ال input parameters مش بالأسامى ، امال بايه؟؟ بالنوع يعنى اول method ال input  بتاعها هنقول int and int  والثانيه ال input بتاعها برده int and int  عشان كده هما ليهم نفس ال input parameters ، ناخد مثال تانى لتوضيح الفكره :


-         فى المثال السابق لو خدنا بالنا ال 2 method ليهم نفس الاسم وليهم input parameters مختلفه ، طبعا فهمنا اللعبه خلاص ، ال input parameters بتوع ال 2 methods ليهم نفس الاسم بس زى ما قلنا مش بالاسم ، امال بإيه ؟ بالنوع ، اول method ال input parameters بتاعتها int and int والتانيه ال input parameters بتاعتها double and double 

-         فى حالة ال overload  ما يفرقش ال access modifier لل methods زى بعض ولا لا ، الحاجات المهمه بس يكونوا نفس الاسم وليهم  input parameters مختلفة بس.

-       ملحوظه :

-         لو خدنا بالنا فى الصورة السابقه ديه built in method اللى اسمها println  اللى بنطبع بيها اى حاجه لو عملنا ctrl+space عليها هنلاقى كل ال overloading اللى احنا شايفينوا فى الصورة ، كده عرفنا فايده ال overload بدل ما اطبع كل نوع (input parameters) يعنى بأسم method مختلف وننسى الاسامى الكتير ، لا هى واحده بس لكن ممكن تاخد input parameters مختلفة .

ممكن كمان نحقق مبدأ ال polymorphism  باستخدام

-         Overriding :

اولاً : ال override لا يتحقق إلا من خلال عمليه ال inheritance فقط لكن ما ينفعش اعمله فى class مش وراثه من اى class تانيه .

ثانياً : مش احنا قولنا قبل كده ان ال child class بتوّرث كل variables and methods من ال parent class طب افرض ان ال child class هو كمان عايز ال method بتاعت ال parent بس عايز يضيف عليها شوية حاجات او عايز يغيرها خالص يعمل ايه ؟؟؟؟ بالظبط زى مثال واحد ورث من ابوه كلمه الوظيفة بس فعلياً وظيفته غير أبوه فعايز يعمل override لوظيفة ابوه ويستبدلها بوظيفته لكن مع الاحتفاظ بكلمه المهنه او الوظيفه يعنى عمليا فى البرمجه مش هيغير اسم ال method  ولا ال return type ولا ال input parameters بتاعها ، امال هغير ايه ؟؟ الكود اللى جوه ال method  بس ولو عايز يحتفظ بالكود بتاع  ال parent  ويضيف عليه ينفع برده ، تعالو يلا عملى نشوف الكلام ده :


-         فى المثال السابق احنا عملنا Shape class ديه اللى هيورث منها كل الاشكال الهندسيه بس Shape ال Area اللى فيها غير محدده لأن الشكل غير محدد فعملنا ال Area بترجع قيمه 0 كما فى الصورة .


-         وبعد كده عندى Rectangle Class وبيورث من ال Shape بس هو عنده مساحه محدده وواضحه بقانون فمش معقول يستخدم ال Area بتاعت ال Shape اللى بترجع قيمه صفر ، هنعمل ايه فى الحالة ديه ؟؟ زى ما انتوا شايفين فى الصورة عملنا override لل Area method  بمجرد ما كتبنا كلمة Area ثم عملنا ctrl+space طلعلنا Area override  فضغطنا عليها فطلعت ال method بتاعت ال override ومكتوب داخلها Super.Area() والجملة معناها زى ما قولنا لو عايزين نستخدم نفس كود ال parent ونضيف عليه نعمل ايه ؟؟ نستخدم كلمه Super  عشان لو حبينا نجيب اى حاجه من ال parent سواء variable or methods  بس فى الحالة اللى عندنا دلوقتى احنا مش محتاجين super فى حاجه وهنمسحها ونكتب الكود اللى احنا عايزينه ، بس ناخد بالنا نغيّر فى الكود بس ونسيب اسم ال method and return type and access modifier فى حالهم زى ما هما يعنى عشان يبقى override .


-         فى الصورة السابقه توضيح لاستخدام ال override method هستخدمها بصورة طبيعيه جدا زى أى method اللى عايزه اوضحه بس من الصوره ديه هتلاقى Area method واحده بس مش زى ال overload بس ال Area اللى موجوده هى ديه اللى معمول ليها override يعنى بتاعت ال Rectangle لاننا بنستخدم Rectangle مش بتاعت ال Shape .

وبكده نكون خلصنا الجزء الخاص بدرس النهارده وان شاء الله الدرس القادم هنكمل فى نفس الموضوع.

   يارب اكون قدرت اوضح وأوّصل درس النهارده لأنه مهم جدا جدا وياريت نطبق كل حاجه فيه وكمان نفكر فى امثلة ونحاول فيها لأن الموضوع مهم وبنستخدمه كتير

السلام عليكم ورحمة الله وبركاته

No comments:

Post a Comment