ملخص - تجميع الروبوت
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 54 من 70.
التحدي
سهلدعنا نجمع Robot من أجزاء مكونة فردية! بدلاً من استخدام الوراثة، ستقوم ببناء روبوت من خلال تكوينه من كائنات Arm و Leg و Head منفصلة — لكل منها سلوكها الخاص المتخصص. سيقوم الروبوت بتنسيق هذه الأجزاء من خلال التفويض (delegation).
ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:
Arm.lua: قم بإنشاء فئة Arm مع منشئ:new(side)يخزن الجانب الذي توجد فيه (على سبيل المثال، "left" أو "right"). قم بتضمين تابع:raise()يطبع{side} arm raisedوتابع:lower()يطبع{side} arm lowered.Leg.lua: قم بإنشاء فئة Leg مع منشئ:new(side)يخزن الجانب. قم بتضمين تابع:step()يطبع{side} leg steps forward.Head.lua: قم بإنشاء فئة Head مع منشئ:new(). قم بتضمين تابع:nod()يطبعHead nodsوتابع:shake()يطبعHead shakes.Robot.lua: قم بإنشاء فئة Robot التي يقوم منشئها:new(name)بتخزين الاسم وإنشاء جميع الأجزاء المكونة داخلياً: ذراع يسرى، وذراع يمنى، ورجل يسرى، ورجل يمنى، ورأس. يجب أن يحتوي الروبوت على هذه التوابع التي تفوض المهام لأجزائها::greet()— يطبع{name} says hello!، ثم يرفع الذراع اليمنى، ثم يخفضها:walk()— يجعل الرجل اليسرى تخطو، ثم الرجل اليمنى تخطو:respond(answer)— إذا كانت الإجابة"yes"، يومئ الرأس؛ وإذا كانت"no"، يهز الرأس
main.lua: اقرأ المدخلات لاسم الروبوت واستجابة yes/no. أنشئ Robot، واجعله يحيي، ويمشي، ثم يستجيب بناءً على المدخلات.
ستتلقى مدخلين:
- اسم الروبوت (سلسلة نصية)
- استجابة:
yesأوno
يجب أن يظهر مخرجك الروبوت وهو ينسق أجزاءه:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsأو إذا كانت الاستجابة no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesعلى سبيل المثال، إذا كانت المدخلات هي Robo و yes، يجب أن يكون المخرج:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsلاحظ كيف أن الروبوت لا يعرف كيف ترفع الأذرع أو تخطو الأرجل — إنه ببساطة يخبر كل جزء بما يجب فعله. كل مكون مستقل وقابل لإعادة الاستخدام، ويعمل الروبوت كمنسق يجمعهم جميعاً معاً!
جرّب بنفسك
-- main.lua: نقطة الدخول لتحدي تكوين الروبوت
local Robot = require('Robot')
-- قراءة المدخلات
local name = io.read()
local answer = io.read()
-- TODO: إنشاء روبوت بالاسم المعطى
-- TODO: اجعل الروبوت يلقي التحية
-- TODO: اجعل الروبوت يمشي
-- TODO: اجعل الروبوت يستجيب بناءً على مدخل الإجابة
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال9التركيب و Mixins
علاقة "يحتوي على" (Has-A)التفويض (Delegation)Mixins بسيطةتطبيق Mixins متعددةMixins مقابل الوراثةملخص - تجميع الروبوت