مراجعة - مدير حديقة الحيوان
جزء من قسم 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مراجعة - مدير حديقة الحيوانتدرّب بنفسك: مترجم Rust عبر الإنترنت