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 (encapsulation) hakkında öğrendiğiniz her şeyi bir araya getiren güvenli bir dolap sistemi inşa edelim! Dolabınız, içeriğini gizli bir kodun arkasında koruyacak; yalnızca kodu bilen biri içeride ne olduğunu görebilecek.

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

  • locker.rs: İki özel (private) alana sahip bir Locker yapısı (struct) tanımlayın: code (u32) ve contents (String). Yapı genel (public) olmalı, ancak dolabın güvenliğini korumak için her iki alan da özel kalmalıdır. Şunları uygulayın:
    • Başlangıç kodunu ve içeriği alan bir new yapıcı metodu (constructor)
    • Dolabın kodunun değiştirilmesine izin veren bir set_code metodu
    • Denenen bir kodu alan bir get_contents metodu; eğer kod dolabın koduyla eşleşirse içeriği döndürün; aksi takdirde "Access denied" döndürün
  • main.rs: Dolap modülünüzü dahil edin, bir dolap oluşturun ve hem doğru hem de yanlış kodlarla içeriğe erişmeye çalışarak güvenlik özelliklerini gösterin.

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

Çıktınız tam olarak şu formatta olmalıdır:

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

Örneğin, 1234 kodu ve "Gold coins" içeriğiyle bir dolap oluşturursanız, ardından 0000 kodunu dener, kodu 5678 olarak değiştirir ve 5678 kodunu denerseniz, çıktı şöyle olacaktır:

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

Beş girdi alacaksınız: 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şturun

    // TODO: first_attempt kodu ile içeriği almayı deneyin
    // Yazdır: "Attempt with {code}: {result}"

    // TODO: Kasa kodunu new_code olarak değiştirin
    // Yazdır: "Code changed"

    // TODO: second_attempt kodu ile içeriği almayı deneyin
    // Yazdır: "Attempt with {code}: {result}"
}

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