Özet - Güvenli Kasa
Coddy'nin Rust Journey'sinin Object Oriented Programming 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 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 birLockerstruct'ı Define et:code(u32) vecontents(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
newconstructor'ı - locker'ın code'unu değiştirmeye izin veren bir
set_codemethod'u - denenen bir code alan
get_contentsmethod'u; bu code locker'ın code'u ile matches ise contents'i döndürmeli, aksi takdirde"Access denied"döndürmeli
- initial code ve contents alan bir
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 coinsBeş 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
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