Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مدير حديقة الحيوان

جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 48 من 61.

challenge icon

التحدي

سهل

لنقم ببناء مدير حديقة حيوان يجمع كل مفاهيم كائنات السمات (trait objects) التي تعلمتها! ستقوم بإنشاء نظام حيث يمكن تخزين حيوانات مختلفة — لكل منها صوتها الفريد — في مجموعة واحدة وجعلها تتحدث واحداً تلو الآخر.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • animals.rs: قم بتعريف سمة (trait) عامة باسم Speak مع طريقة speak تأخذ &self وتعيد String. ثم أنشئ ثلاث هياكل (structs) عامة — 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. أخيراً، قم بالمرور عبر حديقة الحيوان الخاصة بك واطبع صوت كل حيوان في سطر مستقل.

يوضح هذا التحدي القوة الحقيقية لكائنات السمات (trait objects) — ثلاثة أنواع مختلفة تماماً من الحيوانات تعيش معاً في مجموعة واحدة، وكل منها يستجيب لنفس استدعاء 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 واطبع صوت كل حيوان
}

جميع دروس Object Oriented Programming