طبعا السلام عليكم، المحاضرة الماضية بدأنا في موضوع
الـ object oriented programming، object oriented
programming
يعني البرمجة الشيئية أو البرمجة المعتمدة على
الأشياء، وفي تفصيل إيش فايدة البرامج الشيئية حكينا
أنه احنا في بعض البرامج اللي بتعامل فيها مع بيانات
كتير هيكون عليه الصعب أن أتعامل مع الـ variables مفصل
عن بعض، يعني مثلا قلنا لو أنا بتعامل مع بيانات طلبة
الطالب الواحد عبارة عن عدد كبير جدا من البيانات
رقم الطالب، اسم الطالب، عمره، تاريخ ميلاده،
العنوان تبعه، رقم جواله، إيش تخصصه، أي سنة هو
موجود، إيش المواد اللي خلصها، اللي رسب فيها، إيش
الخطة بتاعته، تفاصيل كتيرة جدا، تمام؟ الآن، أنا
لو بدي أمثل في البرمجة العادية، المعلومات هذه
كلها، بدي أعمل لكل شيء variable معين، يعني مثلا
الطالب ممكن يحتاج 20 variable ما بين string و
integer و list وغيره، طبعا إذا كنت بتعامل مع الـ 1000
طالب بدي 20 variable في الـ 1000 طبعا فهيكون العدد كبير
جدا، فأقول في حالات اللي زي هيك بيربكنا الربط بالشغل
بحيث أننا نجمع بيانات الطالب في ملف، صح ولا؟ أنت
شوفت من الذاكرين المثال اللي قلنا لكوا ورق وجمع
الملفات؟ نجمع بيانات الطالب كلها ومعلوماته في ملف
واحد، طبعا احنا بنسميه في البرمجة object واحد، بصير
أتعامل مع الطالب كـ object، الـ object هذا بيحتوي على
كل معلومات الطالب، وقت ما احتاج لأي معلومات من
معلومات الطالب بجيبها من خلال الـ object هذا، يعني
أنا لو أنا عندي طلاب كتير، ولهم معلومات، كل نقطة من
هذا عبارة عن معلومة من معلومات طالب من الطلاب، فانا
بجمع، بقول أن هدول عبارة عن معلومة طالب معين، وهدول
عبارة عن معلومة طالب ثاني، وهدول عبارة عن معلومة
طالب ثالث، في الآخر أنا بتعامل مع تلت حاجات، فحولها
أفضل وأسهل في الـ code ما أتعامل معه خمسين حاجة
مبعترة ومفصلة، تمام؟ طيب هذا كان المقدم اللي شرحناه
المحاضرة الماضية، بعدين بدينا نطبق الكلام هذا عملي
إجراء مثلا لبيانات طالب، قلنا أول حاجة لازم نمثل
بيانات الطالب أو نحدد هيكلية الـ object، عشان هيك
عملنا حاجة اسمها إيش؟ الـ class، الـ class إيش هي؟
فيديوتها بتحدد شكل الـ object كيف هيكون، الـ class هي
عاملة زي خريطة العمارة، بتحدد هي كلية العمارة بتحدد
كل كبيرة وصغيرة فيها، لكن فعليا مالهاش وجود، الـ
class اللي اللي وجود مين؟ الـ object اللي بننشئ من الـ
class، العلاقة ما بين الـ class والـ object زي
العلاقة ما بين الخريطة العمارة والعمارة، الخريطة
مالهاش وجود، العمارة هي اللي لها وجود، لكن في
النهاية العمارة أنا أنشأتها بناءا علشان الخريطة
وهذه نفس العلاقة ما بين الـ object والـ class، طيب
يبقى أول خطوة أنا بعملها بعمل class، عشان هيك بكرا
لأن لما الواحد يشرع برامج كبيرة بيصير أن كل حاجة
موجودة في البرنامج بيحاول يمثلها في class، مثلا أنا
بتعامل مع برنامج للجامعة، بدي أكون عنده class
بتمثل الطالب في الجامعة، بدي أكون عنده class بتمثل
المدرس في الجامعة، لأن المدرس برضه عنده بيانات
كثيرة، وبدي أكون عنده مثلا class تمثل الـ course
اللي بياخده الطالب، لأن الـ course برضه بيانات
كثيرة، رقم المادة واسم المادة وعدد ساعاتها ووصف
المادة، تمام؟ هذه كلها معلومات خاصة في الـ course
فبجمعها كلها في class اسمها course وبننشئ منها
objects، طيب خلينا ناخد مثال غير مثال المحاضر
الماضي، ما عرفش
إذا أعطيته أو لا، اللي بدنا نعمل مثال الـ items
الموجود في الـ supermarket، بدون برنامج الـ
supermarket، برضه الـ item الموجود في الـ supermarket
له بيانات كتير، رقم الـ item اسمه نوعه سعره، إيش الرف
اللي موجود فيه، معلومات كتير، طبعا، ماشي، ماشي، بده
يده ثاني، طبعا اللي بيانات كتير، فبنروح نعمل class
في ملف مستقل لحاله، class بنسميها مثلا product، طبعا
طيب بدنا نتفق بعدين إيش البيانات اللي موجودة في الـ
class، قولنا الـ ID والـ name والنوع والـ price بيكفي
أربعة، طبعا لكل واحد من الأربعة هدول بتعمل two
methods، إيش بتسميهم هدول؟ setters و getters، set to
get method، setters و getters، إيش فايديتهم هدول؟
setters و getters أنه أخزن المعلومات للـ object و
اقرأ المعلومات المخزنة في الـ object، طيب في method
بتعمل def اسمها set ID
أول مفتاح القوس لحاله كتب لكلنا كلمة self، الآن بحط
فاصلة ID على أساس أنه من الـ 6 ID بده امرر أنا من
البرنامج الأصلي تبعي، الـ ID، الألوان بده الـ ID هذا
يتخزن، لسه الـ ID هذا مخزنتوش، أنا بده أقول أروح للـ
self وأنشيء فيه متغير اسمه ID وأخزن فيه القيمة ID
هلجيت هذه الـ ID غير الـ ID هذه، هذه عبارة عن متغير
أنشأه داخل الـ self، إيش هو الـ self؟ حكينا الـ self هو
الآن هو لما ينشئ الـ object مش موح بيحجز مكان في
الذاكرة، هذا المكان هو إيش؟ هذا الـ self، فانا لما
أحكيله self.id يساوي ID، معناه القيمة اللي بده
مررها الـ user من خلال الـ method set ID، بيده ينشئ
متغير اسمه ID داخل الـ self، تمام؟ هاي اسمه ID
ويخزن فيه القيمة اللي مررها الـ user، تمام؟ طبعا يعني
هذا ممكن أغير اسمه، هذا أسميه X، تمام؟
بس احنا بنحط إيش؟ أن يكون نفس الاسم على أساس أنه
موجودش، مثلا لو أنا عنده عشرين مثل أحط X وY وZ وW
أقلّف أسماء، تمام؟ بس بدأ أكون فاهم أن هذا الـ ID غير
الـ ID هذا، طيب زي ما عملت set بدي method عشان أقرأ
من الـ self، def getID
برضه jabless، دايما أول مفتاح قوس في أي method داخل
class بيجيب للسلف، ليش؟ لأنه فعليا هو الـ object في
السلف، هو اللي فيه البيانات اللي بقدر أخزن عليه وبـ
أقرأ منه، لما بقوله الـ self.id، هدول set to get
method لـ ID بس اللي أنا زيهم بدي أعمل def set
name
بنفهم المبدأ، لأن كل متغير داخل الـ class بعمله set
to get method، أنا هنا أنشأت الـ class، هل استخدمتها؟
لا، بندخل الآن على الـ program أو الملف اللي بدكته
في الـ code، الـ program اللي هيشتغل الـ class، طبعا
مابتشتغلش، هذه عاملة زي الـ function، مابتشتغلش إلا
لما أستدعيها، طبعا، طيب الآن بدأ أطلب من المستخدم
يدخل عدد من الـ product، أو قبل ما يدخل المستخدم
خلّينا ننشئ احنا products manually، تمام؟ بيقول P1
يساوي product
from P1
يساوي product، هيك إيش عمل يا جماعة؟ أنشأ مكان في
الذاكرة فاضي لسه، تمام؟ وعليه مؤشر بيأشر اسمه إيش؟
اسمه P1، يعني أنا أنشأت الـ object، بدي أعبيه بيانات
لأنه لسه فاضي، كيف بيعبيه بيانات؟ عن طريق إيش؟ عن
طريق الـ Set Methods، كيف بقرأ بيانات منه؟ عن طريق
الـ Get Methods، فانا أقول P1.Set ID، بكتب الـ ID على
الـ product P1
.Set Name P1
.Set Price
طبعا هك أنا أش .. أش .. أش اللي بسوي أول ما أقول
له set ID، هيبعت القيمة هذه صح؟ وين هتروح القيمة
هذه؟ هتيجي لهي الـ set ID، هي القيمة اجت هنا، هيروح
ينشأ في الـ self متغير اسمه ID ويعطيله القيمة اللي
أنا ماركتها، يعني هنا هيحجز مكان اسمه ID ويعطيله
الرقم اللي أنا حطيته طبعا؟ بعدين لما أقول له set
name
نفس الشيء بروح هنا بكتب كلمة milk مثلا set price
هنا بحط عشر هذا شكل ال object في الذاكرة زي ملف
موجود فيه مجموعة بيانات بس في النهاية أنا بتعامل مع
دول البيانات ممكن يكونوا أكثر دلوقت ممكن يكونوا
عشرين أو خمسين حاجة بتعامل معهم كلهم باستخدام من
حاجة واحدة اللي هي إيش اللي هي P1 هذه الميزة أن
أنا جمعت عشرين حاجة في إيش في حاجة واحدة اسمها P1
اللي هي object طب
نعمل product يعني P2 يساوي product و بدي أدّي برضه
P2 أحط فيه بيانات طبعًا أول ما أقوله P2 يساوي
product إيش بيعمل؟ هيمشق مكان جديد في الذاكرة غير
هذا تمام هيمشق هيفتح مكان جديد تمام وعليه مؤشر اسمه
إيش P2 الآن بنا نعبّي هذا المكان تمام فبقوله P2
.setID
P2
.setID
P2 ستة price هاي
عملت product ثاني و عبيته برضه بيانات والبيانات
بتاعة ال product الأول غير البيانات بتاعة ال
product الثاني طيب الميزة اللي جيت أن كل بيانات ل
product الواحد مجمعة في حاجة واحدة P1 و P2 بقدر
الآن مثلا نعمل list وأحط فيهم مين؟ ال list P1 و P2
خلاص بصيغة أنا كل كومة البيانات هذه بتعامل معها
حاجة واحدة وبقدر أنا أقول for I in list واحد إيش
بده أعمل أنا؟ بده أعمل loop ولكل item بده أطبع
اسمه وسعره تمام؟ for I in list لكل I بده أقول print
I.get name يعني أنا عشان أقرأ البيانات الموجودة
فيه باستخدام ال get method تمام I.get name و
بالضبط معاها السعر I
.get price
طيب هي طبعًا ال product هو إيه؟ يعني البرنامج هذا لو
أنا بدي استخدم class هتغلب كثير معناه بدي أروح
أعرف لل product الأول كم متغير؟ ثلاث متغيرات ولل
product الثاني ثلاث يعني بعد ما أتعامل معه حاجتين
بدي أتعامل معه ست حاجات طيب
بقدر أخلي المستخدم يدخل بيانات ال product أنا بقدر
أدير البرنامج كيف؟ مثلا بدي أطلب من ال user أن يدخل
بيانات ال product لحد ما يدخل مثلا علامة سلم واضح
كيف بدي أدخل بيانات ال product لحد ما يدخل علامة
سلم خلاص إيه؟ أطبع ليهم كلهم بياناتهم طيب أول حاجة
بدي أعمل list فاضية ليش؟ على أساس أي product أنا
بننشئه أحط while في ال list بعدين بحط while true
عشان أدخل في while loop تمام؟ وبعدين بقوله ID
input
enter
product ID
إيش عملت أنا؟ بندخل بين ال ID بتاع ال product و
بعدين name input enter
product name أنا أصلاً بعرف متغيرات صح؟ بعدين ال
price
هي دخلت price تعال product لحد ثاني أنا دخلت
ثلاثة variables طبعًا الآن هدول الثلاثة variables
بدي أجمعهم في إيش؟ في object واحد فبروح بعمل P
يساوي product إيش هذا اللي أنا عملته؟ عرفت
product وبعدين بقوله P.set ID وبعطيله قيمة
ال ID اللي دخلته من وين؟ من ال input .set name
وبعطيله ال name P.set price وبعطيله ال price
وبعدين هذا ال P بعد ما جهزته وحطيته في بيانات بروح
لل list .append ال P لأن هذه while وبغطيها شكل
ألماني لنهاية بدنا شرط أنهيها فبدي أقول له ID
يساوي علامة صلة تمام اعمل اعمل break واضح يا
جماعة الآن ال code اللي تحت زي ما هو بقى لما أدخل
البيانات كلها روح اعمل for loop على ال list وأطبع
ليه كل product أنا دخلته وسعره واضح يا جماعة طيب
خليني أنا أعمل run
طيب دخل ال product ID ندخل أي حاجة name هاي milk
price عشر تمام
هاي خلاص نحط dash تمام هاي طباعة لإيش؟ أسامي ال
product وأسعارهم اللي أنا دخلته تمام
نقطة ثانية ال product أنا هنا لما أنشئه بحجز
مكان في الذاكرة لكن محتوى ال object فاضي بعبيه
لاحقًا باستخدام ال set methods طيب الآن نتغير شوية
نعمله أو نتعلم شيء جديد أن بدنا أو نحن حابين أن
أول ما ننشئ ال object بنعطيه بيانات افتراضية يعني
أول ما أقول انشئ ال product بدي أقوله أعطيه من غير
استدعاء ال set method أقوله أعطيه ال name كذا وال
ID كذا تمام أيوة بدي أعطيه initial values تمام إيش
فائدة ال initial values يعني أحيانًا أحيانًا يعني
بنفعش أنا أنشئ object إلا لازم أعطيله على الأقل
قيمة مبدئية يعني مثلا لما المسجل هنا في قوال
التسجيل يفتح ملف طالب جديد هو بينفعش يفتح ملف طالب
بدون ما ياخد اسم الطالب ويعمل له ID صح ولا؟ يعني
بينفعش يعمل ملف فاضي هيك ويتركه ولسه يعبيه بعدين،
تمام؟ في بعض الأحيان أحيانًا نحتاج في البرنامج أنه
في لحظة إنشاء ال object لازم ينعطى قيمة مبدئية هذا
يعتمد على حالة البرنامج في أحيان أخرى أنا بننشئه
وبعدين بعبيه في بعض البرامج الثانية بحتاج أن ال
object أنشئه وفي لحظة أول ما أنشئه لازم أعطيه قيم
مبدئية لأن ال product هذا لازم ليش أعطيه قيم صح
ولا أنا بنشئ ال product فاضي وبعدين بعبيه براحتي
باستخدام ال set method هل في طريقة أن أنا ألزّم
المستخدم أو اللي بدي استخدم ال class بتاعتي أن أول
ما ينشأ object لازم يعطي قيم مبدئية لبعض ال
parameters اللي موجودة في ال object مثلا تعال
نشوف ال object تبعنا hire product بدنا نقول أن
اللي بدي أضيف product جديد على البرنامج لازم على
الأقل يعطيه ID و Name على الأقل ال price مش مشكلة
ممكن نحدده بعدين بس لازم يعطي name و ID إيش هنعمل
الآن عشان نقدر نعطي قيم مبدئية لل object بدنا
نحاول نمرر القيم هذه المبدئية شايفين الأقواس اللي
هنا بدنا نحاول نمررهم يعني نقول له مثلا أنه بعث لي
ال name و
ال ID بالشكل هذا
الآن زي ما قلنا في الأول ال product بيكون جثثين
فاضيّين هذا إيش معناه؟ بينشئ ال product فاضي ما فيش
فيه أي بيانات ممكن أعبيه لاحقًا لكن أنا حابب أن
أبعث له بيانات أول ما أنشئه كيف أبعث له بيانات أول
ما أنشئه؟ يعني أول ما أقوله product افتح جثثينه
وأبعث له إيش؟ memo ID في الحالة هذه هدول set memo
و set ID مالهم؟ مش لازمين على أساس إنه احنا نشترط
إنه أول ما يفتح ملف ال product جديد لازم يعطيله
على الأقل ID و name طيب عشان أقدر أعمل الحاجة هذه
هلأ جيت طبعًا لو شغلت هيطلع ال error ليش؟ لأنه يعني
هو لسه ما استوعبش أنه ال product هتاخد حاجتين وإيش هم
الحاجتين؟ وإيش بيعمل فيهم؟ ما بيعرفش صح ولا؟ يعني
هلأ جيت الآن أنا مثلا لو جربت أعمل run وحطيت أي حاجة
هنا ID و name و price تمام هتطلع لي error لأنه
بيقول لي object قسين takes no parameters إيش هي ال
takes no parameters يعني بياخدش حاجة أنت كيف
حاطط له حاجتين هنا إيش بدي أعمل فيهم؟ ما بعرفش
فهجيبني أن علمه أن هدول أن ال object تبعي ممكن
ياخد parameters وإيش يعمل فيهم ال parameter و أين
يخزنهم معي أنتوا يا جماعة؟ طيب فبدأ أروح على ال
gate when على ال class بنغير فيها شوية بدنا نروح
على ال class ونعمل فوق هنا method من نوع خاص اسمها
بكتب diff وبكتب underscore مرتين وفيه method
اسمها init هذه الـ method جاهزة موجودة اسمها زي هيك
لأن أنا ما بلعبش فيه، طب مرة ثانية باجعل class وبكتب
diff and underscore مرتين هيطلع ليها شايفينها؟ اه
init ايش الكلمة init؟ من initialize ايش يعني
initialize؟
تمام؟
initialize تمام؟ ياه قيمة مبدئية بالامريكي مكتوبها
بالـ Z وبالبريطاني مكتوبها بالـ S Initializer هو
الشيء اللي بيعطيه قيمة مبدئيا، فهو initialization
هذا
الاسم منه، اللي بيعطيه قيمة مبدئيا، أمامكم في
الامتحان، أقول لكم اعملوا لي Initialization وأقول
لي تعالوا ايش يعني Initialization ترجمنا إياها خلاص
الكلمات اللي بيعطيكوا إياها دي مطلوبة منكم تمام؟
اه، فالآن ايش الـ init هذي؟ بقول لي أنت ممكن تروح
تعمل implement للـ method init وتحط فاصلة وتحدد
ايش القيم اللي أنا بدي أبعثها من خلال الانترنت
يعني احنا مثلا ايش القيم اللي بنبعتها المبدئية
اللي بنعملها initialize الـ ID بكتب ID والـ name ايش
بدّه يعمل في الـ ID والـ name هدول، واين بدّه يحطهم
في الـ self طبعا يعني بدّه يقول له self.id حط ايش ID
وself.name تمام؟
لاحظ أن هذه الـ init صارت بتغني عن مين؟ عن الـ set
id وعن الـ set name صح؟ هي أخدت الـ id وحطته في الـ
self وأخدت الـ name وحطته في الـ self، أمتى بتتم
العملية هذه أو بتتم استدعاء الـ init هذه؟ أول ما
ينشئ الـ object product بيبعت له الـ id والـ name، و
هدول على طول هيتخزنوا في الـ self مستناش أنا أستدعي
الـ set name والـ set ID واضح يا جماعة؟ طيب واحد
هيقول يعني ع الجد احنا طب ليش نخليهم الـ set ID والـ
set name؟ بنفع إن تحذفهم بالمرة؟ بالفعل نحذفهم،
بس يفضل نخليهم، لماذا؟ لأنه يفرض بعد ذلك أن أنا
بدي أغير القيمة، يعني الـ price مثلا عشرة، ارتفعت
الأسعار، بدي أزيد الـ price، صح ولا؟ أنا أعطيت قيمة
مبدئية، بقدر أغير السعر بعد ذلك؟ اه بقدر أغيره،
يعني إذا عندي method اسمها set price بتغير اسم الـ
product يعني أنا لما أنشئ وباعطيه قيمة مبدئية
بيتغير اسمه بعدين بقول له set name وباعطيه اسم جديد
ايش الـ set name بتعمل؟ بتاخد الـ name وبتحطه برضه
وين؟ في الـ self self.name واحد بيقول لك طب ما احنا
حطينا self.name بتستبدل القيمة الموجودة سابقة، يعني
أنت خلصت الـ six methods ليش هيلزموك؟ عشان تغير
القيم، الـ initializer نقش عشان يعطي قيم مبدئية مرة
ثانية عشان نعمل initialization بروح بعمل implement
method اسمها init وبحدد القيم اللي بدّي أرميها هنا، و
طبعا باخد القيم هذه وبضيفها على الـ self، الآن طبعا
أنا شيلت الـ set name والـ set ID واستبدلت بإيش؟
بالـ initialization تمام؟ لما آجي أعمل run للـ ان هاي
حطيت الـ ID والـ name مثلا milk وهي عشرة تمام؟
شغّل البرنامج عادي بس استبدل الآن الـ set methods
بالـ initialization هذا طبعا واحد ممكن يعمل ايش
يقول أنا بدي أعمل initialization لكل حاجة، ايش أنا
بنحط الـ ID والـ name اه والـ price وهنا بنروح نعمل
ايش self.price بنحطها زي هذا، معناه إن اللي بدّه
ينشئ الـ object لازم يحدد له بشكل مسبق الـ ID والـ
name والـ price طبعا، طب أطلع هنا أنا ايش محدد هنا
بس الـ ID والـ name، في حاجة مادّسة الـ price، ايش هيصير
لو أنا عملت run، لأن انتوا معايا يا جماعة ولا لا، الـ
initializer بلزم وكام حاجة؟ تلاتة، أنا لما شغلت أو
اشتغلت object مررت كام حاجة؟ حاجتين، هيعطينا error
لأنه عامل زي الـ function، الـ function بدها تلت
حاجات وأنا مررت لها حاجتين اكيد هتطلع error، و
الدليل انه اي مثلا نحط ID name تمام price هيطلع لي
error، ايش الـ error بيحكي هنا missing one required
position and argument missing argument، فندّي حاجة
مفقودة اللي هي الـ price، لو حطيت الـ price هنا مثلا
هاي price هيك، ايش هيك بيشتغل صح، طيب حاجة ثانية
ممكن زي ما كنا ناخد في الـ function نعطي قيم مبدئية
لمين؟ للـ parameters هدول، يعني مثلا أجل الـ price
أعطيله صفر
هذا يعني إذا لم يمر الـ user الـ name سيعطيه none، لو
لم يمر price هيأخد صفر، طبعا هذه الحالة إذا أنا عملت
زي هيك، انتبهوا معايا يا جماعة أنا كام parameter
بياخد الـ initializer تلاتة، واحد منهم compulsory
ايش عن الـ compulsory؟ لازم نمرّره، هذولا الاثنين
optional إذا مررتهم بياخدهم، ما مررتهمش بياخدوا
القيمة الافتراضية اللي هي none وصفر، تعالوا نشوف الـ
class اللي عنده هنا، يعني مثلا أنا جاية أعمل زي هيك
بمشي الحل؟ اه بمشي الحل، خلاص الـ name بفترض انه
none والـ price صفر، معي انتوا يا جماعة؟ طيب
هذا بالنسبة لمثال لـ product خلينا ناخد الآن مثال
ثاني لنتعلم منه شيء جديد، بدّي اروح اعمل class جديدة
بدّي اسميها
employee، اسم الملف employee طبعا أنا بدّي
أعمل برنامج لموظفين، ايش بيانات الموظف الأساسية
كتير بياخد أمثلة بيقول في ID للموظف وفي name وفي
عنوان وفي salary وفي مثلا number of children مثلا
عشان يعني عدد الأطفال بالحسبان في الرواتب، number of
children بالحسبان على وقت صح ولا، كل ما واحد عنده
ولاد أكثر كل ما بياخد على كل واحد علامة تمام؟
ومثلا married ولا لأ؟ إذا كان متزوج برضه له علاوة، مش
متزوج ما بياخدش العلاوة، هذا تمام؟ أنا بدّي أعمل هذا عشان
بنعمل حسابات هالشيء تمام؟ للراتب، نزيد الراتب،
عنده تأمين، تمام؟ عنده تأمين صحي ولا لأ؟ إذا عنده
تأمين صحي بناخد من الراتب تبعه، صح؟ طيب خلينا نعشّ
نعمل class بتمثل بيانات الـ employee
نتفّج احنا على عدد محدود عشان ما ياخدش وقت عن
المتغيرات، نتفّج على ID وName وSalary وAzimuth
أربع حاجات تمام، كل واحدة منها بدها ايش؟ بدها ست وجد
تمام، فبدا أقول له Deaf مثلا في الأول ست ID
طيب جماعة، هيني عملت أنا ثمانية methods، كل اثنين لـ
variable معين، الأولى اسمها set id get id، بعدين set
name get name، بعدين set salary get salary، بعدين
set is married عشان أقول إنه متزوج أو لا، وبعدين
method اسمها is married، ما سميتهاش get is married
خلاص سميتها is married لأنها مش هترجع عادي true أو
false، طيب نيجي الآن نستخدم الـ class هذه احنا إن
شاء الله لسه ما استخدمناهاش، اه بدنا نعمل كمان
Initializer ليش؟ عشان نقول يا جماعة أول اللي بدّه
ينشئ employee لازم يعطيله على الأقل ID وname
تمام؟ فبنروح نعمل this underscore الـ init ونعطيله
ID وname زي
ما قلنا الـ initialization هذا أو الـ initializer
optional يعني ممكن ما يكونش فيه initializer صح؟ لأ،
ترتيب عادي، بحطه أين ما بدّي، تمام؟ هاي أنا بدّي
أعمله ايه تحت self
.id يساوي id، طيب،
خلصت الـ class employee
نستخدمها، نعمل بيانات موظفين، الموظف الأول P1 يساوي
employee from P1
employee
بنعطيله مثلا احمد أو
ID في الأول تمام
هذا الـ employee الأول، بنعطيله برضه ايش الآن salary
P1 six salary
طيب هاي عملت بيانات تلات موظفين ممكن نعملها loop و
ناخد المستخدم يدخلها زي ما شوفنا قبل شوية طبعا مش
هذه الفكرة طيب اللي أنا بدي أعمل بس list واحدة نحط
فيها مين بياناتهم كلهم P2 و P3 طيب اللي .. اللي
أنا لما قاعد أعمل formula for I in list واحد
بنقوله تطبع ل print اسم الموظف I.get name و بعدين
نطبع إيش كمان ال salary تبقى
الآن إجابة طلب مني في البرنامج
حكى لي إنه بدنا نعمل خصومات على الموظفين ثلاثين في
المية، تمام؟ بدنا نعمل خصومات على الموظفين ثلاثين
في المية، هذا إيش معناه؟ معناه إنه كل واحد بدنا
نمر على راتب تبقى هو و نخصم منه ثلاثين في المية، كيف
أنا أعملها هالجيت هنشوف، تمام؟ بدنا نمر على راتب
تبقى هو و نخصم منه ثلاثين في المية طيب، كيف نعمل
هذه؟ قبل أمر الطباعة أول حاجة بدنا كل واحد نمر على
الراتب تبعه ونشيل منه 30% يعني عشان أمرها كل واحد
بدي أعمل follow سيبقوا ال follow بالتحت هذي خليني
أقولك طباعة طبعا؟ فبدي أعمل for i in list 1 بروح
لل I و بقول له get
old salary نحسب
الـ new salary الـ old
salary ناقص ثلاثين في المية من الـ old salary يعني
point تلاتة ضرب الـ old salary مش ثلاثين في المية
يعني point تلاتة ضرب ال old salary هذه القيمة بطح
المن من ال old salary و الناتج كله بخزن في ال new
salary الآن بدأ أعدل راتب الموظف عشان يصير هو ال
new salary أنا لسه ما عدلتش راتب الموظف أنا جيت
قرأت راتب الموظف باستخدام get salary و روحت عدلته
في متغير اسمه ال new salary الآن القيمة ليست جديدة
و موجودة في الـ New Salary لكن أنا لم أعدل القيمة
المخزنة في الـ Object فأنا سأذهب إلى الـ I و أقول
له Set Salary و أقول له New Salary أنا دائما أدخل
في الـ Object و أعدل قيمة الـ Salary المتغيرة في
الـ Object واضحة هذا ما فعلته يا جماعة؟
في حد فاهم هذه؟ مش فاهمها؟ طيب لأن لما أجي أعمل
run لأن
هاي راتبهم إيش؟ كل واحد نزلت ثلاثين في المية يعني
الأول كان ألف صارت إيش؟ سبعمية والثاني ألفين صارت
ألف واربعمية و بعدين ألف وخمسمية صارت ألف وخمسين
نزلت ثلاثين في المية طيب نشوف الفكرة تانية
الآن بدنا كمان إيش؟ احنا لما نخش في السياسة كتير
يعني بدنا نقول إنه لو الموظف على رأس عمله بدناش
نخصم عليه تمام؟ إذا الموظف جاهد أو مستنكف بدنا
نخصم عليه ال 30% تمام؟ إيش بدنا نعمل في الحالة دي؟
هالجاهد احنا بدنا نميز بين الجاهدهو اللي بيشتغل صح
ولا؟ فإيش بنزلنا؟ إيش رأيكوا؟ كيف؟ آه بدنا متغير
جديد عشان يقول لي هل هو sleeping ولا not sleeping
تمام؟ آه فبدروح ل ال object تبعي تمام؟ و بدي أعمل
متغير جديد إيش رأيكوا؟ إيش نوع المتغير بدي يكون؟
true أو false تمام؟ Boolean و بنيجي هنا يعني بنعمل
two diff diff مثلا sit is sleeping
طبعا هنعمل method اسمه set is sleeping طبعا همرنا
له متغير اسمه is sleeping هiaخده يحطه في السلف
المتغير اسمه is sleeping طيب و بدنا كمان هجيه نعمل
diff اسمها method اسمها isSleeping هترجح يترن self
is sleeping طيب،
بدي أرجع الآن ثاني على البرنامج التابعين
طبعا أنا لما أنشئ ال object لما أنشئ الموظف بدي
أحدد هل هو sleeping or not sleeping طبعا يعني إيه
أنا six salary و بدي أقول له P16 is sleeping مثلا
حطيت إيش هذه ال true و الموظف الثاني هذا P16 is
sleeping false
والآخر هذا P3 set is sleeping false يعني ما فيش إلا
إيش إلا واحد قاعد طيب الآن إيش اللي بده يصير في
حساب الراتب بينا نشوف والله اللي قاعد بيناه خصمه ل
30% اللي مش قاعد خلاص بيضر راتبه زي ما هو زي ما هو
سابقا طبعا فالآن مش هذا هو ال code بتاع الخصم هذا
بدناش يعني يتنفذ إلا إيش إلا فبنجعل ال employee قبل
ما أجي أنفذ ال code هذا بفحص if I dot is sleeping
هيك
لحالها بتكفي صح؟ لأن هذه معناها if is sleeping
يساوي ال true هي نفسها تمام فبقول if is sleeping
روح
اعمل إيش غير اعمل الخصم طيب
لأ عشان أسهم المتغيرات طيب
طب يا جماعة هاي تطلع معايا هنا لأن هاي النتيجة بعد
الخصم الأول اللي كان راكبه قال في الخصم له إيش الـ
30% و الباقين ضالوا إيش؟ ضالوا زي ما هم طيب
بدنا الآن كمان نكمل في الموضوع خلاص سيبوله السياسة
و هذا بدنا نشوف حاجة ثانية لأن هو فيه عندنا ازمرب
صح ولا لأ ما استفدناش منه لسه بدنا نقول والله إذا
هو ازمرب بنعطيله علاوة 10% من الراتب تمام؟ واضح؟
يعني الآن هذا
ال code لإيش؟ للتعامل مع الخاصة تمام؟ الآن بدي
أقول له if لاحظوا جوا ال for loop صح ولا؟ جوا ال for
loop الآن هذا ال code الأول للخاصة بقول له if I و
بقول له is married الآن
بدي أقول له old salary i
.get salary new salary old
salary زائد
1 من 10 ضرب
old salary يعني new salary هيساوي الراتب الجديد
زائد 10% من الراتب الجديد و بعدين يقو روح لل I و
يقول 6 salary و يحط new salary
طبعا هذا ال code بطبقه بس على مين؟ على اللي
قاعدين، الخاصة، صح؟ و هذا بطبقه لمن؟ للمتزوجين،
بس، تمام؟
طيب،
الآن هيطبق إيش؟ طبق التعديلات، شوفوا مثلا هذه علي
صارت بإيش؟ ألفين و متين، كان ألفين صار ألفين و
متين، تمام؟ لأنه زاد عشرة في المية
طيب إيش اللي صار على ال gate هو هو by default
بتكون azometro خلينا نتأكد بس إيش ال default value
بتاعتها يعني خلينا نقبع هنا print I dot ezmerid
نشوف بس إيش هيقبعها
method
هو أظهر أنه أخذها true خليني احنا نحطها بواحد أت
ست مثلا
هذه true
طب هو الظاهر إنه اعتبرها true لحاله الآن
أنا حطيت قيم مبدئية
طيب الآن الـ salary اشتغلت تمام
الآن هذا مثلا is married و هذا برضه is sleeping
ففي الأول خصم عليه كان ألف خصم عليه ثلاثين فالمية
و بعدين زاد له عشرة فالمية و أصبح سبعمية و سبعين
هذا ما تأثرش لأنه لا هو sleeping ولا هو married أمر
هذا
عشرة في المية من الف و خمسمية يعني مية و خمسين
فصار الف ستمية و خمسين الآن
احنا في ال class إيش ال methods أو ال functions
اللي بنحطها في ال class set to get صح ولا هنشوف
الآن إن احنا ممكن نضيف أنواع أخرى من ال methods على
أساس تعملي بعض ال algorithms أو الوظائف اللي بتوفر
عليها code يعني على سبيل المثال طلع معايا هنا بدنا
نعمل function اسمها diff calc final salary ايش
يعني ال function ده من اسمها؟ Semi-Calc Final
Salary بدأت تحسب لي الراتب النهائي بدل ما أنا كنت
في البرنامج الأساسي أعمل عمليات حسابية و أجيب
الرقم و أضرب في point 3 و أطرح و أضيف و أضرب point
10 و أشوف ليه متزود ولا لأ و أشوف ليه مستنكف ولا
لأ و أحسب تمام؟ لأ أنا هذا كله بدأ أعمل وين؟ في
function واحدة اسمها Calc Final Salary أحط فيها ال
code كله و أستدعيها و خلاص. ايش الفايدة؟ أنه أنا
مجرد ما أكتب ال code في البرنامج، بكتبه مرة واحدة في
ال class و بس أدعيها. خليني نعملها كاركس فايلر
ثيرري. شوفت ال code اللي كتبناه هناك، بدها تشوف
أول حاجة، إذا هو sleeping، بدها تعمل خصم، إذا هو
مرض، بدها تضيف له عشرة في المية. بس هاد ال code هو
اللي هينكتب داخل ال class طبعا؟ طيب شوفوا كيف
هكتبوه. اول حاجة من هنا اتاكد هو نايم ولا لأ self
dot is
sleeping. هذا ايش فايد ال self dot is sleeping ان
نفحص هو نايم ولا لأ. انتبهوا معايا لاحظ ان هنا انا
كتبت ايش self عشان استدعي ال function اللي هي اي
function اللي هي هذه تمام؟ لكن في البرنامج الأساسي
لما استدعيها كتبت مين؟ I اللي هو مين ال I هذا؟ هذا
ال reference او اللي بصمم من البرنامج لكن اذا انا
داخل ال class بوصل للحاجات في ال class سواء كانت
متغيرات او methods عن طريق ال self فبقول له if
self dot is sleeping اذا نايم تمام نفس الكود اللي
كتبناه برا هاتل ال old salary self dot get salary
جيبنا ايش هنا احنا؟ جيبنا ال salary عن طريق self.get
salary و بعدين جيبنا له new salary يساوي ال old
salary ناقص
point تلاتة ضرب ال old salary و بعدين بقول له self
.set salary و بعطله ال new salary
هذا بالنسبة للخاصة الان العلاوة if self
.getismarried يساوي true او هي نفس هذا اسم if
getismarried اذا كان true يعني تمام بدنا نروح
نقوله برضه ايش نجيب ال old salary و بعدين ال new
salary ايش هيساوي
زائد point واحد ضرب ال old salary و بعدين self dot
set salary ال new salary تمام و
خلينا بالمرة ايش نعمل return self dot get salary
يعني هاد ال function calc final salary بتشوف ليها
هل في خصومات هل في إضافات عليه بتعمل العملية
الحسابية كلها و في الآخر مثلا قلت له رجعلي ايش
self dot get salary تمام هذا ال code هو المكتوب
كله يا جماعة بماشي ننساه جوا ال class هذا ال code
هو نفسه اللي كنت كاتبه برا بس اختلف ان بدل ما كنت
احط I او P صرت احط ايش self لان انا جاعد جوا ال
class. داخل ال class انا بوصل للحاجات اللي فيها عن
طريق ال self. ايش الميزة هنا انه انا لما اروح
للبرنامج الأساسي تمام بقوله بدل منفذ ال code ده
كله ما هو كله موجود صار وين؟ في ال class اروح لل I
و اقوله calc final salary للموظف و هذه النتيجة
بنعمل ايش لها print لانها بترجع في الآخر قيمة
هذه هي رواتب طبعها. هذا يا جماعة دخلنا فكرة جديدة
ان ال class مش بس فيها set to get method ممكن احط
فيها اي method اخرى ان اتسهل علي الشغل ان اعمل
عملية معينة او code معين بحطه جوا ال class على
اساس ان انا استدعيه وانفذه مرة واحدة. ماذا نسمي هذا
في البرمجة؟ هذا مصطلح نسميه encapsulation
ماذا يعني كلمة encapsulation؟ مين كبسولة، تمام؟
أجيت الكبسولة، نبلعها ومش عارفين إيش فيها، صح أو
لا؟ ال encapsulation نفس الفكرة، احنا بنفذ ال
function، و احنا المفروض أنه احنا ما همناش إيش
اللي فيها، صح أو لا؟ خلاص أنا بكتبها و بتعب فيها
مرة واحدة، و بصير أستدعيها على طول، تمام؟ هذا
بنسميه encapsulation
الميزة اللي فيه أنه أنا البرنامج الأساسي تبعي هذا
أبسطه ما يكونش فيه code كتير. حطيت ال code كله أين؟
في ال class. شوفوا الأمجام اللي ما ننهي، بدي أروح
في نفس ال class بدي أعمل method اسمها diff get
report. إيه شهرة كلمة get report؟ عطيني تقرير. تقرير
عن الموظف. كيف يعمل تقرير عن الموظف؟ يعني تعملي
تقرير تقولي مثلا name نقطتين اسم الموظف ID نقطتين
ال ID بتاع الموظف salary نقطتين ال salary بتاع
الموظف. يعني يرتبها في كيف؟ في كتابة طبعا فشوف ايش
بدي أسوي بدي أعمل report
ماذا هذا؟ تكتفة فاضية تمام؟ أريد أن أقول report
زائد يساوي name نقطتين plus self dot get name. ماذا
أفعل هنا يا عزيزي؟ ماذا يسوي السطر هذا؟ يضيف على
ال report بيضيف على ال report name ومعها self dot
get name
تمام report و بدي اضع هنا أيش slash in. ايش ان ال
slash in هذه زائد يساوي ID نقطين self
dot get ID. ايش عملت انا هنا برضه ربطت معاه ال ID
كمان report plus يساوي salary self
dot get salary. معاكم
يا جماعة ولا لأ؟ وبعدين بقول return
ود أطبع تقارير عن الموظفين بروح ع البرنامج تابعي و
بحكيله بدل ما أقوله اطبعه لل name و نجوتين و get
salary و نجوتين ID لأ بقوله print اعملي I dot get
report. واضح يا جماعة ان ايش بعمل؟
طيب هذه بس فيها error هنا صغير انه انا لما عملت ال
salary هذا بدها ايش؟ STR تمام؟
هاي مثلا هذا ايش؟ هاي تقرير الموظفين. هذا الموظف
الأول وهذا الموظف التاني او هذا الموظف التالت. كل
اللي سويته أنا جماعة ان انا جمعت code بناء التقرير
و حطيت وين؟ في ال class داخل method اسمها get
report. واضح يا جماعة فعليا
يا جماعة لما أسوي list واحد. list احنا كيف بننشئ
list؟ يا أما بنعمل هيك يا أما بنكتب كلمة list
وبنعمل هيك. هذه اللي انت شايفينها زي P يساوي
employee
صح؟ ال P عبارة عن object ال employee عبارة عن
class. صحوا يا جماعة؟ هذه عبارة عن object وهذه عبارة
عن class اسمها list. مين عملها ال class هذه اللي
عملوا ال python هم اللي عملوا ال class زي ما انا
بروح لل employee و بقوله get report و بروح لل
employee و بقوله calc final salary. في ال list كمان
هم عملولنا حاجات اتريحنا لان انا ماعرفش التفاصيل
عملوله method اسمها Sort وعملوله method اسمها count
و method اسمها append. ايش بفهم الآن ان ال sort و
ال count و ال append عبارة عن functions موجودين
داخل ال class اسمها list و ان عضول ال functions
بيعملوا code ممتاز و مهم. انا كمستخدم بهمنيش اعرف
اش ال code لكن استخدمتهم عن طريق استدعاء ال method
هذا بيسموه ال encapsulation. هدول ال method زي
الكبسولات بتعطاه و بستخدمهم بدون ما اعرف إيش فيه
جواهم تمام؟ زي ما المبرمجي ال python عمله class
اسمها list أنا بستخدمها و مبسوط عليها تمام؟ أنا
برضه ممكن أعمل class اسمها employee على أساس إنه
مبرمج تاني يستخدمه و يستفيد منها بدون ما يحتاج
يعرف إيش فيه التفاصيل جوا ال class. واضحة الفكرة يا
جماعة؟ تمام، بنكمل المرة الجاية