بسم الله الرحمن الرحيم
والصلاة والسلام على سيدنا
محمد صل الله عليه وسلم
النهارده هنكمل كلامنا عن ال 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