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