Menu
Coddy logo textTech

Özet - Güvenli Kasa

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 48 / 70.

challenge icon

Görev

Kolay

Gerçekten güvenli bir depolama sistemi oluşturmak için closure tabanlı gizliliği kullanan bir Vault sınıfı oluşturalım! Kasa, yalnızca doğru şifre sağlanarak erişilebilen gizli içerikleri barındıracaktır.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Vault.lua: Hem içeriğin hem de şifrenin yapıcı (constructor) içindeki yerel değişkenlerde saklandığı ve dış erişimden tamamen gizlendiği bir sınıf oluşturun. :new(contents, password) yapıcısı bu değerleri yerel değişkenlerde saklamalı, ardından doğrudan nesne örneği üzerinde bir metot tanımlamalıdır:
    • :open(attemptedPassword) — denenen şifrenin saklanan şifreyle eşleşip eşleşmediğini kontrol eder. Doğruysa, gizli içeriği döndürür. Yanlışsa, "Access Denied" döndürür.
  • main.lua: Vault modülünüzü dahil edin (require) ve üç girdi okuyun: saklanacak gizli içerik, belirlenecek şifre ve bir şifre denemesi. İçerik ve şifre ile bir kasa oluşturun, ardından denenen şifre ile kasayı açmaya çalışın ve sonucu yazdırın. Ayrıca, vault.contents özelliğine doğrudan erişmeye çalışarak ve ne aldığınızı yazdırarak içeriğin gerçekten gizli olduğunu kanıtlayın.

Üç girdi alacaksınız:

  1. Kasada saklanacak gizli içerik
  2. Kasayı korumak için şifre
  3. Kasayı açmayı denemek için bir şifre denemesi

Çıktınız iki satır olmalıdır:

Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}

Örneğin, girdiler Gold Coins, secret123 ve secret123 ise çıktı şöyle olmalıdır:

Result: Gold Coins
Direct access: nil

Girdiler Diamond, mypass ve wrongpass ise çıktı şöyle olmalıdır:

Result: Access Denied
Direct access: nil

Buradaki temel nokta, hem contents hem de password değişkenlerinin yalnızca yapıcı içindeki yerel değişkenler olarak var olmasıdır. :open() metodu bunlara closure (kapsam) yoluyla erişebilir, ancak başka hiçbir şey erişemez—vault.contents, vault._contents veya vault.password bile. İşte gerçek kapsülleme (encapsulation) budur!

Kendin dene

-- Vault modülünü dahil et
local Vault = require('Vault')

-- Girdileri oku
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()

-- TODO: İçerik ve şifre ile bir kasa (vault) oluşturun

-- TODO: Denenen şifre ile kasayı açmayı deneyin

-- TODO: Sonucu şu formatta yazdırın: "Result: {resultFromOpen}"

-- TODO: vault.contents değerine doğrudan erişmeyi deneyin ve ne aldığınızı yazdırın
-- Şu formatta yazdırın: "Direct access: {whatYouGetFromVaultContents}"

Object Oriented Programming bölümündeki tüm dersler