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();
} }
‫واجبــات‬
‫األشككككال الهندسيكككـة ذات الزوايكككا و األضكككالع لهكككا أنكككواع مختلفكككـة مثكككل المربكككع و‬
‫المسككتطيل و المثلككث‪ ,‬مسككتخدما مفهككوم الوراثككـة فككي لغككة جافككا لمحاكككاة ثالثككـة مككن‬
‫األشكال الهندسيــة‪.‬‬
‫قككم بحككل التمككارين الذاتيككـة مككن البككاب العاشككر مككن كتككاب المفيككد فككي الخوارزميككات و‬
‫مبادئ البرمجة‬