مراجعة - مدير حديقة الحيوان
جزء من قسم Object Oriented Programming في رحلة Rust على Coddy — الدرس 48 من 61.
التحدي
سهللنقم ببناء مدير حديقة حيوان يجمع كل مفاهيم كائنات السمات (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!"
- يجب أن يعيد Dog القيمة
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
1الأساليب والسلوك
مقدمة في كتل التنفيذمعامل Selfالأساليب القابلة للتعديلالدوال المرتبطةكتل تنفيذ متعددةتسلسل الأساليبمراجعة - إجراءات المستطيل4مشروع: حيوان أليف افتراضي
تعريف الحيوان الأليفإطعام الحيوان الأليف2التغليف والوحدات البرمجية
أساسيات الوحدات البرمجيةالكلمة المفتاحية Publicالحقول الخاصةدوال Gettersدوال Settersمراجعة - الخزانة الآمنة5الأنواع العامة (Generics)
الـ Structs العامةالـ Methods العامةأنواع عامة متعددةالـ Functions العامةمراجعة - Coordinate Point3التعدادات المتقدمة (Advanced Enums)
التعدادات مع البياناتالأساليب (Methods) في التعداداتمطابقة حالات البياناتمراجعة التعداد Optionملخص - التعداد Shape6تعريف الـ Traits
ما هي الـ Trait؟تنفيذ الـ Traitsالتنفيذات الافتراضيةتجاوز التنفيذات الافتراضيةالـ Traits مع المعاملاتملخص - مشغل الوسائط9كائنات Trait
الإرسال الديناميكي (Dynamic Dispatch)متجهات من الـ Traitsالتكرار عبر كائنات Traitمراجعة - مدير حديقة الحيوان