Menu
Coddy logo textTech

Recapitulação - Gerenciador de Zoológico

Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 48 de 61.

challenge icon

Desafio

Fácil

Vamos construir um gerenciador de zoológico que reúne todos os conceitos de objetos de trait que você aprendeu! Você criará um sistema onde diferentes animais — cada um com seu som único — podem ser armazenados em uma única coleção e feitos para falar um por um.

Você organizará seu código em dois arquivos:

  • animals.rs: Defina uma trait pública Speak com um método speak que recebe &self e retorna uma String. Em seguida, crie três structs públicas — Dog, Cat e Bird — cada uma com um campo público name (String). Implemente a trait Speak para cada animal com seus sons característicos:
    • Dog deve retornar "{name} says: Woof!"
    • Cat deve retornar "{name} says: Meow!"
    • Bird deve retornar "{name} says: Tweet!"
  • main.rs: Importe seu módulo de animais e crie um zoológico! Construa um Vec<Box<dyn Speak>> contendo um de cada tipo de animal usando as entradas fornecidas. Adicione-os na ordem: Dog primeiro, depois Cat, depois Bird. Por fim, itere pelo seu zoológico e imprima o som de cada animal em sua própria linha.

Este desafio demonstra o real poder dos objetos de trait — três tipos de animais completamente diferentes vivendo juntos em uma coleção, cada um respondendo à mesma chamada speak() com seu próprio comportamento único.

Sua saída deve exibir cada animal falando em ordem:

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

Por exemplo, com as entradas Rex, Whiskers e Tweety:

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

Você receberá três entradas: o nome do cachorro, o nome do gato e o nome do pássaro.

Experimente você mesmo

mod animals;

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

fn main() {
    // Lê a entrada para os nomes dos animais
    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: Crie um Vec<Box<dyn Speak>> chamado zoo
    // Adicione os animais na ordem: Dog primeiro, depois Cat, depois Bird

    // TODO: Itere pelo zoo e imprima o som de cada animal
}

Todas as lições de Object Oriented Programming