אתחול מאפיינים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 9 מתוך 70.
הבנאי :new() שלמדת יוצר אובייקטים, אבל כל מופע מתחיל זהה. אובייקטים אמיתיים זקוקים לנתונים ייחודיים: לאדם יש שם מסוים, ולשחקן יש ניקוד התחלתי. כדי להפוך אובייקטים לשימושיים, הבנאי חייב לקבל ארגומנטים ולהקצות אותם למופע החדש.
כך אפשר להרחיב את הבנאי כדי לקבל ערכים התחלתיים:
local Dog = {}
Dog.__index = Dog
function Dog:new(name, breed)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.breed = breed
return instance
end
function Dog:introduce()
print("I am " .. self.name .. ", a " .. self.breed)
endהבנאי מקבל כעת את name ואת breed כפרמטרים. לאחר יצירת מופע ריק והגדרת המטא־טבלה שלו, אנחנו משייכים את הערכים האלה ישירות לשדות של המופע. לכל אובייקט שייוצר יהיו name ו־breed משלו.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- פלט: אני Rex, רועה גרמני
dog2:introduce() -- פלט: אני Bella, פודללשני הכלבים יש אותה מתודה :introduce() מהאב־טיפוס, אבל לכל אחד יש שם וגזע ייחודיים משלו, המאוחסנים בטבלת המופע שלו. זהו הכוח שבשילוב אבות־טיפוס עם בנאים המקבלים פרמטרים: התנהגות משותפת עם מצב אישי.
אתגר
קלבואו נבנה מחלקת Person שיוצרת אנשים ייחודיים עם שמות וגילים משלהם. נארגן את הקוד בשני קבצים כדי לתרגל מבנה נכון של מודולים.
תיצרו:
Person.lua: הגדירו את מחלקתPersonעם בנאי שמקבל שם וגיל. כללו מתודה:introduce()שמאפשרת לכל אדם להציג את עצמו.main.lua: טענו את מודול Person וצרו מופע של אדם באמצעות הקלטים שסופקו. לאחר מכן, בקשו ממנו להציג את עצמו.
הבנאי :new(name, age) צריך לקבל את שני הערכים ולשמור אותם במופע החדש. המתודה :introduce() צריכה להדפיס בפורמט המדויק הבא:
Hello, my name is [name] and I am [age] years oldתקבלו שני קלטים:
- שם האדם
- גיל האדם
לדוגמה, אם הקלטים הם Alice ו-25, הפלט צריך להיות:
Hello, my name is Alice and I am 25 years oldנסו בעצמכם
-- טען את המודול Person
local Person = require('Person')
-- קרא קלט
local name = io.read()
local age = io.read()
-- TODO: צור מופע חדש של Person באמצעות Person:new(name, age)
-- TODO: קרא למתודה introduce() במופע שלך של Person
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין