Özet - Güvenli Kasa
Coddy'nin Lua Journey'sinin Object Oriented Programming 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ı 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:
- Kasada saklanacak gizli içerik
- Kasayı korumak için şifre
- 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: nilGirdiler Diamond, mypass ve wrongpass ise çıktı şöyle olmalıdır:
Result: Access Denied
Direct access: nilBuradaki 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
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şisi