Menu
Coddy logo textTech

Özet - Güvenli Kasa

Coddy'nin Rust Journey'sinin Object Oriented Programming 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 locker sistemi oluşturalım! Locker'ın içeriğini gizli bir code'un arkasında koruyacak: yalnızca code'u bilen biri içeride ne olduğunu görebilecek.

Code'unu düzenlemek için iki dosya oluşturacaksın:

  • locker.rs: İki private alana sahip bir Locker struct'ı Define et: code (u32) ve contents (String). struct public olmalı, ancak locker'ın güvenliğini korumak için her iki alan da private kalmalı. Şunları Implement et:
    • initial code ve contents alan bir new constructor'ı
    • locker'ın code'unu değiştirmeye izin veren bir set_code method'u
    • denenen bir code alan get_contents method'u; bu code locker'ın code'u ile matches ise contents'i döndürmeli, aksi takdirde "Access denied" döndürmeli
  • main.rs: locker module'ünü içeri aktar, bir locker oluştur ve hem doğru hem de yanlış code'larla contents'e erişmeyi deneyerek güvenlik özelliklerini göster.

get_contents method'u, code doğru olduğunda gerçek contents'i veya yanlış olduğunda Access mesajını bir String olarak döndürmeli. Bu, private verileri açığa çıkarmadan önce Access'i doğrulayan koşullu getter'ındır.

Çıktın tam olarak şu formatı izlemeli:

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

Örneğin, 1234 code'u ve "Gold coins" contents'i ile bir locker oluşturur, ardından 0000 code'unu dener, code'u 5678 olarak Change eder ve 5678'i denersen çıktı şöyle olur:

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

Beş input alacaksın: initial code, contents, first attempt code, ayarlanacak new code ve second attempt code.

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}"
}

Object Oriented Programming bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi