Récapitulatif - Coffre-fort sécurisé
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 48 sur 70.
Défi
FacileConstruisons une classe Vault qui utilise la confidentialité basée sur les fermetures (closures) pour créer un système de stockage véritablement sécurisé ! Le coffre-fort contiendra un contenu secret qui ne pourra être consulté qu'en fournissant le mot de passe correct.
Vous organiserez votre code sur deux fichiers :
Vault.lua: Créez une classe où le contenu et le mot de passe sont stockés dans des variables locales à l'intérieur du constructeur — complètement cachés de tout accès extérieur. Le constructeur:new(contents, password)doit stocker ces valeurs dans des variables locales, puis définir une méthode directement sur l'instance de l'objet ::open(attemptedPassword)— vérifie si le mot de passe tenté correspond au mot de passe stocké. Si c'est correct, retourne le contenu secret. Si c'est incorrect, retourne"Access Denied".
main.lua: Importez votre module Vault et lisez trois entrées : le contenu secret à stocker, le mot de passe à définir et une tentative de mot de passe. Créez un coffre-fort avec le contenu et le mot de passe, puis essayez de l'ouvrir avec la tentative de mot de passe et affichez le résultat. Démontrez également que le contenu est véritablement privé en essayant d'accéder directement àvault.contentset en affichant ce que vous obtenez.
Vous recevrez trois entrées :
- Le contenu secret à stocker dans le coffre-fort
- Le mot de passe pour protéger le coffre-fort
- Une tentative de mot de passe pour essayer d'ouvrir le coffre-fort
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 clé ici est que contents et password n'existent qu'en tant que variables locales à l'intérieur du constructeur. La méthode :open() peut y accéder via une fermeture, mais rien d'autre ne le peut — pas même vault.contents, vault._contents, ou vault.password. C'est cela la véritable encapsulation !
Essayez vous-même
-- Requiert le module Vault
local Vault = require('Vault')
-- Lit les entrées
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: Créer un coffre-fort avec le contenu et le mot de passe
-- TODO: Essayer d'ouvrir le coffre-fort avec le mot de passe tenté
-- TODO: Afficher le résultat au format : "Result: {resultFromOpen}"
-- TODO: Essayer d'accéder directement à vault.contents et afficher ce que vous obtenez
-- Afficher au format : "Direct access: {whatYouGetFromVaultContents}"
Toutes les leçons de Object Oriented Programming
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 Rectangle2Modè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 formes