חזרה – מנהל משתמשים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 68 מתוך 70.
אתגר
קלבואו נבנה מערכת לניהול משתמשים: יישום מעשי שתמצאו בתוכניות רבות בעולם האמיתי! תיצרו שתי מחלקות שעובדות יחד: האחת מייצגת משתמשים בודדים, והאחרת מנהלת אוסף שלהם ביעילות.
תארגנו את הקוד בשלושה קבצים:
User.lua: צרו מחלקת User שמייצגת משתמש יחיד במערכת. לכל משתמש ישidו-name. כללו מתודה:getInfo()שמחזירה מחרוזת בתבנית"ID: {id}, Name: {name}".UserManager.lua: בנו מחלקת מנהל שמטפלת באוסף של משתמשים. חשבו איך לאחסן משתמשים כדי לאפשר חיפוש יעיל: שימוש במזהה של המשתמש כמפתח בטבלה מקל מאוד על מציאת משתמשים והסרתם, בהשוואה לחיפוש ברשימה. המנהל שלכם צריך לכלול::addUser(user): מוסיפה אובייקט User לאוסף:removeUser(id): מסירה משתמש לפי המזהה שלו:findUser(id): מחזירה את המשתמש עם המזהה התואם, אוnilאם הוא לא נמצא:listUsers(): מדפיסה את הפרטים של כל המשתמשים, אחד בכל שורה
main.lua: חברו הכול יחד! צרו UserManager, הוסיפו משתמשים על סמך הקלטים שתקבלו, בצעו פעולות והציגו את התוצאות.
תקבלו חמישה קלטים:
- המזהה של המשתמש הראשון (מספר)
- השם של המשתמש הראשון
- המזהה של המשתמש השני (מספר)
- השם של המשתמש השני
- המזהה של המשתמש שאחריו יש לחפש (מספר)
בקובץ הראשי שלכם:
- צרו UserManager והוסיפו את שני המשתמשים
- קראו ל-
:listUsers()כדי להדפיס את כל המשתמשים - הסירו את המשתמש הראשון (באמצעות המזהה הראשון)
- הדפיסו
"After removal:" - קראו שוב ל-
:listUsers() - חפשו את המשתמש עם המזהה שבקלט החמישי; אם הוא נמצא, הדפיסו את פרטיו; אם הוא לא נמצא, הדפיסו
"User not found"
לדוגמה, אם הקלטים הם 101, Alice, 102, Bob ו-102, הפלט אמור להיות:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bobאם הקלטים הם 201, Charlie, 202, Diana ו-201, הפלט אמור להיות:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundשימו לב שבדוגמה השנייה, לאחר הסרת המשתמש 201 (Charlie), חיפוש לפי המזהה הזה מחזיר "User not found", כי המשתמש כבר לא נמצא במערכת!
נסו בעצמכם
-- main.lua: לחבר את הכול יחד
local User = require('User')
local UserManager = require('UserManager')
-- לקרוא את הקלטים
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: ליצור מופע של UserManager
-- TODO: ליצור שני אובייקטים מסוג User עם נתוני הקלט
-- TODO: להוסיף את שני המשתמשים למנהל
-- TODO: לקרוא ל־listUsers() כדי להדפיס את כל המשתמשים
-- TODO: להסיר את המשתמש הראשון (באמצעות id1)
-- TODO: להדפיס "After removal:"
-- TODO: לקרוא שוב ל־listUsers()
-- TODO: לחפש את המשתמש עם searchId
-- אם המשתמש נמצא, להדפיס את הפרטים שלו; אם לא, להדפיס "User not found"
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין