סיכום - לוקר מאובטח
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 13 מתוך 61.
אתגר
קלבואו נבנה מערכת כספת מאובטחת שמשלבת את כל מה שלמדת על כימוס! הכספת שלך תגן על התכולה שלה מאחורי קוד סודי: רק מי שיודע את הקוד יוכל לראות מה יש בפנים.
תיצור שני קבצים כדי לארגן את הקוד שלך:
locker.rs: הגדר struct בשםLockerעם שני שדות פרטיים:code(u32) ו-contents(String). ה-struct צריך להיות ציבורי, אבל שני השדות חייבים להישאר פרטיים כדי להגן על אבטחת הכספת. ממש את:- בנאי
newשמקבל קוד התחלתי ותכולה - מתודה
set_codeשמאפשרת לשנות את הקוד של הכספת - מתודה
get_contentsשמקבלת קוד ניסיון; אם הוא תואם לקוד הכספת, החזר את התכולה; אחרת, החזר"Access denied"
- בנאי
main.rs: צרף את מודול הכספת שלך, צור כספת והדגם את תכונות האבטחה שלה באמצעות ניסיונות גישה לתכולה עם קודים נכונים ושגויים.
המתודה get_contents צריכה להחזיר String, או את התכולה בפועל כשהקוד נכון, או את הודעת הסירוב כשהוא שגוי. זהו getter מותנה שבודק הרשאות גישה לפני חשיפת נתונים פרטיים.
הפלט שלך צריך להיות בדיוק בפורמט הבא:
Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}לדוגמה, אם תיצור כספת עם הקוד 1234 והתכולה "Gold coins", לאחר מכן תנסה את הקוד 0000, תשנה את הקוד ל-5678 ותנסה את 5678, הפלט יהיה:
Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coinsתקבל חמישה קלטים: הקוד ההתחלתי, התכולה, קוד הניסיון הראשון, הקוד החדש שיש להגדיר וקוד הניסיון השני.
נסו בעצמכם
mod locker;
use locker::Locker;
fn main() {
// קראו את הקלטים
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let initial_code: u32 = input.trim().parse().expect("Invalid number");
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let contents = input.trim().to_string();
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let first_attempt: u32 = input.trim().parse().expect("Invalid number");
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let new_code: u32 = input.trim().parse().expect("Invalid number");
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let second_attempt: u32 = input.trim().parse().expect("Invalid number");
// TODO: צרו Locker חדש עם initial_code ו-contents
// TODO: נסו לקבל את contents באמצעות הקוד first_attempt
// הדפיסו: "Attempt with {code}: {result}"
// TODO: שנו את הקוד של הארונית ל-new_code
// הדפיסו: "Code changed"
// TODO: נסו לקבל את contents באמצעות הקוד second_attempt
// הדפיסו: "Attempt with {code}: {result}"
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין