Menu
Coddy logo textTech

Podsumowanie – zarządzanie zoo

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 48 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy menedżera zoo, który łączy wszystkie poznane przez Ciebie koncepcje obiektów cech! Stworzysz system, w którym różne zwierzęta, każde z własnym, wyjątkowym głosem, można przechowywać w jednej kolekcji i sprawiać, by odzywały się jedno po drugim.

Rozmieścisz kod w dwóch plikach:

  • animals.rs: Zdefiniuj publiczną cechę Speak z metodą speak, która przyjmuje &self i zwraca String. Następnie utwórz trzy publiczne struktury: Dog, Cat i Bird, każdą z publicznym polem name (String). Zaimplementuj cechę Speak dla każdego zwierzęcia, używając charakterystycznych dla niego odgłosów:
    • Dog powinien zwracać {name} says: Woof!
    • Cat powinien zwracać {name} says: Meow!
    • Bird powinien zwracać {name} says: Tweet!
  • main.rs: Dodaj moduł zwierząt i utwórz zoo! Zbuduj kolekcję Vec<Box<dyn Speak>>, zawierającą po jednym zwierzęciu każdego typu, korzystając z podanych danych wejściowych. Dodaj je w kolejności: najpierw Dog, potem Cat, a następnie Bird. Na koniec przejdź przez swoje zoo i wypisz odgłos każdego zwierzęcia w osobnym wierszu.

To wyzwanie pokazuje prawdziwą moc obiektów cech: trzy zupełnie różne typy zwierząt żyją razem w jednej kolekcji, a każde z nich reaguje na to samo wywołanie speak() we właściwy sobie sposób.

Twój wynik powinien wyświetlać odgłosy zwierząt w podanej kolejności:

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

Na przykład dla danych wejściowych Rex, Whiskers i Tweety:

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

Otrzymasz trzy dane wejściowe: imię psa, imię kota i imię ptaka.

Spróbuj swoich sił

mod animals;

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

fn main() {
    // Wczytaj nazwy zwierząt
    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: Utwórz Vec<Box<dyn Speak>> o nazwie zoo
    // Dodaj zwierzęta w kolejności: najpierw Dog, potem Cat, a na końcu Bird

    // TODO: Przejdź po zoo i wypisz dźwięk wydawany przez każde zwierzę
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online