Menu
Coddy logo textTech

Recapitulação - Gerenciador de Zoológico

Parte da seção Programação Orientada a Objetos do Journey de Rust da Coddy. Lição 48 de 61.

challenge icon

Desafio

Fácil

Vamos criar um gerenciador de zoológico que reúne todos os conceitos de objetos de trait que você aprendeu! Você criará um sistema no qual diferentes animais, cada um com seu próprio som único, possam ser armazenados em uma única coleção e emitir seus sons 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: Inclua seu módulo de animais e crie um zoológico! Construa um Vec<Box<dyn Speak>> contendo um animal de cada tipo usando as entradas fornecidas. Adicione-os na ordem: primeiro Dog, depois Cat e então Bird. Por fim, percorra seu zoológico e imprima o som de cada animal em sua própria linha.

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

Sua saída deve exibir cada animal emitindo seu som na 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() {
    // Leia 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 Programação Orientada a Objetos

Pratique por conta própria: Compilador de Rust online