Özet - Güvenli Kasa
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 48 / 70.
Görev
KolayGerç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ıcavault.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:
- Vault'ta saklanacak gizli içerik
- Vault'u koruyacak parola
- 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: nilGirdiler Diamond, mypass ve wrongpass ise çıktı şöyle olmalıdır:
Result: Access Denied
Direct access: nilBuradaki 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
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi