طب يا جماعة السلام عليكم اليوم ان شاء الله هنحل
بعض الأسئلة اللي في الكتاب على موضوع ال classes و
ال objects او ال object oriented programming طبعا
هذا الموضوع اللي احنا حكينا فيه في التلت محاضرات
الماضية موجود في chapter 7 في الكتابتمام هنحل
المحاضرة هذه سؤالين و هنعطيكوا سؤالين homework و
بعدين ان شاء الله هندخل في ال .. اذا ضال معانا
وجهة هندخل في الموضوع الأخير اللي هو ال graphical
user interface او تصميم الوجهات لبرامج ال python
طيب الآن هروح على أسئلة الكتاب الموجودة في صفحة
بتان و .. و ستة و تلاتين و متان و سبعة و تلاتين في
chapter سبعة تمام
و هبدأ انا احل من السؤال الاول طيب
خلينا نقرأ السؤال يا جماعة السؤال بيقول the
rectangle class ايش هي rectangle مستطيل
بتطلب مني أن أعمل class اسمها rectangle عشان يتمثل
بيانات مستطيلالان طبعا احنا ليش .. ليش بدنا class
هنا المستطيل الان له بيانات يا جماعة المستطيل عشان
انا ارسم المستطيل بلزمني له معلومات ايش هي معلومات
المستطيل الطول و العرض و ممكن كمان لزمني النقطة
اللى بدى ارسم عندها المستطيل صح انا كيف بدى اعرف
المستطيل خمسة في ستة كيف بدى اعرف وين ارسمه تمام
فنقطة البداية تاعة رسم المستطيل مهمة
فالان انا طبعا عشان امثل نقطة رسم المستطيل و الطول
و العرض بلزمني على الأقل تلت او اربع متغيرات عشان
ارسم مستطيلة يا جماعة و عشان امثل مستطيل في
البرمجة بلزمني متغيرات كتير بلزمني مثلا integer او
float بمثل الطول و integer او float بمثل العرض
وعندي نقطة، النقطة بمثلها بقمين صح ولا؟ X وY فبدي
انا مثلا على الأقل اربع متغيرات اتمثل المستطيل طب
لو انا عندي مثلا بدي ارسم خمس، ست مستطيلات معناها
كل واحد بينهم بدي اربع متغيرات لأن عشان اسهل
الموضوع بدي اعمل class حاجة واحدة تمثل كل بيانات
المستطيل وممكن يكون فيه بيانات تانية مثلا لون
الإطار تعالى المستطيل كم بتعب المستطيل وها كده
معلومات كتيرالأن هو بيقول لي اعمل لي class اسمه
rectangle عشان اتمثل بيانات مستطيل ال class
contains اول حاجة two data fields named width and
height يعني بدي متغيرين اسمهم width و height عشان
اخزن فيهم معلومات الطول و العرض ال constructor
طبعا انا بدي اضيف عليها دي يعني هو بسحك ال width و
ال height لكن انا بدي اضيف عليها نقطةعشان ارسم
المستطيل بدي نقطة اعرف من اين بدأت رسم المستطيل
النقطة التانية بطلب مني a constructor that creates
a rectangle with the specified width and height a
constructor ال constructor يا جماعة هو نفسه ال
initializer
شوفت الـ initializer الحكيمة المرة الماضية اللي هو
أعطاء قيم مبدئية لل object عند إنشاءه تمام؟ ال
constructor هو نفسه كلمة construct يعني إيش؟ يبدأ
ال constructor بتبني معنى الباني تمام؟ ليش؟ لأنه
فعليا عملية بناء ال object و أعطاء معلومات إنه
بتبدأ بدايتها من وين؟ من ال in it صح؟هي الـ init
method هي أول حاجة بتتم تنفيذها عند إنشاء ال
object فيديثها أنها تعطي قيم مبدئية لل data fields
الموجودة في ال object فلمّا يقول على ال
constructor هو نفسه يعني في ال initializer يعني
كأنه بيطلب مني أعمل ال init method واضح يا جماعة؟
مش في init method إحنا بنعملها جوا ال class؟ طبعا
هذا هو اللي طلبه مني كأنه بيقول لي أعمل ليه؟Init
method تاخد بيانات افتراضية للـ width و الheight
القيم
المبدئية للwidth و الheight هتكون 1 او 2 يعني لو
ال user ما مررهمش هيكون واحد او اتنين بعدين
اعمللي كمان في ال rectangular class method تانية
اسمها getArea فيديتها انها تحسب لمساحة المستطيل و
ترجعليها و method اسمها getParameter تحسب لمحيط
المستطيل و ترجعليها نقطة مهمة حكيناها المحاضرة
الماضي ان ال methods او ال functions الموجودة في
ال class نوعين فيه setters و getters فيديتهم انه
يعطوا قيم و اقرأ قيم وفيه methods او functions
تانية انا بعملها عشان اتقدي وظيفةأنا بدي أخبّي
تفاصيلها عن اللي بدي استخدم ال class هذه يعني مثلا
المحاضرة الماضية شوفنا عملنا calculate total
salary بتذكرينها فإيديتها أنها تعمل عملية حسابية
تشوف هذا الراجل مستنقف ولا لأ مستنقف تخص منه 30%
مش مستنقف أخلي زي ما هو صح إذا متزوج مثلا بتزيدله
10% علاوة مش متزوج بتزيدش العلاوة مش هي كانت
الحسبة هذه هذه الحسبة كلها أنا عملتها وخبيتها داخل
function على أساس اللي بده يستدعي الـ function هذه
بقى فقط بعمل dot اسم ال object dot وبينادي ال
function بدون ما يحتاج يعرف إيش فيه التفاصيل زي ما
إحنا بالظبط بنستخدم object من list و بنعمل dot
sort و بنعرفش إيش بيصير في ال sort صح ولا sort
لحالها بترتبلي وهذا هو مبدأ ال object oriented إن
الناس بتشتغل classes و بتحط فيها code على أساس
ييجوا ناس ثانينيستخدموا ال class هذه بدون ما
يحتاجوا يفهموا تفاصيل ال code وهذا بيجعل الناس
المبرمجين يصلوا له مستوى عالي في البرمجة ومبرمج
متقدمة لأنهم ماببدوش من الصفر البرمج ماببداش from
scratch من الصفر بيبرمج الحاجة لأ باعتمد على حاجات
عملهاالاخرين و بيستخدم ال classes اللي عملت عشان
يستخدمها و يكمل عليها زي بالظبط احنا لما نستخدم ال
class list و نعمل sort و insert و replace هذا كلها
ناس تقبط عليها و اشتغلت عليها و احنا بنستخدمها على
الجاهز صح ولا لأ هذا مبدأ ال object oriented اللي
هو انا بعمل code و بيقدّي وظائف مفيدة و المستخدم
بتاع ال code هذا مش لازم يفهم اش فيه في ال code
هذا اللي بنسميه ال encapsulationحكينا عن المصطلح
هذا encapsulation معناه ان ال functions الموجودة
جوا ال class بتقدي code وفيها code و تفاصيل كتير
اللي بيستخدم ال code اللي مانهوش ولا مهتم يفهم إيش
فيه في التفاصيل ماشي يا جماعة فلان هو طالب مني في
ال class بتاعتي أعملك function اسمها getarea
فيديتها إنه فقط أستدعيها و تحسبلي المساحة و
ترجعليها أنا مش معرف معدلة المساحة بتاعة المستطيل
اللي هي إيشالطول في العرض مش مع افرض يعني افرض
المستطيل شكل سهل افرض شكل اصعب منه تمام انا بس
بقوله جيت area بحسبلي المساحة و برجعليها جيت
perimeter اللي هو ايش ال perimeter محيط الشكل تمام
ايش معدلة المحيط بتاعة المستطيل مش مو اطلعه صح او
الطول زاد العرض الكل في اتنين طيب طالب مني اعمل
function زيه طيب الي اعمل implementهذه السؤال
المطلوب مني draw the UML diagram for the class هذا
مش معانا مش مانعش نرسم UML diagram and implement
the class يعني اكتب ال class برمجها write a test
program ايش يعني test program يعني بعد ما تعملنا
class بنستخدمها بننشأ منها objects بنشأ two
rectangle objectsهذه المعلومات الأولة الـ Width و
الـ Height تبعها و التاني الـ Width و الـ Height
تبعه زيك و لكل واحد فيهم اعرض له الـ Width و الـ
Height و الـ Area و الـ Perimeter تمام؟ خلّيني
الآن أروح نعمل ال class المطلوب مني بدي أروح أعمل
ملف جديد Python file بدي أسميه مثلا shapes أشكال
يعني و جواب أعمل ال class rectangle
أول حاجة نتفق إيش البيانات بتاعة ال rectangle
يقولنا فيه width و فيه height و فيه نقطة صح اللي
هي بيمثلها بإيش النقطة X و Y لكل واحدة من هدولة
بدي get و set فبدي أقول له def get width او مثلا
set width في الأول مش هيفرج الترتيب ببعت متغير
اسمه width و بقوله نروح على ال selfاللي هو مكان ال
object في الذاكرة وعمل فيه متغير اسمه width وحط
فيه قيمة ال width الان if get width هيعمل return
self dot width بنفس القالية بدي اعمل لها height
يعني مثل اسمها set height تاخد متغير اسمه H تاخده
و بتحطه في متغير اسمه height موجود داخل السلف لاحظ
اسم المتغير هذا مش نفسه عشان نبينكم مش لازم يكون
نفسه بعدين get height
هيروح للصلفة ويقرأ قيمة الـ I لان دال عندي النقطة
بتاعة رسم المستطيل لان قولنا ممكن اعملها اكتر من
طريقة ممكن اعتبر ان ال X حاجة و ال Y حاجة و اعمل
لكل واحدة ايش بعمل لكل واحدة set to get set X get
X set Y get Y و ممكن اعملهم كلهم في method واحدة
اعمل method واحدة اسمها set X Y تمام ابعتله قيمتين
و method اسمها get x y ترجع قمتين للسرعة يعني فبدأ
أقول له مثلا deaf set
مثلا x y مع بعض أبعتله مش .. هنا ببعتله قمتين
أبعتله x و y مده أن ببعتله قمتين بدي أخزن القمتين
في ال self فبدأ أقول له self dot x يساوي x و self
.y يساوي y الان def get xy طبعا
احنا بنعرف ان في ال python ممكن نعمل function
بترجع content ان اعمله return self.x فاصلة self.y
بس طبعا بدى انتبه لما استدعى ال function هادي بدى
يكون القيمة المرجعة فيها احط قيمتين او two
variables عشان يخزنوا القيم اللى هترجع منها طيب
يعني انا جماعة انا عملت ال set و ال get methods
اللى موجودة فى ال class اللى هنضاله هي نعمل ال
constructor اللى هو عبارة عن اي function ال init
def underscore in it هذا هو ايش طلب ال constructor
ياخد width و height width و height و حكالي اعطيهم
قرم قيم افتراضية بحيث ان ال user لو ما مررهمش
هياخد القرم الافتراضي هذه معاكم يا جماعة طيب ايش
بده يسوي الان في ال width و ال height هدولة بده
يخزنهم برضه في ال self فبدي اقول له self dot width
self.height يعني
عند إنشاء ال object ممكن أمرر قمتين اللي هما width
و height هياخد ال width و يخزنها في ال self و
هياخد ال height و يخزنها أيضا في ال self هذا في
حالة إن أنا حابب إنه أنشأ ال rectangle و على طول
أعطيله قيمة افتراضية بدل ما أستدعي ال set width و
ال set height لو مرة مش ال user هيطلع errorلأ لأنه
فيه قيمة افتراضية معطية لهم طيب الان اعملنا ال
functions الأساسية في ال class هو طلب من الان اعمل
لي برضه function اسمها getArea تحسب للمساحة و ترجع
ليها فبدي اعمل function def اسمها getArea getArea
ايش بدها تعمل؟ كي بدها تحسب المساحة تحت المستطيل
الطول في العرب تمام؟ بنعرف متغير اسمه area يساوى
الطول كيف بنجيبه؟ بدنا نستدعي ال function بتاعة
الطول بس أنا مدام أنا جوا ال class تمام؟ بدنا نقول
له self dot get width ضرب self dot get height
هيضربوا
في بعضو يخزن النتيجة في الـ area و بعدين بده ارجع
مين ال area ممكن على طول اختصارا اقول له لأ بنشرب
ال print احنا بنرجع تمام جت area بعدين diff جت
برضه و طلب مني perimeter اللي هو محيط .. محيط
الشكل الطول زاد العرض كلهم في اتنينفابدأ أقول له
return self.width زائد
self.get-height وهذا كله أضربه في 2 و الناتج كله
أعمله return هيك ال class صارت كاملة تمام؟ فيها
constructor بيعطيها مفترضية لل width و ال height
فيها set to get method لل width و ال height و ال
pointو في عندي two methods واحدة منهم بترجح لل
area والثانية بترجح لل perimeter لحد الآن أنا
مستفدتش من ال class صح ولا؟ ال class لا مالهاش
قيمة إلا لو أنا أنشأت منها object فبدأ أروح الآن
في البرنامج أعمل ملف تاني اسمه مثلا test01
واروح أنشئ objects من ال class اللي عملته هو حكالي
طلب مني أنشئ two objects ال object الأول بدي أسميه
مثلا R1 يساوي اه
بدي أعمل import بس قبل from shapes import
rectangle R1 هي rectangle
لو ما بعدتش parameters بمشي لأنه هياخد ايش P1 و P2
لكن هو طلب مني ان ابعد قيمة الأول 44 يعني ال width
أربعة و ال height أربعين ال rectangle التاني انا
بدأ اعمل اكتر من object تلاتة و نص و خمسة و تلاتين
point سبعة تلاتة و نصخمسة و تلاتين point سبعة هكذا
انا انشأت two objects كل واحد له أبعاد مختلفة لان
ايش طلب مني طلب مني اني لكل rectangle اطبع ال
width و ال height و ال perimeter و ال area و ال
point بنطبعه كمان لان بدل من عيد أمر الطباع لكل
واحد فيهم خليني انا اعمل loop صح ولالان احنا في
عندنا اطبع print لل width و print لل height و
print لل point و print لل area و print لل
perimeter بدل ما اكتب الأسطور هذه مرة و هيطلع عشر
سطور بعمل loop فبقول list 1 يساوي R1
R2 و بعدين بقول for i in list 1 لان اطبع ليه خلينا
نقول ال I.get-width print i.get-height print i.get
-xy print i.get-area
وبعدين نطبع سطق خط عشان نفصل الأول عن التاني
المستطيل الواحد يعمل loop على ال list بتاعة
المستطيلات يطبع ال width و ال height و ال x و ال y
و ال area و ال parameter تعالوا الآن نعمل run في
عندنا مشكلة هنا اللي هي return has no attribute x
عشان برجع قمتين نشوف لو عملنا هنا متغيرين هنا
طبعنا ال X هنا طبعنا ال Y على
فكرة مش هذه المشكلةالمشكلة أننا لم نعطيه قيم طيب
الرجع هذه زي ما كانت
مش عارف إذا باين الرقم ولا لأ الان هذه بيانات
المستطيل الأول وهذه بيانات المستطيل التاني تمام؟
هذه الأول طبعا ليه أربعة وأربعين وشايفين ال X وY
طبعا ليهم خمسة عشرة وبعدين هذه المساحة وهذه المحيط
التاني هذه نفس الشيء وهذه المساحة وهذه المحيط
طيب يعني أنا في النهاية استفدت من ال class
rectangle لأن أنا جمعت بيانات ومعلومات كل
rectangle في حاجة واحدة بتعامل معها بدل ما اتعامل
مع اكتر من حاجة طيب هذا حل السؤال الأول السؤال
التاني السؤال سبعة اتنين مطلوب كواجب سؤال
سبعة اتنين وسبعة اربعة دول واجب بس سبعة اتنين
وسبعة اربعةأنا بدي أحل سبعة واحد و سبعة تلاتة سؤال
سبعة تلاتة بيحكي عن ال account ال bank account
الآن لما أجي أمثل حساب شخص في ال bank أيضا الحساب
بيمثل بيانات كتير من ضمنها مثلا رقم الحساب اسم
حامل الحساب نوع الحساب قدش عنده رصيد قدش نسبة
الربحقدشت الحركات على الحساب معلومات كتير أيضا بما
أن ال account حاجة واحدة معلومات كتير الأفضل أن
أمثل ال account ب class واحدة كتجميع لمعلومات ال
account كلها هنا هدث في السؤال رقم التلاتة بطلب
مني أن أعمل class اسمها account بتمثل حساب
المستخدم في البنك design a class named account
that contains بطلب منيprivate in data field named
ID for the account نحن نحكي عن كلمة private قدام
شوية يعني في عندنا data type او من معلومات الحساب
اللي هي ال ID رقم الحساب ومن معلومات الحساب كمان
حاجة اسمها ال balance اللي هو إيش يعني الرصيد اللي
موجود في الحساب ومن معلومات الحساب ال annual
interest rate إيش يعني annual interest rate annual
إيش يعني annual سنوي interestماذا يعني interest
اهتمام بس هنا بتجي معنا فائدة تمام rate معدل معدل
الفائدة السنوي بتصير معدل الفائدة السنوي طبعا هذا
الكتاب عمله أجانب و في عندهم ربع و فوائد و كذا
احنا بنحله زي ما هو معدل الفائدة السنوي يعني
الحسابات طبعا مختلف معدل الفائدة مثلا حساب التجار
له فائدة أعلى من حساب الناس العاديين و هكذاهذا من
المعلومات الخاصة في الحساب ال ID و ال balance رصيد
تبع الحساب و جدش معدل الفائدة السنوي هذه معلومات
الحساب يعني كام متغير بتعامل معاه انا تلاتة لحد
تلان ال ID و ال balance و ال annual interest rate
كل واحدة من هدولة بدهم ايش set to get فبطلعه set
methods الآن طالب مني كمانA constructor يعني بتعمل
implement لل in it method اللي هي بتعمل اللي بتاخد
قيمة فترضية لل ID ال default 0 ال balance ال
default 100 وال annual interest rate ال default 0
طيب بطلب مني accessor and mutator methodsماذا يعني
Accessory and Mutator Methods؟ هدولة هما نفسهم
الـSitters و الـGetters كلمة Accessories، ماذا
يعني Accessories؟ من كلمة Access، يعني الحاجات
اللي بوصلها إلي، تمام؟ اللي هي عملية الـGet،
الـMutators الحاجات اللي بتعدل على القيم، اللي هي
method إيش؟ الـSit، الـGet هي القراءة و الـSit هي
اللي بتعدل على القيم، صح؟يعني بقول يعملي set to
get method لحد الآن لحد السطر هذا كل المطلوب مني
ان اعمل class اسمها account الها تلاتة variables
ID, balance, annual interest rate و constructor
بياخد قيمة مبدئية صفر للبقى ID و 100 لل balance و
0 لل interest rate و بدي اعمل set to get method لل
ID و ال balance و ال annual interest rateطلب مني
اعمل مثل اسمه monthly interest rate معدل الربح
الشهري اللي دخلته في ال object هيكون معدل الربح
السنوي طالب مني اعمل مثل تراجع معدل الربح الشهري
اللي هو هيكون كيف بحسبه؟معدل الربح السنوي على 12،
صح ولا؟ بيطلع عند الربح في الشهر، معدل الربح
الشهري، معدل الربح الشهري غير الربح الشهري، تمام؟
يعني معدل الربح الشهري يعني مقدش بيربح نسبة ربحه
في الشهر، يعني بيربح مثلا واحد في المية، إيش يعني
واحد في المية؟ يعني من كل ميت شكل10% يدخل 10 شكل
شهريًا، فالنسبة غير النبح، نسبة النبح ليست معدلة
للنبح، طيب جالي اعملي method تاني اسمها get
monthly interest، لاحظ الفرق، هذا اسمها get
monthly interest rate وهذا get monthly interest
أكيد ال monthly interest بعتبد على monthly
interest rate كيف يبدو يحسبها ال monthly interest
ايش يعني monthly interest اول حاجة الفائدة الشهرية
يعني مثلا لو عنده ألف شكل في الشهر ومعدل الربح
الشهري واحد في المية كيف هحسب ربح الشهري ألف شكل
برب في واحد في المية هيطلع جديش مثلا عشرة شكل عشرة
شكل عفواأنتوا معايا بقى يا جماعة فهو بيقول يعمللي
method تحسبلي ال monthly interest هنعملهم احنا
بعدين اعمللي method اسمها withdrawal ايش يعني
withdrawal يعني ينسحب او يسحب تمام
مثلا the Israeli army withdrew from Gaza in 2005
ايش يعني؟ الجيش الصهيوني انسحب من غزا في عام 2005
وwithdraw يعني انسحب وبتيجي معنى عيش اللي أبحث عنه
عندما أسحب من البنك ويقول withdraw تمام؟ لما يسحب
رصيد يعني فعمله method اسمها withdraw يعني لف سحب
من الرصيد كيف هده بدي هتشغل السحب من الرصيد؟ أكيد
طبعا لما أجي أسحب هده method بتاخد مبلغ يعني بدي
أقول له withdraw بدي أقول له أسحب لمية متين
تلاتمية صح ولا؟عندما يسحب يتأكد أن هناك رصيد يغطي
المبلغ، وإذا كان هناك رصيد يغطي المبلغ، فهو سينقص
المبلغ اللي سحبته من الرصيد، وإذا لم يكن هناك
رصيد، فهو سينقص المبلغ، وإذا لم يكن هناك رصيد، فهو
المبلغ، وإذا لم يكن هناك رصيد، فهو سينقص المبلغ،
وإذا لم يكن هناك رصيد، فهو سينقص المبلغ، وإذا لم
يكن هناك رصيد، فهو سينقص المبلغ، وإذا لم يكن هناك
رصيد، فهو سينقص المبلغأو دع اي دع تمام اللى هى
اللى تاخد مبلغ و تضيفه على حساب تمام هذه كلها
المعلومات بدى احطها وين يا جماعة في ال class خلينى
نمشي فيهم واحدة واحدة الان
بدى اروح اعمل class جديدة ممكن على فكرة اعمل ال
class في نفس الملفممكن اجي تحت مش انا عملت class
shape class rectangle ممكن اعمل class تانية تحتها
اسمها account تمام وابدأ اكتب ايش يعني ممكن احط
اكتر من class في نفس الملف واضح يا جماعة بس احنا
خلينا نفصلهم نكون افضلأمتى بنحط أكتر من class في
نفس الملف؟ لما تكون ال classes لعلاقة ببعض يعني
لما أكون أنا أعمل class بتمثل مثلث ومستطيل ومربع
ودائرة بحطهم كلهم في ملف واحد اسمه shapes طيب
اللي انا بدي أعمل ملف جديد اسمه مثلا bank info و
جوا ال bank info بدي أعمل class اسمها account
معلومات الـ account زي ما حكينا ID و balance
وannual interest rate كل واحدة منهم ديف بدها ديف و
get ديف .. ديف set و get ديف set طبعا حاجة معلومة
هنمر عليها في الآخر هي private لسه ماتطرقناش إليها
set ID self
.id يساوي ID
يعني صارت فيه حاجات كتير مكررة صح ولا لأ diff
getid return
self.id بدنا
الأن balance IP
Def set annual interest rate اختصارا
self dot annual interest rate يساوي annual
interest rate
لان انا عملت method اسمه set annual interest rate
بتاخد متغير اسمه AIR اختصار لannual interest rate
هتاخد هذا و تخزنه في متغير في السلف اسمه برضه
annual interest rate AIR get annual interest rate
بتروح يغيي اقرأ المتغير ال AIR اللي موجود في السلف
طب هيك اعملت انا ال set و ال get method اللي
موجودين في ال class طلب مني المطلوب التاني اللي هو
constructor تمام ال constructor اللي هو ال in it
تمام
ممكن على فكرة نحطها تحت مش شرط نحطها فوق بس احنا
نتعود دايما ان ال in it نحطه فوق تمام def
underscore in it هذا هياخد تلت قيم اللي هي ال ID
وال balance وال AIR القيم الافتراضية ال ID صفر ال
balance ميةوال AIR صفر ايش بدو يعمل فيهم هدولة بدو
يخزنهم في ال self صح self.id يساوي ID self
.balance يساوي balance وself.air يساوي تمام
للمرّ قيم مبدئية كلها هتتخزّن داخل السلف طيب اللي
هنعملها مكونات ال class الأساسية نيجي الآن لل
functions الإضافية اللي طلبها هو أول حاجة طلب مني
أعطيني ال monthly interest rate اللي هو ببساطة ال
annual interest rate على .. على إيش؟ على 12 طبعا؟
طيب إيش اسم ال function اسمها هو جالي get monthly
interest rate ايش
بدها تعمل هذه بدها تجيب ال annual interest rate و
تقسمه ع 12 و ترجع النتيجة صح يعني على طول return
self dot get annual interest rate على 12خلصناها
تمام خلصنا ال function مش ال class لسه ضايل فيه
methods تاني فيه كمان diff اسمها get annual
interest
عفوا get monthly interest
هو بحكيلي ان ال monthly interest interest بدك تجيب
الرصيدة الشخص و تشوف جدش هيربح في الشهركيف
بنعملها؟ بنجيب رصيد الشخص و نضربه في إيش؟ في إيش
نضربه؟ مالكم يا جماعة؟ ربح الشخص كده؟ نجيبه انسوا
البرمجة، تمام؟ واحد ربحه الشهري تلاتة فالمية،
تمام؟ ال balance نضربه في إيش؟ في تلاتة فالمية، صح
ولا لأ؟ أنتوا علمي ولا أدبي معظمكم؟حتى لو أدبي ما
الأدبي بياخدوا رياضيات صح ولا لأ مافيش هذا كله ضرب
و قسمة
طيب return سلف
dot get balance صح ولا لأ هاي الرصيد تبعه هذا
هينضرب في قداش نسبة الربح الشهري اللي هي في self
ضرب get monthlyinterest rate مرة
تانية ال object بياخد ال annual interest rate ال
monthly interest rate معدل النبح الشهري هو معدل
النبح السنوي على 12% إذا واحد بيربح 10% في السنةفي
الشهر كم هيربح؟ 10% على 12 يعني 1.2% في الشهر
الواحد كوم 1.2 1.2 بيطلع 10% في الآخر تمام ال
monthly
interest ربح الشهري فعليا الفلوس كم هياخد في
الشهر؟ بنجيب الرصيد تبعه و بنضربه بمعدل النبح
الشهريإذا هو بياخد واحد في المية في الشهر بجيب
رصيده و بضربه في واحد في المية بطلع كده ربحه
الشهري بقال هنا method اللي هو withdraw و deposit
اللي هو السحب و الإدار طب بدنا نعمل واحدة واحدة
أكيد الـ withdraw ده تاخد مبلغ، صح؟ يعني أنا بدى
مارنيلها مبلغ عشان تخصمه من موال؟ من الرصيد تبعه،
يعني أنا عند رصيد ألف، سحبت 200، بنفع يضله ألف زي
ما هو؟ لأ، المفروض يقل، فwithdraw بتاخد مبلغ،
بقوله مثلا هنا amount متغيرأول حاجة قبل أن أقسم
المبلغ أتأكد هل في رصيد يغطي ال amount ولا لا
فبقول له if self dot get balance أكبر من أو يساوي
ال amount إيش معناه الكلام هذا؟
الرصيد أكبر من أو يساوي مبلغ ال amount معناه فعلا
أنا في عندى فلوس بقدر أسحب منهافي الحالة هذه، ماذا
يجب أن يفعل؟ يجب أن يطرح الـ amount من الـ balance
صح أو لا؟ فشوف ماذا ستفعل الآن، سأعمل متغير اسمه B
سأقول له self.getbalance هنا، لسه لم نعدل الرصيد،
جبنا الرصيد الأساسي تمام؟ بي هذه، سنطرح منها ال
amount، ماهو هذا السطر اللي يعمل؟بطرح من B الـ
amount و بخزن النقطة جوين في B بعدين بدي أروح للـ
self و أقول له set balance و أعطيه قيمة الـ B أنا
الأن يا جماعة الهدف تبعي أني أغير قيمة ال balance
الموجود ليش أغيره؟ عشان أسحب منه ال amount تمام؟
كيف غيرته؟ أول حاجة قرأت قيمة ال balance في متغير
اسمه Bماشي راح طاحت من ال B هذه قيمة ال amount و
بعدين روحت قلتله set balance اعطيله رصيد الجديد
بعد ما انطرح منه ال amount واضحة الفكرة هذه يا
جماعة؟ هذه عملية ايش؟ عملية السحب لسه ماخلصناش
السحب لأن هذا امتى هيعملها السحب؟ لو كان عند رصيد
بغطي else ايش يعني؟مش رصيدة بناها بتخليه يطبعله
رسالة insufficient balance رصيدة غير كافية بغطيش
تمام واضح ال function هذه يا جماعة كيف كتبت ال
code تبعها هذه
عملية السحبDef يعني عملية الـ Deposit، الإيداع في
الرصيد نفس
السحب بدها تاخد مبلغ، بس إيش بدها تعمل في المبلغ
هذا؟ بدها تضيفه على الbalance، تمام؟ بدنا نقوله
مثلا amount، طبعا ال deposit هذي بسيطة، كل اللي
بدها تعمله
كي بدى اعمل ال plus هذه؟ اول حاجة بدى اقرأ الرصيد
القديم واضيف عليه وروح اعدل عن طرف ال set طبعا
يعني نفس الشيء بقول بي self dot get balance و
بعدين بي بروح باضيف عليها ال amount و بعدين بقول
self dot set balance ال B هيك انا عملت اي دعا في
حد عنده اي سؤال يا جماعة؟في نقطة مش واضحة طب في
نقطة واضحة طب
هيك انا خلصت ال class بكرا في الامتحان زي هيك
هجيبلكوا سؤال طبعا طب لسه ال class دي انا مستفدتش
منها حاجة امتى باستفيد منها لما اعمل منها objects
لما
بدنا نروح على البرنامج تبعي
بدي اعمل object من مين من account تعالى نشوف هو
ايش طلب مني يعني لما يجي يعمل test write
a programthat creates an account object with an id
1122 with a balance of 20,000 and annual interest
rate of 4.5% هذه المعلومات للحساب اللي بدنا نشوفه
اعملي account جديد c1 معلش هداك بده import برضه صح
from bank info import account لاحظ انه انا ممكن في
نفس البرنامج تبقى استخدم اكتر من classطيب الآن
بحكيله c1 يساوي account و بمررله بيانات ال account
اللي هو حكالة ان ال ID تبقى 1 1 2 2 و ال balance
عشرين ألف تمام و ال annual interest اللي يتربحه
السنوي أربعة و نص use withdraw عشان تسحب 2500طبعا
يعني كيف نسحب الان بنروح ل C1 ونقول withdraw 1500
ايوة
ايش السؤال؟ قولي عشان
افرجيكوا انه ممكن نستخدم اكتر من class في نفس
البرنامج طبعايعني هي انا مثلا ها عشان ما تزعلوش
هذا كله همحيه كمان شوية عشان ما يشوفوش تمام؟ بس
مافيش معنى ان انا استخدم اكتر من class في نفس
البرنامج طيب هي عملنا withdraw ل 2500 بعدين استخدم
deposit ل 3000 يعني اروح ل C1 و اعمل EDA بعد هيك ل
3000 بعدين
print ال ID و ال balance و ال monthly interest
rate و ال monthly interest بنعمل print
الرسيد الموجود print c1.get month interest rate
print c1.get month interest rateطبعا monthly
interest rate المفروض يكون اربعة و نص على اتناش ال
monthly interest هيكون الرصيد اللي بيظل في الحساب
ضرب معدل النبح الشهري هلجيتها هنحسبها هنطلعها ..
هنجيب الآن الحاسبة و نجرب المعلومات هذه طيب تعالي
نعمل run تمام بيحكيلي الآن ال ID
رصيد الحساب 20500$ لماذا كان 20000$ سحبنا منه 2500
$ و حطينا 3000$ يعني زاد 500$ عشان هي كتاب ليا
20500$ معدل الربح الشهري point 375
كيف حسبه؟ اربعة و نص تقسيم اتناش طلع point تلاتة
سبعة خمسة معدل الربح الشهري الرقم هذا الربح الشهري
يسمى معدل الربح الشهري ضرب الرصيد اللي هو عشرين
الف و خمسمية تمام؟
اللي هو ربحه الشهري تمام 7687.5 ماشي يا جماعة طيب
هنا هيك عملنا ال class ال account اه لسه في حاجة
ماخلصنهاش السؤال بيقول
بختلف عن السؤال اللي جابله انه طلب مني ان اعمل هذه
الحاجات private ايش يعني كلمة private بالانجليزي
يعني خاص الان في مشكلة صغيرة انا هنا عملت object
اسمه c1 من نوع account تمام عشان احط بيانات لل ID
ايش بعمل c1.setid صح و بحط القيمة اللي انا بديها
لكن في طريقة تانية عشان اغير ال ID انه ممكن اوصله
من غير ال set method اقوله ال dot و احط ايش كلمة
ID مباشرة و احط فيه القيمة اللي بديهاال ID هذا
متغير موجود جوا ال self من جوا ال class بوصله ال
self dot من برا ال class بوصله باسم ال object dot
يعني انا هنا وصلت لل ID مباشرة من غير ما استخدم
set ID بنفع ولا بنفعش؟ بنفع طبعا هي متغير هذا مش
function متغير حطيت فيه القيمة هذه وممكن اوصل لل
bank مباشرة لل balance وحط فيهقيمة مباشرة بدون
استخدام الـ set تمام؟
يعني انا ممكن اوصل للمتغير بطرف تاني يا اما عن
طريق ال set وهذا الصح او المفضل يا اما ممكن اوصل
للمتغير مباشرة احط اسم المتغير balance مثلا annual
interest rate اللي هو AIR واحط فيه القيمة اللي
بدهاطب ايش فرجوا عن بعض؟ او ايش رأيكوا؟ انتوا مين
افضل ان اوصل للمتغير مباشرة و الله اوصله من خلال
ال set method؟
ما هي الميزة مثلا تتخربط هذه ما هو بتخربط في اسم
ال function برضه صح ولا؟ اه اللي افضل ان اوصل من
خلال ال set method ليش؟ لأنه من خلال ال set method
بقدر اعمل type checkingبمعنى ان انا مثلا مثلا لو
جيتله setID ممكن داخل ال method setID اعمل فحص
اتأكد ان ال ID اللي دخله صحيح ولا لأ لو كان مش
صحيح يطلعلي error تمام؟
هذا بقدر أعمله في ال method set لكن بقدرش أعمله في
المتغير يعني هو لو في عندي وصول مباشر للمتغير
كأنني اتجوزت من ال set method يعني ال set method
هذا عاملا زي الباب اللي بده يعدم الباب هذا لازم
يخبط على الباب و يكون عنده مفتاح مثلا صح؟لكن ان
اوصل للمتغير مباشرة زي كده الواحد بيسيب بابه مفتوح
لأي حد يخش تمام الصح ان اوصل من خلال ال set method
لأنه ممكن من خلال ال set method احط chicken زي
بالظبط ال withdraw ال method withdraw هذه فعليا هي
بتغير ع أيش يا جماعة؟ بتغير على ال balance صح ولا
لأ؟الـ method with a draw فعليا الهدف منها ان اغير
من ال balance اطرح منه قيمة تمام؟ ممكن انا مباشرة
اجي عنده من هنا اقوله c1 ال balance اطرحلي منه 500
بنفع ولا مينفعش؟ بنفع تمام؟ بس هذا مش صح لأن ممكن
انا اوصل ال balance الموجود مايغطيش المبلغ تمام؟
فده تعتبر ثغرة في ال code تبعي الصح ان اقوله
استخدم ال method
أستخدم الـ method withdraw لأن الـ withdraw فيها
checking في فحص يتم قبل أن يخصم من الـ balance
واضح يا جماعة؟ يعني الأفضل أن نستخدم الـ set و الـ
get أفضل أن نصل للمتغير مباشرة فهمنا الآن مين أفضل
طب كيف نمنع المستخدم أن يغير في قيمة ال variable
مباشرة و نجبره أن يستخدم ال set و ال get method؟
طبعا أن نجعل المتغير private طب كيف نجعل المتغير
private؟ private معناه أن هذا المتغير غير
مسموح الوصول إليه مباشرة الوصول إليه بطريقة غير
مباشرة عن طريق مين ال set method و ال get method
واضح اللي بحكيها يا جماعة؟ في وصول مباشر للمتغير
بالطريقة اللي شفناها قبل شوية اللي هو حط فيه واحد
واسم المتغير وغير قيمة ثابت ده، هذا وصول مباشر غير
مباشر عن طريق مين؟ ال set method و ال get method،
انه نفّذ ال set method و ال set method هي اللي
بتغير الميزة هنا أنه في ال set method ممكن أحط
checking أنه هل التغير هذا صح أو لأ؟السؤال اللى
بدنا نقوله على الجدكيف نمنع المستخدم من الوصول
مباشر الحال انه احنا نخل المتغير هذا من نوع
private من نوع خاص كيف نغلي من نوع خاص بمنطقة
البساطة كل اللي لازم اعمله انه لأ كل ما يكون عندى
Dot .. وين المتغير بتتم إنشاءه فعليا؟ عند .. مش
لما أقوله سلف Dot ID بروح بنشأه لما يكون عندك Dot
ID حط قبلها إشارة underscore زيك تمام؟
أنا بهمنيش أتحط underscore هنا بهمني أتحط
underscore في الحاجة اللي بده ينشئها وين في السلف
وبرضه بتحط underscore هناوهنا برضه بدها ايش بدها
underscore ولمّا أقول له set ID هذه بدها
underscore و get ID هنا بده underscore تمام؟ حجبها
نشوف إيش بتفرق هذه ال underscore و ال balance برضه
جابلها underscore و
هاي ال annual interest rate
الان حطينا جملهم كلهم underscores الان تعالي اعمل
c1 و اعمل dot وحط اكتب كلمة ID مش هتشوفه اصلا
تمام؟ مابينش عندك في ايش؟ في القائمة جمل من غير
underscore كان يطلع عندنا تمام؟ حط balance بطل
يطلع عندي balance تمام؟ وكأنه ايش صار ايش صار
private بطل visibleبطل المشاهد كيف خلته private؟
بس إن حطيت في السلف لما أتيت أنشق ال variable حطيت
underscore واضح يا جماعة عشان private تمام
هيك ممكن غطينا جزئية ال private
طيب هيك ممكن خلصنا الفصل زي ما قلت في homework رقم
واحد سؤال رقم اتنين واربع فكروا فيهم و
هفتح التسليم على الموديل طيب لسه مخلصناش الان يا
جماعة هندخل في اخر موضوع احنا هنشتغل فيه اللي هو
موضوع ال graphical user interface لحتى الان
البرامج اللي احنا شغلين عليهاكلها شغل من خلال الـ
command يعني اعمل لي input تخلي ال user يدخل يكتب
كلام بال input ويطلق ليه نتيجة لكن ماشوفناش كيف
احنا نعمل برامج إلها user interface وجهات وزرار و
text books وغيره فبدنا نستفيد الآن من الشغل اللي
أخدناه سابقا ومن الشغل ال object oriented اللي
غطناه المحاضرات السابقة عشان نعمل برامج إلها وجهة
الـ Python بتوفر مكتبات مختلفة لتصميم الوجهات،
تمام؟ من ضمن المكتبات هذه، مكتبات يعني شفتوا أنت
لما تعملوا import ل class، تمام؟ و تستخدموها، هذه
مكتبة زي ال math مثلا، تمام؟ هذه مكتبة فيها
functions كتير، بستفيد منهاالـ Python أيضًا بتوفر
مكتبات خاصة في الـ Graphical User Interface مش
هبدأ انا في الموضوع اليوم بس بنا نقدمله و نفرجيكوا
كيف نجهز الجهاز تبعنا على أساس نشغل عليه Graphical
User Interface لأن الأعدادات هذه بتاخد وقت من ضمن
ال libraries اللي موجودة في ال .. في ال Python فيه
library اسمها Tkinter تمام؟
Tkinterالتكنتر ال library بيلت ان في ال python ايش
يعني built in في ال python يعني مضمنة انا لما نزل
ال python بتيجي معاها ال library هذه و بنقدر
نستخدمها فيها كل ال components بتاعة ال user
interface زي مثلا الازرار ال combo box ال text
area ال text field وغيره و العام الماضي انا لما
درست للطلاب درست على ال library هذه تمام الا ان ال
library هذه شوية إمكانياتها محدودةيعني في أفضل
منها الفصل هذا احنا نتعلم على library جديدة تمام
ومنتشرة اكتر من ال Tkinter اسمها ال πاي اكيوتي
يعني العام الماضي اشتغلوا على ال Tkinter وزي ما
اقول ان امكانياتها محدودة شوي ولو انها أسهلو هي
المشروع على فكرة في الكتاب، يعني هذا فيه إلى فصل
بيشرحها في الكتاب تبعا، اللي احنا مش هنشرح الـ
Tekinter لأنه زي ما قلنا إمكانياتها بسيطة، هنبطرق
لواحدة أفضل منها اسمها الـ Pi Qt Version 5حطوا
خطين تحت five version five في version four تمام
وطلعت نسخة جديدة وهي version five آخر نسخة هي اللي
احنا هنتعلم عليها لكن مشكلة ال pyqt انها مش built
in في ال python معناه ان احنا لازم نضيفها على ال
python عشان نستخدمها اذا احنا بنستخدم ال pycharm
ممكن اضيفها من خلال ال pycharm
كيف نضيفها من خلال الـ PyCharm؟ في
أسهل من هيك عشان نضيفها من خلال الـ PyCharm إذا
أنت بتستخدم الـ PyCharm بنروح على الـ file و بنروح
على settings مرة
تانية بروح على ال file و بروح على قائمة settings
وبعدين بروح على ال project interpreter .. ال
project interpreter .. بعرفش يمكن الشاشة هذه مرت
عليكوا قبل هيك .. يعني أكيد اللي نزل ال pie charm
و حاول يربطها مع ال python .. مش انتوا كيف نزلتوا
.. بتنزلوا في الأول ال python لحال .. و بعدين
بتنزلوا ال pie charm .. و بعدين بدكوا تربطوا ال
pie charm ..بالـ python و عن طريق الشاشة هذه يعني
من هنا انا بروح بختار وين ال python نزل عندي على
الجهاز طبعا عنكم
غالبا الشاشة هذه هتكون فاضية او فيها حاجة او
حاجتين الان بدنا نضيف library جديدة اسمها pyqt
طبعا كيف هنضيفها من إشارة الزائد هذه شايفين اللي
هنا بضغط عليهاو هنا هيجيبلي عدد كبير جدا من ال
libraries اللي انا ممكن اضيفها على ال python ال
python لغة برمجة كبيرة جدا ويلها إضافات في مجالات
كتير تمام احنا بنضمر على إضافة واحدة اسمها pyqt5
تمام فكل المقال لازم أكتب pyqt5 تمامالمفروض انها
بتطلع عندى هى طبعا انا عندى طالع باللون الأزرق ليش
لأنه انا ضيفها اصلا تمام فبعلم عليها و بقوله
install package طبعا هذه بدها انتصال بالانترنت
يعني بتستنه على الأربع ساعات اللى بتيجي اول ما
تيجي بتشغله تمام مش هتاخد وجهتي يعني دقيقتين بتكون
نازلة
أيش الفايدة منها هذه بعد ما أضيفها الفايدة أنه بعد
هيك أول ما أقول له okay و أضيفها بقدر أجعل ال code
تبعي تمام و بقول له بعدين from qt5
شايفين طلعت عندي تمام طبعا four بدناش إياها هم
نتعلم لجديد qt5 بقول له import مثلاQ Widgets يعني
هذه اللي قال معناها أنها صارت شغالة إذا كتبت from
وما طالعش عندك لـ QY QT5 بيكون معناها فيه مشكلة
لسه طبعا هذا إذا طلعت من ضمن الخيارات معناها إنها
شغالة أو تم اضافتها فعليا للشغل تبعي هذا
بالنسبة لـ PyQt الحاجة التانية بس بدها اتصال
بالإنترنت
طيب احنا ممكن اللي عملناه لحد تلان في ال pie charm
كافي لو انا بده اشتغل اصمم user interface ككتابة
معايا انتوا؟ لكن احنا حابين يكون في طريقة انصمم
user interface drug drop تمام؟
ماذا سنتعلم بالظبط؟ اول محاضرة او محاضرتين سنتعلم
في ال code ليس drug and drug لماذا؟ لأن فعليا ال
drug and drug سيطلع عندي code بخم جدا تعالوا
افهموا ال code هذا مش فاهمينطبعا فاحنا بنبدأ
الأساسيات بنتعلمها ك code عشان تاخدوا فكرة عنها و
بعدين بنصير نعمل drag and drop هذا الطريقة الصحية
عشان نتعلمها لأن عشان نقدر نعمل drag and drop بدنا
نزل حاجة tool اسمها python anaconda python
anaconda هاي كتبت أنا بس عندي على ال google كتبت
python anaconda
تمام و بروح بنزل النسخة الخاصة بالويندوز تمام طبعا
هينزلها عندي على الجهاز مش لازم انا اعمل اي شيء
بعد
ما تنزل هذه طبعا يعني يفضل تحط مسار انت عارف هو
الموجود هو by default بروح بخزنه في ال app و مش
عارف وين في ال users يعني اغير المسار حطه في مسار
انت عارفه عشان تقدر توصله بعد ما تنزل ال Anaconda
هذه يا جماعةبدا اروح على المجلد الخاص فيها هى انا
نزلتها مثلا انا كنت في ال H هى انا كنت تلاتة تمام؟
وفي عندى
أه طيب جوا المجلد الخاص بالاناكوندا هذا فيه مجلد
اسمه library تمام جوا ال library لحظة
أشوف ال designer أه هي طيب مرة تانية عشان ما
انتواهشضفنا الـ PyQt5 على الـ PyCharm تمام؟ هذا
عساس أقدر أكتب code تصميم ال user interface بال
code إذا أنا بدأ أصمم عن طريق ال drag and drop
بروح بنزل حاجة اسمها python Anaconda بنزلها على
الجهاز بعدين بروح في المجلد الخاص بالاناكندا بفتح
مجلد
داخلها اسمه libraryو بعدين مجلد اسمه pen تمام انا
اكون ده بعدين library بعدين pen هتلاقي في ملف من
ضمن الملفات الكتيرة هذه اسمه designer.exe
Designer اكتبوا حرف D هيطلع عندى اشارة ال designer
application طبعا اذا وصلتوله عشان مش كل شوية تروح
و تدخل المسار هذا حطوله send to سطح المكتب ك
shortcut اعملتله اختصار على سطح المكتب هي ال Qt
designer لان انا لو فتحت ال designer هذا فعليا
هيفتحلي شاشة
بالصورة هذه بتقوله new مثلا main window نافذة
جديدة وبصير أصمم من خلال drag and drop يعني هذا
مثلا إيش؟ زر تمام؟ هذا هنا check box عارفين ال
tech؟ check box؟ هذا radio button تمام؟ وهكذا
هنتناول احنا ال components هذه تمام؟
بس في الأول طبعا مش هنشتغل على هذا هنشتغل ك code
برمجة هاي الإعدادات اللازمة عشان احنا نشتغل أو
نبدأ في ال graphical user interface مرة تانية
بنضيف ال pi qt5 على ال pi charm عن طريق ال
settings تمام و بروح بعمل على إشارة الزاد عشان
أضيفها و بعدين بنزل ال anaconda عشان أتمد على ال
designer في التصميم و يعطيكوا العافية