Rangkuman: Brankas Aman
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 48 dari 70.
Tantangan
MudahMari kita buat Vault class yang menggunakan privasi berbasis closure untuk membuat sistem penyimpanan yang benar-benar aman! Vault ini akan menyimpan konten rahasia yang hanya bisa diakses dengan memberikan password yang benar.
Kamu akan mengatur kodemu dalam dua file:
Vault.lua: Buat class yang menyimpan konten dan password dalam variabel lokal di dalam constructor, sehingga keduanya benar-benar tersembunyi dari akses luar. Constructor:new(contents, password)harus menyimpan nilai-nilai ini dalam variabel lokal, lalu mendefinisikan method langsung pada instance object::open(attemptedPassword): memeriksa apakah password yang dicoba cocok dengan password yang tersimpan. Jika cocok, fungsi ini mengembalikan konten rahasia. Jika tidak cocok, fungsi ini mengembalikan"Access Denied".
main.lua: Muat module Vault dan baca tiga input: konten rahasia yang akan disimpan, password yang akan ditetapkan, dan percobaan password. Buat vault dengan konten dan password tersebut, lalu coba buka dengan password yang dicoba dan cetak hasilnya. Tunjukkan juga bahwa kontennya benar-benar bersifat privat dengan mencoba mengaksesvault.contentssecara langsung dan mencetak hasilnya.
Kamu akan menerima tiga input:
- Konten rahasia yang akan disimpan di vault
- Password untuk melindungi vault
- Percobaan password untuk membuka vault
Output-mu harus terdiri dari dua baris:
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}Misalnya, jika input-nya adalah Gold Coins, secret123, dan secret123, output-nya harus seperti ini:
Result: Gold Coins
Direct access: nilJika input-nya adalah Diamond, mypass, dan wrongpass, output-nya harus seperti ini:
Result: Access Denied
Direct access: nilPemahaman pentingnya adalah bahwa contents dan password hanya ada sebagai variabel lokal di dalam constructor. Method :open() dapat mengaksesnya melalui closure, tetapi tidak ada bagian lain yang bisa mengaksesnya, bahkan vault.contents, vault._contents, atau vault.password. Inilah enkapsulasi yang sesungguhnya!
Coba sendiri
-- Muat module Vault dengan require
local Vault = require('Vault')
-- Baca input
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: Buat vault dengan isi dan kata sandi
-- TODO: Coba buka vault dengan kata sandi yang dicoba
-- TODO: Cetak hasilnya dengan format: "Result: {resultFromOpen}"
-- TODO: Coba akses vault.contents secara langsung dan cetak nilai yang kamu dapat
-- Cetak dengan format: "Direct access: {whatYouGetFromVaultContents}"
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki BentukLatihan sendiri: Compiler Lua online