ما هي عيوب الـ inheritance ؟

Inheritance


الـ inheritance بتطبق مفهوم مهم جدا وهو
الـ Generalisation ( التعميم )

بمعني؟

انت لما كان عندك جزء معين من الكود بيتنفذ في كذا مكان فأنت كنت ممكن تعمل ميثود تحط فيه الكود ده وتسدعيها ف المكان الي انت عاوزه وده طبعا بيقلل من تكرار الكود كأنك عملت حل General وده فايدة الـ Functions اللي كلنا اتعمناها واحنا بنتعلم أي لغة برمجة .

وكمان طبقنا مفهوم الـ Generalisation ده ف الـ OOP
عن طريق الـ inheritance
يعني مثلا لو كان عندنا كلب وقط
Dog 🐕 , Cat 🐈

الـ Dog شوية حجات زي الـ name و الـ walking
الـ Cat باردو عندها الـ name و الـ walking

قولنا خلاص بما اننا عندنا صفات مشتركه

طب ليه منعملش General class يكون فيه الصفات والفانكشنز دي ؟
ونسميه Animal مثلا
‏ونعمل اتنين sub class اللي هما Cat و Dog
‏ بيورثوا من الـ Animal ده ويورثوا كل الصفات والفانكشنز

‏ومن هنا مفهوم الـ inheritance ساعدني كتير في عدم تكرار الكود وبيدينا ميزة الـ Reusablility واللي بتتميز بيها الـ inheritance

لحد هنا تمام هتقولي باردو مقولتليش فين عيوب ال inheritance ؟

هقولك استني عليا بس
تعالي نعمل كلاس جديد كمان أسمو wheal يعني حوت
أكيد طبعا عارف الحوت بتاع البحر 🌝

وكمان بما ان الحوت ده حيوان هنخليه يورث من كلاس
الـ Animal وبالتالي هيورث الفانكشن اللي عنده اللي هما
الـ Name و الـ walking ( المشي )

‏اي ده هو الحوت بيمشي ؟ 🌝

‏لا طبعا الحوت بيعوم علشان كده مش هنستخدم الفانكشن بتاعت الـ walking اللي ورثناها دي وهنعمل ميثود ف كلاس الحوت ونسميها swimming

هل اللي عملناه ده صح ؟

طبعا لا لأنك عملت inheritance ومستخدمتش ميثودات الأب اللي هو الـ Animal وبالتالي بقا عندك ميثود مستخدمهاش وده اللي هيودينا لعيوب الـ inheritance وهي أنك تستخدمها غلط

في المثال بتاع الحوت الابن مش بيتصرف نفس صفات الاب
رغم كده انت عملت وراثة ومن هنا طلع الغلط

لو عندك كلاس وانت هتورث منو لكن مش هتسخدم الفانكشن اللي انت وريثتها يبقي هنا تعرف إنك قررت قرار غلط باستخدامك للـ inheritance

كمان لازم تسألك نفسك سؤال تاني هل أنت هتضيف فانكشن جديدة ف الكلاس الابن غير الفانكشن اللي وريثتها ولا لا ؟

لو إجابتك لا فأنت ليه أصلا تستخدم الـ inheritance
لان كده الـ sub class ملهاش اي لازمه لان الكلاس السوبر كان كافي أصلا بما إنك مش هتضيف حاجه جديدة !

تخيل معايا لو بتعمل برنامج لمطعم بيتزا وفيه 5 أنواع بيتزا مختلفين كل بيتزا ليها التركيبه وليها السعر بتاعها

فأنت قررت تعمل كلاس أسمو Pizza وهتعمل 5 كلاسات بأسماء الـ 5 انواع بيتزا اللي معاك و يورثوا من كلاس ال pizza اللي موجود بدون ما تضيف اي فانكشن جديدة فيهم
فكرت أنت لثانيتين كده هل ليهم لازمه ؟
قطعا لا

فأنت بدل ما كنت بتستخدم الـ inheritance علشان متكررش أكواد بقيت بتستخدمها علشان تكرار أكواد ملهاش لازمه

استخدام الـ inheritance من الحجات الخطيرة جدا ولازم تاخد بالك منها هل هتفيدك ولا هتضرك

باختصار عيوب الـ inheritance هي استخدامك
للـ inheritance بشكل خاطئ

كلما بنعرف نكتب اكواد لكن الكود الي انت كاتبه ده هل ينفع تعدل عليه ؟ هل سهل اساسا تعدل عليه ؟
كل دي أسئلة لازم تسئلها لنفسك قبل ما تبدا تكتب سطر كود واحد .

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

أربعة × خمسة =