Menu
Coddy logo textTech

Repaso - Gestor del zoológico

Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 48 de 61.

challenge icon

Desafío

Fácil

¡Construyamos un gestor de zoológico que reúna todos los conceptos de objetos de rasgo que has aprendido! Crearás un sistema en el que diferentes animales, cada uno con su propio sonido único, puedan almacenarse en una sola colección y emitir su sonido uno por uno.

Organizarás tu código en dos archivos:

  • animals.rs: Define un rasgo público Speak con un método speak que reciba &self y devuelva un String. Después, crea tres estructuras públicas, Dog, Cat y Bird, cada una con un campo público name (String). Implementa el rasgo Speak para cada animal con sus sonidos característicos:
    • Dog debería devolver {name} says: Woof!
    • Cat debería devolver {name} says: Meow!
    • Bird debería devolver {name} says: Tweet!
  • main.rs: Incorpora tu módulo de animales y ¡crea un zoológico! Construye un Vec<Box<dyn Speak>> que contenga uno de cada tipo de animal usando las entradas proporcionadas. Añádelos en este orden: primero Dog, después Cat y después Bird. Finalmente, itera por 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 que viven juntos en una sola colección y responden a la misma llamada speak(), cada uno con su propio comportamiento único.

Tu salida debería mostrar a cada animal emitiendo su sonido 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: Crea un Vec<Box<dyn Speak>> llamado zoo
    // Añade los animales en orden: Dog primero, luego Cat, luego Bird

    // TODO: Itera a través del zoo e imprime el sonido de cada animal
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Rust online