סיכום – הרכבת רובוט
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 54 מתוך 70.
אתגר
קלבואו נרכיב Robot מחלקים נפרדים! במקום להשתמש בירושה, תבנו רובוט באמצעות הרכבת אובייקטים נפרדים מסוג Arm, Leg ו-Head: לכל אחד מהם תהיה התנהגות ייעודית משלו. הרובוט יתאם בין החלקים האלה באמצעות האצלה.
תארגנו את הקוד שלכם בחמישה קבצים:
Arm.lua: צרו מחלקה בשם Arm עם בנאי:new(side)ששומר באיזה צד היא נמצאת (למשל, "left" או "right"). כללו מתודה:raise()שמדפיסה{side} arm raisedומתודה:lower()שמדפיסה{side} arm lowered.Leg.lua: צרו מחלקה בשם Leg עם בנאי:new(side)ששומר את הצד. כללו מתודה:step()שמדפיסה{side} leg steps forward.Head.lua: צרו מחלקה בשם Head עם בנאי:new(). כללו מתודה:nod()שמדפיסהHead nodsומתודה:shake()שמדפיסהHead shakes.Robot.lua: צרו מחלקה בשם Robot שהבנאי שלה:new(name)שומר את השם ויוצר בתוכה את כל חלקי הרכיב: זרוע שמאלית, זרוע ימנית, רגל שמאלית, רגל ימנית וראש. למחלקת הרובוט צריכות להיות המתודות הבאות, שמאצילות את הפעולות לחלקים שלה::greet(): מדפיסה{name} says hello!, ואז מרימה את הזרוע הימנית, ואז מורידה אותה:walk(): גורמת לרגל השמאלית לצעוד, ואז לרגל הימנית לצעוד:respond(answer): אם התשובה היא"yes", הראש מהנהן; אם היא"no", הראש מניד מצד לצד
main.lua: קראו את הקלטים עבור שם הרובוט ותגובה של כן/לא. צרו Robot, גרמו לו לברך, ללכת, ואז להגיב בהתאם לקלט.
תקבלו שני קלטים:
- שם הרובוט (מחרוזת)
- תגובה:
yesאוno
הפלט שלכם צריך להציג את הרובוט מתאם בין חלקיו:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsאו אם התגובה היא no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesלדוגמה, אם הקלטים הם Robo ו-yes, הפלט צריך להיות:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsשימו לב שה-Robot לא יודע איך זרועות מתרוממות או רגליים צועדות. הוא פשוט אומר לכל חלק מה לעשות. כל רכיב עצמאי וניתן לשימוש חוזר, והרובוט משמש כמתאם שמחבר את כולם יחד!
נסו בעצמכם
-- main.lua: נקודת הכניסה לאתגר הקומפוזיציה של Robot
local Robot = require('Robot')
-- קראו את הקלטים
local name = io.read()
local answer = io.read()
-- TODO: צרו Robot עם השם הנתון
-- TODO: גרמו לרובוט לברך לשלום
-- TODO: גרמו לרובוט ללכת
-- TODO: גרמו לרובוט להגיב בהתאם לקלט answer
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורות9קומפוזיציה ומיקסינים
קשר מסוג יש-לוהאצלהמיקסינים פשוטיםהחלת כמה מיקסיניםמיקסינים לעומת ירושהסיכום – הרכבת רובוטתרגלו בעצמכם: קומפיילר Lua אונליין