Lesson 9

بسم الله الرحمن الرحيم
والصلاة والسلام على سيدنا محمد صل الله عليه وسلم


النهارده إن شاء الله هنتكلم عن ال non access modifier .

-         Non Access Modifier : وهو عبارة عن :


·       Abstract.
·       Final.
·       Static.
 
1-   Abstract: وده عبارة عن keyword ممكن نكتبها قبل ال class or method فقط يعنى ما ينفعش نكتب الكلمة ديه قبل ال variable.
n    Abstract class :
-         اول لما نعمل ال Class بتاعتنا abstract على طول نعرف اننا كده مش هنعرف ناخد منها object .
-         ال Abstract class تحتوى على methods عاديه زى ما احنا متعودين وتحتوى أيضاً على Abstract methods .


-         مثال :




-         رقم 1 ديه ال method اللى احنا متعودين على شكلها .


-         رقم 2 ديه ال abstract method وديه هنتكلم عن صفاتها بالتفصيل فى الفقره القادمة .
-         مثال آخر :
-         فى المثال السابق نلاحظ أن البرنامج عامل خطأ لما حاولنا ناخد object من ال abstract class وطلع ال error اللى داخل المربع الأحمر وال error  معناه ماينفعش نعمل instantiate (يعنى ناخد object) للنوع test اللى هو اسم ال abstract class .
n    Abstract Method :
-         لازم عشان نعمل Abstract method  اولاً لازم نكون بنكتبها داخل Abstract class يعنى ما ينفعش نعمل Abstract method  داخل class عاديه على طول هيظهر error ويقولنا كده :

-         فى المثال السابق طلع فى ال error message ان ال Abstract method لازم تكون موجوده داخل Abstract class وبعد كده ظهر لنا خيارين عشان نحل المشكلة ديه ياإما remove abstract modifier يعنى ال method تبقى عاديه ونشيل ال Abstract منها ، يا إما test class نخليها abstract class يعنى نضع قبلها كلمه abstract .
-         ال Abstract method  لاتحتوى على اى كود عبارة عن signature فقط زى ما احنا شايفين فى الصورة كده ، أمال هنعمل ايه بيها طالما مش بتنفذ اى كود ؟؟ سؤال مهم طبعا ، احنا لما نيجى نستخدم ال Abstract class هنستخدمها عن طريق ال inheritance وفى هذه الحالة البرنامج هيجبرنا اننا نكتب الكود لل abstract method  كما فى المثال التالى :

-         ناخد بالنا اننا استخدمنا test class اللى هى Abstract class عن طريق ال inheritance واول لما عملنا كده ظهر error وسبب ظهوره ان ال test تحتوى على abstract method وزى ما احنا قولنا ان ال Abstract method لا تحتوى على اى كود يبقى لازم عشان المشكلة تتحل نضغط على add unimplemented methods هنلاقى ان ال abstract method ظهرت عندنا فى ال class  اللى هى Mytest وداخلها نقدر نكتب اى كود احنا عايزينه كما فى الصورة التاليه :


-         ده الشكل اللى هيظهر عندنا فى Mytest class ونقدر نكتب الكود اللى احنا عايزين ننفذه فى ال method .
2-   Final :
n    أولاً : ال keyword ديه لما بنكتبها قبل ال Class بيكون معناها ان ال Class ديه مش هنقدر نوّرثها لأى Class تانيه لكن نقدر ناخد object منها
مثال :
-         لو عندنا Shape class وعملناها final كما فى الصورة :









-         ثم خلينا Rectangle Class تورث من ال Shape ، نشوف ايه اللى هيحصل :
 
-         هنلاقى البرنامج طلّع error لما عملنا extend Shape ليه ؟ لأن Shape عبارة عن final class وزى ما وضّحنا قبل كده ان اى Class ما ينفعش تورث من final class وهو ده اللى هنلاقيه مكتوب فى message error .
n    ثانياً : ال keyword ديه لما بنكتبها قبل ال attribute  ، يصبح ال attribute ده عبارة عن ثابت (constant) زى pi=3.14 يعنى ما نقدرش نغير قيمة هذا ال attribute  طول ما احنا شغالين فى البرنامج .
n    ثالثاً : لما نكتبها قبل ال method يبقى معناه اننا ما نقدرش نعمل override لل method ديه
مثال :
-         فى الصورة السابقه مسحنا كلمه final من قبل ال class ، كده اصبحت ال class ممكن اى class تانيه تورث منها عادى ، بس وضعنا كلمه final قبل ال Area method يبقى اصبحت هذه ال method ما ينفعش نعمل ليها override  كما فى  الصورة التالية :
-         هنلاقى المرة ديه ال error ظهر واحنا بنعمل override ل Area method وهنلاقى مكتوب فى ال message error الجملة ديه "cannot override the  final method from shape "  يعنى ما ينفعش نعمل override ل final method
-          Final ملخص فائدة ال لو عندنا method مش عايزين اى class تانيه تعمل override  لل method ديه ، او لو عندنا class ومش عايزين اى class تانيه تورث منها حاجه ، او لو عندنا attribute ومش عايزينه يتغير طول البرنامج نعمله final.
3-   Static  :
n    اولاً : لو كتبناها قبل ال attribute ده معناه ان ال attribute ده خاص بال class وليس لل object يعنى ايه الكلام ده ؟
-         معناه اننا لو بنعرف attribute عادى مش static  يعنى فى هذه الحالة ؟ كل ما ناخد object من هذه ال class هيفتح مكان جديد لل attribute ده فى ال memory  مع كل object جديد عشان كده هيكون خاص بال object  ، لكن لما نعمله static attribute هيتفتح مكان واحد بس لل attribute ده فى ال memory  واى object  هناخده من ال Class ديه هيشوف نفس المكان بتاع ال attribute  ده ،وده معناه اننا لو غيرنا فى قيمة هذا ال static attribute التغيير ده هيشوفه كل ال objects عشان كده اصبح ال Attribute خاص بال class لانه بيتفتحلة مكان واحد بس فى ال memory وليس خاص بال object  يعنى مش بيتفتح مكان جديد لل Attribute  ده مع كل object .
-         ازاى نتعامل مع ال static attribute :
مثال : لو عندنا static attribute واسمة num كما فى الصورة :
-         ازاى نتعامل معاه ؟؟ كما فى الصورة التالية :
        
-         عشان نتعامل مع ال static attribute مش بنحتاج ناخد object  من ال Class وبعد كده نكتب objectname.attribute  لا نتعامل بهذه الطريقه مع ال static   attribute لاننا عرفنا خلاص انه خاص بال class مش بالobject  ، فعشان نتعامل معاه بنكتب Class name.attribute name كما فى الصورة السابقة .
n    ثانياً : لو كتبناها قبل ال method يبقى لازم ناخد بالنا من النقاط التالية :
1-   لما نستخدم ال static method برده هنستخدمها زى ال static attribute ازاى يعنى ؟؟
نكتب Class name.method name .
2-   داخل ال Static method ال Attributes  اللى هستخدمها لازم تبقى حاجه من اتنين يا إما static attribute يا اما variables عاديه بس لازم تكون مُعرفة داخل ال method ، يعنى ما ينفعش  variable عادى يكون متعرف على مستوى ال class واستخدمه داخل ال static method ، لو متعرف على مستوى ال class يبقى لازم يكون static attribute عشان نستخدمه داخل ال static method ، او زى ما قولنا يكون variable عادى بس متعرف داخل ال static method
3-   داخل الstatic method  ما نقدرش نستخدم method عاديه إلا لما ناخد الاول object من ال class اللى تحتوى على ال method ديه وكل ده داخل ال static method ، او ممكن نستخدم static method داخل ال static method بتاعتنا .
مثال :


-         لو خدنا بالنا عشان نستخدم ال sum method داخل ال sub  خدناه object من ال Class نفسها ليه ؟عشان ال sub عبارة عن static method واحنا مش هنقدر نستخدم method عاديه داخل ال static method إلا لما ناخد الاول object من ال class حتى لو كانوا الاتنين methods فى نفس ال class
-         مثال أخر :


-         ده نفس المثال السابق بس غيرنا فيه حاجه بسيطه بس الحاجه ديه عملت فرق؟؟ ايه هى الحاجه ديه ؟؟ خلينا ال sum method بقيت  static ، فلما بقيت static بقينا قادرين اننا نستخدمها عادى داخل ال sub method من غير ما ناخد object  من ال class .
بكده نكون خلصنا ال non access modifier  ، ندخل بقه على آخر جزء هناخده فى ال java هو ال interface .
·       ما هو ال interface ؟؟
1-   مبدئياً هو مش class لكنه يحتوى على methods وهذه ال methods لا تحتوى على كود يعنى لما نستخدم اى ال interface لازم نعمل override لل methods  اللى فيه لانها كلها لا تحتوى على كود عبارة عن methods signature فقط  .
2-   لا تحتوى على attributes إلا لو كان نوعه static final attribute ، بس غالباً مش بنستخدم فيها attributes
3-   ال interface عبارة عن contract
4-   مثال : عشان نفهم ايه هو ال interface ده :
-         ديه طريقه تعريف ال interface نعمل right click على ال project ونختار new interface


-         وده هيكون شكل ال interface وديه طريقة كتابة ال methods فيه signatures بس .
-         ازاى نقدر نستخدم ال interface ده :
 

 


 -         اولاً هنروح على اى class عايزين نستخدم فيها ال interface بتاعنا  ونكتب جنب ال class من فوق implements وديه معناها اننا هنستخدم interface ثم بعد كده نكتب ال interface name ، اول ما نعمل كده هنلاقى علامه حمراء تحت ال class وهيظهر ال error message ديه والمقصود منها اننا نضعط على ال unimplemented methods عشان نعمل override لل methods اللى موجوده فى ال interface كما فى الشكل التالى :
 
-         ثم نكتب داخل كل method الكود اللى احنا عايزينه.
-         من مميزات ال interface ان احنا ممكن نعمل implements لأكثر من interface يعنى مش زى ال inheritance بنعمل extends  ل class واحدة ،يعنى ما نقدرش نورث من اكتر من class ، وبنعمل implements لأكتر من interface كالتالى :
public class test implements interface1,interface2{
}
-         المقصود من شرح ال interface هو فهم ال concept نفسه لكن اثناء التطيبق الفعلى احنا مش هنعمل interface في الاندرويد ، احنا هنستخدمه فقط فلازم نفهم قصة ال interface من أولها ازاى نعمله وازاى نستخدمه .
-         وبكده بكون خلصنا درس النهارده وخلصنا كمان الجزء الخاص بالجافا يارب تكونوا استفدوا وذاكروا كويس واستعدوا عشان ان شاء الله الدرس القادم هيكون بداية الأندرويد
السلام عليكم ورحمة الله وبركاته





































No comments:

Post a Comment