Menu
Coddy logo textTech

Recapitulação - Cofre Seguro

Parte da seção Programação Orientada a Objetos do Journey de Rust da Coddy. Lição 13 de 61.

challenge icon

Desafio

Fácil

Vamos criar um sistema de armário seguro que reúne tudo o que você aprendeu sobre encapsulamento! Seu armário protegerá seu conteúdo por trás de um código secreto: somente quem conhece o código poderá ver o que está dentro.

Você criará dois arquivos para organizar seu código:

  • locker.rs: Defina uma Locker struct com dois campos private: code (u32) e contents (String). A struct deve ser public, mas ambos os campos devem permanecer private para proteger a segurança do armário. Implemente:
    • Um construtor new que recebe um código inicial e o conteúdo
    • Um set_code method que permite alterar o código do armário
    • Um get_contents method que recebe um código tentado; se ele corresponder ao código do armário, retorne o conteúdo; caso contrário, retorne "Access denied"
  • main.rs: Importe seu módulo do armário, crie um armário e demonstre seus recursos de segurança tentando acessar o conteúdo com códigos corretos e incorretos.

O get_contents method deve retornar uma String: o conteúdo real quando o código estiver correto ou a mensagem de acesso negado quando estiver incorreto. Este é seu getter condicional que valida o acesso antes de revelar dados private.

Sua saída deve seguir este formato exato:

Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}

Por exemplo, se você criar um armário com o código 1234 e o conteúdo "Gold coins", tentar o código 0000, alterar o código para 5678 e tentar 5678, a saída será:

Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coins

Você receberá cinco entradas: o código inicial, o conteúdo, o primeiro código tentado, o novo código a ser definido e o segundo código tentado.

Experimente você mesmo

mod locker;

use locker::Locker;

fn main() {
    // Ler entradas
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let contents = input.trim().to_string();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let first_attempt: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let new_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let second_attempt: u32 = input.trim().parse().expect("Invalid number");

    // TODO: Crie um novo Locker com initial_code e contents

    // TODO: Tente obter contents com o código first_attempt
    // Imprima: "Attempt with {code}: {result}"

    // TODO: Altere o código do locker para new_code
    // Print: "Code changed"

    // TODO: Tente obter contents com o código second_attempt
    // Imprima: "Attempt with {code}: {result}"
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Rust online