Podsumowanie — bezpieczny sejf
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 48 z 70.
Wyzwanie
ŁatwyZbudujmy klasę Vault, która wykorzystuje prywatność opartą na domknięciach, aby stworzyć naprawdę bezpieczny system przechowywania! Sejf będzie przechowywać poufną zawartość, do której można uzyskać dostęp tylko po podaniu prawidłowego hasła.
Rozmieścisz swój kod w dwóch plikach:
Vault.lua: Utwórz klasę, w której zarówno zawartość, jak i hasło są przechowywane w zmiennych lokalnych wewnątrz konstruktora — całkowicie ukryte przed dostępem z zewnątrz. Konstruktor:new(contents, password)powinien zapisać te wartości w zmiennych lokalnych, a następnie zdefiniować metodę bezpośrednio w instancji obiektu::open(attemptedPassword): sprawdza, czy podane hasło jest zgodne z zapisanym hasłem. Jeśli jest prawidłowe, zwraca poufną zawartość. Jeśli jest nieprawidłowe, zwraca"Access Denied".
main.lua: Załaduj moduł Vault i wczytaj trzy dane wejściowe: poufną zawartość do przechowania, hasło do ustawienia i próbę podania hasła. Utwórz sejf z zawartością i hasłem, a następnie spróbuj go otworzyć, podając hasło, i wypisz wynik. Pokaż też, że zawartość jest naprawdę prywatna, próbując uzyskać do niej bezpośredni dostęp przezvault.contentsi wypisując to, co otrzymasz.
Otrzymasz trzy dane wejściowe:
- Poufną zawartość do przechowania w sejfie
- Hasło chroniące sejf
- Próbę podania hasła, aby otworzyć sejf
Wynik powinien składać się z dwóch wierszy:
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}Na przykład, jeśli dane wejściowe to Gold Coins, secret123 i secret123, wynikiem powinno być:
Result: Gold Coins
Direct access: nilJeśli dane wejściowe to Diamond, mypass i wrongpass, wynikiem powinno być:
Result: Access Denied
Direct access: nilKluczowe jest to, że zarówno contents, jak i password istnieją wyłącznie jako zmienne lokalne wewnątrz konstruktora. Metoda :open() może uzyskać do nich dostęp za pośrednictwem domknięcia, ale nic innego nie może tego zrobić — nawet vault.contents, vault._contents ani vault.password. To prawdziwa enkapsulacja!
Spróbuj swoich sił
-- Załaduj moduł Vault
local Vault = require('Vault')
-- Odczytaj dane wejściowe
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: Utwórz sejf z podaną zawartością i hasłem
-- TODO: Spróbuj otworzyć sejf za pomocą podanego hasła
-- TODO: Wypisz wynik w formacie: "Result: {resultFromOpen}"
-- TODO: Spróbuj uzyskać bezpośredni dostęp do vault.contents i wypisz otrzymaną wartość
-- Wypisz w formacie: "Direct access: {whatYouGetFromVaultContents}"
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online