סיכום – מפעל Logger
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 66 מתוך 70.
אתגר
קלבואו נבנה מערכת רישום באמצעות תבנית Factory! תיצרו סוגים שונים של רשמים שחולקים ממשק משותף, ואז תשתמשו בפונקציית factory כדי ליצור את הרשם המתאים על סמך ארגומנט מחרוזת פשוט.
תארגנו את הקוד שלכם בארבעה קבצים:
ConsoleLogger.lua: צרו מחלקה בשם ConsoleLogger עם בנאי:new()ומתודה:log(message). כאשר קוראים ל־:log(), היא אמורה להדפיס את ההודעה עם הקידומת[CONSOLE], למשל[CONSOLE] Your message here.FileLogger.lua: צרו מחלקה בשם FileLogger עם אותו מבנה: בנאי:new()ומתודה:log(message). הרשם הזה אמור להדפיס הודעות עם הקידומת[FILE]במקום זאת.LoggerFactory.lua: כאן תבנית Factory מתחברת יחד! צרו פונקציה בשםcreateLogger(loggerType)שמקבלת ארגומנט מחרוזת. אם הסוג הוא"console", החזירו מופע חדש של ConsoleLogger. אם הסוג הוא"file", החזירו מופע חדש של FileLogger. ה־factory מטפל בכל הפרטים של המחלקה שיש ליצור לה מופע.main.lua: ייבאו את המודול LoggerFactory. קראו שתי קלטים: סוג הרשם והודעה לרישום. השתמשו ב־factory שלכם כדי ליצור את הרשם המתאים, ואז קראו למתודה שלו:log()עם ההודעה.
היופי בתכנון הזה הוא שהקוד הראשי שלכם מתקשר רק עם ה־factory. הוא לא צריך להכיר ישירות את ConsoleLogger או את FileLogger. שני הרשמים מממשים את אותו ממשק :log(), ולכן אפשר להשתמש בהם לסירוגין.
תקבלו שתי קלטים:
- סוג הרשם (או
"console"או"file") - ההודעה לרישום
לדוגמה, אם הקלטים הם console ו־Application started, הפלט אמור להיות:
[CONSOLE] Application startedאם הקלטים הם file ו־Saving user data..., הפלט אמור להיות:
[FILE] Saving user data...נסו בעצמכם
-- main.lua
-- נקודת הכניסה הראשית למערכת הרישום
local LoggerFactory = require('LoggerFactory')
-- קרא את הקלטים
local loggerType = io.read()
local message = io.read()
-- TODO: השתמש ב-LoggerFactory כדי ליצור את ה-logger המתאים
-- לאחר מכן קרא למתודה :log() עם ההודעה
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין