אוסף צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 59 מתוך 70.
אתגר
קלעכשיו, כשיש לך מחלקות Rectangle ו-Circle עם פונקציונליות מלאה, בוא ניצור מחלקת ShapeCollection שתוכל לנהל כמה צורות יחד. זו דוגמה מצוינת להרכבה: האוסף "has" צורות במקום "להיות" צורה.
תוסיף קובץ חדש לפרויקט ההולך וגדל שלך:
Shape.lua: מחלקת Shape הבסיסית שלך (ללא שינוי).Rectangle.lua: מחלקת Rectangle שלך עם:getArea()ו-:getPerimeter().Circle.lua: מחלקת Circle שלך עם:getArea()ו-:getPerimeter().ShapeCollection.lua: צור מחלקה חדשה ששומרת צורות באופן פנימי. כלול בנאי:new()שמאתחל רשימה ריקה של צורות, מתודה:addShape(shape)שמוסיפה כל צורה לאוסף, ומתודה:count()שמחזירה את מספר הצורות המאוחסנות כרגע.main.lua: חבר הכול יחד באמצעות טעינת המודולים שלך. קרא את המידות מהקלט, צור Rectangle ו-Circle, הוסף את שתיהן ל-ShapeCollection, ואז הדפס את מספר הצורות באוסף ואחריו את השם של כל צורה (לפי סדר הוספתן).
ShapeCollection לא צריכה לדעת אם היא מאחסנת מלבנים או מעגלים. היא פשוט מכילה צורות. כך מודגם שפולימורפיזם מאפשר להתייחס לסוגי אובייקטים שונים באופן אחיד באמצעות ממשק משותף.
קלט: שלוש שורות: רוחב (מספר), גובה (מספר) ורדיוס (מספר).
פלט: שלוש שורות: מספר הצורות באוסף, לאחר מכן השם של הצורה הראשונה שנוספה, ואז השם של הצורה השנייה שנוספה.
נסו בעצמכם
-- טען את המודול 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:count())
-- הדפס את השם של כל צורה לפי סדר הוספתן
for i = 1, collection:count() do
print(collection.shapes[i]:getName())
end
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין