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