הבנאי :new()
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 8 מתוך 70.
יצירת אובייקטים ידנית, הכנת טבלה ריקה, הגדרת מטא־טבלה עבורה וקישור __index — כל אלה הופכים לחזרתיים. הפתרון המקובל הוא להגדיר ישירות במחלקה מתודת בנאי :new() שמטפלת בכל אלה עבורך.
הנה התבנית:
local Dog = {}
Dog.__index = Dog
function Dog:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function Dog:bark()
print("Woof!")
endנפרק את מה שקורה בתוך :new(). תחילה, יוצרים טבלה ריקה בשם instance. לאחר מכן מגדירים את המטא־טבלה שלה ל־self, שהוא Dog כשקוראים ל־Dog:new().
מכיוון ש־Dog.__index מצביע על Dog עצמו, המופע יכול למצוא את כל המתודות שהוגדרו ב־Dog. לבסוף, אנחנו מחזירים את האובייקט החדש.
שימו לב לשורה Dog.__index = Dog מחוץ לבנאי. זהו קיצור דרך נפוץ: במקום ליצור מטא-טבלה נפרדת, טבלת המחלקה משמשת גם כאבטיפוס וגם כמטא-טבלה.
כעת יצירת אובייקטים נקייה ועקבית:
local myDog = Dog:new()
myDog:bark() -- פלט: Woof!כל מחלקה שתיצרו תעקוב אחר אותו מבנה. הבנאי :new() הופך למקום היחיד שבו מתבצעת יצירת אובייקטים, וכך הקוד שלכם נשאר מאורגן וצפוי.
אתגר
קלבואו נבנה מחלקת Cat באמצעות תבנית הבנאי הסטנדרטית שלמדת זה עתה. כדי לתרגל מבנה נכון של מודולים, תחלק את הקוד שלך בין שני קבצים.
תיצור:
Cat.lua: הגדר את מחלקתCatשלך עם תבנית הבנאי המלאה. המחלקה שלך צריכה לכלול:- טבלת מחלקה שבה
__indexמצביע לעצמה - בנאי
:new()שיוצר מופע, מגדיר את המטא־טבלה שלו ומחזיר אותו - שיטה
:meow()שמדפיסה את הצליל של החתול
- טבלת מחלקה שבה
main.lua: טען את מודול Cat שלך והשתמש בבנאי כדי ליצור מופע של חתול. לאחר מכן קרא לשיטה שלו כדי לוודא שהכול מקושר כראוי.
תקבל קלט אחד: מספר הפעמים שהחתול שלך אמור למיאו.
השיטה :meow() שלך צריכה להדפיס בדיוק:
Meow!בקובץ הראשי שלך, צור חתול באמצעות Cat:new() וקרא ל־:meow() את מספר הפעמים שצוין.
לדוגמה, אם הקלט הוא 3, הפלט צריך להיות:
Meow!
Meow!
Meow!נסו בעצמכם
-- טען את המודול Cat
local Cat = require('Cat')
-- קרא קלט: מספר הפעמים ליילל
local times = tonumber(io.read())
-- TODO: צור מופע של חתול באמצעות Cat:new()
-- TODO: קרא למתודה :meow() את מספר הפעמים שצוין
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין