بسم الله الرحمن الرحيم الحمد لله والصلاة والسلام
على رسول الله طيب أهلا وسهلا بكم في المحاضرة
الثالثة في البرمجة واليوم إن شاء الله هنبدأ في
مراجعة مفهوم الـ object-oriented وبتمنى يعني ما
تكونش المراجعة جيلة عليكم نقولوا احنا خلّى مصدقنا
نخلص ونراجع لأ كويسة بحيث أنت عارف البرمجة 1 و2
و3 متربطين على بعض وبالتالي بنحاول نعمل حلقات وصل
بين المساقات الثلاثة طيب بدنا نتكلم objects
-oriented تمام؟ طبعا زمان قبل ما أتكلم عن الـ object
-oriented أنا كنت بنعرف الـ primitive data صح؟
وبعدين صار في عندي array من الـ primitive data
طبعا ما أتكلمش على الجابة أنا بدأتها سواء كنت بتكلم
على array ظهرت الحاجة أن لو أنا بدي أعمل برنامج
على سبيل المثال بالـ C يحاكي نظام قلاب مدرسة أو قلاب
جامعة معناته أنا فيه عندي .. فرضا بدي أعمل فصل
واحد عشر قلاب عشر قلاب معناته أنا بدي عشر متغيرات
للـ ID عشر متغيرات للـ name عشر متغيرات للـ grade
مصبوط ولا لا؟ هذا الكلام in sense غير منطقي مطلقا
فجت الـ array قالت له إحنا ممكن نحلها بنعمل والله
array للـ ID وقرّيه للـ name وقرّيه للـ GPA نوعا ما
الحل مقبول بس أحسن منه لما ظهرت مصطلح الـ struct
مصطلح الـ struct كان هو عبارة عن تعمل new data type
بحيث أنك تضيفي أو تعرفي في داخلها فقط لـ primitive
data اللي بدك إياها وتصير تتعاملي معاها as one
object كأنها نوع واحد من البيانات مثلا أنا بدي الـ
ID بروح بقوله integer الـ ID character
مثلا عشرة الـ name وبروح بقوله مثلا double أو
float
الـ GBA فأصبحت الـ طبعا الـ instructor دي بدها
name STD على سبيل المثال فصارت الـ STD هي عبارة عن
new data في داخلها بيانات مختلفة في داخلها بيانات
مختلفة وطبعا كان مفهوم الـ procedure والـ function
مختلفين عن بعض ما كانش اطلق عليهم method كان الـ
procedure هو عبارة عن أي code مجموعة من الـ code
بتديها اسم بدون ما بترجعش وكأنها بتعدلالـ Void
Method ممكن أمررلها براميتر لكن ما ترجعليش بقيمة
معينة كانت الفرق بينها وبين الـ function إن أنا
فعليا في موضوع استرجاع الـ data اللي موجودة عندها و
من هنا بدأت التفكير للـ object oriented قال يا عم
أنا مش بس بحاجة إني أنقل الـ data الآن تخيلي إنه
أنا مع كل طالب أنا بهنا بدي أعمل courses
كـ array بدي أمر له إياها بحث إنه بدي أحسب المعدل
حسبة المعدل طب لو أنا بدي أنقل الـ data هذه لبرنامج
أو برنامج آخر أو من file لـ file أو من application
لـ application معناته أنا بحاجة إن أعيد كتابة
المعادلة اللي بتحسب الـ average هل في مجال أنا بصير
أنقل المعادلة مع الـ data ومن هنا بدأ التفكير في
الـ object oriented قالنا إحنا بدناش نقل بس الـ
data لأ بدنا نخلي كل object خليني أسميها بينجوسين
الآن variable كل variable مسئول عن تنفيذ مجموعة من
الـ Task متعلقة الطبيعته مثلًا أنا قاعد بقوله أنا
بتكلم على بيانات الطالب فبيانات الطالب أنا بترحل
معاهم الآن الـ code اللي مسئول عن حساب المعدل
التراكمي أو المعدل الفصلي للطالب هذا من خلال الـ
data اللي موجود عندي أنا الآن object لما أتكلم عن
البرمجة الشيئية أو برمجة الأشياء ففي الآخر كل
حاجة، الساعة، اللابتوب، الكرسي، الإنسان، السيارة،
الطيارة، شيء، object، مصبوط وبالتالي oriented
محاكاة أو مشابهة حيث أن التوجه في المحاكاة أو
برمجة الأشياء صارت فكرتها والفكرة كمان مرة رئيسية
إنه أنا أخلي كل object مسئول عن تنفيذ بعض المهام
المتعلقة بالـ task تبعته ومن هنا بدأ مفهوم شغلة
نسميها الـ class وكان الـ class عبارة عن الـ template
أو القالب اللي أنا بدي أعرف الـ data والـ methods
تبعتي يعني بدي أحكي أنا الآن الطالب أو بدي أحكي
البيئة الجامعية البيئة الجامعية فيها مدرس وفيها
طالب وفيها مساق معناته أنا بدي أعمل object أو
class عفواً بدي أعمل قالب للطالب بحيث أن كل طلابي
الجامعة يكونوا object منه أو نسخة منه بدي أعمل
قالب للمدرس بحيث كل مدرسي الجامعة نسخة منه وأعمل
قالب للمساق بحيث إن كل نسخة أو كل مساقات الجامعة
هي نسخة من القالب هذا وبالتالي لما أنا بتكلم على
template أو قالب معناته فيه مواصفات عامة لازم تكون
عند الجميع يعني الطالب لو أنا بدي أقوله class
student
ماذا يجب أن يكون داخل هذا الـ class؟ يجب أن يكون
لدي ID وName وCollege وFaculty و
GPA المعدل هذه بيانات الطالب هذي جال لحظة بتكلم إيش
أنا بتكلم على بيانات بتكلم على البيانات وهذه
سميناها احنا attributes أو
بنسميها fields نفس المعنى مش هتفرق كتير معانا سواء
قلت عنها attributes أو قلت fields أو قلت data
بنفهم إن احنا بنتكلم على مين بس مصطلح ده شوية لإنه
جابلنا الـ state كمان شوية كمصطلح وممكن يربكنا طيب
هذه الـ data طب ما فرجش لحد الآن عن الـ instruct
بتيجي الجزئية اللي لها علاقة بإيش إن يكون مسئول عن
تنفيذ responsible of carry out تنفيذ بعض الـ
related tasks مثل إيش؟ بعض الـ related tasks معناته
أنا قاعد بالله ممكن أقوله compute GPA أو average
إلى آخره كـ method في داخل الـ class لأن لما باخد
نسخة أنا من الـ student class هذا بنسميها احنا إيش
object object نسخة تمام أو بنسميها instance object
مش قضية كتير نسخة الـ object هذا بيحتوي على كل
الـ attributes وكل الـ method اللي أنا عرفتها
وهيك صار في عندي إعادة استخدام للـ code بدل ما أنا
اضطر أكتب في كل مكان answer لأ لو أنا أخدت 100
نسخة من الـ student معناته بكل بساطة إنصارها دول
كلها موجودين في الـ 100 student اللي موجودين عندها
الآن
مبدأ الـ object oriented إتى يتحكم أو يحقق لي إضافة
شغل جديدة سميناها الـ encapsulation مصطلح الـ
encapsulation إن أنا جمعت الـ properties اللي هي الـ
attributes وجمعت الـ methods تمام في داخل object
واحد يعني بدي أصير أتعامل مع كل object وكأنه
برنامج مستقل بصير أتعامل مع كل object كأنه برنامج
مستقل وبالتالي هنا أنا صار لازم علي أفرج ما بين الـ
attributes والـ accessibility تبعتها والـ method
كذلك ولما بنتكلم على encapsulation بنتكلم على
مصطلح تغليف طيب مصطلح التغليف معناته إن في عندي
طريقة معينة لفك الغلاف هذا واستخلاص ما هو في
الداخل يعني لأن بنيجي مثلا والله لو جينا هاي قطعة
شوكولاتة بنفتحها ماحدش هروح يكسرها يقول لا لأ
هنحاول نفك الغلاف بكل بساطة لأن فيه واضح اتجاه
الغلاف اللي ممكن يفتح بسهولة من أجل برضه الوصول
للمنتج بطريقة سليمة كذلك الله يبعد عنكم الشر إن
شاء الله وحببكم جميعا كبسولة الدواء مشهورة جداً
عندنا لازم تتاخد معها شوية ميه ليش؟ الميه أولا
بتساعد على بلعها صحيح لكن بتعمل على إذابة الغلاف
الخارجي لأن ما بتهينش الغلاف الخارجي اللي بيهمنى
العلاج اللي موجود في داخلها طيب في موضوع الـ object
oriented إذا صار الـ object إنهان بيحتوي على data
أو سمنها الـ attributes وبيحتوي على methods معناته
لازم يكون في طريقة واضحة وسليمة للوصول للمحتوى
اللي في الداخل فمن هنا أتى مبدأ الـ encapsulation
فصرنا بنتكلم مع الـ encapsulation instance field أو
الـ attributes في عندي الـ method واللي ممكن نسميها
الـ behavior وفي
عندي الـ state وفي عندي الـ state عشان نوضح أشياء عن
الـ state لما أنا باخد تخيلي إن هنا في عندي student
1 وstudent 2 هما عبارة عن object in instance من
الـ class اللي موجود عندي هذا تمام الـ 1 رقم one أو
مثلا 2000 والـ .. 2000 والـ .. المفروض أنتو
2012 ولا 2016 2016
1708 منا مثلا معدلها 85
وسط يعني لا هو فوق ولا تحت وفي الـ IT 2016
و16 07 رنا مثلا أي حاجة عذراً
لأني لو كانت معدلها مش هيك لو كانت موجودة بيننا
الآن لاحظي الـ object S1 بيحتوي هذه الـ data والـ
object S2 بيحتوي الـ data هاي مجموعة الـ values هاي
الـ set of values هاي هي الـ state لأن هي اللي فرقت
ما بين S1 و S2 لأن الاثنين جايين من نفس القالب
اللي هو سمينا احنا مين student يعني لو افترضنا إنه
مصنع تنتج السيارات المهندسين عكفوا على وضع نموذج
للسيارة لفترة معينة وعملوا تجربة واثنين وثلاثة
لحد ما وصلوا لهيكل أو المحرك والعجلات المطلوبة
لتصميم السيارة هذه فهنا نقول إنهم وصلوا للـ
template للقالب فبعثوا بعد ذلك المهندسين لمصنع
الإنتاج أو لخط الإنتاج يسمونه تفضلوا هذه المواصفات
السيارة الآن اللي احنا بدناها المصنع يروح وينشغل
ألف سيارة مثلا منها النوع هذا بالمواصفات هذه، المش
لازم يكون فيه تفريق بينهم، بفرق بينهم بشغلتين كل
سيارة بتاخد رقم هيكلي مختلف و بتاخد رقم محرك مختلف
وبالتالي صارت الآن كل سيارة قائمة بذاتها تمام؟ هي
عبارة بتمثل state شو .. شو السيارة هذه؟ عشان أقدر
أميز في الآخر ما بين ال objects اللي عندي لأن لو
ال data مختلفة، عشان أنا بتكلم على نفس ال object
كان ما فيش داعي لكل مفهوم ال object oriented من
البداية، واضحة الصورة يا بنات؟ طيب، وبما أنه بتكلم
على encapsulation وفي عندي data ولازم أتعرف كيف
بدي أوصل لل data اللي موجودة بطريقة سليمة وأتعامل
معاها فصار كان في عندي شغل اسمها ال access
modifiers، ايش ال access modifiers؟ هي عبارة عن
مجموعة من ال keywords اللي بتخليني أو بتوضح لي الـ
scope تبعت ال instance أو تبعت ال class أو تبعت ال
methods اللي موجودة داخل ال class، كمان مرة ال
access modifiers هي عبارة عن مجموعة من ال keywords
public و protected و private وال default أو ال non
modifier المسئولة عن تحديد ال scope لكل واحد من
المصطلحات اللي موجودة عندي، يعني أنا في عندي class
وفي عندي attribute وفي
عندي method هدول
العناصر لازم أحدد ال scope واحنا مرة عيلنا في
scope في برمجة واحد صح؟ شو يعني ال scope؟ ال range
المدى بقى بالعربي كلام مفهوم أكثر من ال range
هنقول المساحة المتاحة داخل البرنامج للتعامل مع
variable معين، مصبوط ولا لا؟ يعني لو أنا أتي
تعرفت variable في داخل ال method اسمها A، بينفعش
أستخدم نفس ال variable في B، مصبوط؟ وإذا أنا بدي
نفس ال variable بال last value تبعتها تكون موجودة
في B، لازم يتعرفوا as global variable، هذا المصطلح
المشهور، تمام، الآن هذه المصطلحات بالإضافة للـ local
variable أو للـ scope صار في عندي ال axis modifier
الآن ال Java program ال Java program أو ال
application مركب بالشكل التالي، مستوى ال
application، ال application ممكن يكون فيه مجموعة من
ال packages
وكل package ممكن تحتوي في داخلها مجموعة من ال
classes، مصبوط؟
هذه ال general structure وداخل كل class مجموعة
من ال attribute ومجموعة من ال method، طيب لما أنا
باجي بقول إن ال class هذا بدي أعرفه as public
class، مفهوم public class إن هذا ال class هنا
لحظة هنا بتكلم متاح متاح لكل أو هيك بقدر استدعي أو
آخد منه instance على مستوى ال package اللي أنا
فيها تمام أو على مستوى ال application وإنشاء كمان
أطلع لبرا ال application بالكامل عشان هيك قلت لك في
الآخر العمود بقول لك ال word يعني لو كان في
different application ممكن تصليله خليني احنا نكون
محصورين احنا وين في داخل ال application الواحد و
ننسى شوية موضوع ال word هذا المعنى، تهيئي ال scope
أو ال area تبعتي كلها اللي بدأ اتحرك فيها لما باجي
أنا باجي بقول class public class معناته هذا
available لكل package، available هنا في داخل ال
classes المجاورة بالإضافة أنه available لكل ال
packages المتاحة عندي في داخل البرنامج، يعني هو
متاح على مستوى ال package اللي موجود فيها لأي
class آخر ممكن استدعيه في داخله وفي نفس الوقت ممكن
استدعيه على مستوى كل classes اللي موجودة أو عفوا كل
ال packages اللي موجودة عندي هنا، إذا أنا روحت
قلت له private معناته أنا بقول فقط هو متاح على
مستوى ال package هنا، يعني بقدر أخد منه instance في
أي مكان في داخل ال package إذا أنا عرفته هو
private فهيكون هو private على مستوى ال package
اللي موجود فيها، طيب الآن protected لها علاقة في
مبدأ ال inheritance protected و
private في الوقت الحالي متكافئتان لما ما أتكلمش على
مبدأ ال inheritance، عرفت ال item أو ال class
private أو protected فهو ايش؟ بنفس المعنى مفهومه
إن هو فقط معرف لمين؟ على مستوى الـ package اللي
موجود فيها والـ subclasses اللي جاية لهم لما أنا
باجي بتكلم على private class وطبعا هنحط .. هدخل
في متاهة يا دكتور، private class يعني أنا بدي أعرف
ال class يكون معزول، ما حدا هيقدر يستدعيه طب ما هو
تساوي .. تساوي هيوصر متاح لمين؟ لزملائه،
للمجاورين، على مستوى ال package، private على مستوى
ال package لكننا لن نحصلها مرة أخرى، معنى الـ
private class إلا لو كان فيه عندي أكثر من package
في داخل برنامجي، طيب لو احنا روحنا الآن في داخل ال
class نتكلم على attribute أو method، لما أنا باجي
بقول إن ال attribute هذا يعرف على إنه public
public معناته ال attribute هذا متاح
من خارج الـ instances يعني لو أنا كنت عندي
student1 std ده تساوي new std على إنه object من ال
class اللي عندي وأروح أقول له s1.id على إن عرفت ال
ID هذه عبارة عن public، مفهومها إن ممكن أنا أتعامل
مع ال ID ده من خارج ال object، مش ضرورة أبقى داخل
ال code داخل ال methods اللي موجودة عندها، طيب، لو
أنا عرفته private معناته فقط في داخل الـ code
محصور ضمن البرانثيز تبعت ال class، أي استدعاء من
الخارج هيتم رفضه لأن هذا closed، طيب، كيف بدي
أتعامل مع الـ private item في داخل ال class؟ بدي
ألجأ لميثود تكون public والميثود هذه نطبق عليها
الـ set و ال get method أو الـ setter و الgetter،
مصبوط؟ طيب، وما ينطبق على ال attribute ينطبق على
مين؟ على الـ method يعني private method إن هذه
متاحة فقط في داخل ال class نفسه، ممنوع أي class آخر
يستدعيها أو ما بقدر أستدعيها بعيدا عن أو من خارج
ال object عفوا اللي ممكن أنا آخده، طيب الآن فيما
يتعلق في ال private و ال protected بس خليني أسبق
شوية في الموضوع ال inheritance لأن أخدتوها وقلت
الأمر سهل أن نعرف الفرق بين ال private والـ
protected إنه لو أنا عملت extend من ال class هذا
بمعنى آخر إن أخدت منه subclass ال private item لا
تنتقل لل subclass الجديد، اللي بينتقل فقط ال public
و ال protected items و ال default كمان اللي أنا
بحط لها no، ايش هو لأ؟ no access modifier اللي هي
اللي بنسيبها احنا لإيك، لو أنا جيت في داخل ال class
كتبت له integer ID شو وضعها هذه؟ علشان تعرف public
public لأ هي بتكون متاحة، متاحة الآن لإيك، انتشريها
معناته أنا قاعد بتكلم معاها public، public لا مش
public، تعرف علي إنها
package private، معناته هي public لكل classes اللي
موجودة، بقدر أستدعيها من برا، تمام، هنا شوية هتختلف
شو مفهومها، هل فعليا ال replacement تبعت ال null هل
هي public ولا هي private مش قضيتنا كتير لأنه غالبا
احنا ما نسيبش إلا نحدد بشكل واضح عشان نحقق مبدأ ال
encapsulation و ال access بشكل صحيح، تمام، الخطوة
اللي بعد هيك، بعد ما خلصنا من ال access modifiers في
عندي ال non-access modifier مثل ايش؟ زي static و
final، في
موضوع ال static طبعا أنا بتكلم static ال keywords
هذه بتستخدم في داخل ال class، ما لهاش على مستوى ال
class تمام؟ ما لهاش على مستوى ال class، أنا في عندي
static field أو attribute وفي عندي static method
لو أنا في داخل ال class عرفت field as static بدنا
نفهم أول حاجة إن ال memory في
التعامل بتتقسم من نوعين مع الجاوزة بتسميها ال meta
space و ال heap memory
والـ heap ايش
اللي بيحصل؟ بمجرد أخذ instance من ال class هذا
أعمل منه new object هيروح ياخد ال static variable
ويحط ليه وين؟ في الـ meta static .. لو خليني أسافر
لمثال أنا قلت هان في عنده public class
student std وروحت هنا قولت الـ private
count
integer private
static integer
count equal واحد وروحت اتعرفت هنا في عندي private
integer id private name أو
string name
و بدي اروح اعرفها عن ال constructor الـ std و
اروح لقولتله this
.id equal
الـ count++ هو اللي خلصنا ال constructor وممكن
أنا اروح اخد و اقوله الاسم و اخليه public و ادخلي
الاسم زي ما بده ليكون هذا class بسيط جدا من ال
three attributes واحد منهم static واحد منهم static
تخيلي أنا قلت stdS1 يتساوى New Std إيش
اللي صار؟ أول حاجة راح تطلع في الـ attributes وال
methods اللي موجودات فلقى فيه عندي static
attribute فرح أطلليها في الـ heap فوق هان قال لي
count أو عفوا في الـ metaspace equal 1 والـ Static
Attribute هذه ميزتها إنها shared بين كل ال
instances من ال object من الـ class هذا طيب تمام؟
الآن فيما يتعلق بـ S1 في عندي الـ ID لأ ليش ID؟ في
عندي count في عندي ID في عندي ال name الآن ال
count هذا هيكون reference لمين؟للـ value اللي فوق
الـ static value اللي موجود عند هان الـ ID لما أنا
استدعت ال constructor راح أخد القيمة تبعت ال count
خصصها للقاضي صارت الـ ID بواحد وعمل increment لل
count اللي هان في هذه صارت إيش؟ باتنين لما أنا
أخدت STD تاني S2 new STD
ماذا سيرحي يساوي؟ سيرحي يدور في الـ heapلجة موجودة
موجودة
فرح يدور في الـ heapلجة موجودة بالتالي بيعمل الهاش
initialization مرة تانية تمام؟ فرح أنشأ object
جديد هان S2 حسب ال constructor فيه تلت عناصر count
وهي الـ static اللي قلنا بتعمل refer لنفس ال object
اللي هي قدام التجديش اتنين حسب ال execution هذا ال
IDش هتاخد بدها تساوي اتنين وبقى من ثم عمل
increment تلاتة وهيه نام بمعنى آخر ان ال instance
أو الـ static variable بتتم عمل initialization لها
مرة واحدة تمام مرة واحدة طبعا بنسميها في البداية
class variable بتنعملها initialization مرة واحدة
وكل ال instances من الـ class هذا بتعمل sharing على
نفس ال copy من الـ static variable اللي موجود عندها
طبعا بالاضافة انه ممكن أنا لو فكرت اطبع جداش عدد
القلاب ممكن اروح اقوله system.out.print اروح اقوله
std.count
std.count واضح الـ static variable نعم أنت
إيش
سويته S1 equal null وتبقى
هذه فوق كونه هو sharedلكن الأخطر من ذلك، لو أنا
روحت في داخل ال code بشكل أو بآخر، اقدرت اعدل على
قيمة ال count، يعني أنا قلتله خلّيت ال count
يتساوي صفر، هنبتبدل المشكلة الحقيقية، أي عنصر
جديد، هشوف قداش قيمتها، هشوفها صفر، وهيصير في
عندي conflict في الأعداد اللي موجودة، انك تحوليه ل
null، مافيش مشكلة، بس انك تعدلي على قيمة ال count،
هنبتبدل المشكلة الحقيقية الـ static method على
غرار الـ static variable بتتم تشغيل الـ static
method أول ما بيشتغل الـ class تبعك بروح بدور على
إيش على الـ Static وعندنا مثلًا الـ Main نوعها إيش؟
Static عشان هيك دائمًا أول ما بيشتغل البرنامج بتاع
بيشتغل من الوين؟ من الـ main غالبًا بنعملش غيرها
static method احنا ليش؟ عشان أنا أضمن دائمًا أن هي
بداية التشغيل اللي موجود عندي فالـ static method
بتنتمي للـ class وطبعًا الفكرة فيها أن هي بتعمل
access لـ static data بتعملي access لـ static data
بتقدري بتعملية calling من خلال تستدعي الـ static
methods تانية الفكرة فيها ممكن تستدعيها من خلال
اسم الـ class بشكل مباشر الـ class dot زي ما
استدعينا الـ variable ومش بس هيك فيها مشكلة this
والـ super مقدرش استخدمهم أنا هدول ليش؟ لأن هذه
هتنحط في الـ meta space بدون الاعتماد على أي object
والـ this والـ super مرتبطات بمين؟ بالـ object
فإذا أنا هذه ال method موجودة باعتمادها على ال
class فكلمة this وال super مالهمش وجودها غالبا
حدّيك عليهم syntax error وبالتالي مافيش اللي همّاش
تطبيق عندي هان يعني لو كان عندي static method بروح
بقوله أنا هان student اسم الـ class اللي عندي هان
dot
Show data مثلا عرض البيانات اللي موجودة إذا أنا
معرف هذا method static مافيش داعي أروح أعمل منها
object و أصير أستبعيها من خلال ال object اللي
موجود عندها من
ال
non-axis modifiers كذلك الـ final شو يعني final؟ إذا
أنا أقول it final variable أو final attribute
معناته أنا بتتكلم على constant value القيمة هذه مش
هتتغير أصبت؟ طيب وإذا أنا أقول it final method إذا
أنا أقول it final method معناته ال method هذه لا
تورث أو عفوا ماقدرش أعملها override في حال تم
توريثها طيب تعالى نقول على سبيل المثال
لو كان أنا في مؤسسة
قالوا للموظفين في عندي class اسمه EMB وفي داخله
method اسمها Calc Salary احسب
السلري حساب الراتب تمام؟ وعرفونا إياها هذه final
وبعد
ذلك انتبه وقال يا عم احنا الموظفين اللي عندنا في
عندي full-time employee وفي عندي part-time اللي هو
بيشغل بالساعة employee وعمله extend الـ class اللي
موجود فوق إيش اللي حيصير عندي هنا إنه ال method
هذه هتتورث لل classes اللي موجودة تحت ده معنى آخر
بإمكاني أنا أستدعيها واعتمدي على ال code اللي في
داخلها لأن بما إنه هي final لو أنا انتبهت أن حسبة
الراتب هان غير حسبة الراتب هان بدي أروح أعمل
override إيش يعني override يا بنات؟ من أنه بدي
أعيد كتابة الجملة أو ال method الموجود عندي مرة
تانية هي عادة ال implementation تبعتها زي ما أنت
فضلتي تمام إذا أنا عرفتها final بقدرش أعملها
override
بنفس المفهوم البسيط لـ Final Attribute الـ Final
Attribute لا يمكن أن يتغير عليه ونفس الكلام هنا
لا أستطيع أن أعمل عليها override ما هي الحالة؟ إما
أرجع إلى الـ class أو الـ class أو الـ class أو ال
class أو الـ class أو الـ class أو الـ class أو ال
class أو الـ class أو الـ class أو الـ class بأتجهلها
في داخل الـ class هذا وبروح بنش أيش method جديدة
بأريحها لكن الحل أني أرجع أعمل final عشان أعمل
override وأظل محافظ على نفس الاسم اللي موجود
عندها فيما
يتعلق بال constructor قبل شوية قولت هي عرفت ال
constructor أنهان ولما كنت أقول ال new student
std أسواني بتساوي new student كنت بتتكلم على شغل
بتسميها ال constructor ال constructor هي عبارة عن
special method بتحمل نفس اسم نفس اسم للـ class ال
class ممكن يحتوي أكتر من constructor صح؟ تمام في
limit للعدد؟ يعني ممكن أعمل عشرة؟
طيب في الـ class هذا ممكن أعمل عشرة constructor؟
أها يعني في limit ممكن يكون لدي limit للـ creation
متى؟ الـ limit حسب عدد الـ attributes اللي موجودة
عندي يعني في الحالة اللي موجودة عندي عدي معايا
بنعمل combination constructor بدون ولا واحد تمام؟
و constructor بواحد واحد واحد هاي صاروا أربعة و
constructor باتنين هاي اتنين وأربعة ستة وهي كمان
واحد أه فبنتكلم جاعدين واحد تلاتة هي سبعة سبعة
خلصنا يعني هيك constructor بدون ولا واحد
constructor بتنين هذا هيكون كام واحد منه لما اتكلم
على compile بواحد معناه ان أنا بتكلم على تلاتة،
مظبوط؟ هذا واحد constructor بتنين two arguments
ثنتين الأول مع الثاني الأول مع الثالث ثلاثة ثلاثة
بصحيح واحد بتلاتة بواحد هاي مجموعهم يعني أنا بتكلم
ثمانية constructors الآن مش هت .. بس هحصل في مشكلة
أنا هل هيظبط مثلاً والله أقول أروح أنا بدلت هدول
الثنتين قدمت وأخرت بينهم
ما هو نفس التعريف وبالتالي الـ signature ما اختلفش
لما احنا بنتكلم هنا بشكل برمجي أكثر احنا قاعدين
بنقول أنه لما أنا أعيدت الـ constructor معناته ب
different signature different signature different
variable تمام؟ different argument different
argument الآن الترتيب مش من ضمن الشغلات اللي أنت
حسبت عليها الـ different signature طيب هل يرجع ال
data؟ لا، مهمته يعمل initialization لـ الـ object
اللي موجود عندي ودائماً .. دائماً هيكونوا بيسبقوا
بكلمة new اللي بعدين بقول له student S1 equal new
Student حسب هالـ constructor طبعاً في شغلة مهمة ال
constructor الأول هذا اللي هنا كان بدون argument
الـ zero argument كان اسمه في الأول default
constructor بمجرد أعرف أنا أي constructor من هدول
ثمانية بصير عندي الـ default constructor does not
exist عمله override طب لو أنا بدياه بدون argument
فلازم أعرفه بالشكل
اللي موجود هنا بدون argument آخر
شغلة في موضوع الـ inheritance أيوه
يا بنات
لما أنا بتكلم على inheritance معناته أنا بحاول
أستفيد أو أستغل الـ predefined attributes and
behavior يعني أحاول أستفيد من التعريف السابق لل
attributes والـ methods الموجودة قبل شوية هنكتب
المثال employee وهنا في منها نوعين full-time
employee و part-time employee، مظبوط؟ لكن هدول هذا
موظف وهذا موظف وبالتالي بيجتمعوا أن هذا إله رقم
وإله اسم وفي عند الـ higher date تاريخ بدء العمل وال
department اللي بيشتغل فيه لأ لأ وخليني أقول
الـ grade الدرجة الآن الـ salary هتتصير حسبت وين؟ هنا
أو إذا كنت تريد تضيف الـ attribute كـ salary بس
حسبة الـ salary هتفرج بين الاتنين أصدقائك بتقول
يعني أنا ممكن هنا أقول إن في عندي salary ك
value وهنا بـ compute salary وبالتالي
صار أنا في عندي different .. بدل ما أنا أضطر في
موضوع الـ inheritance أروح أكتب أو أعرف كل العناصر
هذه مجرد كلمة extend لحالها بتصير أقول له مثلاً
public class full-time EMB extend ال
EMB extend الـ EMB هذه مفهومها أنه جيبت كل العناصر
معاها الـ private item الـ private one مظبوط أصبحت
هدول كلهم موجودين وين؟ في داخل الـ class اللي موجود
عندها بكل بساطة في موضوع الـ extension طبعاً هذا
بعمل لي Hierarchy محترمة جداً لو أنا بدي أتكلم في
بيئة زي بيئة الجامعة باجي بقول والله الـ Hierarchy
اللي ممكن تكون في عندي person تمام؟ الـ person له
اسمه له رقم هوية أو رقم وطني له تاريخ ميلاد له
gender له كل المعلومات اللي احنا بنعرفها أساسياً as
a human بعد هيك بتفرع في عند employee وفي عند
student الـ employee في له employee number وفي له
department بيشتغل فيه وفي له salary بينما الطالب
في له student number وفي له department وفي له
faculty وفي له GPA معدل لاحظي أن الشغلات اللي أنا
عرفتها فوق في الـ person ما فيش داعي أني أروح
أعيد كتابتها وينفي الداخل وهذا نسميه الـ Code
Reuse تمام؟ وهذا أكثر شغلة بتحقق ليها في موضوع الـ
Inheritance مش بس أن صار الـ object أنه لما أنا
بانجل الـ object بانجل الـ code الـ executable code
كمان معاه لا ممكن الـ code نفسه ما اضطرنا أن أنا أروح
أكتبه مرة ثانية لما أنا بدي أوزع أو أشتغل في أكثر
من system أو أكثر من layout من layer عفواً الآن هذا
الجدول بكل بساطة بيقول لي هاي الـ inheritance الآن
الوصف هذا أن الـ class B انهرت from A هذا الـ class
C انهرت من B والـ class B انهرت من A بكل بساطة
يعني بقول أن الـ class C انهرت من A لو قلت لك قلت لك
هل الـ class C تورثت من A صحيح؟ في الحالة هذه ال
class A انهرت من الـ class C والـ class B انهرت من
الـ class AB inherits أو extends A و C extends A
هذه الحالة في الجاوا ليست موجودة أن الـ class
الواحد يعمل inherits من two classes تمام؟ ال
overriding احنا وقتنا خلص بتهيأ لي نكمل فيها المرة
الجاية طيب كمفهوم بنرجع لها مرة ثانية مرة جايه إيش
يعني override؟
إعادة أو بحيث بقول سيطرة وإعادة هيمنة تمام؟
override إعادة الهيمنة هيمنت مين؟ هيمنت الـ local
code على الـ global طيب يعني تخيلي تخيلي في موضوع ..
أرجع معكِ بس لشغلة في موضوع الـ global والـ local
variables لو أنا أجيت على مستوى الـ class وقُلت له
أنا فيه عندي integer x تمام وعملت له
initialization بعشرة في داخل الـ class عرفت method
في داخل الـ method بروح وقُلت له integer x بتساوي
خمسة
إيش هيصير هذه global وهذه local إيش اللي بيصير
دايماً الـ local
override بهيمن أو بسيطر على الـ global وبالتالي
التم تعريف وإن معناته أنه حصير التعامل مع الـ
variable وهذا هو نفس المفهوم اللي بنتكلم عليه
الـ object over الـ overriding معناته أن أنا بدي
أحاول أعدل أو أكتب code جديد في الـ local space هذا
اللي أنا موجود فيه حالياً عشان يهيمن أو يغطي الـ
code الأساسي اللي مكتوب عندها سواء كان على مستوى
الـ argument ولا على مستوى الـ return data type
نتكلم فيها إن شاء الله بداية المحاضرة الجاية إن
شاء الله على أمل أنه يوم السبت نحاول ننهي في موضوع
الـ review عشان نبلش في المسائل اللي عندنا إن شاء
الله تعالى في أي سؤال يا بنات؟