طيب السلام عليكم اليوم إن شاء الله يا جماعة هنبدأ
في موضوع جديد اللي هو بحكي عن الـ Object Oriented
Programming أو
برمز له باختصار OOP
انتبهوا معايا الـ Object Oriented Programming لمطة
جديدة من تصميم البرامج مش معناه إن احنا هناخد شيء
جديد ما مش علاقة باللي قبله لأ أكيد إن كل اللي
أخذناها قبل هيك أساسيات البرمجة هنستخدمها لازم ..
لازم نستخدمها في البرامج لكن طريقة بناء البرامج
وتركيبها الآن هيكون في نقلة نوعية أو اختلاف نوعي
فعشان كده احنا بنركز على المفهوم هذا الـ Object
Oriented Programming ونفهمه كويس قبل ما نبدأ
البرمجة لإن الواحد لو ما كانش فاهمه مش هيعرف ليش
بعمل إيه ومش هيتعلمه صحيح وطبعًا مفهوم الـ Object
Oriented Programming هذا مفهوم موجود في كل لغة
البرمجة الحديثة يعني إذا أنا شرحته في الـ Python
ممكن واحد لو اشتغل بعد ذلك على أي لغة برمجة ثانية
زي PHP أو Java أو غيره يلاقي الموضوع هذا سهل عليه
طبعًا ضروري نفهمه كويس على أساس نقدر نطبقه بشكل
صحيح طيب أول حاجة رغبة المشكلة يعني إيش المشكلة
الموجودة اللي دعتنا إننا هنتعلم موضوع جديد أو
طريقة جديدة للبرمجة احنا في البرامج اللي إحنا تعلمنا
كيف نتعامل مع بيانات البيانات اللي بتتعامل معها
البرنامج بتتخزن وين؟ في variables صح؟ طب لما
بتتعامل مع مجموعة بيانات بنلاقي إن الـ variable
ما له بكفيش فلجأنا إنه لما .. حاجة بتجمع لي مجموعة
من الـ variables زي الـ list والـ set والـ tuple صح
ولا؟ بعدين تقدمنا شوية لجينا إنه أحيانًا في بعض
البرامج بدي أربط مجموعتين من البيانات مثلًا اسم
الشخص ورقمه ورقم الشخص وعلامته فلجأنا لباقة الـ
dictionary الجديد اللي هو الـ directory اللي هو
ممكن نشبهه بعبارة عن two lists مزجين في بعض صح
بقاله؟ طب هل هذا اللي بيخدمنا كافي فعلاً؟ لأ مش كافي
طب خليني أشوف مثال وين ممكن نلاقي إن كل اللي
بيخدمنا هذا لا يكفي إن يلبي احتياجات البرامج مش تاتي
خلينا ناخذ مثلًا برنامج أو بيئة زي بيئة الجامعة،
بيئة الجامعة هذه مكونة من طلبة، مكونة من مدرسين،
مكونة من موظفين إداريين، بيئة كبيرة جدًا، كل واحد
من هدول الأشخاص له مجموعة كتيرة من البيانات، يعني
مثلًا الطالب الواحد بياناته لحالها كتيرة جدًا طالب
الواحد مش بس .. يعني إحنا الطول .. والطول وإحنا
بنجرب كنا نتعامل مع الطالب إنه اسم صح؟ أو رقم؟ أو
علامة؟ لكن فعلاً الطالب عبارة عن اسم وعبارة عن رقم
وعبارة عن عنوان وعبارة عن مكان سكن وعبارة عن
تخصص وعبارة عن أي ثمة دراسية وإيش المواد اللي
مسجلها وإيش علاماته في المواد صح ولا؟ وإيش
المواد اللي خلصها وده ديش ظل عشان يتخرج؟ كل هذه
معلومات اللي علاقة ب .. وصورة الطالب وغيره
بيانات كتيرة جدًا اللي علاقة بطالب واحد طبعًا؟ طيب
.. هذا بس الطالب يعني الطالب الواحد خلينا نتخيل كيف
إحنا ممكن نعبر عن بيانات الطالب بـ code بالـ Python
يعني مثلًا الاسم بده string صح ولا؟ العلامات مش
علامة واحدة عندي مجموعة علامات كتير لكل المواد صح
ولا؟ كيف ممكن أعبر عنها العلامات؟ list of integers
مثلًا طيب هأجي مشكلة في list of integers أنا مش
هعرف كل علامة تبع لأي مادة صح ولا؟ تمام ممتاز هأ لجأ
لـ dictionary لإن dictionary في اسم المادة وعلامتها صح ولا
طبعًا هأجي صعوبات أكثر من هيك يعني مش بالبساطة اسم
المادة وعلامتها لأن ممكن الطالب مثلًا أخذ المادة و
عادها مرة ثانية فصار له علامتين صح ولا في البرنامج
اللي بيحفظه العلامة القديمة والعلامة الجديدة ما
علينا خلينا الآن نفترض نخزن العلامات باسم الـ
dictionary اسم المادة وعلامتها خلصنا هيك آه لأ
التخصص طبعًا الطالب بدنا string أي سنة موجودة هو
فيها بدنا string إيش الخطة اللي ماشية عليها بدنا
integer أو string تمام كلها بيانات كتير خاصة في
الطالب الطالب الواحد طب تخيل إن أنا عندي ثلاثين
ألف طالب تمام ثلاثين ألف طالب طالبة الجامعة مثلًا
كل واحد فيه داخله إيش بدي ثلاثين أربعين variable صح
هذا ما بين string لـ integer لـ list لـ dictionary
انتوا متخيلين الحجم الضخم للـ data والـ variables
اللي لازم يكون عندي تمام؟ عندي ثلاثين ألف طالب هذا
معناه إن أنا بدي أنشق string عشان أخزن اسم ثلاثين
ألف وبدي أنشق ثلاثين ألف dictionary عشان أخزن
أسماء المواد وعلامات الطلاب وبدي أخزن ثلاثين ألف
رقم عشان أخزن رقم خطط الطالب وثلاثين ألف value
عشان أخزن إيش تخصصه .. وكده .. لسه هذا ما خلصناش
.. هذا كله لمن؟ للطالب .. لبيانات الطالب .. طب
بيانات الموظفين؟ تقريبًا إلى نفس التعقيد أو أقل شوية
كل موظف إلى إيش السنة اللي دخله إيش راتبه إيش
تسلسل الإداري صح ولا والـ history تبعتها و وين كان
وين راح والكلام هذا كله شهاداته ومعلوماته كلها
فهندخل برضه إيش في دوامة ثانية وعدد كبير جدًا من الـ
variables والمتغيرات اللي لازم نتعامل معاها في
البرنامج الآن إذا كنت بتعمل البرنامج ازاي هيك
هتعجب صح هنشي عدد كبير من الـ variables من هنا نشأ
مفهوم يسهل علي ويرتب علي الموضوع هذا اسمه Object
Oriented Programming مش هنفسر لسه إيش معنى Object
Oriented Programming هنخلي التفسير يجي لحاله من
خلال الأمثلة اللي هتجي الآن يعني إحنا اللي هناخده
فائدة وحل المشكلة بتعقيد التعامل مع عدد هائلة
من البيانات والعلاقات ما بين البيانات هذه طيب، إيش
الـ Object Oriented هيسوي لي؟ إيش هيعمل؟ خلينا ناخد
مثال بسيط جدًا، لأن كل أسرة أو كل بيت فيه مجموعة
أوراق، صحيح ولا؟ كل شخص في البيت عبارة عن مجموعة
من الأوراق، شهادته في ابتدائية، شهادته في الإعدادية،
شهادته في الثانوية، صحيح ولا؟ شهادته في الجامعة،
شهادة توظيفه، ممكن شهادة وفاته، صحيح ولا؟ شهادة
ميلاد، يعني معلومات إيش؟ كتيرة جدًا للشخص الواحد،
هويته، جوازه وغيره وغيره وغيره، تمام؟ طب الأسرة
اللي فيها 15 نفر كل واحد إله إيش كبشة ورا بعض بعض
لإن إحنا إيه كب بالفترة لما نيجي نرتب الحاجات إيش
بنعمل؟ هل بنكوم كل ورا بعضها على بعض وبنحطهم في مكان
واحد ويلا روح ندور على جواز فلان نقلب كل الورق اللي
موجودة ده عشان نطلع جواز من بين خمسمية ورا بعض؟
لأ بنروح نرتب الشغل إيش بنعمل؟ بنعمل profiles
ملفات طبعًا بنقول والله سو سو أي ملفة محمد هاي ملفه
تمام؟ وبنجمع كل ورق اللي مع بعض وبنحطها في
الملف وكل ورق محمد بنحطهم في ملف تاني هذا هي رقم
الشغل بعدك بدأت أطلع ورق محمد إيش بعمل بفتح ملفه
بلاقي أوراقه أحيانًا بالزمن كمان ملفات محمد نفسها
أحط جواتها إيش ملف داخل صح ولا مش بتلاقي مرات
files بتفتحي بتلاقي ملفات جواب يعني مثلًا محمد له
ملفات كتير
الدرجات خليهم لحالي صح؟ شهادات المدارس كلها
خليها لحالي صح ولا؟ على أساس إيش؟ لأن برضه لما
أروح أدور في أوراق الشخص الواحد أوصل لـ اللي
بديها مباشرة أروح لـ للـ sub file اللي موجود في
الـ file تمام؟ نفس الفكرة هذه هي موجودة في الـ
Object Oriented Programming تمام؟ هي عبارة عن
restructuring للكيفية البيانات بحيث إنه يسهل
الوصول إليها والتعامل معها سهل تمام هذا الفايدة
الأساسي يعني إحنا فعليًا هروح مثلًا مثلًا بيانات
الطالب الواحد بدل ما نعمله ثلاثين variable أو
أربعين variable ما بين string و integer و list و
dictionary عشان أخزن بياناته كلها بدي أجمع كل
بيانات الطالب في ملف واحد زي في البيت مثلا خلفنا
واحد جديد، ماشي بنعمل؟ بروح نفتحله ملف جديد عشان
نحطله شهادة الميلاد في الأول، صح ولا؟ وكل ما تجي
شهادة، بنصير نحطها في ملفه، فبنصير الطالب ككل
نفتحله ملف جديد، حاجة واحدة بتعبر عن أيش؟ عن كل
بياناته، بصير بعد هيك مثلا بدي بيانات الفلان
الفلان، بروح باخد ملفه كله أيه، أي شخص عبارة عن
الملف هذا، تمام؟ هذا المثال أنا طرحته مش بس في
موضوع طلاب الجامعة، لأ حتى مثلا في الحياة، أنا بدا
أعمل برنامج ال supermarket، مثال بسيط جدا، ال
supermarket عبارة عن items، الحاجات اللي بتنبعها،
صح ولا؟ وكل item عبارة عن مجموعة من المعلومات صح؟
ال item نفسه اسم ال item، نوعه، تصنيفه، في أي غرف
موجود، سعره، تاريخ إنتاجه، تاريخ صلاحيته، صح ولا؟
هذه كلها أمور متعلقة بس ب .. ب item واحد، و ال ..
و ال supermarket فيه items مئات، اللي ماكانش ألف،
كل واحد له مجموعة .. مجموعة بيانات
معنى أن أجمع بيانات الشيء الواحد في file احنا في
حياة بنسميه ملف لكن في البرمجة بيسميه object كلمة
object الترجمة الحرفية اللي لها بالانجليزي يعني
شيء كلمة object يعني شيء احنا في البرمجة هنعمل ال
object عشان يمثل بيانات شيء معين المتوقع بالكلام
اللي أنا حكيته والامثلة اللي طرحتها أن ال object
هيحتوي جوا على أيش؟ على مجموعة بيانات، صح ولا؟
يعني ال object اللي بيمثل طالب واحد بيحتوي على
اسمه، رقمه، علاماته، مواده وغيره وغيره وغيره،
تمام؟ ال object هذا بيمثل بيانات طالب واحد الآن
الميزة هي أن هذا بصير أن أتعامل مع الطالب وكأنه
أيش؟ وكأنه object مش هروح أملّم تلاتين ألف حاجة
عشان أجيب بيانات الطالب لأ بقول أن هذا ال object
يمثل الطالب الأول S1 مثلا طبعا كل طالب بده أن أنشئ له
أيش object بيمثله زي ما احنا كل نعمل في البيت
بننشئ له ملف كل طالب بننشئ له الميزة الآن بدل ما أتعامل
مع الشيء المبعثر بأتعامل مع الطالب كله كإيش؟ ك
object يعني أنا لو بدي مثلا أخزن بيانات كل طلاب
الجامعة في list بعمل list بخزن فيها objects تمام؟
هيك صار التعامل مع الطلاب سهل إنهم كلهم موجودين في
list واحدة طبعا إذا أنا interested في طالب واحد
بدخل جوا ال list هذه و بجيب ال object تاع الطالب و
منه بجيب معلوماته زي بالظبط الأشخاص في البيت كل
واحد إله file تمام؟ في النهاية بجمع كل الملفات
مثلا في شنطة صح ولا؟ الآن يبقى هذه الشنطة أنا
بأتعاملش مع أوراق مفرفطة لأ بأتعامل إن فيها عشر
ملفات طبعا بدي مثلا بيانات شخص معين بروح في الأول
بجيب ملفه من ال list و لما أطلع الملف بدور على
البيانات اللي بديها من داخل الملف طبعا فصار
التعامل سهل بأتعامل أنا في الأول مع ال upper level
طبعا و بعدين بنزل لل bottom level upper level
معناه أنا بأتعامل في الأول مع ملفات بشكل عام طبعا
أني أشوف عشر ملفات أسهل ما أفتح الشمس
فهذا أسهل علي أن أشوف البيانات بعد ذلك لما أشوف
العشر ملفات وأطلع واحد منهم بفتح الملف و بقوم فيه
زي ما بدي بشوف فيه تلاتين أربعين ورجل بس في
التعامل بيكون أسهل عليه في الأول في ال top level
بشوف عشرة وبختار اللي بديها منهم و لما آخذ واحد
منهم بفتحه و بأعوم في الحاجات اللي موجودة فيه لكن
تخيل مافيش files كلها عبارة عن ورق مفرفض و مكمّم مع
بعضه صعب جدا أن أوصل للبيانات اللي بديها فباختصار
شديد ال object oriented programming object
oriented أيش يعني أول ترجمتها الحرفية بترجمها
البرمجة الشيئية يعني البرمجة المعتمدة على الأشياء
البرمجة المعتمدة على الأشياء أو المتجهة لاستخدام
الأشياء الهدف منها أنك تجمع المعلومات الصغيرة كشيء
بنسميه طبعا احنا في الحياة بنسميه file لكن في
الكمبيوتر بنسميهاش file بنسميهاش object تمام؟
وبصير أنا أتعامل مع ال objects تمام؟ على أساس أن
التعامل معها أسهل من التعامل مع البيانات الصغيرة
تمام؟ طيب هذا الكلام اللي طرحته لسه كلام نظري
تمام؟ مهم جدا على أساس يبين لي يقيني أيش فائدة أو
مفهوم ال object oriented programming لسه طبعا هذه
فائدة واحدة من فوائد ال object oriented
programming في فوائد ثانية أخرى نتطرق لها بالتسلسل
خدنا نفهم الفائدة هذه وبعدين ننتقل لفوائد أخرى
نفس الكلام اللي حكيته بنجي الآن نطبق عليه مثال
عملي تمام؟ وناخد مثلا المثال بتاع طلبة أو بيانات
طلاب الجامعة
مدارس أو جامعة تمام؟ وبدأجي أفكر طبعا البرنامج
يعني أيش لازم يعمل لازم مثلا يحتفظ في بيانات
الطلبة لازم أقدر أبحث عن بيانات الطلبة أشوف
علاماتهم زي البرامج ال .. برامج التسجيل في الجامعة
أو برامج مثلا ال .. المدارس مش الناس ممكن تدخل على
ال .. ال .. ال internet و تشوف علامات أطفالها مثلا
تمام؟ هذا نفس الفكرة فالفكرة أن البرنامج تبقى لازم
يحتفظ ببيانات الطلبة أو كل معلوماتهم ويمكننا أن
نسترجعها في أي وقت طيب خلينا نشوف مثال الآن لما
أتعامل مع أي طالب أنا بقول البرنامج بأتعامل مع طلاب
أيش؟ أنا بأتعامل مع طلاب يعني لازم يخزن بيانات
الطلاب عشان أقرأها أو أتعامل معاه طيب خلينا نفكر
أيّش بيانات الطلاب الأساسية في مثلا بدعم الانتجر أو
بدعم المتغير اسمه ID طبعا هذا لإيش ال ID عشان آخذ
رقم الطالب ممكن يكون فيه كمان مش بس name بدأ
أخليها first name طبعا وفيه كمان أنا ما كتبتش لسه
code python قاعدين احنا نحصر أيش ال variables اللي
بلزمها لطالب طبعا وفي عندي last name وممكن أجدها
أكثر وأقول middle name أو ثلاثي أو رباعي تمام؟ وفي
مثلا عندنا string بتكون major يعني التخصص بتاع
الطالب تمام؟ ال courses تمام؟ اللي .. اللي ماخدها
ممكن أعبّر عنها مثلا ب list of courses تمام؟ و
بيانات يعني أكثر يعني مثلا الخطة لأ رقم الخطة اللي
هو ماشي عليها ال plan معدل التراكم مثلا ال GPA هذه
كلها معلومات خاصة بالطالب وفي عنوانه ال address
email mobile number طيب
طبعا هذه البيانات خاصة بالطالب واحد كل الطلاب يكون
عندهم نفس البيانات هذه صح؟ أنت متخيلين أن جدش هيكون
الموضوع مهقد لو أنا بدي أتعامل مع تلاتين ألف طالب؟
طب كيف نسحل العملية هذه؟ بقول لما دام أنا عندي شيء
اللي بيانات متعددة تمام؟ بدك تعبر عن الشيء هذا
كحاجة اسمها object تمام؟ يعني بدنا نروح عشان ننشئ
حاجة اسمها object قبلها بدنا ننشئ حاجة اسمها class
هنحكي عشان ال class ال
class هذا يا جماعة عبارة عن مخطط لشكل ال object و
تركيبه مرة ثانية مخطط لشكل ال object و تركيبه
الموضوع هذا زي ما قلنا صعب شوية في البداية بس
بعدين إن شاء الله يصير سهل ال class عبارة عن مخطط
لشكل ال object و تركيبه ال object هو تنفيذ لل
class ال object هو تنفيذ لل class كيف يعني الكلام
هذا؟ لأن في فرق كبير في الحياة ما بين العمارة
وخطة العمارة صح ولا لأ؟ خطة العمارة عبارة عن
ورقة بس بتوضح تفاصيل إنشاء العمارة لكن العمارة
نفسها عبارة عن شيء موجود مبنى موجود صح ولا لأ؟ لكن
هذا مش معناه إن العمارة مهمة و الخلطة مش مهمة
العمارة تم إنشاؤها بناء على خريطة، الآن على أول
خطوة لما نعمل ملفات للأشخاص اللي عندنا في البيت،
بدنا نفهم أن كيف يكون شكل الملف يعني مثلا احنا بنجي
نجهد ونقول عشان أغطي بمعلومات يا جماعة وما نعيشش حياة
فوضوية بدنا نجيب ملف ونقسمها أجزاء وبدنا في الملف
تبع الشخص الواحد بد يكون فيه جزء فايل داخلي في
الملف نفسه خاص مثلا بشهادات الإبتدائيين وفايل ثاني
بشهادات الإعدادية وفايل ثاني بشهادات الثانوية فايل
بشهادات .. شهادات .. يعني إحنا بنتفقعلى تركيب
الملف قبل استخدامه ونقعد نحط ونحط ونحط ونحط و
نحط ونحط ونحط ونحط ونحط ونحط ونحط ونحط و
نحط ونحط ونحط ونحط ونحط ونحط ونحط و
هذا اسمه مخطط الملف، لسه إحنا ملفناش، بعد ما اتفق
كيف شكل الملف وشكله وحجمه و ايش بيكون فيه، بروح
نجيب نعمل ملفات بنفس النظام هذا، تمام؟
طبقها المثال هذا على نفس اللي بنحكيه لأن لأن أنا
قبل ما أنشأ object بدي أعبر عن بيانات الطالب بدي
أحدد كيف شكل ال object تحديد شكل ال object عن طريق
إنشاء حاجة اسمها class طبعا؟ طيب أنا الآن هذه كلها
بيانات الطالب بدي أروح في الأول أكتب .. أفتح ملف
جديد وأكتب كلمة class إيش بدي أسميها class؟ بدي
أسميها student وبكتب نقطتين أنا كإن هنا جاعدين
نتفق إنه نعمل ملف .. إيش بنسمي الملف هذا؟ طبعا
بنسميه student لأن الملف هذا هيعبّر عن إيش؟ عن ال
student، عن بيانات الطالب، يعني إحنا لما ننشأ ال
class بنسميها باسم بعبّر عن وظيفتها أو محتوها،
تمام؟ أنا لسه ما أنشأتش student، أنا جاعد بحدد شكل
الملف تاع ال student طيب الآن يا جماعة أشوف ايش
بده أعمل جوا .. جوا ال class قولنا أول بيان .. أول
حاجة كتبتها في بيانات الطالب هي ال ID رقم الطالب
طبعا اللي بده يكون مثلا نتعامل معاه ك string اللي
هو طويل شوية بنتعامل معاه ك string طيب عشان نتعامل
مع رقم الطالب بنده نعمله two methods two functions
طبعا يعني بدي آجي في ال class هنا و أعمل def مش
هنعمل function نكتب def تمام؟ وبنحط في ال def هذي
هذي اسمها set ID
عملت حاجة اسمها setid تمام؟ و أجيت فتحت ال course
مش إحنا دائما نعمل function ونكتب course تمام؟
لحاله كتبلي حاجة غريبة اسمها ايش هي ايش ايش self
ايش ال self هذا لسه بنعرفش ايش معناها تمام؟
طيب ال setid من اسمها ايش وظيفتها؟ إنها تأخد ID
للطالب طبعا؟ طب خليني بس عشان أوصل المعلومة بس
بشكل أفضل
هذه ال class كم function فيها؟ اثنتين واحدة اسمها
setid واحدة اسمها getid تمام ال setid هذه بتاخد
حاجتين مش هدول عبارة عن ال parameters اللي بتاخدهم
ال function اللي هم اسمهم حاجة اسمها self هنتكلم
عليها كمان شوية وحاجة اسمها id تمام ال function
الثاني اسمها getid برضه بتاخد ايش؟ بتاخد حاجة
اسمها self ال code اللي هنا خليني أصلا شوية لأن
إحنا ما شرحناش مفهوم السلف وزي هدولة بدي أروح أعمل
two methods ثانيتين اسمهم set name و
get name
طيب، ايش فيه جوا ال functions؟ ما لكوش فيه الآن،
تمام؟ لكن أنا اللي بدي أفهمه إنه عن طريق ال class
ال student هذه بدي أحدد للطالب نوعين من البيانات
ايش هما ال ID و ال name ال set ID وظيفتها إني أعطي
للطالب ID ال get ID وظيفتها إني أقرأ ال ID تبع
الطالب لسه انسوا الآن السلف هرجعك تبقى نفهم إن ال
set id معناه إني أعطي للطالب ID جيت ID إني أقرأ ال
ID تاعة الطالب set name إني أعطي للطالب name جيت
name إني أقرأ ال name تاعة الطالب طيب هذه كلها ايش
بنسميها؟ إحنا ال code اللي كتبناها هذا class
بنسميه لإيش؟ لأن هذا كله ال code اللي هنا يا جماعة
واضح لأن هناك indentation هنا إنه موجود داخل حاجة
اسمها class اسمها ال class هذه student طيب الآن
بدي آجي أعمل ملف python جديد غير الملف اللي فيه
class تمام؟ نسميه مثلا test2
عشان أقدر أستخدم ال class student هي موجودة وين
class student؟ في مجلد ثاني أنا بدي أعملها import
from test import student
طيب شوفوا الآن ايش بدنا نسويه بدنا نشيط طالب طبعا
بدنا إيجي طالب عندي في الجامعة وبدنا نعبر عنه
object زي ما بنعمل أي variable اعملوا أي variable
بأي اسم أنا ايش سميت ال variable S1 يساوي ايش اسم
ال class اللي عندي أنا student بكتب كلمة student
زي كذا وبحط قوسين
طيب
شوفوا ايش صار عندما أكتب السطر هذا
إحنا يا جماعة لما ننشق list ايش كنا نعمل؟ كنا نحط
اسم ال list يساوي ونحط قوسين زي كذا صح؟ لما نحط قوسين
زي كذا هو لحاله بيفهم إنه بيدور على الذاكرة ويحجز
مكان مكان فاضي صح؟ لو بيصير عربي الآن أنا فعليا
لما كتبت له list زي كذا كتبت له اسم متغير X وبدل ما
كتبت له كلمة ايش كلمة student وكتبت القوسين هذا
معناه
إنه بدي يروح ينشئ object من نوع student طب ايش
هينشئ object من نوع student زي كأنه يبني عمارة
بناء على خريطة العمارة الآن عشان يقدر ينشئ ال S1
هذا بدي يروح لمين لل class الكلاس هي اللي بتحدد شكل
ال object اللي مجاور اللي بده يبني عمارة بده يطلع
على خريطة العمارة ويعمل زيها .. تمام؟ لأن البرنامج
تبعي ما يعرفش ايش يعني ال student .. من أين بده
يتعلم أو يعرف ايش يعني ال student؟ من أين بده
يعرف؟ من الملف اللي معرف فيه ال student .. وين
الملف اللي معرف فيه ال student؟ الملف هذا تمام؟
الملف هذا بتعامل مع كم من البيانات؟ مع حاجتين اللي
هم ال ID و ال name شوفوا ايش بعمله هو بيروح الذاكرة
بيحجز مكان في الذاكرة تمام؟
في كم حاجة في حاجتين اللي هم هذه وهذا ال ID و
هذا ايش وهذا المكان كله يوجد مؤشر عليه اسمه S1 S1
يسمى student معناه يذهب الذاكرة .. الذاكرة شغل رام
تحت الجهاز ينشأ مكان في الذاكرة يكافئ أو يمثل
تركيب مين؟ تركيب ال class ال class ايش بتقول لي إن
هي بتتعامل مع نوعين من البيانات اللي هم من ال ID
و ال name فبيروح في ال class وبنشغل فيها مكانين
فاضيين وواحد خاص بتخزين ال ID وواحد ثاني خاص
بتخزين ال name وفي مكانين ثانيتين أو أربع مكان
ثانيتين اللي هم فيهم أسامي ال methods اللي هم set ID
و get ID و set name و
get name هذا كله أنشأه فقط لما كتبت كلمة ايش
student وحطيت قوسين زي هيك وكأن أنا روحت أنشأت
ملف خاص بشخص عندي في البيت كامل وحطيته في الشنطة
الملف لسه ما له فاضح ما فيش فيه حاجة لكن فيه أماكن
فارغة وكل مكان مخصص لشيء معايا أنتم يا جماعة؟ طيب
نرجع
ثاني على المثال هذا طبعا إحنا أنشأنا object خاص
بال student أعطيناه بيانات؟ لأ ما أعطيناهوش بيانات
لسه ملف فاضي الأصل أنا ليش عملت الملف؟ عشان أعبي
كلمة يا ربي بيجي ال S1 دلنا ال S1 عبارة عن ايش يا
جماعة؟ مؤشر بيأشر على المكان الكل في الذاكرة اللي
موجود فيه ايش؟ ال ID و ال name ومين هدول؟ ال
functions اللي موجودين وين في ال class طيب S1 لو
أنا ضغطت dot لو أنا ضغطت dot عليها هيجي في عندي
method أو function اسمها set name ايش فايدتها هال
set name حكينا قبل شويّة؟ ايش فايدتها الـ set name؟
فايدتها الـ set name أنّها تأخذ اسم و تحط وين؟ في
المكان هذا يعني أنا ما عليّ اللي أقوله set name و
أحط له اسم ايش؟ أحمد
وبعدين بدي أحط له ID طيب ايش بعمل بقول S1.setID
وبعطيه الرقم اللي أنا بدّي اياه يعني أنا الآن يا جماعة
في الـ code تبعي باختصار أو مجمل اللي أنا عملته
احنا يا جماعة بدّي نتعامل مع بيانات طلبة بيانات
طلبة كتيرة روحنا في الأول عملنا أو حدّدنا هيكلية
بيانات الطالب ككلّ الهيكلية هذه اتحدّدت في ملف اسمه
class بالظبط تمام الـ class هي اللي أنا حدّدت فيها
أنّ ملف الطالب عبارة عن ID on and وفي أربع methods
واحدة اسمها set ID و set name لإدخال البيانات
وواحدة اسمها get name و get ID لإخراج البيانات
قرأتها من الملف هذا هي كلّيّة بيانات الطالب، هل أنا
أنشأت بيانات الطالب؟ لأ، هذا هي كلّيّة أنا لسه ما
استخدمتهاش، ومستخدمها من البرنامج، تمام؟ لما أروح
البرنامج تبعي، أجيت بالطلاب، أسوي واحد يساوي
student، وحطيت قوسين، هنا راح أنشئ object من الـ
class انتبهوا للمصطلحات لما أقول له يساوي student
أنشأ object من الـ class زي كان هو أنشأ من عمارة
بناءً على مخطط العمارة، بناءً على هيكلية العمارة،
تمام؟ فعليّاً البيانات ولا بتكون مخزّنة في الـ class
ولا في الـ object بناءً على كلام الحكيته في الـ
object هل الناس عايشين في خريطة العمارة؟ لأ،
الخريطة هيكلية بس، بتوضّح كيف بناء العمارة، لكن
الناس هتعيش في العمارة اللي انبنت على الخريطة، وها
كذا العلاقة ما بين الـ object والتلازم علاقة ما بين
العمارة وخريطة العمارة الـ object شيء موجود فعليّاً
موجود في الذاكرة بتخزن فيه بيانات وبقرأ منها
بيانات لكن الـ class لأ مخطط لكن المهم الـ class
ليش؟ لأنّ الـ object تمّ إنشاء بناءً على المخطط اللي
اتحدّد في الـ class طيب أنا هنا أنشأت ايش object
واحد طب شوفوا ايش بدّي أعمل يا جماعة أجيت قلت له S2
يساوي
Student ايش عمل هنا؟ راح في الذاكرة و حجز مكان
جديد كيف شكل المكان الجديد؟ نفس هذا بالظبط بناءً
على شكل الـ class صح ولا؟ حجز فيه مكان للـ ID فاضل
لسه و مكان ثاني للـ name و حطّ تحت الـ methods setID
و getID و setName و getName
هذا الملف للطالب وهذا الملف للطالب الثاني كلّمني ايش؟
يدي عندي ولد جديد في البيت وعملت له ملف جديد واضحة
يا جماعة؟ هذا برضه عملت للطالب ملف جديد طبعاً الملف
الجديد هذا أشرت عليه مؤشر ثاني اسمه مين؟ S2 أي
صرفي هنا عندي S2 طبعاً الـ S الأولاني الـ ID is what
مكتوب صار فيه رقم صح؟ ولسه في الأولاني برضه هذا
فيه أحمد هدول أحمد والرقم هذا معطيين لمين؟ لـ S1
هذا لسه الـ ID والـ name تقع هنا فاضيين طبعاً لما
نعطيه بيانات بيجي لـ S2.set name و بيقول عليه
S2.setID ونضع الرقم اللي بدّنا اياه الآن
يا جماعة بدّنا نشوف أو نتخيّل كيف الـ object oriented
هتوفر عليّ مجهود ووقت الآن احنا تخطيط بيانات الطالب
تمّ وين في الـ class يعني أنا هتعب فقط في إنشاء الـ
class لكن لما أجي أنشئ بيانات طالب فقط بقول له ايش
يساوي student لو أنا معرف 30 متغير في الـ class
هينشئهم كلهم بضربة واحدة لما أقول له ايش student
أنشئ الملف كامل بس طبعاً بضلّ عليّ أنّي أعبيّه ببيانات
أنشئ الملف كامل واتعامل معه كشيء واحد كـ object
واحد الفكرة أنّ هذا الـ student أو الـ S1 مش حاجة
واحدة عبارة عن ايش مجموعة حاجات بس لتسهيل
تتعامل معاها كإنّها ايش لأنّها شيء واحد وهذا الكلام
اللي حكيته أنّ أنا بتعامل مع الشخص اللي عندي في
البيت كله كايش كملف أشوف عشرة ملفات أحسن ما أشوف
سبعمية أو تمامية واجهة تخيّلوا أنّ بيانات الطلاب
كلهم عملهم في ملف واحد معناه أنّ ثلاثين ألف طالب
بتعمل ثلاثين ألف string وثلاثين ألف ID وثلاثين
ألف name وثلاثين ألف list عشان يخزن المواد اللي
ماخدها صح ولا؟ هعوم في بحر كبير لكن هيك أنا رتّبت
الشغل قلت له تعال بيانات الطالب كلّها اعملها class
لحالها هيكرّ البيانات هذه وبعدين لما تتعامل مع
الطالب كلّه أنشئ object من الـ class يمثّل بيانات
الطالب واضحة الفكرة يا جماعة هدف الآن أنّ تفهم
أشياء نقول لسه ضايل علينا شغل شغل كثير في الموضوع
طيب في مواضيع لسه ما شرحناش اتطرّقنا لها ايش هي وأنا مش
راح أقعد في الـ class قلت لكم انسوا الكلام الموجود
هنا صح؟ وانسوا السلف طب بنرجعهم على الـ gate ايش
السلف؟ ايش معناها؟ وكيف احنا كتبنا البيانات
هذه طيب خلينا نمحيهم عشان نكتبهم من أوّل وجديد ايش
بحكي لهم؟ أنا ليش أنا عملت class student مالها؟
فاضية بدّنا نحدّد ايه البيانات اللي هتنحط جوا الـ
class بقول أي بيانات اللي هتحطّها في الـ class بدّك
تعملها وسيلة للإخراج معروف أنّ أنا بعمل الـ class
كهيكلية لبيانات شيء معيّن يعني هي في النهاية هتمثّل
مجموعة بيانات مش هتحتوي على مجموعة بيانات أنا بقيت
في الكامل هيحتوي من الـ object تمام هذه هتمثّل
مجموعة بيانات كلّ واحدة من البيانات اللي هتكون جوا
الـ class لازم أو أفضل أنّك توفر لها method للإدخال
أو function للإدخال و function للإخراج للقاعة تمام
يعني مثلاً أنا student له name بدّك تعمل method
اسمها set name و method اسمها get name بدّك تعمل ID
بدّك تعمل method اسمها set ID و method اسمها get ID
بدّك تعمل plan number set plan number و get plan
number address set address و get address هذا
القاعدة اللي بدّنا نفهمها عشان هيك أنا قبل شويّة لما
تعاملت مع الـ main والـ ID كم method عملت أربعة
اثنين set واثنين get طبعاً؟ طيب دلوقت هالكلام دي
بقى بفكّر بقول ايش أوّل بيانات للطالب الـ ID يبقى
قدام الـ def setid
طيب
أوّل مفتاح القصد لحاله جاب لي حاجة غريبة كتب ليها
اسمها self طيب المفروض أنّ الـ setid تأخذ parameter
بعين تقول لأ الـ set دايماً set هنا ومش set في
الحياة الـ set في الـ function هذه المفروض تأخذ ID و
تخزّنه اين؟ في الذاكرة طبعاً فالمفروض أنّ أنا أبعد
في الـ set ID ايش متغيّر اسمه ID بس لسه اللي مش
فاهمين هو مين الـ self هذا ايش هو ايش الموجود هنا الـ
self هذا باختصار شديد جداً يا جماعة هو عبارة عن
المكان المجهول هذا، فقب الأسود الموجود في الذاكرة،
شايفين هذا المكان؟ هذا، هذا، الـ block اللي في
الذاكرة، هذا بنسمّيه ايش؟
self، هذا بنسمّيه self، معناه أنّ أنا .. ليش أعطاني
الـ self هذا؟ لأنّ أنا فعليّاً البيانات كلّها هتتخزّن وين
يا جماعة؟ في الـ self وهتنقرأ من وين؟ من الـ self
فأنا في الـ method setID بعت له حاجتين، ايش هما؟ الـ
ID اللي هيجي من وين الـ ID هذا يا جماعة؟ من الـ
object، من برّة، من البرنامج الأصلي، مش أنا بعمل
مثلاً input وبقول له setID، تمام؟ يعني المفروض الـ
user مثلاً يدخل الـ ID عن طريق form أو غيره بعدين
هذا الـ ID بدّه يتخزّن في الذاكرة في المكان الخاص في
الـ object هذا اللي بنتشور له بحاجة اسمها ايش self
فالمفروض أنا هنا الـ set ID أخذ حاجتين self و ID
ليش؟ عشان يأخذ الـ ID ويحطّه وين؟ في الـ self طبعاً
مش هو لحاله هيخزّنه أنا بدّي أخليه يخزّنه طبعاً فانا
ايش قلت له كتبت السطر هذا روح للـ self تمام؟ وحطّ فيها
حاجة اسمها id يساوي id هذا عشان نفهمها أكثر بدي
أحطها دي x تمام؟ حطيتها إيش عشان ما يصير تمييز في
الأسماء أه طلع باعي هنا set id بعتله self oxأقول له
أنّ مفروض الكود اللي أكتبه هنا يأخذ ال X هذه و
يخزينها في ال self في ال self الكود هذا اللي أنا كتبته
هو سطر واحد فقط هذا أيش معناه بقوله روحلي على
ال self و أعمل dot ID هذا أيش معناه على طول أول ما
أقوله self dot ID بروح بحجز مكان هنا بعمل خط طبعا
هذا قيمة أول ما يشوف كلمة dot self dot حاجة هذا
المكان إيش بيسميه؟ بيسميه ID و بيحط فيه مين؟ قيمة ال
X اللي دخلها ال user لحد الآن هذا فيه name ما فيش
فيه name متى أنشأ ال ID؟ في اللحظة اللي قلت له فيها
set IDرحل ال self وعمل dot هنا أنشأ مكان حجز مكان
اسمه ID وخزن فيه ال X يعني القصد أنه هذا ال ID
بخلف على ال X صح؟ هذا مكان موجود وين؟ في ال self
وهذا ال X هي القيمة اللي مررتها من برا عشان هيك
أنا لو كتبتها زي هيك زي قبل شوية ما تمخبطوش
هذا ال ID مش هو نفسه self.id، هذا متغير إجا من
وين؟ من برا، من المستخدم، تمام؟ وهيتخزن في متغير
موجود داخل ال self طبعا، واحنا بقولوا طب ليش ما
حطيتوا اسم ثاني؟ يعني إذا بدنا نحط أسماء مختلفة
بدنا نقعد كل شوية X و Y و Z و W و جدا ونخلص
الحروف ونقلف أسماء ثانية؟ أه، فللتسهيل كتبت هذا ID
وهذا self.id بس لِنعرف أنّ هذا مختلف عن هذا هذا
القيمة اللي اتمررت من ال user طبعا، وهذا المكان
اللي انحجز داخل ال self
زي اللي بنى عمارة تمام، ولسه العمارة مش مجسمة تمام
فكل ما يجي له واحد set ID بروح بقطعه نطفة وبحطه
فيها تمام هذا زي هيك ال object نفسه أول ما قلت له
نفّذت الأمر هذا أنشأه بس لسه ما له مش مجسم امتى
بيبدأ يتجسم لما أقوله set ID ببعت له قيمة بروح أول
ما يلاقي كلمة self.id بحجز مكان بالاسم هذا وبحط
فيه القيمة اللي أنا مررت طيب إذا أنا حكيت أنا يا
جماعة أنّ أي قيمة بدي أخزنها بدي يكون فيها method
للتخزين و method للقراءة زي ما في عندي method
اسمها setid بدي أعمل method ثانية اسمها get
Get ID الـ
Get ID هذه إيش المفروض تعمل يا جماعة؟ إيش المفروض
تعمل؟ ترجّع القيمة بتاعة الـ .. تترجّع ال ID تمام؟
وين ال ID موجود الآن؟ داخل ال self عشان هيك
قلت له return self.id
هنا قلت له خذ لي في ال self.id هنا قرأت من self.id
بإنفعش لازم أحط self كيف؟
البيانات
مخزنة داخل ال self عشان أنا أجيب البيانات لازم
أجيبها من ال self وأخزنها داخل ال self هذا
البرنامج ال ID هذا متغير بقعة ال user أخذه و
خزنته في ال self ID بعد ما تخلص ال function هذه
بطل في وجود لمين؟ لل ID اللي بعته ال user صار
البيانات مخزنة في ال self.id بالدقائق أو بالدقائق
من ال self.id عشان هذا قلت له return self.id ال
name نفس القاعدة تماما set name على
طول أول ما قلت له set name إيش طلّع عليه ال self
هذا ال self ده من ورايا وورايا في ال class ليش
لإنّ فيه أنا بخزّن ومنه بقرأ معايا أنتم ولا لأ يا
جماعة؟ طيب ال set name هذا لازم أنا أعمله عشان ال
user يبعت name name فكتبت أنا متغير اسمه name وهنا
إيش بدي يعمل؟ بدي يروح self dot name يساوي name بدي
آخذ الاسم اللي بعته ال user ويخزنه في مكان جديد
اسمه name موجود داخل ال self بعد السطر هذا لما
يتمثل هيروح يحجز مكان جديد هنا اسمه مين؟ اسمه name
طيب
زي ما عملت set name بدي أعمل get name
برضه جابل ال self مططليا هال self هادي، تمام؟ إيش بده
أعمل داخل ال get name؟ return من وين بده يجيب ال
name الآن؟ مدام أنا خزنته في ال self بقول له self name
dot name بس اسم ال book هنا ده أنا بتحكم فيه أه
طبعا أنا بتحكم فيه، تمام؟
شوفوا الآن مثال عملي آخر أجيت أنا أعمل برنامج ل
supermarket تمام؟ وعندي أنا products موجودين في
المحل ال products اللي في المحل في عندي اسم ال
product نوعه، ال ID تبعه تمام؟ تاريخ إنتاجه سعره
هذه بياناته كلها، والمحل فيه مثلا عشر تلاف product
معناها بدي خمس متغيرات في عشر تلاف عشان أعبر عن
من؟ عن كل ال items الموجودين في ال market صح ولا؟
واحد بيقول استخدم list بس في الحالة دي كام list
هيلزمني؟ على الأقل خمسة list صح ولا؟ list لأسماء ال
product و list لل ID و list للأسعار و list لتاريخ
الصلاحية وتاريخ الانتهاء وبدك تخلي كل لسبة ربوطة
في التانية يعني لو حذفت من واحدة بدك تحذف التانية
لازم يكون نفس الترتيب فجلبة كبيرة فالآن احنا بنتفف
أنّ نعبر عن ال product كله اللي في ال supermarket
كأنه object طيب
كيف نعبر عنه ك object؟ أول حاجة طبعا قبل ما ننشئ ال
object بروح ننشئ مين؟ ال class بالظبط مخطط ال
object كيف شكله هيكون؟ فبنجي أجيت عملت Python فايل
جديد بدي اسميه مثلا product إيش هي ال product؟
منتج تمام بكتب كلمة class وبكتب اسمه إيش سميناها
احنا؟ تمام product وبحط نقطتين إذا خلينا نتفق إيش
البيانات بتاعة ال product اللي في هذا خلينا نتعامل
عشان السرعة نتعامل مع ثلاث بيانات بس اللي هو ال ID
بتاع ال product اسم ال product وال type والسعر
أربع معايا يا جماعة أربع متغيرات بمثّل product
ما دام أنا بتعامل مع أربع متغيرات كام function بدي
يكون عندي موجود ثمانية تمام شوفوا إيش بدي أعمل لهم
بدي أقوله def set ID ال ID بتاع ال product تمام
أفتح قول زي هيك إيش كتب لك self مفروض أنا أعمل فاصلة
وأقول له ID على أساس ياخذ ال ID اللي بعده ويحطه
في ال self مرة ثانية أنّ ممكن هذا الاسم اللي هنا
أنا أتحكم فيه أحط اسم اللي بدي إياه يكون هنا X وهنا
هذا ال X ما له علاقة بال ID اللي هيتخزن في ال self
هذه أسماء أنا بحددها بس احنا عشان ما نتعاملش مع
أسماء كثير بحب أنه يكون إيش الاسم نفسه بس بيدا
يكون ثانوية أداء مختلف عن هذا واضح يا جماعة؟ زي ما
عملت set ID بدي أعمل diff get
ID إيش بده يرجع هنا؟ مين ينجّلي؟ return self.id
def set name هنا
هياخد name وهنا بقول self.name هيساوي
ال name وبعدين def return
self.name بعدين set price def set
price وهاي ال price self dot price
Def set type تقريبا
كلهم نفس الفكرة self dot type يساوي type
طيب هيك احنا أنشأنا ال class واحد بيقول لي غلبهم
أنت هتغلب بس إيش مرة واحدة بس تمام تعالوا الآن
نروح نستخدم ال class بتاعتي ال class بتاعتي اسمها
product وموجودة في ملف اسمه product فالآن
بدي أقول from product import product
هنا بالاسم الملف product واسم ال class product طيب
أتيت أنا قبل المنتج جديد طبعا بدي أقول له P1 هذا
إيش اسم المتغير الخاص بمين؟ بالمنتج بس هي أتعامل مع
المنتج كله كأنه ك P1 كأنه بدي أنشئ object بال class
اللي أنا عملتها بكتب product اسم ال class وبأفتح
قوسين زي هيك على طول راح حجز مكان في الذاكرة خاص
في ال product
هذا المكان لسه فاضي بدي أبيه بـ واحد دوت ست ID حط
رقم المنتج بـ
واحد دوت ست price بـ
واحد دوت ست الـ name
P1.6 هذه
كلها الـ P1 الأنصار يمثل أيش؟ بيانات product 1
تمام؟
أيش
عملت أنا؟
تمام؟ و بدي أغير هذا
بيانات product ثاني طب انتبه معايا شوية إيش
هذه اللي عملتها؟
إيش هذه اللي سويتها تحت؟ list فاضي صح ولا لأ؟
إيش حطيت فيها؟ إيش سويت في الـ list؟ حطيت P1 و P2
شوفوا الآن list واحدة شفتوا كيف مثال الشهادات
ولاد العيلة عملت أنا شنطة داخلها أيش؟ فيلات و بدي
بيانات واحد منهم باخد الملف تبعه و بعدين بقرأ
البيانات اللي فيه أنا عندي list واحدة فيها شيئين two
objects وكل object عبارة عن أيش مجموعة بيانات واحد
بيقول طب عادي كيف هنطلع البيانات اللي موجودة في الـ
list هذه؟ طلع معايا هنا كيف بن .. بنلف على الـ list
في الأول صح ولا كيف؟ نلف على الـ list for I in list
واحد لأن كل I عبارة عن أيش؟ عبارة عن object فبدأ
أقول له للـ I الواحد print I dot get الـ name أنا
عامل الـ get name لإيش؟ عشان نقرأ وبدأ أقول له
print I dot get price يعني
أنا الآن قاعد بعمل loop على الـ product وكل واحد
بمر عليه بطبع اسمه و بطبع الـ price تبعه فاهمين حاجة
يا جماعة؟ اه تعالوا نعمل run run
لهذا الملف طيب
هاي النتيجة اللي طلعت عندي طبقة لـ cheese 60 و milk 10
مش بس هيك شوفوا معايا كيف هنستفيد من الـ object
oriented programming شوفوا
الـ code اللي أنا هكتبه على الـ gate و ننهي في
المحاضرة طلعوا معايا هكتبه على السريع انتبهوا معايا
عشان لحالكم تفهموا أنا أيش اللي بعمله
طيب يا جماعة خلصنا لسه هننفذ البرنامج لأن بس قبل
ما ننفذه حد فاهم أنا أيش بعمل؟ أيش سويت أنا؟ أنا
الآن بدي أعمل بيانات لـ products بدي أبني الـ
database بتاعة الـ supermarket اللي هي عبارة عن
أيش؟ بيانات الحاجات الموجودة في الـ supermarket
فراحت في الأول عملت list اسمها أيش؟ Products على
أساس إن أنا قررت إن كل البيانات بتاعة الـ items
تتخزن في list واحدة طبعا بالوضع الطبيعي والمنطق و
بدون object oriented programming ولا يمكن أخزن
بيانات الـ items في list واحدة صح لأن أصلا كل item
له عدة بيانات فلا يمكن أن أتخزن بس كيف أخزنها في
list واحدة مبدأ التجميل بيانات الـ object كل الـ
product الواحد كله بيتعامل معاك object طبعا كل
شهادات الشخص بتعامل معاه كإنها ملف واحد فروحت
أنشأت list اسمها product لسه فاضية على أساس إنه
هيتخزن فيها الـ objects اللي خاصة في مين؟ في الـ
product بعدين
قلت له while true أيش بده أدخل؟ هلجت أنا في while
loop عشان أطلب من المستخدم يدخل بيانات الـ product
طبعا الـ product الواحد المستخدم يدخله أيش بيانات
كتير أول حاجة طلب منه input دخل الـ ID طبعا أنا قلت
عشان أنهي الـ loop إذا كان اشارة سلة اعمل break
عشان ينهي يعني غير ايه؟ دخل الـ product الـ ID وخزنه
في متغير اسمه ID لسه لحد الآن ما أنشأناش احنا
class تمام احنا أنشأنا op لسه variable اسمه ID و
بعدين دخلنا الـ name وخزنه في متغير اسمهاسمه ايه؟
ودخنا الـ price وخزناه في متغير اسمه price ونفس
الحاجة الـ type يعني بيانات الـ product لسه مجزقة
على أيش؟ على variables اللي هم بده يجمع الـ
variables هذه القيم كأيش؟ كـ object واحد فروحت بعد
هيك أنشأت أيش هذا السطر؟ أنشأت object تمام؟ أنشأنا
object من الـ classProduct معاكم أنتم يا جماعة؟ و
بعدين أخذنا البيانات اللي دخلناها اللي هي الـ ID و
الـ name و الـ price و الـ type و حطناها .. حطناها في
الـ object عن طريق الـ set name set ID set type set
price لأن بعد اللحظة هذه أنشأ مكان في الذاكرة في
الـ ID و في الـ name و في الـ price و في الـ type
البيانات مخزنة هنا وعليها مؤشر اسمه مين؟ اسمه P
وبعدين حكيت له خد الـ P وحطه وين؟ وحطه في الـ list
أيش اللي صار الآن؟ هاي في عندي list فاضية هنا تمام؟
بياخد الـ P المؤشر هذا لحظة أنا قاعد بقول إن الـ P
عبارة عن مؤشر يعني الـ P هو مش البيانات هو مؤشر
بأشر على مكان البيانات في الذاكرة هذا الـ P ييجي
تخزن هنا يعني لاحظ هذه أول مكان فيها بأشر وين؟ على
object في بيانات الـ product خلصنا؟ لسه ما خلصناش بدي
أرجع يكمل في الـ while loop صح ولا يا جماعة؟ هيرجع
يكمل في الـ while loop هيطلب يدخل كمان أيش؟ كمان ID كمان
الـ product هيدخل الـ ID و هدخل الـ name و هدخل الـ
price و هدخل الـ type لحتى إن أنا لسه ما أنشأناش الـ
product الثاني هنا أنشأت object جديد اسمه أيش؟ P
وحدة يقول لي طب ما هو في P قبل؟ لأ هالجيت أنا
ما دام داخل في for loop تمام؟ أنا كل ما أقول له
يساوي product بنشق أيش؟ أيش جديد؟ الـ P الأولاني صار
مخزن وين؟ في الـ list هذا الآن لما أقول له P يساوي
product بروح بحجز مكان جديد في الذاكرة كيف شكل
المكان الجديد؟ هذا بناء على شكل الـ class تمام؟ و في
المكان الجديد هذا في الذاكرة بروح بعمل set name
set ID set type set price عشان يخزن البيانات
الجديدة تمام؟ و بعدين بروح بقول له product.append الـ
P المؤشر الـ P الجديد الـ P اللي بأشر على هذا هيتاخد
ويتخزن وين؟ في المكان الثاني في الـ list هيرجع
للـ loop ثانية هيدخل بيانات product جديد وهينفذ السطر
هذا product هيعمل مكان جديد في الذاكرة وهيحط
البيانات الجديدة في المكان الجديد في الذاكرة وهدا
عليه مؤشر اسمه P هياخده يضيفه لمكان الثالث في الـ
list هيك بيكون شكل الذاكرة تعتي شايفين كيف شكل
الذاكرة معقدة صح ولا list طالع منها خيوط بتروح وين
على أماكن في الذاكرة، لكن أنا كمبرمج بلزم أفهم
التفاصيل هذه كيف شكلها في الذاكرة؟ لأ، تمام؟ لاحظ
أن التعامل في الـ code هنا أسهل، تمام؟ لكن هذا الـ
.. مين اللي خبى عني تفاصيل التعقيدات هذه؟ الـ object
oriented programming؟ إنه أنا خلاص في الآخر بتعامل
معاها بيانات كل product كحاجة واحدة منها product
فاهمين حاجة جمعها معاها؟
طيب بعد ما أخلص كل شيء طلعوا معايا يا جماعة بعد ما
أخلص عملية الادخال كلها دخلت في for loop for I in
product الـ I بده يعمل loop عنين؟ على نفس الـ head
الـ I بتمثل أيش؟ product روحت لكل I قلت له اطبع لي
اسمه واطبع لي أيش؟
السعر تبقى فالآن بعمل run عشان نجرب العمل بالتطبيق
اللي هيطلب مني يدخل أيش الـ ID هاي أي رقم الـ name
milk مثلا الـ price عشرة تمام الـ type milk بدأنا في
أيش الـ product ثاني تمام الـ price عشرين
برضه milk دخل كمان ID و هكذا لما بدي أخلص بحطها ده
أيش؟ سلم تمام و هنا الطبع ليه بيانات الـ products
كتاب لـ milk أيش؟ عشرة و cheese عشرين هذه المحاضرة
كانت تقديم أو شرح لمفهوم الـ object و الـ class
ضروري جدا يا جماعة تروحوا تجربوا الشغل هذا
المحاضرة هذه 90% من الفصل لأ 90% من الفصل .. مش
الفصل الدراسي كله، الفصل يعني الفصل هذا اللي بتاع
الـ object oriented اللي فهم المحاضرة هذه المحاضرات
الجاهية هيكون سهلين جدا، وبعدين هذا مهم ليش لأن
بعد الفصل هذا ناخد الـ graphical user interface كيف
نصمم وجهات البرامج، وكل تصميم الوجهات معتمد على
هذا الكلام، ضروري تفهموا الموضوع هذا