طب يا جماعة السلام عليكم اليوم إن شاء الله هنكمل
بموضوع ال object oriented programming بمثال تاني
في البداية هناخد مثال آخر مش هيكون فيه أشي جديد
فقط تمرين على إنشاء ال classes و ال methods احنا
التعمق .. يعني المحاضرة الماضية أخدنا أمثل على ال
methods أحنا شفنا methods ممكن نترجع قيم ممكن
ماترجعش صح؟ يعني مثلا شفنا ال ..للطالب مثلا method
تطبع التقرير تبعه هذه method بترجحاش حاجة، كانت
ترجح void صح ولا؟ بعدين عملنا method تانية كانت
ترجح هل الطالب مثلا قدش نسبة المنح اللي بيستحقصح؟
كنا جوا ال method ان نفحص بعض الأمور زي مثلا جدش
معدله، جدش عليه ديون و بنقل عليها الحد نسبة المنح
اللي باخده هذه ال method بترجع قيمة صح؟ اللي هي
نسبة المنح شوفنا كمان في أخر المحاضرة method ان
انا ممكن ابعتلها قيمة طبعا انا امتى بابعتل ال
method قيمة؟ لأ انا ال method بتقدرش تشغل الى ما
تحتاج معلومة خارجيةإذا الـ method فقط بتحتاج ال
attributes بتاعة ال object مش محتاج أمررها شيء
تاني من برا يعني مثلا مثل ال substring هي بتشتغل
على ال character بتاعة ال string لكن هي محتاجة مني
معلومات أحددها أنا زي إيش اللي هو من وين لوين أقطع
في ال string الآن خلينا نشوف مثال تانيلأن أنت
مثلاً بدك تعمل برنامج لإدارة شؤون الموظفين في شركة
أو مؤسسة إيه الموظف والرواتب والأمور دي كلها لأن
أكيد أنت لما تجي تفكر في برنامج زي هيك هتقول والله
أنا بتعامل مع موظفين يبقى كل موظف إله بيانات اسم
الموظف ورقمه وعمره وعدد الأطفال اللي عنده ودرجة
الوظيفية والراتب الأساسي وهل عنده تأمين صح ولا لأ
تمام كل هذه بيانات للموظفين فبتلاقي الموظف الواحد
إله مجموعة بيانات مختلفة فعطول بتفكر إيشماذا نفكر
عندما نجد ان الموظف عنده بيانات مختلفة نجمع فيها
بيانات الموظف الواحد نضغط يمين ونقول له class
employee ونضغط
ال attribute ساعة الموظف string id رقم الموظف
string name integer
age عمر الموظف floatbasic salary الراتب الأساسي
انت degree اللي هي الدرجة الوظيفية مثلا درجة واحد
اتنين تلاتة اربعة خمسة و هكذا number
of children الحالة
الاجتماعية متزوج ولا لأ ايش بنمثلها دي بولين
is married هل هو متزوج و لا لأ عنده تأمين و لا
ماعندهش تأمين برضه Boolean Boolean has insurance
خصائص
تانية كتيرة هذه جمعت انا كل ال attributes للموظف
في مكان واحد علشان استخدم ال class هذه بدي أنشط
انا افتح ملف جديد للموظف اللي اتي عندى بعدين بقوله
employeeسميها مثلا ايش E1 يسوى new employee انشأنا
الآن object جديد بكل ال attributes بتاعته لنعبي
فيه بيانات يا بتعبيها من ال scanner E1 dot فيه
عندنا نيم ممكن تقرأ النيم من ال scanner او ممكن
تعبيه ايش مباشرة E1 dot ID رقم الموظف
e1.basic salary مثلا الف is
married false مثلا هذا أيش كلها بيانات موظف واحد
وها
كذا كل ما بدي أنشق موظف جديد بنشق object من
employee طيب نيجي الأن لو قلت أنا بدي أعمل حسبة
لراتب الموظف
تمام؟ الان واحد بيقول هي في عندك راتب الموظف هذا
بنسميه احنا ال basic salary مثلا الشركات طبعا و
المؤسسات عندها طريقة معينة لحسبة هو الراتب الأساسي
بعدين بيشوفوا مثلا ايش الدرجة اذا درجته مثلا واحد
بالراتب زي ما هو درجته اتنين بيزيد على الراتب
علاوةمثلًا 10% من الراتب بياخدها إضافة درجته 3
بياخده 20% 4 مثلًا 30% و هكذا مثلًا بيجي number of
children يعني بي .. الآن الموظفين مثلًا على كل طفل
بياخد مبلغ معين زيادة على الراتب تبقى الان is
married برضه إذا متزوج برضه بياخد زيادة على الراتب
الان إذا عنده تأمين بنخصهم في الآخر من الراتب قيمة
التأمين الشهري اللي بتدفعه تمامًا؟ هذه كلها حسبة
للراتب لأن احنا ممكن نيجي نحسب العملية هذه هنا
يعني ممكن نقول عشان نحسب مثلا نعرف ال float نقول
total salary هذا إيش؟ راتب الموظف الكلي مبدأيًا
راتب الكلي بيبدأ من وين؟ من ال basic salary بعدين
بدي أقول .. بدي أقول له ifE1 dot is married إيش
يعني؟ إذا كان متزوج طبعا روح لل total salary زائد
يساوي مثلا عشرين طبعا
طب لسه مخلصناش بده أشوف الآن if أو من غير حتى if
طيب ماشي fe1 dot number of children عنده ولاد أكبر
من أو يساوي صفر أكبر من صفر إيش بدنا نعمل؟ بدنا
نضيف مثلا على كل ولاد عشر دلانير ماشي؟ واضح ولا
لأ؟ إيش بدي أعمل؟ فبدي أقوله إن ال total salary
زائد يساوي
E1 dot number of children و أضرب في إيش في عشرة
يعني لو عنده مثلا تلت أولاد هيضرب في عشرة هتصير
تلتين هينضعف على ال total salary الآن ضال علينا ال
degree تمام فبنقول مثلا if degree
E1
.degree يساوي واحد أو يساوي اتنين يعني
إذا كان درجة أولى أو درجة تانية ضيفله عشرة في
المية من الراتب يعني ال total salary هيزيد بقيمة
عشرة في المية من قيمته salary زائد يساوي total
salary
درب صفر فاصلة واحد ايش يعني هذا؟ بيروح ل total
salary بضربه في صفر فاصلة واحد عشان يجيب عشرة
فالمية منه و بضيف وين؟ على ال total salary الان
else if ال degree يساوي
اتنين اه E واحد dot degree يساوي اتنين او E واحد
dot degree
أه اتنين عملناها تلاتة أو أربعة بيضيفوا
.. بيزيدوا بقيمة مثلا عشرين فالمية بيكفي زي هي و
هكذا هذه كلها أيش لحسبة راتب الكل للموظف في الآخر
تطبع أيشالـ Total Salary للموظف الآن هذه كلها حسبة
احنا عملناها ممكن تكون الحسبة أعقد من هيك وفي لسه
كمان يعني واحدة تانية مهمة if a1.hasinsurance إذا
عنده تأمين إيش بنروح نعمل؟ بنروح للـ Total Salary
ناقص يسوى مثلا عشرين هذول عشرين دولار رايحين
للتأمين
وانتبه إيش الحالات اللي فيها F وإيش الحالات اللي
فيها if else، تمام؟ يعني هذه مثلا F وهذه F لحالها،
مالهاش علاقة بمين؟ باللي فوق، أنا لازم أفحص إذا
متزوج أو لا، وبدأ أفحص برضه عدد الأولاد، وبعدين
هدولة مربوطين ببعض، ليش؟ لأنهم الاتنين بتعاملوا مع
ال degree، وفي الآخر Insurance برضه بده أفحصه، بغض
النظر عن كل اللي فوقوفي الآخر راتب الكل system.out
.println هو total salary تمام؟
هنا ال total salary ألف دلوا زي ما هو طبعا ليش
دلوا زي ما هو؟أحنا ماعبناش الأمور التانية مثلا
خلينا نقول has insurance نحطها إيش ال true و أي
واحد دو ال degree قيمته اتنين مثلا هو is married
false يعني مش هيكون عند ولاده مش متزوج طب
برضه ألف و إيش؟ ألف و تمانين ليش؟ لأن هو .. لأن
الدرجة تانية ضاف جدش على الراتب10% صح؟ صار يعني
1100 وطرحنا 20 تأمين صار 1080 طيب، الآن هذه
العملية كلها بدل ما أنا بحسبها و بعملها في ال main
بدنا نعملها method تمام؟ تعالي على employee و الآن
بدنا نفكر إيش كي بنعمل ال method أول حاجة قلنا
بنحط إيش؟ public إيش ال method هترجع في الآخر؟فلوت
سلري صح لو بتحط float إيش بتسميها ال method؟ يعني
calculate total salary تمام؟ calculate total
salary إيش بتاخد؟ لأ، بلزمها معلومات من برا؟ لأ،
هي إيش هتستخدم؟ هتستخدم هدولةتمام؟ اه فمش محتاج
انت تتمرن لها بيانات اضافية صح ولا يا جماعة؟
الان اول ما اعمل زي هيك طلعلي error ليش؟ لأن هو
بده return تمام؟ طيب أي method بتحتاج return أسهل
طريقة .. يعني بتعملها إيش؟ هي مش بدها float؟ هي مش
method بدها float؟ عرف في الأول إيش؟ float total
salary
مثلا خليه يبدأ من where؟ من basic salary وهنا إيش
بده ينحط؟ code للحسابات وفي الآخر إيش بده يرجع؟
return total salary هيك سكت، ليش؟ لأن ال method
رجعت القيمة اللي بده إياه هو بده float هيرجعنالك
float طبعا أكيد يا جماعة إن القيمة المرجعة لازم
تكون من نفس نوع ميننفس نوع الـ retain value بتاعت
المثل يعني ماينفعش هنا ترجع مثلا string أو boolean
بنفع ترجع integer ليش؟ ال integer بنحط في ال
float، صح؟ هنا بدك تحط الخوارزمية اللي احنا
عملناها وين؟ في ال main بدل ما نكتبها تاني، ايش
بنروح نعمل؟ ده بدنا ننسخ هذا الكلام كله من ال main
طبعا هذا بدي اشيله لإن انا عرفت المتغير هناك و
بديش طباعة .. الطباعة هنا خليها طيب نيجي نرجع هنا
و نحط ايش ال code اللي عملنا اه بس طبعا هلجيت
مافيش ده اتح .. او غلط اتحط اي واحد اي واحد ده
عشان كنا في ال main لما دام انا شغال جوا ال object
على طول بحط ايش مباشر
الأن هذا بحسب الحسبة كلها و في الآخر إيش بعمل؟
برجع الـ Total Salary واضح يا جماعة؟ في الأول ببدأ
بالـ Basic Salary و بعمل كل الحسبة و في الآخر برجع
الـ Total Salary إيش الميزة من وجود الـ Method؟
اللي أن أنت ماعليك بتقوله E1. .. هي إيش طلعلك هنا،
هي الـ Method Calculate Total Salary، بحطها في الـ
System.auditprintln عشان يطبع ليها إيش، مباشربدك
تستخدمها لموظف تاني، تستدعيها على طول ال method
يعني واضح كيف؟ لأن ال code كله موجود، بدك تعدلها،
يعني حتى فايدة ال encapsulation أن حتى في ال
maintenance بيسهل ال code بيجي المبرمش، بده يعدل
ال code، برجع لل class، بلاقي في ال algorithm،
بعدلها، لكن أنت معنى في ال main دائما تجلل ال
code، صح أو لا؟ لأن في حاجات هتيجي كتير في ال main
طيب هاي 1080 الان
شوف بدي أعدل على مثل شوية لو أنت قلت بدي أحسب راتب
الموظف تمام مع تحديد bonus له إيش يعني bonus؟
مكافأة مثلا مرات المؤسسة أو الشركة بكون عندها فلوس
كتير فبتقرر إنها توزع لزيادة على إيش على الموظف
يعني تخيلوا يعني مثلا تمام فمثلا إيش ممكن نعمله
جماعة نقوله calculate total salary وإن من ضمن ..
الآن يعني بدي أبعد أنا قيمة ال bonus وينفي الـ
method هو يحسب الحسبة وإذا في bonus مرسل أو مبعوض
بتضيفه أمين على الـ total salary يعني هنا طبعا ال
bonus ممكن أقوله float تمام ونحط متغير اسمه إيش
bonus يعني هذا ال method بتاعتي هتستقبل متغير من
نوع float اسمه إيش اسمه bonus طبعا هذا ال bonus
لسه ما استخدمنهوش صح ولا لأ لأن احنا بنحسب ال
salaryأو خلّيني نقول ايش basic salary زائد ايش؟
زائد bonus طبعا إحنا إذا بدناش نعطي bonus، إيش
بنعمل هنا؟ صفر، إذا بدنا نخفض الرواتب، إيش بنعمل
هنا؟ هذا، تحطه بالسالم، ماشي؟
طيب، فبنيجي .. طبعا الآن طلع لي خطأ وين؟ في ال
main، ليش؟ بقوللي أنت الآن ال method بتاعتكبتاخد
Parameter انت حاططها بدون Parameter تمام؟ فبنحط
مثلا إيش؟ خمسين فنرجع تسكت الآن طبعا مفهوم أن
الخمسين هذه هتنبعت و تتخزن في ال bonus و هيستخدمها
في ال method يعني هذا method بتاخد قيم واضح يا
جماعة؟ طب يا جماعة
الان يا جماعة معلومة صغيرة حكينا احنا ان المتغيرات
اللي موجودة جوا ال object بقدر استخدمها من جوا ال
method صح؟ يعني مثلا هدول اللي فوق ال id و ال name
و ال age و ال basic cell و ال degree و number of
children و ال is valid كلهم بستخدمهم من داخل ال
method عادي صح ولا لأ؟ بس فيه انا مشكلة صغيرة مش
مشكلة هي لما نكون في ال mainوبدنا نشوف المتغير
بتاع التأمين احنا مش حافظين اسمه لكن لو نحط E واحد
dot بطلع انه هنا ومن شكله بعرفه صح يعني مش لازم
اكون عارف كتابته كله لكن لما نكون جوا ال method
تمام انت بدك تكتب صح او تروح فوق و تنسخ و تحطه
تمام بدل ما تعمل هيك في طريقة إيش ممكن تعملها ممكن
تكتب كلمة thisو تقوله إيش بتعمل زيك dot إيش بيعمل؟
بتطلعه إيش this يعني هلقيت أنت لما تكون برا لما
تكون برا بتحط اسم ال object اللي عملته يعني هنا و
أنا في ال main أنشأنا E وعشان أوصل لجوا بكتب E
واحد dotطيب، الآن أنا شغال جوا ال object نفسه،
يعني أنا الآن من جوا موجود، تمام؟ هل .. غلط أقول
E1، لأنه مش هيعرف إيش يعني E1، تمام؟ مدام أنا شغال
جوا ال object، ممكن أكتبله كلمة إيش، this بدل مين؟
بدل E1 وE2، لأنه أنا شغال جوا .. جوا ال object،
هذه مش .. مش إشبارية، هذه فقط لإيشلو انت حابب انك
تشوف المتغيرات ترجع للحاجات الموجودة في ال object
تقوله this dot هي جابلك اياهم طبعا لو كتبتها
number of children لحالها بدون this لحاله بفهمها
خلاص بيعرف ان هذي اللي تابع لل object لكن اذا انت
منسيت ايش اسمها ومنقصر تروح فوق تنسخها و تحطها
ممكن على طول تكتب this dot
هي جابلك اياهمتمام؟ هي has insurance سواء
كتبتها ب this أو بدون this، أيش؟ نفس الحاجة تماما،
بس هذا this إيش بتساعد يا جماعة؟ إنك تشوف
المتغيرات اللي فوق، تمام؟ إيش معناك اللي بال this؟
لأن أصل ال method و ال attributes موجودين في نفس
المكان، في نفس ال object فبقوله هاتلي كإني بقوله
روحلي على نفس ال object و هاتلي الحاجات اللي
موجودة فيهتمام؟ أه بالظبط هذا ال object لأنه عشان
نكون ضغطين في الآخر هذا employee هنشق منها أكتر من
object و has insurance لكل object له إيش؟ له has
insurance صح ولا؟ كل object له name كل object له
ID فانا فعليا ال method بتاعتي هذه بتدخل على مين؟
على ال attributes الخاصة في ال object E1 مش هذا هو
E1 هو هذا ال object اللي أنا شغال جواه هو نفسهاللي
عملته هنا، زي ما قلنا ال class هي فقط تخطيط، مدام
أنا بتعامل مع data و بحط قيم و كذا، أنا بحطهم و
بخزينهم وين؟ في ال object ولا في ال class؟ في ال
class برضه .. أنا لما أعيش، بعيش في الخريطة الرسم
ليها المهندس ولا بعيش في اللي جوا العمارة؟في ال
object يعني احنا بنحط بيانات في ال object بنعبي في
ال attributes بتاعة ال object بنقرأ ال attributes
بتاعة ال object تمام هذا this degree بروح ل degree
بتاعة ال object تمام هذا ال object كله تم إنشاءه
بناء على التخطيط الموجود في ال class تمام فبنكون
دقيقين في المسميات ال classهذه بصلة أنشأت منها قبل
حاجة اللي أنشأته هذا بسميه object تمام أنا الآن
داخل على ال attributes بتاعة ال object واضح يا
جماعة طيب
الآن فهمنا this هذه خلينا
ندخل على أشي جديد يا جماعة
في حاجة أنا قلتلكوا يعرفوها زي ما هي وقلنا هنشرحها
بعدين اللي هي إيش اللي هي ال public هذه إيش هي
كلمة public عام أو شائع اللي بيحكيلي في ال object
oriented programming أنت عندك تلاتة scopes أو تلت
مستويات من الوصول
للبيانات أو ال functions في عندنا حاجة اسمها
publicو في حاجة اسمها private و في حاجة اسمها
protected لأن
احنا في المثاق هذا هنشرح ايش يعني public و ايش
يعني private و هاد ال protected هتتغطى الفصل
القادم تمام فخلينا نشرح ايش يعني private و ايش
يعني public اول حاجة يا جماعة بقوليالـ attributes
اللي فوق عندك دولة اللي هو ال name و ال ID و ال
age by default هم بيكونوا مكتوبين ايش public زيك
يعني انا لو ما كتبتش كلمة public هم بيكونوا
بيكونوا معامولين public طب ايش يعني كلمة public
كلمة public معناها باختصار شديد بقدر اوصلهم من اي
مكان من اي مكان معناها لو روحت على ال main و قلتله
E1 dot هشوفهم و هستخدمهمتمام؟ لكن لو أنا روحت لأي
واحد من هدوء .. لو نفس ال attributes وحطيتهم بدل
ما هي public كتبت إيش؟ private
هنا حطيتهم كلهم private لأن أول ما عملت زي هيك صار
عندي خطأ وين؟ في المين ليش؟ تعالى شوف الآن لو أنا
قلتله E1 dot أين راحوا؟ بطلوا يبينوا بالمرة اختفوا
ليش اختفوا؟ لأنه حطيتهم private ايش هناك كلمة
private؟ خاص، يعني خبيهم، دي يجي يقولوا خبيهم، هذي
حاجة private، حاجة خاص طب و الحل ما هو احنا ..
اصلا ليش عاملينهم احنا؟عشان نحط فيهم بيانات و نقرأ
منهم بيانات طبعا على طول قاللي هدول أنا غلط حتى حط
الماوس عليه إيش بيقوللي ده استفيد من الخطأ name
has private access name has private access يعني
الوصول إليها private مابتقدرش تعبيها زيك طب الحل
بيقوللي أو قبل ما نوصل للحلبنصحوا دايما في الـ
object oriented programming خلّي ال attributes
بتاع ال class دايما private مش لاحظش بقول خلّيها
دايما private و احنا بقول طب انت كنت تعلمنا غلط
يعني اننا من تلت محاضرات و احنا بنخليهم ايش public
و بنستخدمهم و بنحط فيهم عادي ماشي هذا في البداية
بس الآن هم بنصحوا و بقول خلّيهم private و أعدّلهم
و أوصللهم من خلال methodsكيف يعني؟ يعني اتطلع
معايا هنا، ارجع على الـ name الآن قولا واحداً ال
name مستحيل أقدر أوصله يعني عمرك مابتقدر تقوله حط
في ال name أحمد ولا تقدر تقوله اطبعلي name خلاص هو
مش شايف حاجة اسمها name طيب و الحل؟ الحل أنه مدام
ال name الآن مسكر بدي أعمل بوابة للوصول له مين
البوابة هذه هتكون؟ هنيجي هنا في ال class نفسها و
هنعمل لل name two methodsواحدة method بتعدّل قيمة
ال name والتانية لقراقة قيمة ال name هذا لإيش؟ لكل
attribute يعني مثلا ال name طالع معايا هنعمل
method زيه public ها لاحظ ال method إيش نوعها
public يعني بقدر أستخدمها ال method ولا لأ؟ بقدر
طيب ال method هذه شكلها كالتالي بدي أعملها void
set name string inطيب، مين يقوللي هذا ال method
إيش بترجع؟ لأ، بترجعاش حاجة، إيش بتاخد؟ بتاخد ال
string الان، بالدجة أقول له name يساوي in أو this
dot name هي هي، صح ولا؟ يساوي in طبعا، لاحظ أنه
لما أقول له thisببين هنا يعني من جوا ال object إيش
بقدر أشوفها حتى لو إيش public لأن هدول موجودين مع
بعض this.name يسوء in طب اللي أنت شايفه هال gate
إيش هذا ال method بتعمل؟ مين يقوللي إيش ال method
هذي بتسوي؟ بتحط قيمة في ال name بس من وين القيمة
هذي هتيجي؟من اللي هستدعي الـ method صح؟ أنا لما
استدعي الـ method set name هبعد قيمة و هتنحط win
في this dot name هل في داعي الـ method هذه ترجح
حاجة؟ لأ، هي معمولة لإيش، عشان تحط في الـ name
قيمة استخدمت الـ method هذه؟استخدمتها انا لسه انا
انشقتها و انا استخدامها في ال main بنيجي على ال
main و بنقول له هل جيت هنا انا بضأ حط في ال name
بتاع ال object E1 كلمة احمد كيف؟ بروح ل E1 E1 و E2
غلط هذ اللي فوق هذ اتفقنا انها مالها هذ غلط ايش
البديل عنها؟ اقول له E1 و استخدم ال method ايش؟
set name و ابعتله احمد
لقيت الـ method set name أخدت أحمد وهي إيجينا هنا
أحمد الخزن وين في this dot name طيب احنا هنا حطينا
قيمة في ال name طيب افرض انا بدأ أروح أطبع ال name
الان كيف بنطبع احنا system dot out dot printlnالأن
E1.name غلط لأنه ما بشوفش ال name لأ set name لو
جيتوله set name تمام هذي لإيش أنا أعملها ال
method؟ هذي مش لأ مخرج أصلا أنا عملها بس عشان أضع
قيمة في ال name فبدنا إيش نعمل؟ بدنا نعمل كمان
method إيش بدها ترجع؟ ليش عملها أنا؟ عشان تقرأ لل
name بخليها ترجع ال string إيش اسمها؟ get nameهذه
كاسيت name وهذه get name إيش بتاخد؟ ولا حاجة أنا
ليش عملها؟ عشان بس أقولها return name
string get name return name بس هذا method بسيط جدا
معمولة ليش؟ عشان أترجع لل name هذا method مافيش
سطر واحد بس عشان أترجع لي ال nameالان تعالى هنا و
بتقوله E1.getname إيش هيعمل هنا؟ هيطبع ليه ال name
أنا اللى صويته فعليا يا جماعة إن حطيت ال name
private و بعدين عملت two methods واحدة اسمها
setname عشان أحط قيمة في ال name و واحدة اسمها
getname عشان أقرأ قيمة ال name هذا بس لمن؟لن name
هذا الكلام بيعمله لمين يا جماعة لكل ال attributes
اللي فوق مثلا عندي انا attribute اسمها id ايش
نوعها ال id او خلينا ناخد ال age مثلا ال age ايش
نوعه integer فبنروح برضه نعمل method public void
اسمها set age دايما ال set بتكون void ليش؟أنا بديش
أرجع منها قيمة أنا بس عاملها عشان أحط قيمة في
المتغير عشان أمرر قيمة تمام؟ set age إيش هتاخد
هنا؟ integer a ليش مررت ال integer هذا؟ عشان أخده
و أحطه وين؟ في ال age بدي أقول له this dot age
يساوي a هذا عشان أعبق قيمة في ال age اللي أنا بدي
أقرأ قيمة ال age public اللي أنا .. إيش هترجعي ال
method هذه؟Integer إيش اسم ال method؟ getAge إيش
بتاخد؟ ولا حاجة أنا ليش عامل ال get هذه عشان أقوله
بس return Age أو return this dot Age
أه انا هرجعكوا .. يعني أكيد في عقولكوا كلكوا
بتقولوا طب ليش اللفة هذي؟ وين .. يعني وين دانك يا
جحيم؟ أه طب ما إحنا نكون مبسطين و هد معمول public
و بنحط فيه و بنجرى منه إلا يعني تعجدها تحط private
و تعملي باب يدخل على .. زي اللي إيش اللي سكر عليه
في غرفة و عمل عليه باب لل .. يدخل منه باب إيش؟ باب
يطلع صح ولا لأ؟ هدول بابين مش هدول بابين لمين؟
للنامباب بدخل على النام و باب بيجيب للنام وهذا نفس
الحاجة ال age له بابين برضه طيب ليش الغلبة هذه؟
طيب الغلبة هذه ليش يا جماعة؟ هلجيت إذا أنا ال
scope تبع المتغير مفتوح تمام؟ مافيش restrictions
إيش نوع ال data اللي بحطها المستخدم؟ يعني مثلا إذا
كان الوضع زي هيك ممكن أجي أنا لل age و أحط فيه
عمري أنا
60 سنة او 150 سنة او ناقص 20 سنة حد بيقدر يمنعني
ان اعمل هيك لو ايش هذا لو ان ال age معمول public
لو هذا public بصير
احط القيم اللي بديهاصح؟ حد بمنعني؟ لأ طبعا واحد
بيقول إيش ممكن تعمل ممكن تيجي تقوله F القيم اللي
دخلها المستخدم أكبر من أو أصغر من 0 طلعله إيش؟
طلعله error صحيح بس الأفضل أن ال F هذه ما تنحطش
هنا الأفضل أن أنت تحطها في ال class أي حاجة اللي
لها علاقة بشروط المتغيرات تنحط وين في ال class
أفضل كيف؟ بتيجي هنا في ال employeeوبنحط هدف نرجحها
ايش؟ private الآن بنيجي هنا في ال set age تمام؟
بنقول له if شايفين وين أنا شغال؟ في ال set age
مررت ال a مين ال a هذه؟ القيمة اللي بعتها المستخدم
في المين بيقوله إذا ال a هذه أصغر من صفر and ال a
أكبر من 100 or
or الـ A أكبر من 100 اطبعلي system.out.println
invalid age else .. else
إيش يعمل؟ لأ بعمل حاجة إيش بيسوي لو else؟ بحط ال A
في ال age يعني ال A ما له يكون صحيح تمام؟ هذا وين
التحقق حطيته؟في الـ method فالباب هذا اللي أنا
حاطه عشان مايدخلش مين مهبه و دب على مين جوا صح ولا
لا الباب هذا فحص تعال انت نعمل check مسموح لك تدخل
ولا لا إذا مسموح تفضل تمام؟ قبل كان ال variable
مفتوح على البحر مين بده يحط عليه فيه قيم يحط فجت
لأ سكرنا عليه بإيش؟ ب methods إيش بنسميهم هدول ال
methods? setters؟و getters setters عشان إيه؟ عشان
نحط قيمة getters ليش؟ عشان نقرأ قيمة لأن زي ما
عملنا لل name و ال .. و ال age لكل الباقي بدنا
نشتغل زي هيك صح؟ تعالوا نعمل واحدة كمان كيف؟
تمام هو الأصل
في اللحظة اللي انت محتاج قيود بتضيفها على ال
method في أبسط صورة هذا ال method إيش هي بتعمل؟
بتحط القيمة و بترجع القيمة تمام تعالوا ناخد واحدة
تانية number of children هذه برضه حطناها private
إيش بده أعمل الآن يا جماعة؟ two methods واحدة set
وواحدة get إذا نبدأ بال set public إيش بترجع ال
set؟ void اسمها set number ofchildren إيش بتاخد
integer وليكن n تمام؟ وإن بنحط ال n هذا this dot
number of children يساوي n معايا قلت لها يا جماعة،
هاي ال six لما بنعمل برضه method get public ال get
هترجع القيمة يبقى لازم تكون المرجع إيش؟ integer
اسم ال method get number ofchildren، إيش هتاخد؟ ال
get بتاخدوش حاجة، تمام؟ return this
dot number of children بسيطة
يا جماعة، صح ولا لأ؟ أنتوا الآن أفهمتوا إيش فايدة
ال set و ال get؟ أنا سكرت على المتغير، خلته
privateوعملت two methods public واحدة اسمها set
واحدة تبدأ ب set والتاني بتبدأ ب get عشان الأولى
تحط قيمة في المتغير والتاني تقرأ قيمة من المتغير
ماشي
يا جماعة طيب لأن واحد بيقولي أكيد هذا في سؤالكم
افرض أنا عندي خمسين attributes بدي أروح لكل واحد
وعملوا set و get و set و get معناها لما اعمل ال
class و بدى من هنا للسبوع الجاى لما اخلص يعني عندى
خمسين attributes معناها بدى كام methods set و get؟
بيدك مين تمام؟ الان تعالوا يا جماعة شايفين هذه
class احنا عملناها سابقا اللى هى مين؟ بتاعة مين؟
بتاعة ال student هدولة كلهم مالهم public صح ولا؟
بدى اخليهم ايش؟ private
لحظة لحظة شويه
الان لما عملناهم private لازم نعمل ايش لكل واحدة
فيهم ستة وقت كام واحدة هم واحد اتنين تلاتة اربع
خمسة ستة سبعة تمانين يعني بدنا ست عشر method تمام
الان اروح ل project انتبه معايا وروح ل class
student شايفينها انا اعلمت عليها و اعمل click يمين
تمام و بتروح قوله refactor تمام و بتختار خيار اسمه
encapsulate fieldsفي خيار اسمه encapsulate fields
ايش يعني encapsulate fields؟ خلّى ال fields فيه
كبسولة ايش هي الكبسولة اللى احنا بنستخدمها دايما؟
method تمام اعمل هادي اضغط هذا الخيار واختار قلّه
select all وقلّه refactor هتلاقي ايش؟ ان لكلهم
لحالهانزل تحت هنا عمل لك هاي get name و هاي set
name get age و set age get id و set id لكل ال
attributes عملهم إيش setars و getars كيف؟
لأ هو المتعارف عليه أنه يكون 6 و get انت بتسمي
الإسم بداكية تمام؟ هاي ال return بيبين هاي get
balance إيش برجع؟ return balance set balanceإيش
بياخد؟ متغير اسمه balance بياخد ال balance و بيحطه
وين؟ في this dot balance طبعا بيفرج هذا المتغير عن
مين؟ عن this dot balance هذا متغير أنا مررته أخدته
و حطيته في this dot balance اللي فوق هنفصل هذا
المرة الجاية فالsetters و getters كيف يعني؟ يعني
هذه تخيلها إيش أنه أنا مررت متغير لأ الترتيب مانوش
دعوةفي ال methods مش مهم الترتيب ممكن تحط ال set
فوق و ال get وين تحت الترتيب مش مهم واضح يا جماعة؟
مالوش علاقة أصلا أنا ممكن ال attributes هدولة
شايفينهم اللي فوق أخدهم من فوق و
أحطهم وين و أحطهم تحت مافي أي حاجة بتمنعني مافيش
ترتيب يعني بقىتمام؟ بس يعني احنا اتعودنا ان نكون
ال attributes فوق و ال methods تحتهم و بأي ترتيب
يعني ممكن تحط ال setters و ال getters بتاعون ال
balance في الأول و بعدين تحط ال setters و ال
getters بتاعون ال name واضحة
جماعة هذه؟ فهي ال employee بنفس الطريقة ممكن .. هى
مرة تانيةهي ال employee click يمين refactor
encapsulate fields select all بس في منهم احنا
عملناه صح ولا؟ يعني احنا عملنا لل name وعملنا لل
age بنشيله وعملنا لل number of children هاي
refactorبرضه اعمل ايش لان لكل ال attributes هى age
set age و get age calculate totals لها دى احنا
عملناها calculate totals هى get ID و set ID طبعا
هو بحط comments ممكن تشيل ال comments هدوله هى get
ID ايش بترجع هى بترجع ID الان set ID بس خلينا
نتمهي على النقطة هدى يا جماعة الان طلع معايا هنا
هدى ممكن تلخبطكوا شويةset id ايش بتاخد ال string
اسمها id بعدين راح أشهر من هذا السطر الغريب بقول
حط this.id يساوي id لأن در بالك في عندنا متغيرين
اسمهم id في المتغير اللي موجود داخل ال method وفي
المتغير اللي موجود وين في ال attribute طبعا فى فرق
بينهم هاد عامل زي إيش يا جماعة زي لما يكون عند F
statement عرف جواها متغيربس في الـ F بيقبلش ان
يعرف متغير بنفس الاسم الموجود فوق لأن في ال class
ممكن تعرف متغير داخل ال method بنفس اسم متغير في
ال attribute بس كيف نميز بينهم؟ هداك ماشي ما هو مش
.. ليش حطه أخضر؟ لأن دالبالك بدون this هيك اتلخبط،
هيك حتى هو التخم، إيش بقول ليه؟ بقول انت جاعد
بررتلي ID وقعد بتحط ال ID في نفس ال ID هعلمليها
إيش بالأصفر وقاللي assignment to itself إيش أنا
assignment to itself؟ تحط حاجة بنفسها لأ عشان نميز
الآن بقول .. بقوله أنا جصدي أن ال ID هذه خد حطها
وين في ال ID اللي فوق كيف ميزت ال ID هذه عن ال ID
اللي فوق؟بالـ this يعني هنا الـ this إليها دور مهم
ليش؟ ليش إليها دور مهم؟ لأنه في عندي متغير في ال
function أو ال method نفس اسم المتغير فوق فعشان
أميز بينهم هستخدمت this لأن ممكن أحنا تعمل زي ما
أنا سويت قبل شوية تطلع معايا فوق في ال method set
name في ال set name إيش حطيت المتغير هنا؟ and ال
and هنا لو ماحطيتش this عادي، مالتخمش هوخلاص، مدام
هنا مافيش name متغير جوا ال method اسمه name يبقى
بفهم إن ال name مافيش غير mean اللي موجودة في ال
object لكن لو كتبت هذه name و
هذه خلتها name، هيك غلط، بقولي طب أنت بتحط قاعد
نايم في نايم، هذه غلط، تمام؟ بقولي لأ، أنا قصد
إيش؟ خد ال name و حطها في this لتنام، يعني .. يعني
هذه .. شوف هذه حالة ال this فيها مالهاأه مهمة يعني
أنا قصدي this ال name الموجود في ال object يبقى
اليوم اللي يا جماعة احنا اتعرفنا على أشي مهم اللي
هو إيش ال access scope أو مدى الوصول للمتغيرات ال
default بكون public تمام إنه بقدر إيش أوصله من أي
مكان لكن في scope تاني اللي هو private اللي بنصحه
إنه ده ما تستخدمه حط المتغير privateوغيره او بتقدر
توصل اليه من خلال ايش؟ method يكونوا public اللي
هم ال sitters و ال getters و لاحظ ان ال sitters و
ال getters هدولة public واحد بيقول طب لو حطيتهم
private مش غلط انك تحطهم private لكن بطل اللي هو
الفايدةأه يعني ما .. أه تعال هنا هاي ست نيم إيش
ماله؟ بطل شايفها، تمام؟ لأ ال methods غالبا
بيكونوا إيش أو لازم ال sitters و ال getters هاد
عمل زي اللي حط باب و لحمه بحق .. خلاص يعني مافيش
حد .. إيش فايدته؟ بطل الفايدة ال sitters و ال
getters هاد بواب عشان تصل لمين؟ للمتغير البواب
لازم تظهر مفتوحةمش مفتوح على الآخر يعني .. يعني
هذا جوا الباب بكون فيه check يعني ماشي يا جماعة
فهمنا هذه الله يعطيكوا العافية