استخدام الفئات والمتغيرات لنقل نموذج OOP الخاص بك إلى التعليمات البرمجية

مكتمل

كنت توّد تقييم البرمجة الموجهة للعناصر (OOP) عن طريق تحديث إصدار أساس اللعبة، والورق، والمقص. للقيام بذلك، تحتاج أولاً إلى نموذج بتنسيق OOP.

كمّا سنحتاج إلى تطبيق بعض المفاهيم الأساسية OOP، مثل الطبقات والعناصر والحالة. توضح هذه الوحدة الأجزاء التالية:

  • مفاهيم OOP المهمة: لبيان أسباب OOP، تحتاج إلى إدراك بعض المفاهيم الأساسية مثل الفئات والعناصر والحالة. عليك أن تعرف الفرق بينهما، وصلتهما ببعضها.
  • المتغيرات في OOP: تحتاج إلى معرفة كيفية التعامل مع المتغيرات وكيفية إضافتها إلى العناصر الخاصة بك.

ما هو العنصر؟

ذُكر مفهوم العناصر عدة مرات بالفعل كجزء من محاولة وضع نماذج لمجالات المشكلة. يُعد العنصر هو الفاعل. إنه شيء يؤدي عمل ما داخل النظام نتيجة لاتخاذ إجراء، فإنه يغير الحالة بداخله أو عناصر أخرى.

لنتخيل أحد العناصر في العالم الحقيقي. أنت في موقف للسيارات، فماذا ترى؟ من المحتمل أن ترى العديد من السيارات، بأشكال وأحجام وألوان متنوعة. لكي تصف سيارة، يمكنك استخدام خصائص مثل الماركة، والنموذج، واللون، ونوع السيارة. إذا قمت بتعيين قيم لتلك الخصائص، فسرعان ما يتضح ما إذا كنت تتحدث عن سيارة فيراري حمراء، أو سيارة جيب رباعية الدفع، أو سيارة موستانج صفراء، وما إلى ذلك.

Illustration that shows a car object with the properties type and color.

في مشهد آخر، توجد صورة على مجموعة من البطاقات في لاس فيغاس. عند نظرك إلى بطاقتين مختلفتين، وهما عنصران. تدرك أن بهما بعض الخصائص المشتركة، وهي، الرمز. يمكن أن يكون الرمز على شكل شجرة أو القلوب أو الماس أو البستوني. قيمهم يمكن أن تكون الورقة الرابحة، أو الملك، أو تسعة، وما إلى ذلك.

تلميح

انظر إلى ما يحيط بك. خذ عنصرين متشابهين، مثل كتابين أو كرسيين، وانظر إذا كان يمكنك العثور على الخصائص التي تصفهما على أفضل نحو وتخبرهما عنها.

ما هي الفئة؟

الفئة هي نوع بيانات يعمل في شكل تعريف قالب لنوع معين من العناصر.

لقد تعلمت أن نظام OOP يحتوي على عناصر، وتحتوي تلك العناصر على خصائص. يوجد مفهوم مشابه للعنصر، وهو الفئة.

إذاً، ما هي الفئة؟ الفئة عبارة عن مخطط لأحد العناصر. حيث تُعد الفئة مخططًا للسيارة، والعنصر هو السيارة الفعلية التي تقودها. الفئة هي ما تكتبه في التعليمات البرمجية. العنصر هو ما تحصل عليه عندما تخبر بيئة وقت التشغيل بتشغيل التعليمات البرمجية الخاصة بك.

نعرض فيما يلي جدولاً لبعض الأمثلة عن الفئات وعناصرها الناتجة:

الدرجة ‏‏الكائن
مخطط السيارة هوندا أكورد، وجيب رانجلر
قط غارفيلد القط
وصف الآيس كريم الفراولة أو الشوكولاتة أو الفانيليا

الطريقة التي تذهب نحو إنشاء عنصر من فئة مماثلة لكيفية إنشاء سيارة من مخطط. عند إنشاء عنصر، يطلب البرنامج من نظام التشغيل موارد، أي الذاكرة، لكي يتمكن من بناء العنصر. وعلى العكس من ذلك، عندما تُصنع سيارة من مخطط، يطلب المَصنع موارد مثل المعادن والمطاط والزجاج لكي يتمكن من تجميع السيارة.

Illustration showing the resource inputs required to assemble a car from a blueprint.

إنشاء فئة

يتم إنشاء فئة في بيثون باستخدام الكلمة الأساسية class وإعطائها اسمًا، كما في هذا المثال:

class Car:

إنشاء عنصر من إحدى الفئات

عند إنشاء عنصر من إحدى الفئات يقال لك إنشاء مثيل له. ما تفعله هو طلب نظام التشغيل، وذلك باستخدام هذا القالب (الفئة) وتلك القيم البادئة، لإعطائك ذاكرة كافية وإنشاء عنصر. بشكل أساسي، يُعد إنشاء مثيل هو معنى آخر لكلمة إنشاء.

لإنشاء مثيل لعنصر، يمكنك إضافة أقواس إلى اسم الفئة. ما تحصل عليه هو عنصر، حيث يمكنك اختيار تعيين لمتغير على النحو التالي:

car = Car()

هو carالمتغير الذي يحتوي على مثيل العنصر الخاص بك. تكون لحظة إنشاء مثيل، أو إنشاء العنصر، عند الاتصال بـCar().

المتغيرات في OOP مقابل المتغيرات في البرامج الإجرائية

من البرمجة الإجرائية، كنت معتادًا على وجود المتغيرات للاحتفاظ بالمعلومات وتتبع الحالة. يمكنك تعريف تلك المتغيرات وقتما تحتاج إليها في الملف الخاص بك. قد تبدو تهيئة المتغير النموذجي على النحو التالي:

pi = 3.14

لديك المتغيرات في OOP أيضًا، رغم أنها مرفقة بالعناصر بدلاً من أن تكون محددة من تلقاء نفسها. يمكنك الإشارة إلى متغيرات على أحد العناصر في شكل سمات. عند إرفاق سمة بعنصر ما، فإنها تُستخدم بإحدى طريقتين:

  • وصف الكائن: مثال لوصف متغير وهو لون سيارة أو عدد البقع على زرافة.
  • الاحتفاظ بالحالة: يمكن بدلاً من ذلك استخدام متغير لوصف حالة العنصر. مثال الحالة هو أرضية المصعد، أو ما إذا كان يعمل أم لا.

أضف سمات إلى إحدى الفئات

تعد معرفة ماهية السمات (المتغيرات) التي ينبغي إضافتها إلى الفئة الخاصة بك جزء من النمذجة. لقد تعلمت كيفية إنشاء فئة في التعليمات البرمجية، فكيف يمكنك إضافة سمة إليها؟ تحتاج إلى إخبار الفئة بالسمات التي ينبغي توافرها وقت الإنشاء، عند إنشاء مثيل للعنصر. توجد وظيفة خاصة يتم استدعاؤها وقت الإنشاء، تُسمى الدالة الإنشائية.

الدالمنشئ

يوجد بالعديد من لغات البرنامج فكرة الدالة الإنشائية، وهي دالة خاصة تُستدعى فقط عند إنشاء العنصر أولاً. تُستدعى الدالة الإنشائية مرة واحدة فقط. في هذا الأسلوب، يمكنك إنشاء السمات التي ينبغي أن تتوافر في العنصر. إضافة إلى ذلك، يمكنك تعيين أي قيم بدء إلى السمات التي تم إنشاؤها.

في بيثون، تحمل الدالة الإنشائية اسم __init__(). تحتاج أيضًا إلى تمرير معلمة خاصة، self، إلى الدالة الإنشائية. تُشير المعلمة self إلى مثيل العنصر. يعني أي تعيين لهذه الكلمة الأساسية أن السمة تُنهي مثيل العنصر. إذا لم تضف سمة إلى self، فسيتم التعامل معها كمتغير مؤقت ولن يكون موجودًا بعد الانتهاء من __init__() التنفيذ.

إشعار

كما ستحتاج المعلمة self إلى التمرير إلى أي من الأساليب التي تحتاج إلى الإشارة إلى أي شيء على مثيل للعنصر. سيُوضح هذا المفهوم في الوحدة التالية.

إضافة سمات إلى إحدى الفئات وتهيئها

لنر مثالاً لإعداد السمات في الدالة الإنشائية:

class Elevator:
    def __init__(self, starting_floor):
        self.make = "The elevator company"
        self.floor = starting_floor

# To create the object

elevator = Elevator(1)
print(elevator.make) # "The Elevator company"
print(elevator.floor) # 1

يصف المثال السابق الفئة Elevator بمتغيرين: make وfloor. الوجبات الجاهزة المهمة من التعليمات البرمجية هي التي __init__() تُسمى ضمنيًا. لا تقوم باستدعاء __init__() الأسلوب بالاسم، ولكنه يُستدعى عند إنشاء العنصر، في هذا السطر من التعليمات البرمجية:

elevator = Elevator(1)

استخدام غير صحيح لـself

للتأكيد على كيفية عمل المعلمة self، عليك مراعاة التعليمات البرمجية التالية التي يتم تعيين سمتين، color وmake، في الدالة الإنشائية __init__():

class Car:
    def __init__():
        self.color = "Red" # ends up on the object
        make = "Mercedes" # becomes a local variable in the constructor

car = Car()
print(car.color) # "Red"
print(car.make) # would result in an error, `make` does not exist on the object

إذا كان الغرض منcolor وmake سمات الفئة Car، فستحتاج إلى تعديل التعليمات البرمجية. في الدالة الإنشائية، تأكد من تعيين كلتا السمتين إلى self، على النحو التالي:

self.color = "Red" # ends up on the object
self.make = "Mercedes"

تلميح

أما التمرين المنزلي، فحاول إنشاء فئة من كتاب تقرؤه. فكّر في كيفية كتابة فئته وما هي الخصائص التي ينبغي أن توجد به.