Rekap: Loker Aman
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 13 dari 61.
Tantangan
MudahMari buat sistem loker aman yang menggabungkan semua yang telah kamu pelajari tentang enkapsulasi! Lokermu akan melindungi isinya dengan kode rahasia: hanya orang yang mengetahui kode tersebut yang bisa melihat isinya.
Kamu akan membuat dua file untuk mengatur kodemu:
locker.rs: Definisikan structLockerdengan dua field privat:code(u32) dancontents(String). Struct ini harus bersifat publik, tetapi kedua field harus tetap privat untuk melindungi keamanan loker. Implementasikan:- Constructor
newyang menerima kode awal dan isi loker - Method
set_codeyang memungkinkan perubahan kode loker - Method
get_contentsyang menerima kode percobaan. Jika cocok dengan kode loker, kembalikan isinya; jika tidak, kembalikan"Access denied"
- Constructor
main.rs: Gunakan module loker, buat sebuah loker, lalu tunjukkan fitur keamanannya dengan mencoba mengakses isinya menggunakan kode yang benar dan salah.
Method get_contents harus mengembalikan String, baik isi sebenarnya saat kodenya benar maupun pesan penolakan saat kodenya salah. Ini adalah getter percabangan yang memvalidasi akses sebelum mengungkapkan data privat.
Output-mu harus mengikuti format persis berikut:
Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}Contohnya, jika kamu membuat loker dengan kode 1234 dan isi "Gold coins", lalu mencoba kode 0000, mengubah kode menjadi 5678, dan mencoba 5678, output-nya akan seperti berikut:
Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coinsKamu akan menerima lima input: kode awal, isi loker, kode percobaan pertama, kode baru yang akan ditetapkan, dan kode percobaan kedua.
Coba sendiri
mod locker;
use locker::Locker;
fn main() {
// Baca input
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: Buat Locker baru dengan initial_code dan contents
// TODO: Coba ambil contents dengan kode first_attempt
// Cetak: "Attempt with {code}: {result}"
// TODO: Ubah kode locker menjadi new_code
// Cetak: "Code changed"
// TODO: Coba ambil contents dengan kode second_attempt
// Cetak: "Attempt with {code}: {result}"
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online