Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

اختبار OOP النهائي

جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 70 من 70.

challenge icon

التحدي

سهل

دعنا نجمع كل ما تعلمته حول البرمجة كائنية التوجه (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: اجمع كل شيء معاً! أنشئ سيارة ودراجة بناءً على المدخلات، واستعرض قدراتهما المختلفة، وأظهر كيف يتشاركان سلوك المركبة العام مع وجود ميزات متميزة لكل منهما.

ستتلقى أربعة مدخلات:

  1. اسم السيارة
  2. اسم الدراجة
  3. السرعة المراد ضبطها لكلتا المركبتين (رقم)
  4. كمية الوقود المراد إضافتها للسيارة (رقم)

في ملفك الرئيسي:

  1. أنشئ سيارة ودراجة بالأسماء المعطاة
  2. اضبط السرعة لكلتا المركبتين باستخدام المدخل الثالث
  3. قم بتزويد السيارة بالوقود باستخدام المدخل الرابع
  4. اطبع وصف السيارة
  5. اطبع وصف الدراجة

على سبيل المثال، إذا كانت المدخلات هي 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