Menu
CoddyTech

Rangkuman: Brankas Aman

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 48 dari 70.

challenge icon

Tantangan

Mudah

Mari 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 mengakses vault.contents secara langsung dan mencetak hasilnya.

Kamu akan menerima tiga input:

  1. Konten rahasia yang akan disimpan di vault
  2. Password untuk melindungi vault
  3. 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: nil

Jika input-nya adalah Diamond, mypass, dan wrongpass, output-nya harus seperti ini:

Result: Access Denied
Direct access: nil

Pemahaman 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

Latihan sendiri: Compiler Lua online