Abstraction&interfaces

Page 1

‫ما هو التجريد ‪ abstraction‬؟‬ ‫التجريد هو عملية إخفاء تفاصيل التنفيذ وإظهار الوظيفة فقط‪.‬‬ ‫كيف يتم التجريد في جافا ؟‬ ‫التجريد في جافا يتحقق باستخدام ‪ interface‬و ‪abstract class . interface‬‬ ‫تعطي ‪ ٪100‬التجريد والطبقة المجردة تعطي ‪ ٪100-0‬التجريد‪.‬‬ ‫ما هي‬

‫‪ abstract class‬في جافا؟‬

‫‪ class‬التي يتم تعريفه بأنه ‪ abstract‬يعرف بالـ ‪ .abstract class‬وطريقة‬ ‫كتابته )‪ ( Syntax‬تتم بالطريقة التالية‪. {}<abstract class <class-name :‬‬ ‫ال ‪ abstract class‬هو شيء غير كامل ول يمكن عمل ‪ instance‬منه ‪ .‬واذا كنت‬ ‫تريد استخدامه يجب ان تجعله كامل او ‪ concrete‬بواسطة امتداده )‬ ‫‪ ( extending‬بمعني توريثه لــ ‪ class‬اخر يزودنا بتطبيق) ‪implementations‬‬ ‫( الـ ‪ abstract methods‬الموجدة فيه‪.‬‬ ‫وال ‪ class‬يسمي ‪ concrete‬اذا كان ليحتوي علي أي ‪، Abstract methods‬‬ ‫ويطبق كل الــ ‪ Abstract methods‬الموروثة من الــ ‪. abstract class‬‬ ‫ماهي ‪ abstract methods‬في جافا؟‬ ‫هي ال ‪ methods‬المعرفة كــ ‪ abstract‬و ل يوجد لها تطبيق) ليس لها ‪. ( body‬‬ ‫واذا قمنا بتعريف ‪ abstract methods‬فالـ ‪ class‬يلزم ان يكون ‪ . abstract‬و‬ ‫تعلن عنها ‪( (Syntax‬بالطريقة التالية‪abstract return_type .:‬‬ ‫‪;() method_name‬‬ ‫فاذا ارنا استخدام ‪ abstract methods‬يجب عمل ‪ override‬هذه الـ ‪method‬‬ ‫في الــ ‪. subclass‬‬


abstract methods ‫ من غير‬:‫مثال‬ public class Main{ public static void main(String args[]){ //INSTIATING AN ABSTRACT CLASS GIVES COMPILE TIME ERROR //Person p = new Person() ;

abstract class Person {

class Employee extends Person {

//THIS REFERENCE VARIABLE CAN ACESS ONLY THOSE METHOD WHICH ARE OVERRIDDEN Person person = new Employee(); person.setName("Jatin Kansagara");

public void setName(String name) { this.name = name; }

private String name;

private String empCode;

public String getName() { return name; }

public String getEmpCode() { return empCode; } public void setEmpCode(String empCode) { this.empCode = empCode; }

}

System.out.println(person.getName()) ; } }

abstract methods ‫مثال بالــ‬ class Honda extends TwoWheeler{ public void run(){ System.out.println("Running.."); } }

abstract class TwoWheeler { public abstract void run(); }

public class Main{ public static void main(String args[]){ TwoWheeler test = new Honda(); test.run(); } }


‫متي نستخدم الــ ‪ abstraction‬؟‬ ‫عندما تحتاج لوجود سلوك في ال ‪ class‬ولكن لست متأكدا بالضبط كيف ينبغي أن‬ ‫يبدو او انه سيطبق بطرق مختلفة‪.‬‬ ‫ملخص‪:‬‬ ‫ في جافا ل يمكنك إنشاء نسخة من ‪ ، abstract class‬وال سيكون خطأ ترجمة‬‫‪. compilation error‬‬ ‫ يصبح الــــ ‪ class‬تلقائيا ‪ abstract class‬عندما يعلن عن اي من الــ ‪ methods‬فيه على‬‫أنها ‪.abstract‬‬ ‫ ل يمكن جعل المتغير ‪ ، abstract‬السلوك) ‪( method‬هو الوحيد الذي يكون ‪.abstract‬‬‫ إذا كان ‪ class‬يتوسع ) ‪ ( extends‬الي ‪ abstract class‬او ‪ ، interface‬فيجب أن يوفر‬‫تنفيذ) تطبيق( لكافة الــ ‪ abstract methods‬ليكون ‪.concrete class‬‬


‫ ؟‬interface ‫ماهو‬ . ( abstract methods) ‫ وأساليب مجردة‬، ‫ له ثوابت‬. class ‫ ( هو مخطط للــ‬interface ) ‫الــواجهة‬ .‫ لذلك يطلق عليه التجريد الكامل‬، abstraction ٪100 ‫ يعطي‬interface ‫الــ‬ ‫ و‬، return types ‫ و النوع الذي تعود به‬methods ‫ ييرعرف ويبين أسماء الــ‬interface ‫الــ‬ ‫ التي تقوم‬class ‫ بل يتم التنفيذ بالـــ‬method ‫ ل يوجد أي جسم يكون قابل للتنفيذ لي‬. argument .interface ‫بتنفيذ‬ ‫ ؟‬interface ‫لماذا استخدام‬ .‫ يستخدم لتحقيق التجريد الكامل‬. multiple inherent ‫ نحقق التوريث المتعددة‬interface ‫ باستخدام‬-

: interface ‫ الــ‬Syntax ‫طريقة كتابة‬ interface ‫ تستخدم للعلن عن‬interface ‫الكلمة الرئيسية‬ Public interface interface-name } any number of final , static fields // // any number of abstract methods declarations { :‫مثال‬ class circle implements shape { public void Draw() { System.out.println("Drawing Circle here"); }

interface shape { public String baseclass="shape"; public void Draw();

public class Main { public static void main(String[] args) { shape circleshape=new circle();

} }

circleshape.Draw();


}

. class ‫ في الــ‬interface ‫ لتنفيذ ال‬implements ‫ نستخدم كلمة‬:‫ملحظة‬

‫ ؟‬interface ‫كيفية تنفيذ تعدد الوراثة باستخدام‬ ‫ ولكن يمكننا تحقيق هذه‬، class ‫كما رأينا في البرامج السابقة ل يمكننا عمل وراثة متعددة باستخدام‬ ‫ المعلنة‬methods ‫ تطبيق جميع الــ‬class ‫ وفي هذه الحالة يجب على الــ‬. interface ‫الوظيفة باستخدام‬ ‫( واجهات متعددة من خلل الفصل‬implement ) ‫ و يمكننا تنفيذ‬. ‫ المنفذة‬interfaces ‫عنها في كل الــ‬ . implements ‫ بعد الكلمة الرئيسية‬comma ‫بالــفاصلة العادية‬ main class maindemo { public static void main(String args[]) { System.out.println("Vehicle"); Vechicle v1=new Vehicle(); v1.distance(); v1.speed(); } }

Interfaces interface car { int speed=90; public void distance(); } interface bus { int distance=100; public void speed(); }

Vehicle class vehicle implements car,bus { public void distance() { int distance=speed*100; System.out.println("distance travelled is"+distance); } public void speed() { int speed=distance/100; } }

. bus ‫ و الواجهة‬car ‫ الواجهة‬، interfaces ‫( اثنان من‬implement )‫ ينفذ‬Vehicle class ‫ملخص‬ ( & abstract public ) ‫ يجب أن تكون عامة ومجردة‬interface ‫ الـ‬methods .final ‫ ونهائية‬public ‫ عامة‬interface ‫ يجب أن تكون متغيرات الــ‬. (interface ) ‫ لتعريف او العلن عن الواجهة‬interface ‫ استخدم الكلمات الرئيسية‬. implements ‫ يجب أن تستخدم الكلمات الرئيسية‬interface ‫ التي تنفذ‬class .interface ‫ من‬object ‫ ل يمكن إنشاء أي‬. constructors ‫ ل تملك بواني‬interfaces -


‫‪: Exception Handling‬‬ ‫معالجة الستثناء هي واحدة من الليات آلقوية في جافا‪ .‬أنها توفر آلية للتعامل مع أخطاء وقت التشغيل‬ ‫‪ runtime errors‬للحفاظ على التدفق الطبيعي للبرنامج‪.‬‬ ‫ما هو الستثناء ‪ Exception‬؟‬ ‫في جافا‪ ،‬الستثناء هو حدث ‪ ، event‬يحدث أثناء تنفيذ البرنامج ليعطل التدفق الطبيعي لتعليمات البرنامج‪.‬‬ ‫فالستثناء هو كائن يظهر ) ‪ ( throws‬وقت التشغيل‪.‬‬

‫مزايا استثناء ‪:‬‬ ‫‪-‬‬

‫الميزة الرئيسية لمعالجة الستثناء هي الحفاظ على التدفق الطبيعي للبرنامج‪.‬‬

‫بعض السباب التي تسبب حدوث إستثناء‪:‬‬ ‫‪‬‬

‫في حال إدخال رقم ‪ index‬غير موجود في مصفوفة أو في متغير نوعه ‪.String‬‬

‫‪‬‬

‫في حال إدخال قيمة ل تتطابق مع نوع المتغير الذي ستخزن فيه‪.‬‬

‫‪‬‬

‫في حال كان البرنامج يتصل بالشبكة و فجأةة إنقطع التصال‪.‬‬

‫‪‬‬

‫في حال كان البرنامج يحاول قراءة معلومات من ملف نصي‪ ,‬و كان هذا الملف غير موجود‪.‬‬

‫فئات الستثناءات ‪:‬‬ ‫الستثناءات قد تحدث بسبب المستخدم )‪ ,(User‬أو المبرمج )‪ ,(Programmer‬أو بسبب الجهزة‬ ‫المستخدمة )‪ .(Physical Resources‬بناةء على هذا‪ ,‬تم تقسيم الستثناءات إلى ثلث فئات أساسية‪:‬‬ ‫‪ :Checked Exception ‬تعني خطأ برمجي يحدث أثناء ترجمة البرنامج )أي قبل تشغيل الكود(‪.‬‬ ‫‪ Checked Exception‬تعني إستثناء يحدث أثناء ترجمة الكود‪ ,‬و هنا يكون الخطأ من المبرمج لن الكود‬ ‫الذي كتبه يوجد فيه مشكلة ظاهرة من الساس‪.‬‬ ‫;‪package exceptions‬‬ ‫{ ‪public class Test‬‬

‫‪1.‬‬ ‫‪2.‬‬ ‫‪3.‬‬


‫‪4.‬‬ ‫‪5.‬‬ ‫‪6.‬‬ ‫‪7.‬‬ ‫‪8.‬‬ ‫‪9.‬‬ ‫‪10.‬‬ ‫‪11.‬‬

‫{ )‪public static void main(String[] args‬‬ ‫;‪int a‬‬ ‫;"‪a = "this is incompatible type, 'a' should be String‬‬ ‫}‬

‫قمنا بتعريف متغير نوعه ‪ ,int‬ثم قمنا بإعطائه نص كقيمة‪ ,‬سنلحظ أنه سيظهر لنا خطأ قبل تشغيل‬ ‫البرنامج‪ ,‬و في حال حاولنا تشغيله‪ ,‬سيظهر الخطأ عندما يحاول ترجمة الكود‪.‬‬ ‫•سيظهر الخطأ التالي إذا قمنا بتشغيل البرنامج‪.‬‬ ‫ ‪Exception in thread "main" java.lang.RuntimeException: Uncompilable source code‬‬‫‪incompatible types: java.lang.String cannot be converted to int‬‬

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

‫‪ :Unchecked Exception‬تعني خطأ منطقي يحدث أثناء تشغيل البرنامج‪.‬‬ ‫‪‬‬ ‫)‪ (Unchecked Exception‬تعني إستثناء يحدث أثناء تشغيل البرنامج و يسمى أيضا ة )‪ ,(Runtime Exception‬و هو‬ ‫يتضمن الـ )‪ (Programming Bugs‬و التي تعني أخطاء منطقية )‪ (Logical Errors‬أو أخطاء سببها عدم إستخدام الشياء‬ ‫المعرفة في لغة البرمجة بالشكل الصحيح )‪.(APIs errors‬‬

‫مثال‪:‬‬ ‫;‪package exceptions‬‬ ‫{ ‪public class Test‬‬ ‫{ )‪public static void main(String[] args‬‬ ‫;} ‪int[] a = { 1, 2, 3, 4, 5‬‬ ‫;) ]‪System.out.println( a[10‬‬ ‫}‬ ‫}‬

‫قمنا بتعريف مصفوفة نوعها ‪ int‬تتألف من ‪ 5‬عناصر‪ ,‬ثم قمنا بطباعة قيمة عنصر غير موجود‬ ‫فيها ) مثل العنصر قم ‪ .( 10‬سنلحظ أنه سيظهر الخطأ أثناء تشغيل البرنامح و ليس أثناء ترجمة الكود‪,‬‬

‫‪1.‬‬ ‫‪2.‬‬ ‫‪3.‬‬ ‫‪4.‬‬ ‫‪5.‬‬ ‫‪6.‬‬ ‫‪7.‬‬ ‫‪8.‬‬ ‫‪9.‬‬ ‫‪10.‬‬ ‫‪11.‬‬ ‫‪12.‬‬


‫و السبب أنه سيكتشف عدم وجود عنصر يحمل الـ ‪ index‬رقم ‪ 10‬بعد أن يتم إنشاء هذه المصفوفة في‬ ‫الذاكرة ) أي بعد ترجمة الكود و تنفيذه (‪.‬‬ ‫•سيظهر الخطأ التالي إذا قمنا بتشغيل البرنامج‪.‬‬ ‫‪Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10‬‬

‫•هذا الخطأ يعني أن العنصر ليس موجود في المصفوفة‪ .‬ثم أخبرنا بسبب المشكلة و هي أنه لم يجد‬ ‫عنصر يحمل الـ ‪ index‬رقم ‪.10‬‬ ‫‪ :Error ‬تعني خطأ يحدث بسبب الجهاز الذي نحاول تشغيل البرنامج عليه‪.‬‬ ‫‪ Error‬تعني خطأ يحدث بسبب الجهاز الذي نحاول تشغيل البرنامج عليه‪ ,‬ل علقة أبداة للبرنامج بهذا الخطأ‪.‬‬ ‫فمثلة إذا إمتلت ذاكرة الجهاز الذي يعمل عليه البرنامج سيحدث خطأ‪ ,‬و هو أن نظام التشغيل ل يقدر أن‬ ‫يشغل هذا البرنامج لن ذاكرة الجهاز ممتلئة‪ .‬و عندها سيظهر الرسالة التالية لتوضيح الخطأ‬ ‫‪ ، JVM is out of Memory‬لذلك تجد بعض البرامج تحفظ الشياء التي يفعلها المستخدم كل مدة معينة‪,‬‬ ‫و هكذا لن يقلق المستخدم إذا توقف البرنامج الذي يعمل عليه فجأةة‪ ,‬لن هذا البرنامج في نظره قوي فهو يحفظ‬ ‫له بياناته كل مدة و يتيح له استردادها إذا حدث خطأ ما متى شاء‪.‬‬

‫بناء الستثناءات‬

‫تم تقسيم الستثناءات في جافا إلى عدة أنواع و كل نوع تم تمثيله في كلس منعزل‪.‬‬ ‫جميع هذه الكلسات ترث من كلس أساسي إسمه ‪.Exception‬‬ ‫الكلس ‪ Exception‬بدوره يرث من كلس إسمه ‪.Throwable‬‬ ‫إذةا‪ ,‬أي كلس يرث من الكلس ‪ Exception‬هو كلس يمثل إستثناء معين‪ .‬الخطاء التي ســببها الجهــزة و‬ ‫الــــتي تســــمى ‪ ,Errors‬ت م إنش اء كلس خ اص له م إس مه ‪ Error‬و هــــو يــــرث مباشــــرةة مــــن‬ ‫الكلس ‪.Throwable‬‬ ‫بناء الجملة‪syntax:‬‬ ‫{‪try‬‬ ‫‪statement….‬‬ ‫{)(‪}catch‬‬ ‫{‪}finally‬‬ ‫}‬

‫‪: Try-catch‬‬ ‫نحن نستخدم كتلة ‪ try-catch‬للتعامل مع استثناء في البرنامج ‪ try .‬هو بداية الكتلة ‪ ،‬و ‪ catch‬هو نهاية‬ ‫الكتلة في التعامل مع الستثناء ‪ .‬يمكن أن يكون لدينا العديد من ‪ catch‬مع ‪ . try‬كتلة ‪ try-catch‬تحتاج‬ ‫بارامتر من نوع ‪. exception‬‬


‫‪: Finally‬‬ ‫كتلة ‪ finally‬اختيارية ويمكن أن نستخدم فقط ‪ . try-catch‬كتلة ‪ finally‬دائما يتم تنفيذها سواء حدث‬ ‫استثناء أو ل‪.‬‬ ‫‪‬‬ ‫‪‬‬

‫الكود الذي نضعه بداخل الجملة ‪ try‬يسمى ‪ Protected Code‬و هذا يعني أن البرنامج محمي من‬ ‫أي خطأ قد يحدث بسبب هذا الكود‪.‬‬ ‫الكود الذي نضعه بداخل الجملة ‪ catch‬يسمى ‪ Error Handling Code‬و يقصد منها الكود‬ ‫الذي سيعالج الستثناء الذي قد يتم إلتقاطه‪.‬‬

‫عندما تضع الكود بداخل حدود الجملة ‪ try‬فأنت بذلك تقوم بتجربة هذا الكود‪ ,‬و ذلك يعني أن جميع الوامر‬ ‫الموضوعة فيها ستنفذ بشكل عادي جدةا‪ ,‬و في حال حدثت أي مشكلة في الكود‪ ,‬ستقوم الجملة ‪ try‬بتمرير‬ ‫الستثناء الذي يمثل هذه المشكلة كـ ‪ argument‬إلى الدالة ‪ catch‬ليتم معالجته بدل أن تظهر أمام‬ ‫المستخدم‪ .‬الستثناء الذي تقوم الجملة ‪ try‬برميه عبارة عن كائن من إحدى الكلسات التي ترث من‬ ‫الكلس ‪.Exception‬‬ ‫مثال‪:‬‬ ‫{ ‪public class SiteMapGenerator‬‬ ‫{ )‪public static void main(String[] args‬‬ ‫;‪String str = null‬‬ ‫{‪try‬‬ ‫‪if(str.equals("Testing")){ /* check condition for null to avoid runtime‬‬ ‫‪exception */‬‬ ‫;)"‪System.out.println("Return true‬‬ ‫}‬ ‫{)‪}catch(NullPointerException ex‬‬ ‫;)"‪System.out.println("Null pointer exception‬‬ ‫{‪}finally‬‬ ‫;‪str = null‬‬ ‫}‬ ‫}‬ ‫}‬



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.