Recapitulação - Gerenciador de Zoológico
Parte da seção Object Oriented Programming do Journey de Rust da Coddy. Lição 48 de 61.
Desafio
FácilVamos 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úblicaSpeakcom um métodospeakque recebe&selfe retorna umaString. Em seguida, crie três structs públicas —Dog,CateBird— cada uma com um campo públiconame(String). Implemente a traitSpeakpara 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!"
- Dog deve retornar
main.rs: Importe seu módulo de animais e crie um zoológico! Construa umVec<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
1Métodos e Comportamento
Introdução a Blocos de ImplementaçãoO Parâmetro SelfMétodos MutáveisFunções AssociadasMúltiplos Blocos de ImplementaçãoEncadeamento de MétodosRecapitulação - Ações de Retângulo4Projeto: Pet Virtual
Definindo o PetAlimentando o Pet7Traits Padrão
A Trait DebugA Trait DisplayClone e CopyTraits de IgualdadeRecapitulação - Ponto Imprimível10Projeto: Sistema de Documentos
A Trait DrawComponente de Texto2Encapsulamento e Módulos
Fundamentos de MódulosA Palavra-chave PublicCampos PrivadosGettersSettersRecapitulação - Cofre Seguro5Genéricos
Structs GenéricasMétodos GenéricosMúltiplos Tipos GenéricosFunções GenéricasRecapitulação - Ponto de Coordenada8Traits como Restrições
Sintaxe de Restrições de TraitRestrições MúltiplasA Cláusula WhereRetornando Tipos com TraitsRecapitulação - Impressora Genérica11Padrões de Projeto em Rust
Padrão NewtypeComposiçãoA Trait DropFrom e IntoRecapitulação - Mock de Smart Pointer3Enums Avançados
Enums com DadosMétodos em EnumsCorrespondência de Variantes de DadosO Enum Option RevisitadoRecapitulação - Enum Shape6Definição de Traits
O que é uma Trait?Implementando TraitsImplementações PadrãoSobrescrevendo PadrõesTraits com ParâmetrosRecapitulação - Media Player9Objetos Trait
Despacho DinâmicoVetores de TraitsIterando Objetos TraitRecapitulação - Gerenciador de ZoológicoPratique por conta própria: Compilador de Rust online