Menu
Coddy logo textTech

מבחן OOP מסכם

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 70 מתוך 70.

challenge icon

אתגר

קל

בואו נאחד את כל מה שלמדת על OOP ב-Lua! תבנה מערכת כלי רכב שמדגימה ירושה, כימוס באמצעות מוסכמות שמות, ומיקסינים ליכולות אופציונליות.

תארגן את הקוד שלך בחמישה קבצים:

  • Vehicle.lua: מחלקת הבסיס לכל כלי הרכב. לכל כלי רכב יש name ו-_speed לפי מוסכמת השמות הפרטיים (שמאתחלים ל-0). כלול פונקציית גטר :getName(), פונקציית גטר :getSpeed(), ופונקציית סטר :setSpeed(value) שדוחה ערכים שליליים (אם הערך שלילי, הדפס Speed cannot be negative ואל תשנה את הערך). הוסף מתודה :describe() שמחזירה "{name} moving at {speed}".
  • Refuelable.lua: טבלת מיקסין שמכילה התנהגות הקשורה לדלק. כלול מתודה :refuel(amount) שמוסיפה ל-self._fuel, ומתודה :getFuel() שמחזירה את רמת הדלק הנוכחית.
  • Car.lua: יורשת מ-Vehicle ומשתמשת במיקסין Refuelable. הבנאי מקבל name ומאתחל את _fuel ל-0. דרוס את :describe() כך שתחזיר "{name} moving at {speed}, fuel: {fuel}". החל את המיקסין Refuelable כדי להקנות למכוניות יכולת לתדלק.
  • 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

האתגר הזה מדגים כיצד ירושה מספקת התנהגות משותפת (שני כלי הרכב יכולים לנוע), מיקסינים מוסיפים יכולות אופציונליות (רק מכוניות זקוקות לדלק), וכימוס מגן על שלמות הנתונים (אימות מהירות). לכל טכניקה יש תפקיד שונה בתכנון שלך!

נסו בעצמכם

-- 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 אונליין