طب يا جماعة السلام عليكم اليوم إن شاء الله هنكمل
بموضوع ال 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 عمر الموظف float basic salary الراتب الأساسي
int degree اللي هي الدرجة الوظيفية مثلا درجة واحد
اثنين ثلاثة أربعة خمسة و هكذا number
of children الحالة
الاجتماعية متزوج ولا لا إيش نمثلها دي boolean
is married هل هو متزوج ولا لا عنده تأمين ولا
ما عندهوش تأمين برضه Boolean boolean has insurance
خصائص
ثانية كثيرة هذه جمعت أنا كل ال attributes للموظف
في مكان واحد علشان أستخدم ال class هذه بدي أنشئ
أنا أفتح ملف جديد للموظف اللي أتي عندي بعدين بقوله
employee سميها مثلا إيش E1 يساوي new employee أنشأنا
الآن object جديد بكل ال attributes بتاعته لنعبي
فيه بيانات يا بتعبيها من ال scanner E1 dot فيه
عندنا name ممكن تقرأ ال name من ال 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 بعدين
بدي أقول .. بدي أقول له if E1 dot is married إيش
يعني؟ إذا كان متزوج طبعا روح لل total salary زائد
يساوي مثلا عشرين طبعا
طب لسه ما خلصناش بده أشوف الآن if أو من غير حتى if
طيب ماشي if E1 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 E1.hasinsurance إذا
عنده تأمين إيش بنروح نعمل؟ بنروح للـ Total Salary
ناقص يساوي مثلا عشرين هذول عشرين دولار رايحين
للتأمين
وانتبه إيش الحالات اللي فيها if وإيش الحالات اللي
فيها if else، تمام؟ يعني هذه مثلا if وهذه if لحالها،
ما لهاش علاقه بمين؟ باللي فوق، أنا لازم أفحص إذا
متزوج أو لا، وبدأ أفحص برضه عدد الأولاد، وبعدين
هدول مربوطين ببعض، ليش؟ لأنهم الاثنين بيتعاملوا مع
ال 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 طبعا أكيد يا جماعة إن القيمة المرجعة لازم
تكون من نفس نوع مين؟ نفس نوع الـ return value بتاعت
ال method يعني ما ينفعش هنا ترجع مثلا string أو boolean
بنفع ترجع integer ليش؟ ال integer بنحط في ال
float، صح؟ هنا بدك تحط الخوارزمية اللي احنا
عملناها وين؟ في ال main بدل ما نكتبها ثاني، إيش
بنروح نعمل؟ ده بدنا ننسخ هذا الكلام كله من ال main
طبعا هذا بدي أشيله لإن أنا عرفت المتغير هناك و
بديش طباعة .. الطباعة هنا خليها طيب نيجي نرجع هنا
و نحط إيش ال code اللي عملنا اه بس طبعا هلجيت
ما فيش ده اتح .. أو غلط اتحط أي واحد أي واحد ده
عشان كنا في ال main لما دام أنا شغال جوا ال object
على طول بحط إيش مباشر
الآن هذا بحسب الحسبة كلها و في الآخر إيش بعمل؟
برجع الـ Total Salary واضح يا جماعة؟ في الأول ببدأ
بالـ Basic Salary و بعمل كل الحسبة و في الآخر برجع
الـ Total Salary إيش الميزة من وجود الـ Method؟
اللي أن أنت ما عليك بتقوله E1. .. هي إيش طلع لك هنا،
هي الـ Method Calculate Total Salary، بحطها في الـ
System.out.println عشان يطبع ليها إيش، مباشر بدك
تستخدمها لموظف ثاني، تستدعيها على طول ال 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 salary و ال 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؟ في ال
object برضه .. أنا لما أعيش، بعيش في الخريطة الرسم
ليها المهندس ولا بعيش في اللي جوا العمارة؟ في ال
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 لأن أول ما عملت زي هيك صار
عندي خطأ وين؟ في الـ main ليش؟ تعال شوف الآن لو أنا
قلت له 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
وتعملي باب يدخل على .. زي اللي إيش اللي سكر عليه
في غرفة وعمل عليه باب لل .. يدخل منه باب إيش؟ باب
يطلع صح ولا لأ؟ هدول بابين مش هدول بابين لمين؟
للـ name باب بدخل على الـ name وباب بيجيب للـ name وهذا نفس
الحاجة الـ 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 هذه؟ القيمة اللي بعتها المستخدم
في الـ main بيقوله إذا الـ 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 of children إيش بتاخد
integer وليكن n تمام؟ وإن بنحط الـ n هذا this dot
number of children يساوي n معايا قلت لها يا جماعة،
هاي الـ six لما بنعمل برضه method get public الـ get
هترجع القيمة يبقى لازم تكون المرجع إيش؟ integer
اسم الـ method get number of children، إيش هتاخد؟ الـ
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 عملهم إيش setters و getters كيف؟
لأ هو المتعارف عليه أنه يكون 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 اللي
هم الـ setters و الـ getters و لاحظ أن الـ setters و
الـ getters هدول public واحد بيقول طب لو حطيتهم
private مش غلط إنك تحطهم private لكن بطل اللي هو
الفايدة يعني ما .. آه تعال هنا هاي set name إيش
مالها؟ بطل شايفها، تمام؟ لأ الـ methods غالبا
بيكونوا إيش أو لازم الـ setters و الـ getters هاد
عمل زي اللي حط باب و لحمه بحق .. خلاص يعني مافيش
حد .. إيش فايدته؟ بطل الفائدة الـ setters و الـ
getters هاد بواب عشان تصل لمين؟ للمتغير البواب
لازم يكون مفتوح مش مفتوح على الآخر يعني .. يعني
هذا جوا الباب بكون فيه check يعني ماشي يا جماعة
فهمنا هذه الله يعطيكم العافية