اختبار OOP النهائي
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 70 من 70.
التحدي
سهلدعنا نجمع كل ما تعلمته حول البرمجة كائنية التوجه (OOP) في Lua! ستقوم ببناء نظام مركبات يستعرض الوراثة، والتغليف من خلال اتفاقيات التسمية، والـ mixins للقدرات الاختيارية.
ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:
Vehicle.lua: الفئة الأساسية (base class) لجميع المركبات. كل مركبة لهاnameو_speedباتفاقية خاصة (تبدأ بـ 0). قم بتضمين دالة جلب:getName()، ودالة جلب:getSpeed()، ودالة تعيين:setSpeed(value)ترفض القيم السالبة (إذا كانت سالبة، اطبعSpeed cannot be negativeولا تغير القيمة). أضف دالة:describe()تعيد"{name} moving at {speed}".Refuelable.lua: جدول mixin يحتوي على السلوك المتعلق بالوقود. قم بتضمين دالة:refuel(amount)تضيف إلىself._fuel، ودالة:getFuel()تعيد مستوى الوقود الحالي.Car.lua: يرث من Vehicle ويستخدم Refuelable mixin. يقبل المنشئ (constructor) الاسمnameويهيئ_fuelبـ 0. قم بإعادة تعريف (Override) لـ:describe()لتعيد"{name} moving at {speed}, fuel: {fuel}". قم بتطبيق Refuelable mixin لمنح السيارات قدرات الوقود.Bicycle.lua: يرث من Vehicle فقط — لا حاجة لوظائف الوقود. يقبل المنشئ الاسمnameفقط. تستخدم الدراجات دالة:describe()الموروثة دون تعديل.main.lua: اجمع كل شيء معاً! أنشئ سيارة ودراجة بناءً على المدخلات، واستعرض قدراتهما المختلفة، وأظهر كيف يتشاركان سلوك المركبة العام مع وجود ميزات متميزة لكل منهما.
ستتلقى أربعة مدخلات:
- اسم السيارة
- اسم الدراجة
- السرعة المراد ضبطها لكلتا المركبتين (رقم)
- كمية الوقود المراد إضافتها للسيارة (رقم)
في ملفك الرئيسي:
- أنشئ سيارة ودراجة بالأسماء المعطاة
- اضبط السرعة لكلتا المركبتين باستخدام المدخل الثالث
- قم بتزويد السيارة بالوقود باستخدام المدخل الرابع
- اطبع وصف السيارة
- اطبع وصف الدراجة
على سبيل المثال، إذا كانت المدخلات هي Sedan، و Mountain Bike، و 60، و 45، يجب أن يكون المخرج:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60إذا كانت المدخلات هي Sports Car، و Road Bike، و 120، و 80، يجب أن يكون المخرج:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120يستعرض هذا التحدي كيف توفر الوراثة سلوكاً مشتركاً (كلتا المركبتين يمكنهما التحرك)، وكيف تضيف الـ mixins قدرات اختيارية (السيارات فقط تحتاج للوقود)، وكيف يحمي التغليف سلامة البيانات (التحقق من صحة السرعة). كل تقنية تخدم غرضاً مختلفاً في تصميمك!
جرّب بنفسك
-- main.lua: تجميع كل شيء معاً
local Car = require('Car')
local Bicycle = require('Bicycle')
-- قراءة المدخلات
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: إنشاء سيارة بالاسم المعطى
-- TODO: إنشاء دراجة بالاسم المعطى
-- 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 مقابل الوراثةملخص - تجميع الروبوت12التحديات النهائية
مراجعة - نظام المخزونمراجعة - مدير المستخدمينمراجعة - متتبع النقاطاختبار OOP النهائي