סיכום – כספת מאובטחת
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 48 מתוך 70.
אתגר
קלבואו נבנה מחלקה בשם Vault שמשתמשת בפרטיות המבוססת על סגירה (closure) כדי ליצור מערכת אחסון מאובטחת באמת! הכספת תחזיק תוכן סודי שאפשר לגשת אליו רק באמצעות הסיסמה הנכונה.
תארגן את הקוד שלך בשני קבצים:
Vault.lua: צור מחלקה שבה גם התוכן וגם הסיסמה נשמרים במשתנים מקומיים בתוך הבנאי: מוסתרים לחלוטין מגישה מבחוץ. הבנאי:new(contents, password)צריך לשמור את הערכים האלה במשתנים מקומיים, ואז להגדיר מתודה ישירות על מופע האובייקט::open(attemptedPassword): בודקת אם הסיסמה שהוזנה תואמת לסיסמה השמורה. אם היא נכונה, מחזירה את התוכן הסודי. אם היא שגויה, מחזירה"Access Denied".
main.lua: טען את המודול Vault וקרא שלוש קלטים: התוכן הסודי לאחסון, הסיסמה להגדרה וניסיון להזנת סיסמה. צור כספת עם התוכן והסיסמה, ואז נסה לפתוח אותה באמצעות הסיסמה שהוזנה והדפס את התוצאה. בנוסף, הדגם שהתוכן פרטי באמת באמצעות ניסיון לגשת ישירות אלvault.contentsוהדפסת מה שמתקבל.
תקבל שלוש קלטים:
- התוכן הסודי לאחסון בכספת
- הסיסמה להגנה על הכספת
- ניסיון להזנת סיסמה כדי לפתוח את הכספת
הפלט שלך צריך לכלול שתי שורות:
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}לדוגמה, אם הקלטים הם Gold Coins, secret123 ו-secret123, הפלט צריך להיות:
Result: Gold Coins
Direct access: nilאם הקלטים הם Diamond, mypass ו-wrongpass, הפלט צריך להיות:
Result: Access Denied
Direct access: nilהתובנה המרכזית כאן היא שגם contents וגם password קיימים רק כמשתנים מקומיים בתוך הבנאי. למתודה :open() יש גישה אליהם דרך סגירה, אבל לשום דבר אחר אין גישה אליהם, אפילו לא אל vault.contents, vault._contents או vault.password. זוהי הסתרת מידע אמיתית!
נסו בעצמכם
-- טען את המודול Vault
local Vault = require('Vault')
-- קרא את הקלטים
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: צור כספת עם התוכן והסיסמה
-- TODO: נסה לפתוח את הכספת באמצעות הסיסמה שהוזנה לניסיון
-- TODO: הדפס את התוצאה בפורמט: "Result: {resultFromOpen}"
-- TODO: נסה לגשת ישירות אל vault.contents והדפס את מה שמתקבל
-- הדפס בפורמט: "Direct access: {whatYouGetFromVaultContents}"
כל השיעורים ביחידה תכנות מונחה עצמים
4פרויקט: בנק דיגיטלי
הגדרת הפרויקטפעולת הפקדה7פולימורפיזם ודריסת מתודות
דריסת מתודותקריאה למתודות של מחלקת האבטיפוסיות ברווזממשק משותףבדיקת טיפוססיכום – תפקידי עובדים2תבנית אב־טיפוס למחלקה
מושג אב־הטיפוסקישור באמצעות __indexהבנאי :new()אתחול מאפייניםמופעים עצמאייםסיכום – מפעל מכוניות5העמסת אופרטורים בתכנות מונחה עצמים
חיבור אובייקטיםחיסור אובייקטיםשרשור אובייקטיםהשוואת אובייקטים (<, >)חזרה – חישובים עם ארנק8כימוס
כללי מתן שמותClosures לשמירה על פרטיותגישה באמצעות Closuresטבלאות לקריאה בלבדלוגיקת אימותסיכום – כספת מאובטחת11תבניות עיצוב (בקצרה)
פונקציות Factoryטבלת Singletonתבנית IteratorObserver (מאזין)סיכום – מפעל Logger3מצב והתנהגות של אובייקטים
משתני מופעמתודות Getterמתודות Setterמאפיינים מחושביםעיצוב מחרוזותבדיקות שוויוןסיכום – ציון תלמיד6יסודות הירושה
הכנת מבנה הירושהירושת מתודותהרחבת הבנאיהוספת מתודות למחלקת הבתמשותף לעומת ייחודיסיכום – היררכיית צורותתרגלו בעצמכם: קומפיילר Lua אונליין