מבחן OOP מסכם
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 70 מתוך 70.
אתגר
קלבואו נאחד את כל מה שלמדת על OOP ב-Lua! תבנה מערכת כלי רכב שמדגימה ירושה, כימוס באמצעות מוסכמות שמות, ומיקסינים ליכולות אופציונליות.
תארגן את הקוד שלך בחמישה קבצים:
Vehicle.lua: מחלקת הבסיס לכל כלי הרכב. לכל כלי רכב ישnameו-_speedלפי מוסכמת השמות הפרטיים (שמאתחלים ל-0). כלול פונקציית גטר:getName(), פונקציית גטר:getSpeed(), ופונקציית סטר:setSpeed(value)שדוחה ערכים שליליים (אם הערך שלילי, הדפסSpeed cannot be negativeואל תשנה את הערך). הוסף מתודה:describe()שמחזירה"{name} moving at {speed}".Refuelable.lua: טבלת מיקסין שמכילה התנהגות הקשורה לדלק. כלול מתודה:refuel(amount)שמוסיפה ל-self._fuel, ומתודה:getFuel()שמחזירה את רמת הדלק הנוכחית.Car.lua: יורשת מ-Vehicle ומשתמשת במיקסין Refuelable. הבנאי מקבלnameומאתחל את_fuelל-0. דרוס את:describe()כך שתחזיר"{name} moving at {speed}, fuel: {fuel}". החל את המיקסין Refuelable כדי להקנות למכוניות יכולת לתדלק.Bicycle.lua: יורשת רק מ-Vehicle: אין צורך בפונקציונליות של דלק. הבנאי מקבל רקname. אופניים משתמשים במתודה שעברה בירושה:describe()ללא שינוי.main.lua: חבר הכול יחד! צור מכונית ואופניים על סמך הקלט, הדגם את היכולות השונות שלהם, והראה כיצד הם חולקים התנהגות משותפת של כלי רכב לצד מאפיינים ייחודיים.
תקבל ארבעה קלטים:
- שם המכונית
- שם האופניים
- המהירות שיש להגדיר לשני כלי הרכב (מספר)
- כמות הדלק שיש להוסיף למכונית (מספר)
בקובץ הראשי שלך:
- צור מכונית ואופניים עם השמות הנתונים
- הגדר את המהירות של שני כלי הרכב באמצעות הקלט השלישי
- תדלק את המכונית באמצעות הקלט הרביעי
- הדפס את התיאור של המכונית
- הדפס את התיאור של האופניים
לדוגמה, אם הקלטים הם Sedan, Mountain Bike, 60 ו-45, הפלט צריך להיות:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60אם הקלטים הם Sports Car, Road Bike, 120 ו-80, הפלט צריך להיות:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120האתגר הזה מדגים כיצד ירושה מספקת התנהגות משותפת (שני כלי הרכב יכולים לנוע), מיקסינים מוסיפים יכולות אופציונליות (רק מכוניות זקוקות לדלק), וכימוס מגן על שלמות הנתונים (אימות מהירות). לכל טכניקה יש תפקיד שונה בתכנון שלך!
נסו בעצמכם
-- main.lua: לחבר את הכול יחד
local Car = require('Car')
local Bicycle = require('Bicycle')
-- לקרוא את הקלטים
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: ליצור מכונית בשם הנתון
-- TODO: ליצור אופניים בשם הנתון
-- TODO: להגדיר את המהירות של שני כלי הרכב
-- TODO: לתדלק את המכונית בכמות הדלק הנתונה
-- TODO: להדפיס את תיאור המכונית
-- TODO: להדפיס את תיאור האופניים
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין