Menu
Coddy logo textTech

שטח כולל

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

challenge icon

אתגר

קל

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

תמשיך לעבוד על קובצי הפרויקט הקיימים שלך:

  • Shape.lua: מחלקת הבסיס Shape שלך (ללא שינוי).
  • Rectangle.lua: מחלקת Rectangle שלך עם :getArea() ו־:getPerimeter().
  • Circle.lua: מחלקת Circle שלך עם :getArea() ו־:getPerimeter().
  • ShapeCollection.lua: הרחב את מחלקת האוסף שלך והוסף מתודה :getTotalArea(). המתודה צריכה לעבור על כל הצורות המאוחסנות, לקרוא ל־:getArea() בכל אחת מהן, ולהחזיר את סכום השטחים.
  • main.lua: טען את המודולים שלך, קרא את המידות מהקלט, צור מלבן ומעגל, הוסף את שניהם ל־ShapeCollection, ואז הדפס את השטח הכולל של כל הצורות באוסף.

היופי בגישה הזאת הוא ש־:getTotalArea() לא זקוקה ללוגיקה נפרדת עבור מלבנים ומעגלים. היא פשוט מסתמכת על כך שלכל צורה באוסף יש מתודה :getArea(). בהמשך אפשר להוסיף משולשים, משושים או כל צורה אחרת, וחישוב השטח הכולל יעבוד ללא שינויים.

קלט: שלוש שורות: רוחב (מספר), גובה (מספר) ורדיוס (מספר).

פלט: שורה אחת שמכילה את השטח הכולל של כל הצורות באוסף.

נסו בעצמכם

-- טען את המודול Rectangle
local Rectangle = require('Rectangle')

-- טען את המודול Circle
local Circle = require('Circle')

-- טען את המודול ShapeCollection
local ShapeCollection = require('ShapeCollection')

-- קרא את הרוחב והגובה מהקלט
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- צור מופע חדש של Rectangle עם הממדים הנתונים
local rect = Rectangle:new(width, height)

-- צור מופע חדש של Circle עם הרדיוס הנתון
local circ = Circle:new(radius)

-- צור ShapeCollection חדש
local collection = ShapeCollection:new()

-- הוסף את שתי הצורות לאוסף
collection:addShape(rect)
collection:addShape(circ)

-- הדפס את השטח הכולל של כל הצורות באוסף
print(collection:getTotalArea())

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Lua אונליין