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ógico