Menu
Coddy logo textTech

Repaso - Gestor del zoológico

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 48 de 61.

challenge icon

Desafío

Fácil

¡Vamos a construir un gestor de zoológico que reúna todos los conceptos de objetos de rasgo (trait objects) que has aprendido! Crearás un sistema donde diferentes animales —cada uno con su propio sonido único— pueden almacenarse en una sola colección y hacerse hablar uno por uno.

Organizarás tu código en dos archivos:

  • animals.rs: Define un trait público Speak con un método speak que tome &self y devuelva un String. Luego crea tres structs públicos —Dog, Cat y Bird— cada uno con un campo público name (String). Implementa el trait Speak para cada animal con sus sonidos característicos:
    • Dog debe devolver "{name} says: Woof!"
    • Cat debe devolver "{name} says: Meow!"
    • Bird debe devolver "{name} says: Tweet!"
  • main.rs: ¡Importa tu módulo de animales y crea un zoológico! Construye un Vec<Box<dyn Speak>> que contenga uno de cada tipo de animal utilizando las entradas proporcionadas. Añádelos en orden: primero Dog, luego Cat y después Bird. Finalmente, itera a través de tu zoológico e imprime el sonido de cada animal en su propia línea.

Este desafío demuestra el verdadero poder de los objetos de rasgo: tres tipos de animales completamente diferentes conviviendo en una sola colección, cada uno respondiendo a la misma llamada speak() con su propio comportamiento único.

Tu salida debe mostrar a cada animal hablando en orden:

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

Por ejemplo, con las entradas Rex, Whiskers y Tweety:

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

Recibirás tres entradas: el nombre del perro, el nombre del gato y el nombre del pájaro.

Pruébalo tú mismo

mod animals;

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

fn main() {
    // Leer la entrada para los nombres de los animales
    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: Crear un Vec<Box<dyn Speak>> llamado zoo
    // Añadir los animales en orden: Dog primero, luego Cat, después Bird

    // TODO: Iterar a través de zoo e imprimir el sonido de cada animal
}

Todas las lecciones de Object Oriented Programming