Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 09.1 — Declaração de Struct com Campos Nomeados e Instanciação

Contexto: Declaração de Struct com Campos Nomeados e Instanciação no contexto de Structs, Tuplas e Métodos com impl.

Requisitos de Execução:

  1. Criar struct Usuario com campos nome, email e ativo.

Resultado Esperado

Struct instanciada e acessada no escopo principal.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_1_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Structs, Tuplas e Métodos com impl
🔑 Gabarito de Código & Solução Comentada
// structs.rs
struct Usuario {
    nome: String,
    email: String,
    ativo: bool,
}

fn main() {
    let u = Usuario {
        nome: String::from("Carlos"),
        email: String::from("carlos@empresa.com"),
        ativo: true,
    };
    println!("Usuario: {} ({})", u.nome, u.email);
}

🔍 Nível 2: Prática

Problema 09.2 — Implementação de Métodos e Funções Associadas (impl e Construtores ::new)

Contexto: Implementação de Métodos e Funções Associadas (impl e Construtores ::new) no contexto de Structs, Tuplas e Métodos com impl.

Requisitos de Execução:

  1. Implementar método construtor Retangulo::new(l, a) e método de instância area(&self).

Resultado Esperado

Métodos associados e construtor idiomático invocados com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_2_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Structs, Tuplas e Métodos com impl
🔑 Gabarito de Código & Solução Comentada
// struct_methods.rs
struct Retangulo { largura: u32, altura: u32 }

impl Retangulo {
    fn new(largura: u32, altura: u32) -> Self {
        Self { largura, altura }
    }
    fn area(&self) -> u32 {
        self.largura * self.altura
    }
}

fn main() {
    let ret = Retangulo::new(10, 4);
    println!("Area: {} m2", ret.area());
}

⚡ Nível 3: Integração

Problema 09.3 — Tuplas Estruturadas (Tuple Structs) e Structs Unitárias

Contexto: Tuplas Estruturadas (Tuple Structs) e Structs Unitárias no contexto de Structs, Tuplas e Métodos com impl.

Requisitos de Execução:

  1. Criar tuple struct Cor(u8, u8, u8) e struct unitária MarcadorAuditoria.

Resultado Esperado

Tipagem forte de tuplas estruturadas garantindo semântica de tipos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_3_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Structs, Tuplas e Métodos com impl
🔑 Gabarito de Código & Solução Comentada
// tuple_structs.rs
struct Cor(u8, u8, u8);
struct MarcadorAuditoria;

fn main() {
    let preto = Cor(0, 0, 0);
    println!("RGB: ({}, {}, {})", preto.0, preto.1, preto.2);
}

🏆 Nível 4: Desafio Corporativo

Problema 09.4 — Padrão Builder para Construção Fluente de Objetos Complexos

Contexto: Padrão Builder para Construção Fluente de Objetos Complexos no contexto de Structs, Tuplas e Métodos com impl.

Requisitos de Execução:

  1. Implementar ServidorBuilder permitindo encadeamento fluente de métodos .host().porta().build().

Resultado Esperado

Padrão Builder fluente construindo configuração de servidor com validação final.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_4_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Structs, Tuplas e Métodos com impl
🔑 Gabarito de Código & Solução Comentada
// builder_pattern.rs
struct Servidor { host: String, porta: u16 }

struct ServidorBuilder { host: String, porta: u16 }

impl ServidorBuilder {
    fn new() -> Self { Self { host: "127.0.0.1".into(), porta: 8080 } }
    fn porta(mut self, p: u16) -> Self { self.porta = p; self }
    fn build(self) -> Servidor { Servidor { host: self.host, porta: self.porta } }
}

fn main() {
    let srv = ServidorBuilder::new().porta(9000).build();
    println!("Servidor rodando em {}:{}", srv.host, srv.porta);
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos