Cs602 java programming fall2016 محاضرة 3

Page 1

‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪ ‬الفصفوفات في لغة الجافا ‪Array in Java Language‬‬ ‫الفصفوفة هي نوع من انواع البيانات تتكنون من مجموعنة من العناصننر منن نفنس الننوع‪ ،‬او‬ ‫عناصن ننر تنتمن نني لفئن ننة محن ننددة‪ .‬و تتمين ننز الفصن ننفوفات بانهن ننا مرتبن ننة امن ننا فن نني هيئن ننة صن ننفوف من ننن‬ ‫البيان ننات او اعمنندة )ذات بعنند واحنند(‪ ،‬او فنني هيئ ننة صننفوف و اعمنندة )ذات بعنندين أو اكننثر(‪.‬‬ ‫لتستخدام الفصفوفات في لغة الجافا‪ ،‬لبد من اتباع الخطوات التالية‪:‬‬ ‫‪ .1‬التفصريح بالفصفوفة في البرنامج بإعطائها اتسم متغيرة ‪declare the array variable‬‬ ‫اتسم الفصفوفة‬ ‫كما في الشكل التالي‪:‬‬ ‫;] [‪type array-name‬‬ ‫نوع الفصفوفة‬ ‫‪ .2‬تكوين الفصفوفة ‪create the array‬‬ ‫نوع الفصفوفة كلمة محجوزة‬ ‫كما في الشكل التالي‪:‬‬ ‫; ]‪Array-name = new type [array-size‬‬ ‫حجم الفصفوفة‬ ‫اتسم الفصفوفة‬ ‫‪ .3‬يمكن اختفصار الخطوة ‪ 1‬و ‪ 2‬في خطوة واحدة كما يلي‪:‬‬ ‫نوع الفصفوفة‬ ‫نوع الفصفوفة كلمة محجوزة‬ ‫; ]‪type Array-name[ ] = new type [array-size‬‬ ‫حجم الفصفوفة‬ ‫اتسم الفصفوفة‬ ‫ملظحظات‪:‬‬ ‫‪‬‬

‫يمكن تكوين مفصفوفة ذات عناصر محددة و ثابتة ‪ constant array‬عن طريق تسرد قائمة‬ ‫عناصننر معرفننة و تكننون الفصننفوفة فنني هننذه الحالننة ذات عناصننر ابتدائيننة و تسننمى ب ‪array‬‬ ‫‪ ،initialization‬و للتفصريح بمفصفوفة ثابتة‪ ،‬نستخدم الشكل التالي‪:‬‬ ‫عنفصر مفصفوفة حجم الفصفوفة اتسم الفصفوفة‬ ‫; } ‪Array-name[array-size] = {array-element‬‬ ‫‪,‬‬

‫‪‬‬

‫لحظ عدم اتستخدام الكلمة الحجوزة ‪ new‬عند التفصريح بمفصفوفة عناصر ثابتة‪.‬‬

‫‪ ‬يمكن التفصريح بمفصفوفة ذات بعدين كما في الشكل التالي‪:‬‬ ‫نوع الفصفوفة‬ ‫نوع الفصفوفة كلمة محجوزة‬ ‫; ]‪type Array-name[ ] [ ]= new type [array-row number] [array-column number‬‬ ‫عدد اعمدة الفصفوفة عدد صفوف الفصفوفة‬ ‫اتسم الفصفوفة‬ ‫‪19‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪‬‬

‫يمك ننن التفص ننريح ب ننأكثر مننن مفص ننفوفة ف نني نف ننس الس ننطر عل ننى ان يت ننم الففص ننل بينه ننا بالفاص ننلة‬ ‫العادية‪ .‬كما يمكن كتابة القواس مع نوع البيانات ‪ [ ]type‬او مع اتسم الفصفوفة كما يلي‪:‬‬ ‫;‪Type[ ] array-name1, array-name2, …,array-namen‬‬ ‫‪Same as:‬‬ ‫;] [‪Type array-name1[ ],array-name2[ ],….,array-namen‬‬

‫‪‬‬

‫يمكن معرفة حجم الفصفوفة عن طريق التغيرة ‪ length‬كما في الشكل التالي‪:‬‬ ‫‪Array-name.length‬‬

‫***تتميز لغة الجافا عن غيرها من اللغات فني قندرتها علنى إدارة النذاكرة ‪ memory-managed‬بحيث‬ ‫أن البرم ننج ل يهت ننم بإلغ نناء التخفص ننيص لكوم ننة م ننن البيان ننات ف نني ال ننذاكرة‪ .‬لغ ننة جاف ننا ق ننادرة عل ننى ذل ننك‬ ‫ا‬ ‫تلقائين نا و كن ننذلك بيئن ننة التطن ننوير ‪ Android‬ال تي ه ي ب دورها بيئ ة برمج ة ‪ .memory-managed‬و ق د‬ ‫اعتمدت كل من ‪ Microsoft‬و ‪ Apple‬هذا النموذج في ‪.mobile development platforms‬‬ ‫***تسؤال الحاضرة‪:‬‬ ‫اعد كتابة السؤال السابق باتستخدام الفصفوفات على ان يتم قراءة و طباعة عملية‬ ‫حسابية واحدة او اكثر و ناتجها‪.‬‬ ‫مثال‪result=6*1/2-5+3 :‬‬

‫‪20‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪‬‬

‫التفصانيف و الكائنات ‪Classes & Objects‬‬

‫‪‬‬

‫مفهوم برمجة الكائنات ‪Object-Oriented Programming Concept‬‬ ‫الع ننالم م ننن حولن ننا ف نني حقيق ننة الم ننر يتك ننون م ننن مجموع ننة م ننن الكائن ننات ‪ .objects‬ك ل كائن ل ه‬ ‫ا‬ ‫خفص ننائص ‪ attributes‬يتمي ز به ا‪ ،‬و تس لوك ‪ behavior‬يس لكه‪ .‬فمثل النس ان ه و ذل ك الك ائن‬ ‫البشننري الننذي يتميننز بفصننفات )الوصننف(‪ :‬لننه عينننان‪ ،‬ينندان‪ ،..،‬و لننه تسننلوك يسننلكه مثننل‪ :‬العقننل‪،‬‬ ‫الكل‪ ،‬الشرب ‪ ،‬اليششي‪....‬‬ ‫ا‬ ‫بنناء ا علنى هنذا الفهنوم‪ ،‬جناءت فكنرة البرمجنة الوجهنة نحنو الكائننات أو البرمجنة الشنيئية‪ ،‬حينث‬ ‫تعت ننبر لغ ننة ‪ Java‬م ن اللغ ات الكائني ة و فيه ا يتك ون ال بر نام ج م ن مجموع ة م ن ‪ objects‬ال تي‬ ‫ا‬ ‫تتفاع ننل م ننع بعض ننها البع ننض‪ .‬ه ننذه الكائن ننات ت ننم تكوينه ننا وفقن نا لع ننايير و نم نناذج مح ننددة و معرف ننة‬ ‫ا‬ ‫مسبقا في البرنامج تسمى ‪) classes‬التفصانيف او الففصائل أو الفئات(‪.‬‬ ‫ا‬ ‫اذن‪ ،‬لكنني نكننون كننائن‪ ،‬لبنند أول و قبننل كننل ششنني ان نكننون تفصنننيف ‪ ،class‬و من هذا التفصنيف‬ ‫‪ class‬نكون أي عدد من الكائنات حسب حاجة البرنامج‪.‬‬ ‫مثال‪ :‬لبناء منزل نحتاج الى‪ :‬لبنات ‪ ،blocks‬نوافذ ‪ ،windows‬ابواب ‪....doors‬‬ ‫و لك ششن لب ششد م ششن مع ششايير و مق ششاييس لفص ششنع ه ششذه اليش ششياء‪ .‬إذن‪ :‬نح ننن نحت نناج ال ننى ‪) class‬بمثاب ة‬ ‫ا‬ ‫قالب(‪ .‬فمثل لفصنع باب‪ ،‬نحتاج الى مادة صلبة ل تلين )‪(material‬‬ ‫ا‬ ‫نحناج ايضا لتحديد طول ‪ length‬و عرض ‪ width‬الباب‪..‬‬ ‫اذن‪ ،‬من خفصائص الباب ان له طول و عرض و انه مفصنوع من مادة صلبة‪.‬‬ ‫**ماذا عن السلوك الذي يسلكه الباب؟‬

‫‪ ‬مزايا البرمجة باستخدام ‪OOP‬‬ ‫ا‬ ‫‪ .1‬امكانية صنع أي قالب ‪ class‬وفقا للمعايير و القاييس الحددة حسب الحاجة‪.‬‬ ‫‪ .2‬امكانيننة اتسننتخدام هننذه ال ‪ classes‬و التستفادة منها في تكوين أي عدد من الكائنات دون‬ ‫الحاجة الى معرفة التفاصيل عن هذه ال ‪.classes‬‬ ‫ا‬ ‫‪ .3‬امكانيننة اتسننتخدام أي تفصنننيف ‪ class‬موجود مسبقا و امكانية اضافة بيانات اخرى إليه‬ ‫دون الحاجة الى معرفة تفاصيل هذه ال ‪) class‬الوراثة ‪.(inheritance‬‬ ‫‪ .4‬امكاني ننة تع نندد الكش ننكال )‪ ،(polymorphism‬بمعن ننى ان ننه يمكننن ان نجع ننل البرنام ننج الكت ننوب‬ ‫بفصفة عامة ‪ general‬يخضع لتنفيذ مهمة خاصة ‪.specific‬‬ ‫ا‬ ‫‪ .5‬امكانيننة حمايننة البيانننات و تغليفهننا داخننل كبسننولة ‪ encapsulation‬حيث تغلف البيانات‬ ‫داخل ‪ class‬و ل يمكن الوصول اليها بدون تخويل ‪.authorization‬‬

‫‪21‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪ 1.5‬التفصانيف ‪classes‬‬ ‫يمكن تعريف ال ‪ class‬على انها‪:‬‬ ‫‪ ‬وصف لعدد من الكائنات الشتشابهة‪.‬‬ ‫‪ ‬مجموعننة مننن البيانننات )‪ data (attributes‬و الدوال )‪methods (behavior‬‬ ‫التي تشترك في صفة معينة‪.‬‬ ‫أي ‪ class‬في لغة ‪ Java‬تتكون من جزئين‪:‬‬ ‫‪ .1‬الخفصائص ‪attributes‬‬ ‫ا‬ ‫و هنني البيانننات‪ :‬الثننوابت و التغينرات الننتي تخننص الكننائن ‪ .object‬و تسمى بمتغي رات العضاء‬ ‫‪ member variables‬أو ‪.instance variables‬‬ ‫‪ .2‬السلوك ‪behavior‬‬ ‫ا‬ ‫و ه نني الوظيف ننة او الهم ننة ) ‪(function or method‬ال ننتي يق ننوم به ننا الك ننائن ‪ .object‬و تس مى‬ ‫بالدوال العضاء ‪.member methods‬‬ ‫‪‬‬

‫تعريف التفصنيف ‪class definition‬‬ ‫لتعريف تفصنيف في البرنامج يجب ان نشتبع الشكل التالي‪:‬‬ ‫اتسن ننم التفصن نننيف‬

‫كلمن ننة محجن ننوزة معن نندل الوصن ننول )اختين نناري‬

‫‪(optional‬‬

‫‪Access modifier‬‬ ‫‪class‬‬ ‫‪class-name‬‬ ‫{‬ ‫اتسماء الثوابت و التغيرات ‪Fields‬‬ ‫دوال البناء ‪Constructors‬‬ ‫الدوال ‪Methods‬‬ ‫}‬ ‫‪Fields .a‬‬ ‫و هي الثوابت و التغيرات التي نحتاج اليها لوصف خفصائص الكائن‪ ،‬و تتمثل فنني النننواع‬ ‫التالية‪:‬‬ ‫‪Instance variable .1‬‬ ‫و هو متغير يتم العلن عنه داخل التفصنيف ‪ class‬بالشكل التالي‪:‬‬ ‫اتسم التغير‬

‫; ‪variable-name‬‬

‫النوع‬

‫‪access modifier type‬‬

‫معد الوصول‬

‫‪22‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.2‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪Constant‬‬ ‫و هو ثابت يتم العلن عنه داخل التفصنيف ‪ class‬بالشكل التالي‪:‬‬ ‫اتسم الثابت‬

‫قيمة‬

‫;‪constant-name = value‬‬

‫النوع‬

‫‪type‬‬

‫معدل الوصول‬

‫‪final‬‬ ‫)نهائي و ل يتغير(‬

‫و يمكن تعريف متغينر منن ننوع ‪ final‬على ان يتم اعطاءه قيمة ثابتة من قبل دالة‬ ‫البننناء ‪ constructor‬و ل يمكن ان تتغير قيمته داخل البرنامج و الشكل العام لها‬ ‫هو‪:‬‬ ‫اتسم الثابت‬

‫; ‪constant-name‬‬

‫النوع‬

‫‪type‬‬

‫معدل الوصول‬

‫‪final‬‬ ‫)نهائي و ل يتغير(‬

‫‪.3‬‬

‫‪Class variable‬‬ ‫و ايسننمى متغيننر التفصنننيف )او التغيننر السنناكن(‪ ،‬و هننو متغيننر يتننم العلن عنننه داخننل‬ ‫ال ‪ class‬مسبوق بالكلمة الحجوزة ‪ ،static‬و الشكل العام له هو‪:‬‬ ‫اتسم متغير التفصنيف‬

‫; ‪variable-name‬‬

‫معدل الوصول‬

‫النوع‬

‫‪type‬‬

‫‪static‬‬

‫و معنى ذلك ان موقع هذه التغينرة داخنل موقنع ذاكنرة ال ‪ ،class‬و كل كائن مكون‬ ‫من هذه ال ‪ class‬يمكنه الوصول إليه‪.‬‬ ‫ملظحظة‬ ‫يمكن ان يكون الثابت ‪ constant‬من نوع ‪ final static‬كما في الشكل التالي‪:‬‬ ‫اتسم ثابت التفصنيف‬

‫النوع‬

‫; ‪constant-name‬‬

‫معدل الوصول الثاني معدل الوصول الول‬

‫***سؤال‪ :‬ماذا يعني ذلك؟‬

‫‪23‬‬

‫‪type‬‬

‫‪static‬‬

‫‪final‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.b‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪constructor‬‬ ‫ا‬ ‫هنني دالننة خاصننة تسننمى بدالننة بننناء ‪ constructor‬تأخذ نفس اتسم ال ‪ class‬الوجودة‬ ‫فيهننا‪ ،‬و ل ترجننع قيمننة و يتننم تنفيننذها مباكشننرة عننند تكننوين الكننائن ‪ ،object‬و يمكن لهذه‬ ‫الدالة ان تاخذ قيم )تستقبل معاملت(‪ ،‬و الشكل العام لها‪:‬‬ ‫)باراميتر( متغيرة‬

‫نوع اتسم التفصنيف معدل الوصول‬

‫) ‪public class-name ( type variable‬‬ ‫{‬ ‫‪,‬‬ ‫‪ Constructor body‬جسم الدالة‬ ‫}‬ ‫‪ ‬اهمية دالة البناء‬ ‫‪ .1‬تهيئة الكائن ‪object initialization‬‬ ‫حي ننث تق ننوم دال ننة البن نناء بإعط نناء قي ننم ابتدائي ننة للك ننائن اثن نناء تك ننوينه‪ ،‬و ف نني ه ننذه الحال ننة يت ننم‬ ‫تمرير هذه القيم كمعطيات مع جملة تكوين الكائن مع مراعاة الترتيب‪.‬‬ ‫‪ .2‬تخاطب الكائنات ‪inter-object communication‬‬ ‫ا‬ ‫و تعد هذه العملية من أهم مبادئ برمجنة ‪ OOP‬حيث تقوم دوال البناء بدور هام في هذه‬ ‫ا ا‬ ‫العملية‪ ،‬و تتم هذه العلملية باتستخدام تقنية ‪ .callback‬و غالبا ما تستخدم في الواجهات‬ ‫الرتسومية ‪.GUI‬‬ ‫‪ ‬ملظحظات‬ ‫‪ .1‬يمكننن ان تحتننوي ال ‪ class‬الواحدة على أكثر من دالة بناء ‪ constructor‬بشرط ان يكون‬ ‫هناك اختلف بينها في عدد البارامترات أو نوعها‪.‬‬ ‫‪ .2‬يمكن التستغناء عن كتابة معدل وصول ‪ public‬مع دالة البناء‪.‬‬ ‫‪.c‬‬

‫‪methods‬‬ ‫ا‬ ‫تعبر الدوال عن تسنلوك الكنائن او الهمننة او العملينة او الوظيفنة الطلوبنة مننه )‪.(action‬‬ ‫و الشكل العام لها‪:‬‬ ‫)باراميتر( متغيرة نوع‬

‫اتسم الدالة‬

‫نوع القيمة الرجعة معدل الوصول)اختياري(‬

‫) ‪access modifier return-type method-name ( type variable‬‬ ‫{‬ ‫‪,‬‬ ‫‪ method body‬جسم الدالة‬ ‫‪24‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫}‬ ‫‪ ‬ملظحظات‬ ‫ت‬ ‫‪ .1‬يمكششن ان ل ترجششع الدالششة أي قيمششة‪ ،‬و عنششدها يكششون نششوع القيمششة الششتي ترجعهششا الدالششة‬ ‫‪ return type‬هي الكلمة الجحجوزة ‪.void‬‬ ‫‪ .2‬يمكش ششن ان تحتش ششوي ال ‪ class‬الواظح دة عل ى أك ثر م ن دال ة بنف س الس م بش رط ان‬ ‫ت‬ ‫تختل ششف إم ششا ف ششي ن ششوع القيم ششة ال ششتي ترجعه ششا الدال ششة او ف ششي ع ششدد الب ششارمترات او نوعه ششا‪ ،‬و‬ ‫ت‬ ‫تسمى هذه العملية ب ‪.overloading‬‬ ‫‪ .3‬يمكن ان يكون للدالة اكثر من معدل وصول ‪.access modifier‬‬ ‫‪‬‬

‫استدعاء الدوال ‪method calling‬‬ ‫لتستدعاء أي دالة نستخدم الشكل التالي‪:‬‬ ‫متغيرة تستقبل القيمة التي ترجعها الدالة‬

‫نوع التغيرة‬

‫‪type‬‬ ‫;‪variable-name‬‬ ‫القيم الراد تمريرها الى الدالة )معاملت(‬ ‫; ) ‪)variable-name = ( Object-name.method-name( argument‬‬ ‫‪,‬‬

‫‪‬‬

‫اتسم الدالة نقطة اتسم الكائن‬

‫في حالة ان الدالة ترجع قيمة‬

‫دالة التفصنيف )الدوال الساكنة( ‪class method‬‬ ‫هنني دالننة تحتننل مكننان واحنند فنني موقننع ذاكننرة ال ‪ ،class‬و يمكن لي كائن من هذه ال ‪class‬‬ ‫ان يفصل إليها‪ ،‬و لها معدل وصول ‪ static‬كما في الشكل التالي‪:‬‬ ‫)باراميتر( متغيرة نوع‬

‫اتسم الدالة‬

‫نوع القيمة الرجعة معدل الوصول)اختياري(‬

‫) ‪return-type method-name ( type variable‬‬ ‫‪,‬‬ ‫‪ method body‬جسم الدالة‬

‫‪static‬‬ ‫{‬ ‫}‬

‫‪ ‬ملحظات‬ ‫‪ .1‬تستخدم دالة من نوع ‪ static‬متغيرات من نوع ‪ static‬فقط‪.‬‬ ‫‪ .2‬يمكننن اتسننتدعاء الدالننة ال ‪ static‬بدون اقترانها باتسم الكائن لوجودها في موقع ذاكرة‬ ‫ال ‪ class‬حيث يتم اتستدعائها عن طريق اتسم ال ‪ class‬الوجودة فيها‪.‬‬

‫‪25‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪ .3‬تحتننوي ‪ Java‬على مجموعة من ال ‪ classes‬التي تتضمن دوال يمكن اتستدعائها باتسم‬ ‫ال ‪ class‬الوج ودة فيه ا مث ل ‪ class Math‬ال تي تتض من مجموع ة ك بيرة م ن ال دوال‬ ‫الرياضية مثل دالة الجذر التربيعي ‪.()sqrt‬‬ ‫‪ 2.5‬الكائنات ‪Objects‬‬ ‫الك ننائن عنفص ننر ايمث ننل اتس ننتخدام ‪ class‬داخ ل البرنام ج و ه و يأخ ذ نف س الفص فات ‪ data‬و‬ ‫السن ننلوك الوجن ننودة فن نني هن ننذا ال ‪ .class‬بمعن ى أن ه يس تطيع اتس تخدام البيان ات و ال دوال‬ ‫الوج ننودة داخ ننل ال ‪ class‬ال تي ينتم ي إليه ا‪ .‬و لتك وين ك ائن داخ ل البرنام ج‪ ،‬نشتب ع الش كل‬ ‫التالي‪:‬‬ ‫معاملت اتسم التفصنيف كلمة محجوزة اتسم الكائن اتسم التفصنيف‬

‫;) ‪Class-name object-name =new class-name( argument‬‬ ‫‪,‬‬

‫ملظحظات‬ ‫‪ .1‬ايعتبر الشكل السابق جملة تكوين كائن‪.‬‬ ‫‪ .2‬يمكننن ان ل تحتننوي جملننة تكننوين كننائن علننى معنناملت ‪ ،argument‬و في هذه الحالة ل يتم‬ ‫تمرير أي بيانات الى موقع ذاكرة الكائن‪.‬‬ ‫‪ .3‬يمكننن تكننوين أكننثر مننن كننائن مننن نفننس ال ‪ class‬في نفس السطر و ايففصل بينها بالفاصلة‬ ‫كما في الشكل التالي‪:‬‬ ‫; ‪Class-name object-name1, object-name2,……,object-namen‬‬ ‫ثم يتم تكوين كل كائن على حدة كما في الشكل التالي‪:‬‬ ‫معاملت اتسم التفصنيف كلمة محجوزة اتسم الكائن‬

‫;) ‪object-name1 =new class-name(argument‬‬ ‫‪,‬‬ ‫‪ ‬تفسير جملة تكوين الكائن‬ ‫تعننني جملننة تكننوين الكننائن السننابق ان الننترجم ‪ compiler‬يستخدم الكلمة الحجوزة ‪new‬‬ ‫ليقوم بالتالي‪:‬‬ ‫‪ .1‬تكوين كائن بالتسم العطى ‪create object‬‬ ‫‪ .2‬حجز موقع في الذاكرة لهذا الكائن ‪memory location‬‬ ‫‪ .3‬اتسننتدعاء دالننة البننناء اذا كننانت موجننودة فنني البرنامننج و تمريننر البيانننات اليهننا و تخزينهننا فنني‬ ‫موقع ذاكرة الكائن‪ ،‬و إل‪ ،‬فإنه يقوم بفرض دالة بناء افتراضية و يرجع القيمة ‪.null‬‬ ‫‪26‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪The statement in the program uses the variable reference to send messages to an‬‬ ‫‪object. These messages are called to the methods that enable the program to‬‬ ‫‪interact with an object. The message includes the arguments that are method‬‬ ‫‪requires for performing its task.‬‬ ‫‪ ‬الؤثر ‪this‬‬ ‫ايستخدم الؤثر ‪ this‬فيما يلي‪:‬‬ ‫‪ .1‬حن ننل مشن ننكلة التسن ننماء الشتشن ننابهة‪ ،‬حين ننث يقن ننترن الن ننؤثر ‪ this‬م ع اتس م التغي رة العض و‬ ‫‪.member variable‬‬ ‫‪ .2‬اتس ننتدعاء دال ننة بن نناء‪ ،‬حي ننث يمك ننن لدال ننة بن نناء ان تس ننتدعي دال ننة بن نناء اخ ننرى بش ننرط ان‬ ‫تك ننون اول جمل ننة ف نني دال ننة البن نناء الخ ننرى جمل ننة التس ننتدعاء‪ .‬و يمك ننن ان تحت ننوي جمل ننة‬ ‫التستدعاء على معاملت ‪ arguments‬كما في الشكل التالي‪:‬‬ ‫; )معاملت (‪this‬‬ ‫***تسؤال الحاضرة‪ :‬أكتب مثال لكل ما تسبق‪.‬‬

‫‪27‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫‪ .6‬معدلت الوصول ‪Access Modifiers‬‬ ‫‪ ‬الجزء الول ‪Part One‬‬ ‫ت‬ ‫مع ششدلت الوص ششول ه ششي كلم ششات مجحج ششوزة تس ششتخدم ف ششي تحدي ششد الوص ششول ال ششى ‪ class‬و دواله ا و‬ ‫متغيراتها‪ ،‬و اهمها‪:‬‬ ‫‪Static modifier .1‬‬ ‫ا‬ ‫ايس ننتخدم م ننع التغين نرات و ال نندوال‪ ،‬و عن نندها تفص ننبح التغين نرات م ننن ن ننوع ‪ static variable‬و‬ ‫ا‬ ‫النندوال مننن نننوع ‪ static methods‬حي ث تخزن في موق ع ذاكرة ال ‪ ،class‬و أي كائن من‬ ‫هذه ال ‪ class‬يشير إليه‪.‬‬ ‫ملظحظات‪:‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬

‫الدوال من نوع ‪ static‬ل تتعامل إل مع متغيرات من نوع ‪.static‬‬ ‫ا‬ ‫تس ننمى التغين نرات م ننن ن ننوع ‪ static‬ب ‪ ،class variables‬و ال دوال م ن ن وع ‪ static‬ب ‪class‬‬ ‫‪.methods‬‬ ‫يمك ننن اتس ننتخدام متغي ننرة م ننن ن ننوع ‪ static‬او دال ة م ن ‪ static‬ب دون اقترانه ا باتس م الك ائن و‬ ‫ا‬ ‫ذلك عن طريق كتابة اتسم ال ‪ class‬عوضا عن أتسم الكائن‪.‬‬

‫‪ ‬يجب إعطاء قيمة ابتدائية لتغير ‪.static‬‬ ‫‪final modifier .2‬‬ ‫ايستخدم مع ‪ ،classes‬و ‪ methods‬و ‪ variables‬بحيث ان‪:‬‬ ‫‪ final class ‬تعني أنه ل يمكن ان اننيششئ منها ‪ class‬فرعية‪.‬‬ ‫‪ final method ‬تعن ي أن ه ل يمك ن أن انج ري أي تع ديل عليه ا )دوال غي ر مهيمن ة ‪non‬‬ ‫‪.(overriding method‬‬ ‫‪ final variable ‬تعني أنه ل يمكن أن تتغير قيمتها إل عن طريق دالة البناء‪.‬‬ ‫ملظحظات‪:‬‬ ‫‪‬‬

‫إذا تم العلن عن ‪ class‬على انها ‪ ،final‬فإن جميع الدوال بداخلها هي من نوع ‪.final‬‬

‫‪‬‬

‫إذا لم يتم إعطاء قيمة ابتدائية لتغير من نوع ‪ ،final‬فإنه يجب اعطاءه قيمة ابتائية عن‬ ‫طريق ‪.constructor‬‬ ‫‪ :Abstract modifier‬ايستخدم مع ‪ classes‬و ‪ methods‬و يتم اتباع الشكل التالي‪:‬‬

‫‪.3‬‬

‫‪28‬‬


‫‪Dr. Mabroka A.M‬‬

‫‪.CS602: Java Programming‬‬

‫‪Fall2016‬‬

‫}‪public abstract class class-name{…………….‬‬ ‫)‪public abstract void method-name(…….‬‬ ‫فننإذا كننانت ال ‪ class‬من نوع ‪ abstract‬فهذا يعني أنه يمكن ان ننيششئ منها ‪ class‬فرعية و لكن ل‬ ‫يمكن ان نكون من ‪ abstract class‬أي كائن‪.‬‬ ‫‪ ‬معدلت الوصول ‪Access Modifier‬‬ ‫‪ ‬الجزء الثاني ‪part two‬‬ ‫يمك ن ننن لي ‪ class‬موج ودة ف ي برنام ج م ا أن تس مح لي ‪ class‬اخ رى موج ودة ف ي نف س‬ ‫البرنامج او خارجه ان تفصل الى متغيراتها او دوالها باتستخدام معدل الوصول الناتسننب‪ ،‬كمننا‬ ‫يمك ننن لي ‪ class‬أن تح د م ن اتس تخدام متغيراته ا و دواله ا م ن قب ل أي ‪ class‬أخ رى ع ن‬ ‫ا‬ ‫طريق أخفائها و حمايتها وفق عملية تسمى بالكبسلة ‪.encapsulation‬‬ ‫ا‬ ‫و تستخدم لذلك اربع معدلت للوصول كما يلي‪:‬‬ ‫‪public modifier .1‬‬ ‫ايس ن ننتخدم عن ن نند العلن ع ن ننن ‪ class‬أو متغي ر أو دال ة‪ ،‬و عن دها تفص بح ه ذه ال ‪class‬‬ ‫متاحننة لجمينع ال ‪ classes‬الخرى الوجودة داخل الحزمة أو خارجها‪ .‬بمعنى انه يمكن‬ ‫الوصول الى التغيرات و الدوال و ال ‪) classes‬محتويات ال ‪ (class‬من نوع ‪ public‬من‬ ‫أي ‪ class‬أخرى كانت‪.‬‬ ‫‪private modifier .2‬‬ ‫ايس ننتخدم م ننع التغين نرات و ال نندوال ض ننمن ‪ class‬مح ددة‪ ،‬و ه ذه ال ‪ class‬ه ي الوحي دة‬ ‫الننتي تسننتطيع ان تننرى التغينرات ال ‪ private‬و تتعامل مع الدوال ال ‪ private‬الوجودة‬ ‫فيها‪ .‬بمعنى آخر انه إذا عرفنا كائن من نوع ‪ class‬تحتوي على متغي رات و دوال من نوع‬ ‫‪ ،private‬فإن هذا الكائن ل يستطيع الوصول اليها أو التعام ل معها مباكشرة إل عن‬ ‫طري ننق ال نندوال الوج ننودة ض ننمن ه ننذه ال ‪ class‬بش رط ان تك ون ه ذه ال دوال م ن ن وع‬ ‫‪.public‬‬ ‫‪protected .3‬‬ ‫ايسننتخدم للحنند مننن الوصننول الننى التغي نرات أو النندوال الوجننودة داخننل ‪ class‬ما إل عن‬ ‫طري ننق ‪ class‬فرعي ة م ن ه ذه ال ‪ class‬الرئيس ية و ايس تخدم ه ذا الع دل ف ي الوراث ة‬ ‫ا‬ ‫‪ inheritance‬حي ث يس مح لجمي ع ‪ classes‬الفرعي ة بالوص ول تس واءا ك انت ه ذه ال‬ ‫‪ classes‬الفرعية داخل الحزمة او خارجها‪ .‬و كذلك يسمح لي ‪ class‬عادية بالوصول‬ ‫بشرط ان تكون داخل الحزمة‪.‬‬ ‫‪default .4‬‬ ‫‪29‬‬


.CS602: Java Programming

Fall2016

Dr. Mabroka A.M

‫ و يك ون الع دل حينئ ذ افتراضش ي‬.class ‫فن نني هن ننذه الحالن ننة ل يتن ننم إعطن نناء أي معن نندل لن ننل‬ ‫ و يمك ن الوص ول‬،class ‫ حي ث ل ايس تخدم أي مع دل م ع متغي ر او دال ة او‬،default ‫ خ ارج‬class ‫ بش رط أن ل تك ون ال‬classes ‫بحري ن ننة ال ن ننى ه ن ننذه التغي ن نرات أو ال ن نندوال أو‬ .‫الحزمة‬ .‫ أكمل الجدول السابق وفق ما تسبق‬:‫سؤال الحاضرة‬ classes ‫جدول ملخص الوصول الى ال‬ Access modifier public private protected default position From the same class Any class inside package Any class outside package Any subclass inside package Any subclass outside package Any class outside package

30


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.