Repaso - Casillero seguro
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy. Lección 13 de 61.
Desafío
FácilConstruyamos un sistema de locker seguro que reúna todo lo que has aprendido sobre la encapsulación. Tu Locker protegerá sus contents mediante un código secreto: solo alguien que conozca el código podrá ver qué hay dentro.
Crearás dos archivos para organizar tu código:
locker.rs: Define unLockerstructcon dosprivatefields:code(u32) ycontents(String). Elstructdebe serpublic, pero ambosfieldsdeben permanecerprivatepara proteger la seguridad delLocker. Implementa:- Un
newconstructorque reciba un códigoinitialycontents - Un
set_codemethodque permita cambiar el código delLocker - Un
get_contentsmethodque reciba un códigoattempted; si coincide con el código delLocker, devuelve loscontents; de lo contrario, devuelve"Access denied"
- Un
main.rs: Incorpora tu móduloLocker, crea unLockery demuestra sus funciones de seguridad intentando acceder a loscontentscon códigos correctos e incorrectos.
El get_contents method debe devolver un String: los contents reales cuando el código es correcto o el mensaje de denegación cuando es incorrecto. Este es tu getter condicional que valida el acceso antes de revelar datos private.
Tu salida debe seguir exactamente este formato:
Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}Por ejemplo, si creas un Locker con el código 1234 y los contents "Gold coins", después pruebas el código 0000, cambias el código a 5678 y pruebas 5678, la salida sería:
Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coinsRecibirás cinco entradas: el código initial, los contents, el primer código attempted, el nuevo código que se establecerá y el segundo código attempted.
Pruébalo tú mismo
mod locker;
use locker::Locker;
fn main() {
// Leer 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: Crea un nuevo Locker con initial_code y contents
// TODO: Intenta obtener contents con el código first_attempt
// Imprime: "Attempt with {code}: {result}"
// TODO: Cambia el código del locker a new_code
// Print: "Code changed"
// TODO: Intenta obtener contents con el código second_attempt
// Imprime: "Attempt with {code}: {result}"
}
Todas las lecciones de Object Oriented Programming
1Métodos y Comportamiento
Intro a Bloques de ImplementaciónEl Parámetro SelfMétodos MutablesFunciones AsociadasMúltiples Bloques de ImplementaciónEncadenamiento de MétodosResumen - Acciones de Rectángulo4Proyecto: Mascota virtual
Definir la mascotaAlimentar a la mascota7Traits estándar
El trait DebugEl trait DisplayClone y CopyTraits de igualdadResumen - Punto imprimible10Proyecto: Sistema de documentos
El Trait DrawComponente de texto2Encapsulamiento y módulos
Conceptos básicos de módulosLa palabra clave PublicCampos privadosGettersSettersRepaso - Casillero seguro5Genéricos
Estructuras genéricasMétodos genéricosMúltiples tipos genéricosFunciones genéricasResumen - Punto de coordenadas8Traits como límites
Sintaxis de límites de traitsLímites múltiplesLa cláusula whereRetornar tipos con traitsResumen: Impresora genérica11Patrones de diseño en Rust
Patrón NewtypeComposiciónEl Trait DropFrom e IntoResumen - Mock de Smart Pointer3Enums avanzados
Enums con datosMétodos en EnumsCoincidencia de variantes de datosEl Enum Option revisitadoResumen - Enum Shape6Definición de Traits
¿Qué es un Trait?Implementación de TraitsImplementaciones por defectoSobrescribir valores por defectoTraits con parámetrosResumen - Reproductor multimediaPractica por tu cuenta: Compilador de Rust online