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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 70 من 70.

challenge icon

التحدي

سهل

لنجمع معًا كل ما تعلمته عن 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:

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

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

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

على سبيل المثال، إذا كانت 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: اطبع وصف الدراجة

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Lua عبر الإنترنت