Menu
Coddy logo textTech

Özet - Güvenli Kasa

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama 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ı gizlilik kullanan bir Vault sınıfı oluşturalım! Vault, yalnızca doğru parola sağlanarak erişilebilen gizli içerikleri barındıracak.

Kodunu iki dosyaya ayıracaksın:

  • Vault.lua: Hem içeriğin hem de parolanın kurucu içindeki yerel değişkenlerde saklandığı bir sınıf oluştur: dışarıdan erişime tamamen kapalı olsun. :new(contents, password) kurucusu 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 parolanın saklanan parolayla 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ü içe aktar ve üç girdi oku: saklanacak gizli içerik, ayarlanacak parola ve bir parola denemesi. İçerik ve parolayla bir vault oluştur, ardından denenen parolayla onu açmayı dene ve sonucu yazdır. Ayrıca vault.contents öğesine doğrudan erişmeyi deneyip elde ettiğin değeri yazdırarak içeriğin gerçekten gizli olduğunu göster.

Üç girdi alacaksın:

  1. Vault'ta saklanacak gizli içerik
  2. Vault'u koruyacak parola
  3. Vault'u açmayı denemek için kullanılacak parola

Çıktın 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 fikir, hem contents hem de password değerlerinin yalnızca kurucunun içindeki yerel değişkenler olarak var olmasıdır. :open() metodu bunlara closure aracılığıyla erişebilir, ancak başka hiçbir şey erişemez; vault.contents, vault._contents veya vault.password bile. İşte gerçek kapsülleme budur!

Kendin dene

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

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

-- TODO: contents ve password ile bir vault oluştur

-- TODO: attempted password ile vault'ı açmayı dene

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

-- TODO: vault.contents öğesine doğrudan erişmeyi dene ve ne aldığını yazdır
-- Print in the format: "Direct access: {whatYouGetFromVaultContents}"

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi