ما هو التجريد 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 codeincompatible 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 } } }