الفصل 11

الفصل 11

11.1 أساسيات البرمجة كائنية التوجه

1.
b. اسم مستخدم إليس يمثل منشئ المنشور.
2.
b. يمثل كائن كيانًا من العالم الحقيقي بـسمات وتوابع.
3.
a. يمكن لـتابع، مثل Change venue، إجراء تغييرات على السمة وحمايتها من الوصول غير المناسب.
4.
b. يمنع تقييد الوصول إلى البيانات التغييرات العرضية ويجعل العلاقات بين الكائنات أكثر وضوحًا.
5.
b. يجعل التجريد الصحيح المعلومات الضرورية فقط مرئية. يمكن للمحرك المحموم أن يسبب ضررًا لا يمكن إصلاحه، لذا فإن وجود مؤشر ضروري للسائق.
6.
a. يقلل عرض المعلومات الضرورية فقط من الفوضى ويحسن التجربة العامة.

11.2 الأصناف والمثيلات

1.
a. Cat تتبع الكلمة المحجوزة class في أعلى تعريف الصنف وهي اسم الصنف.
2.
c. pet_1 هو مثيل من الصنف Cat تم إنشاؤه باستدعاء Cat(). المثيل الآخر هو pet_2.
3.
a. breed هي سمة مثيل مُعرّفة في __init__(). سمات المثيل الأخرى هي name وage.
4.
c. يوصى بنمط CapWords، حيث تكون جميع الكلمات بحرف كبير ولا توجد مسافات بين الكلمات، لأسماء الأصناف. "Pet" و "cat" كلمتان منفصلتان، لذا يتم كتابة كل منهما بحرف كبير وتتبع إحداهما الأخرى مباشرة.
5.
b. يتم إنشاء مثيلين، room_1 وroom_3، باستدعاء Rectangle()، والذي يستدعي الدالة البانية __init__().
6.
b. room_1 هو المثيل الذي استدعى التابع area()، لذا يمثل self المثيل المحدد.
7.
a. السطر 3 موجود في __init__()، والذي يهيئ length وسمات المثيل الأخرى لكل مثيل جديد.
8.
c. تحتوي __init__() على مُعامِل واحد مطلوب، يُسمى اصطلاحًا self، والذي يسمح للدالة البانية بالوصول إلى المثيل.
9.
b. order_id هي سمة مثيل مُعرّفة في __init__(). سمة المثيل الأخرى هي cup_size.
10.
b. تغيير order_1.cup_size لا يؤثر على order_3.cup_size. تتغير order_1.cup_size إلى 8 وتظل order_3.cup_size كما هي 16 .
11.
a. تتشارك order_1 وorder_2 وorder_3 جميعًا سمة الصنف CoffeeOrder.loc. يؤثر تغيير loc على جميع المثيلات، لذا يتم طباعة Caffeine Cafe كموقع.
12.
b. محاولة الوصول إلى سمة صنف باستخدام مثيل أمر غير آمن. في __init__()، تؤدي محاولة الوصول إلى سمة الصنف إلى إنشاء سمة مثيل جديدة تسمى cls_id. على الرغم من إمكانية ذلك، يجب على المبرمجين تجنب استخدام نفس الاسم لـسمات الأصناف وسمات المثيلات لتجنب الارتباك.

11.3 توابع المثيل

1.
b. إزالة قيمة المُعامِل الافتراضية تجعل bp مُعامِلًا مطلوبًا.
2.
b. self هو المُعامِل الأول في تعريف __init__()، وليس وسيطًا صريحًا. لا ينبغي تضمين self في الاستدعاء.
3.
c. تعريف __init__() الثاني يحل محل الأول حيث لا يُسمح بتعريفات صريحة متعددة لـ__init__(). تتطلب __init__() جميع المُعامِلات، لذا فإن أول استدعاءين لـ__init__() لـpatient_1 وpatient_2 غير صحيحين.
4.
c. كان order_1 في الأصل قهوة بدون حليب أو سكر، لكن استدعاء change() يضيف السكر إلى الطلب عن طريق إسناد True إلى order_1.with_sugar.
5.
c. يشير المُعامِل الأول لـتابع المثيل إلى أن التابع يمكنه تغيير مثيل. يسمح change() بتغيير ما إذا كان طلب القهوة يحتوي على حليب أو سكر.
6.
b. إزالة المسافة البادئة لـprint_order() سيؤدي إلى خطأ. يجب تعريف تابع المثيل في الصنف.

11.4 التحميل الزائد للعوامل

1.
c. __add__() هو تابع سحري، ويُشار إليه بالشرطتين السفليتين المزدوجتين في بداية ونهاية اسم التابع.
2.
b. صُممت التوابع السحرية ليتم استدعاؤها داخليًا لأداء إجراءات خلف الكواليس لتبسيط المهام للمستخدم.
3.
c. يتم تعريف __init__() بواسطة المبرمج لتهيئة سمات المثيل. يتم تعريف __str__() بواسطة المبرمج لتخصيص تمثيل السلسلة النصية لـمثيل Engineer.
4.
a. يمكن للمبرمج إجراء تحميل زائد للعامل لتخصيص وظيفة العامل المدمج.
5.
b. تعمل عملية الجمع على ربط المُعامِل الأيسر، acct_a، بـالمُعامِل self، ومعامل التشغيل الأيمن، acct_b، بـالمُعامِل other.
6.
c. - هو عامل ثنائي، لذا فإن __sub__() يحتوي على مُعامِلين. يتم طرح سمات x وy لـالمُعامِلين من بعضهما البعض، ويتم تحويل القيم الناتجة إلى كائن Pair جديد.
7.
a. يتم إجراء تحميل زائد لـ< و> و== باستخدام __lt__() و__gt__() و__eq__() على التوالي.
8.
b. __le__() هو التابع السحري لـالعامل <=. يأخذ __le__() مُعامِلين لـمعامل التشغيل الأيسر والأيمن، ويعيد المقارنة الصحيحة لقيمتي المبلغ.
9.
b. __gt__() يقوم بـالتحميل الزائد لـالعامل >، والذي يجري مقارنة ويعيد True أو False.

11.5 استخدام الوَحدات مع الأصناف

1.
b. Level وXP هما صنفان تم استيرادهما من وَحدة character إلى البرنامج. لا يتم استيراد أي صنف آخر في وَحدة character.
2.
b. يمكن استيراد صنف واحد أو عدة أصناف من وَحدة باستخدام اسم (أسماء) الصنف.
3.
c. عدد الأصناف في وَحدة غير محدود، ولكن يجب تجميع الأصناف في وَحدات لزيادة قابلية إعادة الاستخدام إلى أقصى حد.
4.
b. تم تسمية وَحدة character بـgame_char، لذا فإن character غير معرفة في البرنامج. يتم استخدام game_char بدلاً من character.
5.
c. كان game_char يشير إلى الوَحدة المستوردة، ولكن إسناد game_char يستبدل الوَحدة المستوردة بـالسلسلة النصية 'Ranger'. لا يمكن استخدام game_char بعد الآن للوصول إلى الأصناف.