ملخص - تجميع الروبوت
جزء من قسم البرمجة كائنية التوجه في رحلة 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: اجعل الروبوت يستجيب بناءً على مدخل الإجابة
جميع دروس البرمجة كائنية التوجه
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 مقابل الوراثةملخص - تجميع الروبوتتدرّب بنفسك: مترجم Lua عبر الإنترنت