Transcript PPT
األسبـوع الثامن و التاسع
الـوراثــة
َ َ َُ َ َ
ُ
َ
َ
َ
َ
عنْ أ ِبي أمام ْة ر ِض ْي هللا عنه ،عنْ
َّ
الل ْه َ
َر ُ
ص َّلى ال َّل ُْه َع َلي ْه َْو َس َّلمَ،
ل
ْ
و
س
ِ
ِ
ِ
َ
َّ
َ
ال ل َير َْف ْعُ
َ
َ
َ
ب ِْ
ال ِ ( :إ ْن ص ِاح ْ
ق ْ
الشم ِ ْ ِ
ََ
َّ
َ
َ
َ
َ
َ
ال
ق
ل
ن العب ِْد
اعاتْ ع ِ ْ
س
ْ
ت
س
ْ
م
ِ
َ
َ ُ
ُ
ُ
اْلس ِل ِ ْم اْلخ ِط ِ ْئ ْأ ِْو اْل ِس ِيءَْ ،ف ِإنْ
َ َ َ َ َ َ َّ َ َ َ
َ
الل ْه ِمنها أل ْقاها،
ن ِد ْم واستغف ْر ْ
َ ُ
َ
َ
َ
وِإ ْل ك ِتبتْ و ِاحدةْ)
حسنـه األلباني
َ َ ُ َ
ويقول تعالى{ :وسا ِْرعوا ِإلىْ
َمغف َرة من َّرْب ُكم َو َج ْنةَّ
ِ ِ
ِ
َ
او ُ
َعر ُ
ض َها َّ
ات َواألْرضُ
الس َم َْ
ُ
ين}َ
َّ
َّ
ُ
أ ِعدت ِللم ْت ِق ْ
]سورة آل عمران...]133 :
ما هو مفهوم الوراثة ؟
مفاهيم متعلقة بالوراثة
Superclass & Subclass
Protected access modifiers
مميزات الوراثة ؟
أنواع الوراثـة ؟
طريقة الوراثـة )extends( ...
طبيعة التعامل مع الـ Constructor
مثال تطبيقي
ما هو مفهوم الوراثة ؟
مفهوم الوراثة في الحياة هو أن يستمد نوع معين صفات و سلوك من نوع آخر,
فمثـال يستمد الطفل من صفات أبيه اللون ,الطول و من سلوك أبيه مهارة الرسم
و هكذا ...و بالطبع قد يتمتع االبن بصفات جديدة لم تكن موجودة في أبيه.
و في البرمجة يحدث المفهوم ذاته فالصنف Aقد يستمد صفات الصنف Bو
صفات آخرى إضافيـة.
مفاهيم متعلقة بالوراثة
الصنف الذي يقوم بتوريث صفاته لآلخر نقوم بتسميته , superclass
Parent class, base classبينما الصنف الذي يرث صفات و سلوك من
اآلخرين نقوم بتسميته child class ,subclassأو . derived class
و دائما يكون subclassأكثر تخصصـًا و أعمق من الـ superclassفهو
يمتلك بعض صفات و سلوك الـ superclassو يزيد عليها صفات و سلوك
آخر مما يزيد التخصص.
مثال :صنف الموظفين يعتبر أكثر تعميمًا من صنف موظفي العقود أو التطوع
العالقة بين الـ SuperClassو الـ SubClass
شكل
هندسي
SuperClass
التخصص
SubClasses
+
دائرة
مثلث
مستطيــل
مفهــوم الـ Protected access modifiers
جميــع المتغيرات و الدوال التي يتم تعريفها ضمن الـ SuperClassمن
النوع Protectedيمكن للـ Subclassأن يرثها و يراها و يتعامل معها.
و بالتالي تصبح المتغيرات و الدوال ( )Class membersالتي يتم توريثها للـ
Subclassهي كل واحدة من نوع Publicو .Protected
Protected access modifiers مفهــوم الـ
Super class
private int x;
protected int y;
public String z;
public void print(){
//…. }
Super obj = new Super ();
obj.
y int
z String
void print()
Sub class
private int a;
public String b;
public void printa(){
//…. }
Sub obj = new Sub();
obj.
y int
z String
b String
void print()
void printa()
ممي ـزات استخدام مفهوم الوراثـة في البرمجـة ...
إعادة استخدام األكواد)Reusability( .
تسريع إنجاز المهام.
تقليل الوقت.
تحقيق لمبدأ تجزئة المشكلة ( )Modularization
أنواع الوراثــة ...
وراثة فردية األب ( :)Single inheritanceو فيها يرث االبن صفات و
سلوك من أب واحد فقط و هذا النوع هو النوع الذي تدعمه لغة جافا.
وراثة فيها أكثر من أب ( :)Multiple inheritanceو فيها قد يرث االبن
صفات و سلوك أكثر من أب ,و هذا النوع ال تدعمه لغة جافا بشكل مباشر بل
يمكن ان يتم بشكل غير مباشر و ذلك من خالل التوريث مرتين (اب ,ابن ,حفيد)
و في هذه الحالة يكون الحفيد قد ورث من أكثر من أب(.مع فقدان الصفات التي
كانت Protectedفي االب النها تصبح Privateفي االبن و بالتالي الحفيد ال
يراها)
كيف أجعل صنف يرث صنف ـا آخ ــرا
Super class
private int x;
protected int y;
public String z;
public void print(){
//…. }
لكي تجعل صنفـًا جديدا يرث صنفـًا موجو ًدا بالفعل
كل ما عليك أن تكتب وقت التعريف بعد اسم الصنف
و بعدها اسم الصنف الذيextends الجديد كلمة
تريد وراثته
public class sub extends super {
Sub class
private int a;
public String b;
public void printa(){
//…. }
}
طبيعة التعامل مع الـ Constructor
A class
عندما يرث صنفـًا جديدا صنفـًا آخرا فإنه
يرث كل ما هو public, protected
باستثناء الدوال Constructorإال أن
الصنف Bيقوم ضمنيـًا باستدعاء الـ
Constructorالخاص بالصنف .A
كما يمكن أن يستدعيـه بشكل صريح من
داخل الـ Constructorالخاص به بجملة
برمجيـة واحدة كالتالي:
;)(super
و هي تعني استدعاء للـ Constructor
الخاص باألب و هي خطوة تتم بشكل ضمني
و بالتالي ال داعي لكتابتها بشكل صريح
;protected int y
;public String z
{)(public A
} //….
B class
;private int a
;public String b
{)(public B
;)(Super
} //….
تدريب : 1بناء مجموعة أصناف لتمثيل الطلبة
مستخدمـا مفاهيم الوراثة ,قم ببناء أصناف عن الطالب و طالب البحث العلمي
... بناء صنف الطالب العام
class Student {
protected long id;
protected String name;
protected double gpa;
public Student(long id, String name, double gpa) {
this.id = id;
this.name = name;
this.gpa = gpa;
}
public Student() {
this(999999, "No name", 0.0);
}
public void changeGPA(double newGPA) {
gpa = newGPA;
}
... بناء صنف الطالب العام
public double getGPA() {
return gpa;
}
public void print() {
System.out.print(id+"\t"+name+ "\t"+gpa);
}
}
... بناء صنف طالب البحث العلمي
class ResearchAssistant extends Student {
private int workLoad; // in hours
ResearchAssistant(long id, String name, double gpa, int
workLoad){
this.id = id;
this.name = name;
this.gpa = gpa;
this.workLoad = workLoad;
}
ResearchAssistant() {
id = 999999;
name = "No name";
gpa = 0.0;
workLoad = 0; }
public void print() {
super.print();
System.out.print("\t" + workLoad);
} }
اختبار األصناف اْلوجودة
class TestReserchAssistant {
public static void main (String[] args) {
ResearchAssistant s1;
s1 = new ResearchAssistant();
s1.print();
ResearchAssistant s2;
s2 = new ResearchAssistant(991234, "Ali Elayyan", 3.45, 15);
s2.changeGPA(3.75);
System.out.println();
s2.print();
System.out.println();
} }
واجبــات
األشككككال الهندسيكككـة ذات الزوايكككا و األضكككالع لهكككا أنكككواع مختلفكككـة مثكككل المربكككع و
المسككتطيل و المثلككث ,مسككتخدما مفهككوم الوراثككـة فككي لغككة جافككا لمحاكككاة ثالثككـة مككن
األشكال الهندسيــة.
قككم بحككل التمككارين الذاتيككـة مككن البككاب العاشككر مككن كتككاب المفيككد فككي الخوارزميككات و
مبادئ البرمجة