Ö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 (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 birLockeryapısı (struct) tanımlayın:code(u32) vecontents(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
newyapıcı metodu (constructor) - Dolabın kodunun değiştirilmesine izin veren bir
set_codemetodu - Denenen bir kodu alan bir
get_contentsmetodu; eğer kod dolabın koduyla eşleşirse içeriği döndürün; aksi takdirde"Access denied"döndürün
- Başlangıç kodunu ve içeriği alan bir
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 coinsBeş 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
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 Player