Özet - Güvenli Kasa
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 61.
Görev
KolayKapsü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 birLockeryapısı tanımla:code(u32) vecontents(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
newkurucusu - Dolabın kodunun değiştirilmesine olanak tanıyan bir
set_codemetodu - Bir kod denemesi alan
get_contentsmetodu; kod dolabın koduyla eşleşirse içeriği döndürmeli, aksi takdirde"Access denied"döndürmeli
- Başlangıç kodunu ve içeriği alan bir
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 coinsBeş 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
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi