طبعا السلام عليكم المحاضرة الماضية بدأنا في موضوع
ال object oriented programming object oriented
programming
يعني البرمجة الشيئية أو البرمجة المعتمدة على
الأشياءوفي تفصيل ايش فايدة البرامج الشيئية حكينا
انه احنا في بعض البرامج اللي بتعامل فيها مع بيانات
كتير هيكون عليه الصعب ان اتعامل مع variables مفصل
عن بعض يعني مثلا قلنا لو انا بتعامل مع بيانات طلبة
الطالب الواحد عبارة عن عدد كبير جدا من البيانات
رقم الطالب، اسم الطالب، عمره، التاريخ ميلاده،
العنوان تبعه، رقم جواله، إيش تخصصه، أي سنة هو
موجود، إيش المواد اللي خلصها، اللي رصب فيها، إيش
الخطة بتاعته، تفاصيل، اكتيرة جدا، تمام؟ الآن، أنا
لو بدي أمثل في البرمجة العادية، المعلومات هذه
كلها، بدي أعمل لكل شيء variable معينيعني مثلا
الطالب ممكن يحتاج 20 variable ما بين string و
integer و list و غيره طبعا اذا كنت بتعامل مع الف
طالب بدي 20 variable في الف طبعا فهيكون العدد كبير
جدا فأقول في حالات اللي زي هيكبيرنا الربط بالشغل
بحيث أننا نجمع بيانات الطالب في ملف صح ولا؟ انت
شوفت من الذاكرين المثال اللي قلنا لكوا ورق و جمع
الملفات؟ نجمع بيانات الطالب كلها و معلوماته في ملف
واحد طبعا احنا بنسميه في البرمجة 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 عشان اقرأ
من السلف def getID
برضه jabless دايما اول مفتاح قوس في اي method داخل
class بيجيب للسلف ليش؟ لأنه فعليا هو ال object في
السلف هو اللي فيه البيانات اللي بقدر اخزن عليه و
بقرأ منه لما بقوله ال termself.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 هي القيمة اجت هنا هيروح
ينشأ في السلف متغير اسمه ID ويعطيله القيمة اللي
انا ماركتها يعني هنا هيحجز مكان اسمه ID ويعطيله
الرقم اللي انا حطيته طبعا؟ بعدين لما اقول له set
name
نفس الشيء بروح هنا بكتب كلمة milk مثلا ست 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 dotget name يعني انا عشان اقرأ البيانات الموجودة
فيه باستخدام ال get method تمام I dot get name و
بالضبط معاها السعر I
dot 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 Inter
product name انا اصلا بعرف متغيرات صح بعدين ال
price
هي دخلت price تعالى product لحد تاني انا دخلت
تلاتة variables طبعا الان هدول التلاتة variables
بدي اجمعهم في ايش؟ في object واحد فبروح بعمل P
يساوي product ايش هذا اللي انا عملته؟ اعرفت
product و بعدين بقوله P dot set ID و بعطيله قيمة
ال ID اللي دخلته من وين؟ من ال input.set name
وبعطيله ال name P.set price وبعطيله ال price
وبعدين هذا ال P بعد ما جهزته وحطيته في بيانات بروح
ل list 1.append ال P لأن هذي ويله وبغطيها شكل
ألمانى لنهاية بدنا شرط انهيها فبدي أقول له FID
يساوي علامة صلة مثلاتمام اعمل اعمل 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 و نام طيب عشان أقدر أعمل الحاجة هذه
هلجيت طبعا لو شغلت هيطلق ال 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 مرتين هيطلع ليها شايفينها؟ اه
in it ايش الكلمة in it؟ من initialize ايش يعني
initialize؟
تمام؟
initialize تمام؟ ياه تقيه مبدئي بالامريكي مكتوبها
بال Z و بالبريطاني مكتوبها بال SInitializer هو
الشيء اللي يعطيه قيمة مبدئيا، فهو initialization
هذا
النعم منه، اللي يعطيه قيمة مبدئياأمامكم في
الامتحانة أقول لكم اعملوا لي انشراليزيشن و اقولوا
لي تعالى ايش يعني انشراليزيشن ترجمنا إياها خلاص
الكلمات اللي بيعطيكوا إياها دي مطلوبة منكم تمام؟
اه فالان ايش ال in it هذي؟ بقوللي أنت ممكن تروح
تعمل implement لل method in itو تحط فاصلة و تحدد
ايش القيم اللى انا بده ابعتها من خلال الانترنت
يعني احنا مثلا ايش القيم اللى بنبعتها المبدئية
اللى بنعملها 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 dot 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 argumentmissing 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 هياخده يحطه في السلف
المتغير اسمه 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 ضرب
all salary يعني new salary هيساوي الراتب الجديد
زائد 10% من الراتب الجديد و بعدين يقو روح لل I و
يقول 6 salary و يحط new salary
طبعا هذا ال code بطبقه بس على مين؟ على اللي
جاعدين، الخاصة، صح؟ و هذا بطبقه لمن؟ للمتزوجين،
بس، تمام؟
طيب،
الآن هيطبق إيش؟ طبق التعديلات، شوفوا مثلا هذه علي
صارت بإيش؟ ألفين و متين، كان ألفين صار ألفين و
متين، تمام؟ لأنه زاد عشرة في المية
طيب ايش اللي صار على ال gate هو هو by default
بتكون azometro خلينا نتأكد بس إيش ال default value
بتاعتها يعني خلينا نقبع هنا print I dot ezmerid
نشوف بس إيش هيقبعها
method
هو أظهر أنه أخدها true خلّيني أحنا نحطها بواحد أت
ست مثلا
هذه true
طب هو الظاهر انه اعتبرها true لحاله الان
انا حطيت قيم مبدئية
طيب الان الهاري اشتغلت تمام
الان هذا مثلا 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 انا بوصل للحاجات اللي فيها عن
طريق الصلفة ايش الميزة هنا انه انا لما اروح
للبرنامج الأساسي تمام بقوله بدل منفذ ال 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واضحة الفكرة يا
جماعة؟ تمام، بنكمل المرة الجاية