Professional Documents
Culture Documents
Overridden
مفهوم تعدد األشكال يس مح لن ا بكتاب ة برام ج ف ي ص ورة قابل ة للتغيي ر بشك ل واس ع
النطاق؛ س واء كان التغيي ر لفئات موجودة مس بقا ً أ و تغيي ر مس تقبلي إلنتاج برام ج
جديدة.
هذه الخاصية تسهل علينا توسيع قدرات نظامنا .و تجعله أكثر مرونه.
تخص يصها أكث ر فأكث ر م ن خالل تط بيق مخص ص للس لوك و تعري ف المزي د م ن
المتغيرات.
مفهوم تعدد األشكال Polymorphism
عام جدا
شكل
هندسي
التخصص
ثنائي األبعاد ثالثي األبعاد
+
خاص جدا
الطرق و
تغيير طريقة
األصناف
تطبيق الدوال
الوراثـة
المجردة
تعدد
األشكال
أمثلة نحتاج فيها تعدد األشكال ؟
عندي صنف الحيوان ,و منشق منه الضفدع ,السمكة ,الطيور و المعروف أن
كل الحيوانات تتحرك و تغير موضعها و لكن طريقة حركتها و مقدارها يتغير من
صنف آلخر.
في هذه الحالة نستخدم تعدد األشكال لنقوم بتطبيق الصنف (حيوان) و به السلوك
(حركة) و لكن دون أن نقوم بتعريف كيفية حدوث الحركة ثم نقوم في األصناف
يوجد صنف عام اسمه (شكل هندسي) له أبعاد و مساحة و محيط ,و قمنا
باشتقاق مربع ,مستطيل ,دائرة ,اسطوانة منه و لكل واحد منهم مساحة و محيط
يتم حسابهم بطريقة مختلفة لكل منهم كما نعلم.
في هذه الحالة نستخدم تعدد األشكال لنقوم بتطبيق الصنف (شكل هندسي) و به
السلوك (حساب المساحة و المحيط) و لكن دون أن نقوم بتعريف كيفية حسابهم ثم
نقوم في األصناف المشتقة بحسابهم لكل صنف من األصناف بالطريقة المناسبة.
Overridden Methods
و فيه يتم في الصنف االبن ( )subclassتغيير طريقة تطبيق دالة من دوال
األب ,و بذلك يصبح كال من االبن و األب لديهما دالة لها نفس االسم لكن طريقة
عملها مختلفة.
Super class Overridden Methods
public int calcsal(int x){
sal = days*x; Super obj1 = new Super ();
return sal; int x = obj. ;Calcsal(20)
}
Sub class
لتطبيق مفهوم Overriddenفي الصنف األبن يجب أن يكون اسم الدالة و عدد
و نوع القيم الممررة لها مماثل لهم في األب و التغيير يكون فقط في التطبيق.
عندما نحاول عمل Overrideلدالة من الصنف األب لها حماية أكثر من
publicفهذا يُنتج لنا خطأ برمجي ( ... )Syntax errorأتعلم لماذا؟!
هناك نوع آخر من األصناف ال يُسمح باشتقاق كائنات منه بل يتم فقط اتخاذه كأب
( )Parentو هذه تسمى األصناف المجردة .Abstract class
يتم تعريف الصنف من النوع المجرد من خالل إضافة كلمة Abstractقبل الكلمة
الصنف المجرد يحتوي على دالة أو أكثر مجردة و هذه الدوال يجب أن يتم عمل
overrideلها في االبناء لكي تصبح االبناء .concrete classes
الصنف المجرد يجب أن يحتوي على األقل على دالة من النوع المجرد Abstract
.method
و الدالة المجردة هي دالة يتم فقط تعريفها في الصنف دون عمل تطبيق لها ,حيث يتم عمل
التطبيق من خالل االبناء subclassمستخدمين مفهوم . overridden
{ public abstract class Employee
//---
;)(public abstract void calcSal
}
حاالت الطرق في األصناف المشتقة
استدعاء صريح
للـconstructor
الخاص باألب بقيم ممررة
عبر الكائن المشتق من
االبن.
عالقة الوراثـة أحيانا تسمى is-aو معناها أن كل كائن من الفصيلة الفرعية (االبن)
يعتبر كائنـًا من الفصيلة األساسية (األب).
و بالتالي يمكن استخدام كائن من الفصيلة الفرعية مكان كائن من الفصيلة األساسية.
بذلك في الحاالت التي تتطلب إرسال كائن من صنف أساسي فيمكنني إرسال كائن
من أي صنف من األصناف الفرعية.
C1.transfer(c2,500);