Menu
Coddy logo textTech

סיכום – מנהל גן החיות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 48 מתוך 61.

challenge icon

אתגר

קל

בואו נבנה מנהל גן חיות שמשלב את כל המושגים שלמדת על אובייקטים של תכונות! תיצור מערכת שבה אפשר לאחסן אוסף אחד של בעלי חיים שונים, שלכל אחד מהם קול ייחודי משלו, ולגרום להם לדבר בזה אחר זה.

תארגן את הקוד שלך בשני קבצים:

  • animals.rs: הגדר תכונה ציבורית Speak עם מתודה speak שמקבלת &self ומחזירה String. לאחר מכן צור שלוש מחלקות מבנה ציבוריות, Dog, Cat ו-Bird, שלכל אחת מהן שדה ציבורי name (String). ממש את התכונה Speak עבור כל בעל חיים, עם הקולות האופייניים לו:
    • Dog אמור להחזיר {name} says: Woof!
    • Cat אמור להחזיר {name} says: Meow!
    • Bird אמור להחזיר {name} says: Tweet!
  • main.rs: כלול את מודול בעלי החיים שלך וצור גן חיות! בנה Vec<Box<dyn Speak>> שמכיל אחד מכל סוג של בעל חיים, תוך שימוש בקלטים שסופקו. הוסף אותם לפי הסדר: קודם Dog, אחר כך Cat, ולבסוף Bird. לבסוף, עבור על גן החיות שלך והדפס את הקול של כל בעל חיים בשורה משלו.

האתגר הזה מדגים את העוצמה האמיתית של אובייקטים של תכונות: שלושה סוגים שונים לחלוטין של בעלי חיים שחיים יחד באוסף אחד, וכל אחד מהם מגיב לקריאה זהה ל-speak() בהתנהגות הייחודית שלו.

הפלט שלך אמור להציג את בעלי החיים מדברים לפי הסדר:

{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!

לדוגמה, עם הקלטים Rex, Whiskers ו-Tweety:

Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!

תקבל שלושה קלטים: שם הכלב, שם החתול ושם הציפור.

נסו בעצמכם

mod animals;

use animals::{Speak, Dog, Cat, Bird};

fn main() {
    // קרא קלט עבור שמות בעלי החיים
    let mut dog_name = String::new();
    std::io::stdin().read_line(&mut dog_name).expect("Failed to read line");
    let dog_name = dog_name.trim().to_string();

    let mut cat_name = String::new();
    std::io::stdin().read_line(&mut cat_name).expect("Failed to read line");
    let cat_name = cat_name.trim().to_string();

    let mut bird_name = String::new();
    std::io::stdin().read_line(&mut bird_name).expect("Failed to read line");
    let bird_name = bird_name.trim().to_string();

    // TODO: צור Vec<Box<dyn Speak>> בשם zoo
    // הוסף את בעלי החיים לפי הסדר: קודם Dog, אחר כך Cat, ולבסוף Bird

    // TODO: עבור על zoo והדפס את הקול של כל בעל חיים
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Rust אונליין