اختبار OOP النهائي
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 70 من 70.
التحدي
سهللنجمع معًا كل ما تعلمته عن OOP في Lua! ستبني نظامًا للمركبات يوضّح الوراثة، والتغليف من خلال اصطلاحات التسمية، وmixins للقدرات الاختيارية.
ستنظّم شيفرتك عبر خمسة ملفات:
Vehicle.lua: الفئة الأساسية لجميع المركبات. لكل مركبةnameو_speedوفق اصطلاح خاص (تتم تهيئته إلى 0). أضف getter باسم:getName()، وgetter باسم:getSpeed()، وsetter باسم:setSpeed(value)يرفض القيم السالبة (إذا كانت سالبة، اطبعSpeed cannot be negativeولا تغيّر القيمة). أضف method باسم:describe()يعيد"{name} moving at {speed}".Refuelable.lua: جدول mixin يحتوي على behavior متعلق بالوقود. أدرج method باسم:refuel(amount)يضيف إلىself._fuel، وmethod باسم:getFuel()يعيد مستوى الوقود الحالي.Car.lua: يرث من Vehicle ويستخدم mixin المسمى Refuelable. يقبل constructor قيمةnameويهيّئ_fuelإلى 0. أعد تعريف:describe()ليعيد"{name} moving at {speed}, fuel: {fuel}". طبّق mixin المسمى Refuelable لمنح السيارات capabilities الوقود.Bicycle.lua: يرث من Vehicle فقط؛ ولا حاجة إلى functionality للوقود. يقبل constructor قيمةnameفقط. تستخدم الدراجات method الموروثة:describe()دون modification.main.lua: اجمع كل شيء معًا! أنشئ سيارة ودراجة اعتمادًا على inputs، وأظهر capabilities المختلفة الخاصة بهما، ووضّح كيف تتشارك المركبتان behavior المشترك للمركبات مع امتلاكهما features مميزة.
ستتلقى أربعة inputs:
- اسم السيارة
- اسم الدراجة
- السرعة المراد ضبطها لكلا المركبتين (رقم)
- كمية الوقود المراد إضافتها إلى السيارة (رقم)
في ملفك الرئيسي:
- أنشئ سيارة ودراجة بالاسمين المعطيين
- اضبط السرعة لكلا المركبتين باستخدام input الثالث
- زوّد السيارة بالوقود باستخدام input الرابع
- اطبع وصف السيارة
- اطبع وصف الدراجة
على سبيل المثال، إذا كانت inputs هي Sedan وMountain Bike و60 و45، فيجب أن يكون الناتج:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60إذا كانت inputs هي Sports Car وRoad Bike و120 و80، فيجب أن يكون الناتج:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120يوضّح هذا التحدي كيف توفّر الوراثة behavior مشتركًا (يمكن لكلا المركبتين التحرك)، وتضيف mixins capabilities اختيارية (تحتاج السيارات فقط إلى الوقود)، ويحمي التغليف سلامة البيانات (التحقق من السرعة). لكل تقنية غرض مختلف في تصميمك!
جرّب بنفسك
-- 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: اطبع وصف الدراجة
جميع دروس البرمجة كائنية التوجه
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 النهائيتدرّب بنفسك: مترجم Lua عبر الإنترنت