تهيئة الخصائص
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 9 من 70.
تُنشئ دالة البناء :new() التي تعلّمتها كائنات، لكن كل instance يبدأ متطابقًا. تحتاج الكائنات الحقيقية إلى بيانات فريدة: يمتلك الشخص اسمًا محددًا، ويمتلك اللاعب score ابتدائية. لجعل الكائنات مفيدة، يجب أن تقبل دالة البناء وسيطات وتعيّنها إلى النسخة الجديدة.
إليك كيفية توسيع constructor لقبول القيم الأولية:
local Dog = {}
Dog.__index = Dog
function Dog:new(name, breed)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.breed = breed
return instance
end
function Dog:introduce()
print("I am " .. self.name .. ", a " .. self.breed)
endيأخذ name وbreed الآن كمعاملين. بعد إنشاء الكائن الفارغ وتعيين metatable الخاص به، نُسنِد هذه القيم مباشرةً إلى حقول الكائن. سيكون لكل كائن يتم إنشاؤه name وbreed الخاصان به.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- المخرجات: أنا Rex، a German Shepherd
dog2:introduce() -- المخرجات: أنا Bella، a Poodleيشترك الكلبان في أسلوب :introduce() نفسه من النموذج الأولي، لكن لكلٍّ منهما اسم وسلالة فريدان خاصان به مخزّنان في جدول instance الخاص به. هذه هي قوة الجمع بين النماذج الأولية والمنشئات ذات المعلمات: سلوك مشترك مع حالة فردية.
التحدي
سهللنَبْنِ فئة Person تنشئ أفرادًا فريدين، لكلٍّ منهم أسماؤهم وأعمارهم الخاصة. ستنظّم شيفرتك عبر ملفين للتدرّب على بنية module الصحيحة.
ستنشئ:
Person.lua: عرّف فئةPersonباستخدام constructor يقبل اسمًا وعمرًا. أدرج method :introduce()تتيح لكل شخص أن يعرّف بنفسه.main.lua: استخدم Require لوحدة Person وأنشئ instance لشخص باستخدام المدخلات المقدَّمة. ثم اجعله يعرّف بنفسه.
يجب أن يقبل constructor :new(name, age) القيمتين كلتيهما ويخزّنهما في instance الجديدة. يجب أن تطبع method :introduce() بالتنسيق المطابق تمامًا للتالي:
Hello, my name is [name] and I am [age] years oldستتلقى مدخلين:
- اسم الشخص
- عمر الشخص
على سبيل المثال، إذا كانت المدخلات هي Alice و25، فيجب أن يكون الناتج:
Hello, my name is Alice and I am 25 years oldجرّب بنفسك
-- استيراد وحدة Person
local Person = require('Person')
-- قراءة الإدخال
local name = io.read()
local age = io.read()
-- TODO: أنشئ مثيلاً جديداً من Person باستخدام Person:new(name, age)
-- TODO: استدعِ الدالة introduce() على مثيل person الخاص بك
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت