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