Zusammenfassung – Sicherer Tresor
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 48 von 70.
Aufgabe
EinfachLassen Sie uns eine Vault-Klasse erstellen, die Closure-basierte Privatsphäre nutzt, um ein wirklich sicheres Speichersystem zu schaffen! Der Tresor wird geheime Inhalte enthalten, auf die nur durch Angabe des richtigen Passworts zugegriffen werden kann.
Sie werden Ihren Code auf zwei Dateien aufteilen:
Vault.lua: Erstellen Sie eine Klasse, in der sowohl der Inhalt als auch das Passwort in lokalen Variablen innerhalb des Konstruktors gespeichert werden – völlig verborgen vor externem Zugriff. Der Konstruktor:new(contents, password)sollte diese Werte in lokalen Variablen speichern und dann eine Methode direkt auf der Objektinstanz definieren::open(attemptedPassword)— prüft, ob das versuchte Passwort mit dem gespeicherten Passwort übereinstimmt. Wenn es korrekt ist, werden die geheimen Inhalte zurückgegeben. Wenn es falsch ist, wird"Access Denied"zurückgegeben.
main.lua: Binden Sie Ihr Vault-Modul ein und lesen Sie drei Eingaben: den zu speichernden geheimen Inhalt, das festzulegende Passwort und einen Passwortversuch. Erstellen Sie einen Tresor mit dem Inhalt und dem Passwort, versuchen Sie dann, ihn mit dem versuchten Passwort zu öffnen, und geben Sie das Ergebnis aus. Demonstrieren Sie außerdem, dass die Inhalte wirklich privat sind, indem Sie versuchen, direkt aufvault.contentszuzugreifen und ausgeben, was Sie erhalten.
Sie erhalten drei Eingaben:
- Der geheime Inhalt, der im Tresor gespeichert werden soll
- Das Passwort zum Schutz des Tresors
- Ein Passwortversuch, um den Tresor zu öffnen
Ihre Ausgabe sollte aus zwei Zeilen bestehen:
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}Wenn die Eingaben beispielsweise Gold Coins, secret123 und secret123 sind, sollte die Ausgabe wie folgt aussehen:
Result: Gold Coins
Direct access: nilWenn die Eingaben Diamond, mypass und wrongpass sind, sollte die Ausgabe wie folgt aussehen:
Result: Access Denied
Direct access: nilDie entscheidende Erkenntnis hierbei ist, dass sowohl contents als auch password nur als lokale Variablen innerhalb des Konstruktors existieren. Die Methode :open() kann über eine Closure auf sie zugreifen, aber sonst nichts – nicht einmal vault.contents, vault._contents oder vault.password. Das ist echte Kapselung!
Probier es selbst
-- Erfordert das Vault-Modul
local Vault = require('Vault')
-- Eingaben lesen
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: Erstelle einen Tresor mit dem Inhalt und dem Passwort
-- TODO: Versuche, den Tresor mit dem versuchten Passwort zu öffnen
-- TODO: Gib das Ergebnis im Format aus: "Result: {resultFromOpen}"
-- TODO: Versuche, direkt auf vault.contents zuzugreifen und gib aus, was du erhältst
-- Ausgabe im Format: "Direct access: {whatYouGetFromVaultContents}"
Alle Lektionen in Object Oriented Programming
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-Klasse2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik8Kapselung
NamenskonventionenClosures für private DatenZugriff über ClosuresSchreibgeschützte TabellenValidierungslogikZusammenfassung – Sicherer Tresor3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-Check