Oop with java lectures 6 inher

Page 1

‫✓ ما هو مفهوم الوراثة ؟‬ ‫✓ مفاهيم متعلقة بالوراثة‬ ‫▪ ‪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(); } }


‫واجبــات‬ ‫األشككككال الهندسيكككـة ذات الزوايكككا و األضكككالع لهكككا أنكككواع مختلفكككـة مثكككل المربكككع و‬ ‫المسككتطيل و المثلككث‪ ,‬مسككتخدما مفهككوم الوراثككـة فككي لغككة جافككا لمحاكككاة ثالثككـة مككن‬ ‫األشكال الهندسيــة‪.‬‬


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.