GS301 2023- lecture3

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 32

‫كلية تقنية املعلومات‬

‫البرمجة بلغة الجافا‬


‫‪Java Programming Language‬‬

‫محاضرة ‪classes & Object :3‬‬


‫إعداد‪ /‬أ‪ .‬سكينة السائح‬
‫ربيع ‪2023‬‬
‫التصانيف و الكائنات‬
‫‪Classes & Objects‬‬

‫الع الم من حولن ا في حقيق ة االم ر يتكون من مجموعة من الكائن ات ‪ ،objects‬كل كائن ل ه‬
‫خص ائص ‪ attributes‬يتم يز به ا‪ ،‬و س لوك ‪ behavior‬يس لكه‪ .‬فمثًال االنس ان كائن بش ري‬
‫يتميز بصفات‪ :‬لون عيون‪ ،‬يدان‪ ،..،‬و له سلوك يسلكه مثل‪ :‬االكل‪ ،‬الشرب ‪ ،‬املشي‪....‬‬
‫ًا‬
‫بن اء على ه ذا املفه وم ج اءت فك رة البرمج ة املوجه ة نح و الكائن ات أو البرمج ة الشيئية‪،‬‬
‫حيث تعت بر لغ ة ‪ Java‬من اللغ ات الكائني ة و فيها يتكون البرنامج من مجموعة من ‪objects‬‬
‫ًا‬
‫ال تي تتفاع ل م ع بعض ها البعض‪ .‬ه ذه الكائن ات تم تكوينه ا وفق نم اذج او ق والب مح ددة‬
‫ًا‬
‫ومعرفة مسبق في البرنامج تسمى ‪( classes‬التصانيف او الفصائل أو الفئات)‪ ،‬حيث لكي‬
‫ًال‬
‫نكون كائن ما أو أكثر البد أو أن نكو تصنيف ‪.class‬‬
‫ن‬
‫مزايا البرمجة باستخدام ‪OOP‬‬
‫ًا‬
‫امكانية صنع أي قالب ‪ class‬وفق للمعايير و املقاييس املحددة حسب الحاجة‪.‬‬ ‫‪‬‬

‫امكانية استخدام هذه ال‪ classes‬و االستفادة منها في تكوين أي عدد من الكائنات‬ ‫‪‬‬
‫دون الحاجة الى معرفة التفاصيل عن هذه ال‪.classes‬‬
‫ًا‬
‫امكانية استخدام أي تصنيف ‪ class‬موجود مسبق و امكانية اضافة بيانات اخرى‬ ‫‪‬‬
‫إليه دون الحاجة الى معرفة تفاصيل هذه ال‪( class‬الوراثة ‪.)inheritance‬‬
‫امكاني ة تع دد االش كال (‪ ،)polymorphism‬بمع نى ان ه يمكن ان نجع ل البرنامج‬ ‫‪‬‬
‫املكتوب بصفة عامة ‪ general‬يخضع لتنفيذ مهمة خاصة ‪.specific‬‬
‫ُت‬
‫امكاني ة حماي ة البيان ات و تغليفه ا داخ ل كبس ولة ‪ encapsulation‬حيث غل ف‬ ‫‪‬‬
‫البيانات داخل ‪ class‬و ال يمكن الوصول اليها بدون تخويل ‪.authorization‬‬
‫التصانيف ‪classes‬‬
‫‪-‬التصنيف ‪ :Class‬هو الجوهر األساسي في لغة جافا‪ ،‬حيث أن البرنامج المكتوب بلغة جافا يجب أن‬
‫يحتوي على األقل على تصنيف واحد‪.‬‬
‫‪ -‬تعتبر التصانيف نوع من أنوا ع البيانات‪ ،‬لذلك يمكن تعريف متغيرات من نوع تصانيف‪ ،‬فاملتغير‬
‫من نوع تصنيف عبارة عن كائن )‪.instance of class(object‬‬
‫‪ -‬يمكن تعريف التصنيف في لغ ة جاف ا باس تخدام الكلم ة املحج وزة ‪ class‬و يتم تعريف مجموعة‬
‫من املتغيرات داخل التصنيف و أيضا مجموعة من الدوال ‪.methods‬‬
‫‪ -‬ليس من الضروري تعريف الدالة ‪ main‬من ضمن دوال التصنيف إال إذا أردنا هذا التصنيف أن‬
‫يكون هو بداية تنفيذ البرنامج‪.‬‬
‫ْا‬
‫‪ -‬يجب أن يبد اسم التصنيف بحرف كبير‪. Capital letter‬‬
‫‪ -‬اسم ملف البرنامج املصدري يجب أن يحمل نفس اسم التصنيف و يكون امتداده ( ‪.)java.‬‬
‫‪ -‬يحت وي التصنيف على دال ة أو مجموعة دوال داخ ل التصنيف ‪class‬تحم ل نفس اس م التصنيف‬
‫تسمى دوال البناء‪ ،constructor‬و في حالة عدم وجود أي دالة بناء داخل التصنيف‪ ،‬يقوم املترجم‬
‫ًا‬
‫تلقائي بإنشاء دالة بناء التصنيف في زمن التنفيذ إلعطاء قيم ابتدائية ملتغيرات التصنيف‪.‬‬
‫تابع ‪ ..‬التصانيف ‪classes‬‬
‫يمكن تعريف ال‪ class‬على انها‪:‬‬
‫‪ ‬وصف لعدد من الكائنات املتشابهة‪.‬‬
‫‪ ‬مجموعة من البيانات )‪ data (attributes‬و الدوال )‪ methods (behavior‬التي تشترك في صفة‬
‫معينة‪ ،‬أي ‪ class‬في لغة ‪ Java‬تتكون من جزئيين‪:‬‬

‫الخصائص ‪ : attributes‬و هي البيانات‪ :‬الثوابت و املتغيرات التي تخص الكائن ‪ .object‬و‬ ‫‪‬‬
‫ُت‬
‫سمى بمتغيرات األعضاء ‪ member variables‬أو ‪.instance variables‬‬

‫السلوك ‪ : behavior‬و هي الوظيفة او املهمة (‪)function or method‬التي يقوم بها الكائن‬ ‫‪‬‬
‫ُت‬
‫‪ .object‬و سمى بالدوال األعضاء ‪.member methods‬‬
class definition ‫تعريف التصنيف‬
:‫لتعريف تصنيف في البرنامج يجب ان نتبع الشكل التالي‬

‫أو‬
{ class Classname
type instance-variable1;
type instance-variable2;
t ype methodname1(parameter-list) {
// body of method} }
‫الحقول ‪Fields‬‬
‫‪‬الحق ول‪ :‬هي الث وابت و املتغ يرات ال تي نحت اج اليه ا لوصف خص ائص الكائن‪،‬‬
‫وتتمثل في االنواع التالية‪:‬‬
‫‪Instance variable .1‬‬
‫و هو متغير يتم االعالن عنه داخل التصنيف ‪ class‬بالشكل التالي‪:‬‬
‫الحقول ‪Fields‬‬
‫‪Constant .2‬‬
‫و هو ثابت يتم االعالن عنه داخل التصنيف ‪ class‬بالشكل التالي‪:‬‬

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

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

‫لتكوين كائن يتم كتاب ة اس م التصنيف ثم املتغ ير ال ذي يمث ل الكائن و تس تخدم الكلم ة‬
‫املحجوزة ‪ new‬لحجز موقع في الذاكرة ملتغير الكائن و هو مؤشر يشير ملوقع الكائن في الذاكرة‪،‬‬
‫أما االسم ال ذي يلي الكلمة املحجوزة ‪ new‬و القوسين يمثل دالة بناء للتصنيف إلعطاء قيم‬
‫ابتدائية ملتغيرات الكائن‪.‬‬
‫يأخذ الكائن صورة من التصنيف (متغيراته و دواله) و يمكن الوصول لمتغيرات و دوال الكائن‬
‫عن طريق اس م الكائن و نقط ة ثم اس م املتغ ير أو الدال ة املراد الوصول اليه ا‬
‫‪ ،obj_name.memeber‬ل ذلك قيم متغ يرات كل كائن ق د تختل ف الكائن األخ ر من نفس‬
‫التصنيف‪.‬‬
‫تفسير جملة تكوين الكائن‬
‫تع ني جمل ة تكوين الكائن أن املترجم ‪ compiler‬يس تخدم الكلم ة املحج وزة‪ new‬ليق وم‬
‫بالتالي‪:‬‬
‫تكوين كائن باالسم املعطى ‪ ، create object‬حجز موقع في الذاكرة ‪ memory location‬لهذا‬
‫الكائن ‪ ،‬اس تدعاء دال ة البن اء اذا كانت موجودة في البرنامج و تمرير البيان ات اليه ا و تخزينه ا‬
‫في موقع ذاكرة الكائن‪ ،‬و إال فإنه يقوم بفرض دالة بناء افتراضية و يرجع القيمة ‪.null‬‬
‫تس تخدم جمل ة تكوين الكائن في البرنامج املتغ ير املرجعي إلرسال رسائل إلى كائن‪ ،‬ه ذه‬
‫الرسائل تس مى ب ال‪ methods‬ال تي تمكن البرنامج من التفاع ل م ع الكائن‪ ،‬و تتض من‬
‫الرسالة املعامالت التي تتطلبها ال ‪methods‬ألداء مهمتها‪.‬‬
‫الكائنات ‪Objects‬‬
‫مالحظات‪ُ - :‬ي عتبر الشكل السابق جملة تكوين كائن‪.‬‬
‫‪ -‬يمكن ان ال تحتوي جملة تكوين كائن على معامالت ‪ ،argument‬و في هذه الحالة ال يتم تمرير أي‬
‫بيانات الى موقع ذاكرة الكائن‪.‬‬
‫‪ -‬يمكن تكوين أكثر من كائن من نفس ال‪ class‬في نفس السطر و ُي فصل بينها بالفاصلة كما في‬
‫‪; Class-name object-name1, object-name2,……,object-nameN‬‬ ‫الشكل التالي‪:‬‬
‫ثم يتم تكوين كل كائن على حدة كما في الشكل التالي‪:‬‬
‫املؤثر ‪this‬‬
‫ُي ستخدم املؤثر ‪ this‬فيما يلي‪:‬‬
‫حل مشكلة االسماء املتش ابهة‪ ،‬حيث يقترن املؤثر ‪ this‬مع اسم املتغير العضو ‪member‬‬
‫‪.variable‬‬
‫استدعاء دالة بناء‪ ،‬حيث يمكن لدالة بناء ان تستدعي دالة بناء اخرى بشرط ان تكون‬
‫اول جمل ة في دالة البناء االخرى جملة االس تدعاء‪ .‬و يمكن ان تحتوي جملة االستدعاء‬
‫على معامالت ‪ arguments‬كما في الشكل التالي‪:‬‬
‫; )معامالت (‪This.‬‬
‫‪classes and objects‬‬
‫عن د تكوين برنامج ‪ class‬يتم حج ز موقع في ال ذاكرة له ذا ‪ class‬يحت وي على كل‬ ‫‪‬‬
‫الخصائص و دوال البناء و الدوال التي تصف خصائص و سلوك الكائن املراد تكوينه‬
‫من هذه ‪.class‬‬
‫ال تحتوي ‪ class‬على قيمة للمتغيرات إال املتغيرات من نوع ‪ static‬فيتم تخزينها في موقع‬ ‫‪‬‬
‫ذاكرة ‪.class‬‬
‫عند تكوين كائن من نوع ‪ class‬معين‪ ،‬فإن اسم الكائن هو متغير مرجعي ‪reference‬‬ ‫‪‬‬
‫‪ variable‬تحت وي على العن وان ال ذي يتم عن ده تخ زين بيان ات الكائن بحيث أن لكل‬
‫كائن بياناته الخاصة به‪.‬‬
‫عن د التص ريح بمتغ ير من ن وع ‪ static‬ف إن الكائن يحج ز موقع له ا يحت وي على عن وان‬ ‫‪‬‬
‫هذه املتغير ال‪ static‬املوجودة في موقع ذاكرة ال‪ class‬ليشير اليها‪.‬‬
‫يمكن ألي كائن ان يغير في قيمة املتغير من نوع ‪static‬‬ ‫‪‬‬
‫تمرين عملي‬
‫‪ -‬صمم ‪ class‬لوصف كل من الكائنات البرمجية التالية‪:‬‬
‫موظف‬
‫سيارة‬
‫كتاب‬

‫‪ -‬مث ال‪ :‬اكتب برنامج يق وم بإنش اء تصنيف ص ندوق يحت وي على ثالث متغ يرات‪،‬‬
‫تمث ل الط ول‪ ،‬الع رض و االرتف اع و دال ة تق وم بحس اب حجم الص ندوق‪ ،‬ثم قم‬
‫بإنشاء كائنان من نوع الصندوق و احسب حجم كالهما و اطبع الحجمان‪.‬‬
‫مخطط التصانيف ‪UML class diagram‬‬

‫ُي ستخدم مخطط التصانيف في وصف خصائص و سلوك الكائن املراد تكوينه‪.‬‬ ‫‪‬‬
‫تس اعد مخطط ات ‪ UML‬مص ممي األنظم ة على تحدي د نظ ام بطريق ة م وجزة و رسومية و‬ ‫‪‬‬
‫مستقلة عن لغة البرمجة‪ ،‬قبل أن يقوم املبرمجون بتنفيذ النظام بلغة برمجة معينة‪.‬‬
‫سنستخدم غالًب ا الرسوم التخطيطية لفئة ‪ UML‬لتلخيص سمات التصيف و عملياته‪.‬‬ ‫‪‬‬
‫في ‪ ، UML‬يتم نمذجة كل تصنيف في مخطط تصنيف كمستطيل بثالث أجزاء‪.‬‬ ‫‪‬‬
‫مخطط التصانيف ‪UML class diagram‬‬

‫‪ ‬القسم العلوي‪ :‬يحتوي على أسم التصنيف ‪ Class‬في املنتصف بخط غامق‪.‬‬
‫‪ ‬القسم األوسط‪ :‬يحتوي على اسم صفة التصنيف و الذي يتوافق مع متغير الحالة الذي‬
‫يحمل نفس االسم في جافا‪.‬‬
‫‪ ‬القسم السفلي‪ :‬يحتوي على عمليات التصنيف (السلوك)مثال(‪.)setName - getName‬‬
‫رسائل الخطأ في بيئة الجافا‬
‫‪Error messages in Java netBeans‬‬
‫يوجد نوعان من االخطاء عند كتابة الكود و هما‪:‬‬
‫اخط اء لغوية‪ :‬هي االخط اء ال تي تظه ر عن د وجود خط أ في جمل ة أو تعليم ة البرمج ة وفق‬
‫لغة البرمجة‪ ،‬و عادة ما يظهر خط احمر تحت السطر الذي يحتوي على خطأ لغوي كما‬
‫في املثال التالي‪:‬‬
‫تابع ‪ ..‬رسائل الخطأ في بيئة الجافا‬
‫‪‬عند تنفيذ البرنامج الذي يحتوي على اخطاء لغوية تظهر الرسالة التالية‪:‬‬

‫‪‬هذا يع ني ان برنامج ك يحت وي على اخط اء لغوية و يجب تصحيحها قب ل تنفي ذ‬


‫البرنامج‪ ،‬لذلك يجب التخلص من جميع االخطاء اللغوية قبل تنفيذ البرنامج‬
‫تابع ‪ ..‬رسائل الخطأ في بيئة الجافا‬
‫‪‬في بعض االحي ان يكون البرنامج صحيح و ال يوجد ب ه اي خط أ لغ وي و عن د تنفي ذ‬
‫البرنامج تظهر رسالة الخطأ التالية‪:‬‬

‫‪‬في ه ذه الحال ة‪ ،‬البرنامج صحيح و لكن ‪ compiler‬ال يس تطيع الوصول الى ‪main‬‬
‫‪ ،class‬ل ذلك نق وم بالض غط على ايقونة (كوب القه وة) بج انب اس م ‪ project‬ثم‬
‫نض غط على ال زر االيمن للف أرة او ال زر االيمن للوحة املف اتيح و نخت ار ‪ properties‬ثم‬
‫نختار ‪ run‬و بعدها نقوم بمسح اسم الدالة بما فيه النقطة كما في الفقرة التالية‪.‬‬
‫تابع ‪ ..‬رسائل الخطأ في بيئة الجافا‬
‫تابع ‪ ..‬رسائل الخطأ في بيئة الجافا‬

‫‪‬نمسح اسم الدالة بما فيها النقطة ثم نضغط ‪ok‬‬


‫تابع ‪ ..‬رسائل الخطأ في بيئة الجافا‬
‫نقوم بتنفيذ البرنامج من جديد بالضغط على زر السهم ثم تظهر الرسالة التالية‪:‬‬

‫نضغط ‪ ok‬فيتم تنفيذ البرنامج بنجاح‬


‫تمرين عملي‬
‫مثال‪ :‬اكتب برنامج بلغة جافا يطبع بيانات طالب‬
‫اوال‪ :‬التحليل‬
‫تحدي د ‪ : output‬مطل وب طباع ة بيان ات ط الب‪ ،‬و هي‪ :‬االس م االول‪ ،‬االس م االخ ير‪ ،‬ال رقم‬
‫الدراسي‪ ،‬الفصل‪ ،‬التخصص‬
‫تحديد ‪ : input‬لطباعة بيانات طالب‪ ،‬البد من الحصول عليها عن طريق االدخال من لوحة‬
‫املفاتيح او تمرير بيانات الطالب اثناء تكوين الكائن (دالة بناء)‪.‬‬
‫ثانيا‪ :‬املعالجة(التصميم)‪:‬‬
‫‪ -‬عملية قراءة من لوحة املفاتيح باستخدام ‪Scanner‬‬
‫‪ -‬عملية طباعة فقط باستخدام جملة الطباعة ‪System.out.printf‬‬
‫‪ -‬تحدي د نوعي ة البيان ات (‪ :)...……,int, string, double‬ل دينا متغ ير و ه و ط الب و يتص ف‬
‫بالصفات التالية‪ :‬االسم االول‪ ،‬االسم االخير هما من نوع ‪ String‬الرقم الدراسي من نوع ‪int‬‬
‫التخصص من نوع ‪ String‬الفصل الحالي من نوع ‪int‬‬
‫‪ -‬تص ميم ‪ :class‬يحت وي ‪ class‬على مجموعة من الخص ائص ال تي تص ف الكائن (بيان ات‬
‫الكائن)و الدوال الـ ‪ Methods‬التي تتعلق بالكائن (دالة طباعة بياناته)‬
‫تابع ‪ ..‬مثال‪ :‬اكتب برنامج بلغة جافا يطبع بيانات طالب‬
‫‪ -‬تحديد الكائن (عدد الكائنات الالزم تكوينها من ‪)class‬‬
‫‪ -‬تحديد لغة البرمجة‪:‬‬
‫لغة جافا و متطلباتها‪ :‬بيئة برمجة ‪ - netBeans‬تحديد املكتبات و الدوال و التعليمات‬
‫املناسبة‬
‫‪ -‬كتابة الكود بلغة الجافا‬
‫‪ -‬تنفيذ الكود على بيئة التشغيل ‪netBeans‬‬
‫تحديد ‪class & object‬‬
‫ال توجد طريق ة مح ددة لتحدي د ‪ ،object‬لكن يمكن استنتاج الكائن من خالل‬ ‫‪‬‬
‫تحديد االسماء املذكورة في نص السؤال البرمجي‪.‬‬
‫يتم استنتاج بيان ات الكائن من خالل الخص ائص البرمجي ة (ال تي تقب ل التحويل‬ ‫‪‬‬
‫من بيان ات واقعي ة الى بيان ات رقمي ة برمجي ة) و حس ب املطل وب في البرنامج‬
‫(‪)output‬‬
‫يتم تحديد الدوال (سلوك الكائن البرمجي) حسب نوع املهام املطلوبة للحصول‬ ‫‪‬‬
‫على ‪ ،output‬و تقوم هذه الدوال بمعالجة بيانات الكائن من اجل الحصول على‬
‫‪ output‬املطلوب‬
‫يمكن ان ال تحت وي ‪ class‬على دوال حس ب املطل وب او حس ب طريق ة الح ل‬ ‫‪‬‬
‫املستخدمة‬
class & object ‫أمثلة‬
class & object ‫أمثلة‬
class & object ‫أمثلة‬
class & object ‫أمثلة‬
‫تمرين عملي‬
‫اكتب برنامج بلغة جافا يطبع بيانات كل من الكائنات البرمجية السابقة (كٌل في برنامج‬
‫مستقل) موضحا نوع الكائن و خصائصه و عملياته (الدوال)‪.‬‬
‫انتهت املحاضرة‬

You might also like