ملخص - تجميع الروبوت
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 54 من 70.
التحدي
سهللنجمع Robot من أجزاء مكوّنة منفردة! بدلاً من استخدام الوراثة، ستبني روبوتًا من خلال تركيبه من كائنات منفصلة من نوع Arm وLeg وHead، لكلٍّ منها سلوك متخصص خاص به. سيتولى الروبوت تنسيق هذه الأجزاء من خلال التفويض.
ستنظّم كودك عبر خمسة ملفات:
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: اقرأ مدخلين لاسم الروبوت وإجابة بنعم/لا. أنشئ 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لاحظ أن Robot لا يعرف كيف تُرفع الأذرع أو تخطو الساقان. إنه يخبر كل جزء ببساطة بما يجب فعله. كل component مستقل وقابل لإعادة الاستخدام، ويعمل الروبوت منسقًا يجمعها كلها معًا!
جرّب بنفسك
-- main.lua: نقطة الدخول لتحدي تركيب Robot
local Robot = require('Robot')
-- اقرأ المدخلات
local name = io.read()
local answer = io.read()
-- TODO: أنشئ Robot بالاسم المعطى
-- 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 عبر الإنترنت