Récapitulatif - Coffre-fort sécurisé
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 48 sur 70.
Défi
FacileConstruisons une classe Vault qui utilise la confidentialité basée sur une closure afin de créer un système de stockage véritablement sécurisé ! Le coffre contiendra des données secrètes auxquelles on ne pourra accéder qu’en fournissant le mot de passe correct.
Vous organiserez votre code sur deux fichiers :
Vault.lua: créez une classe où lescontentset lepasswordsont tous deux stockés dans des variableslocalà l’intérieur du constructeur : ils sont complètement masqués de tout accès extérieur. Le constructeur:new(contents, password)doit stocker ces valeurs dans des variableslocal, puis définir une méthode directement sur l’instance de l’objet ::open(attemptedPassword): vérifie si le mot de passe tenté correspond aupasswordenregistré. S’il est correct, renvoie lescontentssecrets. S’il est incorrect, renvoie"Access Denied".
main.lua: utilisezRequirepour charger votre moduleVaultet lisez trois entrées : lescontentssecrets à stocker, lepasswordà définir et une tentative de mot de passe. Créez un coffre avec lescontentset lepassword, puis essayez de l’ouvrir avec leattemptedPasswordet affichez leresult. Montrez également que lescontentssont véritablement privés en tentant d’accéder directement àvault.contentset en affichant ce que vous obtenez.
Vous recevrez trois entrées :
- Les
contentssecrets à stocker dans le coffre - Le
passworddestiné à protéger le coffre - Une tentative de
passwordpour essayer d’ouvrir le coffre
Votre sortie doit comporter deux lignes :
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}Par exemple, si les entrées sont Gold Coins, secret123 et secret123, la sortie doit être :
Result: Gold Coins
Direct access: nilSi les entrées sont Diamond, mypass et wrongpass, la sortie doit être :
Result: Access Denied
Direct access: nilL’idée essentielle est que contents et password existent uniquement en tant que variables local à l’intérieur du constructeur. La méthode :open() peut y accéder grâce à une closure, mais rien d’autre ne le peut, pas même vault.contents, vault._contents ou vault.password. C’est un véritable encapsulage !
Essayez vous-même
-- Requiert le module Vault
local Vault = require('Vault')
-- Lire les entrées
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: Créer un vault avec les contents et le password
-- TODO: Essayer d'ouvrir le vault avec le attemptedPassword
-- TODO: Afficher le résultat au format : "Result: {resultFromOpen}"
-- TODO: Essayer d'accéder à vault.contents directement et afficher ce que vous obtenez
-- Print in the format: "Direct access: {whatYouGetFromVaultContents}"
Toutes les leçons de Programmation orientée objet
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formesEntraînez-vous par vous-même : Compilateur Lua en ligne