Menu
Coddy logo textTech

Özet - Güvenli Kasa

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 61.

challenge icon

Görev

Kolay

Kapsülleme hakkında öğrendiğin her şeyi bir araya getiren güvenli bir kilitli dolap sistemi oluşturalım! Dolabın, içindekileri gizli bir kodun arkasında koruyacak: içindekileri yalnızca kodu bilen biri görebilir.

Kodunu düzenlemek için iki dosya oluşturacaksın:

  • locker.rs: İki özel alana sahip bir Locker yapısı tanımla: code (u32) ve contents (String). Yapı herkese açık olmalı, ancak dolabın güvenliğini korumak için her iki alan da özel kalmalıdır. Şunları uygula:
    • Başlangıç kodunu ve içeriği alan bir new kurucusu
    • Dolabın kodunun değiştirilmesine olanak tanıyan bir set_code metodu
    • Bir kod denemesi alan get_contents metodu; kod dolabın koduyla eşleşirse içeriği döndürmeli, aksi takdirde "Access denied" döndürmeli
  • main.rs: locker modülünü dahil et, bir dolap oluştur ve hem doğru hem de yanlış kodlarla içeriğe erişmeyi deneyerek güvenlik özelliklerini göster.

get_contents metodu bir String döndürmelidir: kod doğru olduğunda gerçek içeriği, yanlış olduğunda ise erişim reddi mesajını döndürmelidir. Bu, özel verileri açığa çıkarmadan önce erişimi doğrulayan koşullu alıcındır.

Çıktın tam olarak şu biçimi izlemelidir:

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

Örneğin, 1234 koduna ve "Gold coins" içeriğine sahip bir dolap oluşturur, ardından 0000 kodunu dener, kodu 5678 olarak değiştirir ve 5678 kodunu denersen çıktı şöyle olur:

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

Beş girdi alacaksın: başlangıç kodu, içerik, ilk deneme kodu, ayarlanacak yeni kod ve ikinci deneme kodu.

Kendin dene

mod locker;

use locker::Locker;

fn main() {
    // Girdileri oku
    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: initial_code ve contents ile yeni bir Locker oluştur

    // TODO: first_attempt kodu ile contents almayı dene
    // Yazdır: "Attempt with {code}: {result}"

    // TODO: Locker kodunu new_code olarak değiştir
    // Print: "Code changed"

    // TODO: second_attempt kodu ile contents almayı dene
    // Yazdır: "Attempt with {code}: {result}"
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi