Menu
Coddy logo textTech

מתודת היקף

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

challenge icon

אתגר

קל

נרחיב את Shape Manager שלנו על ידי הוספת מתודה :getPerimeter() למחלקות Rectangle ו-Circle. בדומה ל-:getArea(), כל צורה מחשבת את ההיקף שלה באופן שונה, אבל הן חולקות את אותו שם מתודה: דוגמה מושלמת לפולימורפיזם בפעולה.

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

  • Shape.lua: מחלקת הבסיס Shape שלך נשארת ללא שינוי.
  • Rectangle.lua: הוסף מתודה :getPerimeter() שמחזירה את היקף המלבן לפי הנוסחה 2 × (width + height).
  • Circle.lua: הוסף מתודה :getPerimeter() שמחזירה את היקף המעגל לפי הנוסחה 2 × π × radius. השתמש ב-math.pi עבור π.
  • main.lua: טען את שני מודולי הצורות, קרא את הממדים מהקלט, צור Rectangle אחד ו-Circle אחד, ואז הדפס שש שורות: שם המלבן, שטחו והיקפו, ולאחר מכן שם המעגל, שטחו והיקפו.

לשתי הצורות יש כעת ממשק מלא עם :getName(), :getArea() ו-:getPerimeter(): כולן נגישות באמצעות אותם שמות מתודות, למרות המימושים השונים.

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

פלט: שש שורות לפי הסדר: שם המלבן, שטח המלבן, היקף המלבן, שם המעגל, שטח המעגל והיקף המעגל.

נסו בעצמכם

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

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

-- קרא את הרוחב והגובה מהקלט
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)

-- הדפס את השם, השטח וההיקף של המלבן
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- הדפס את השם, השטח וההיקף של המעגל
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

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

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