מתודת היקף
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 58 מתוך 70.
אתגר
קלנרחיב את 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())
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין