Test bancaire final
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 25 sur 70.
Défi
FacileFélicitations pour avoir créé un système complet de banque numérique ! Votre classe Account gère désormais les dépôts, les retraits, les vérifications de solde, l’identification des comptes et les transferts entre comptes. Mettons tout cela à l’épreuve avec un scénario bancaire réaliste impliquant plusieurs comptes.
Dans ce défi final, vous allez simuler une petite banque avec trois clients effectuant diverses transactions. Cela vérifiera que toutes vos méthodes fonctionnent correctement ensemble et que les comptes conservent réellement un état indépendant.
Vos deux fichiers :
Account.lua: votre classe Account complète avec toutes les fonctionnalités que vous avez développées au cours de ce projet (constructeur avec ID, deposit, withdraw, getBalance, __tostring et transfer).main.lua: un script de simulation qui crée plusieurs comptes et exécute une série de transactions entre eux.
Vous recevrez six entrées :
- ID du compte 1
- ID du compte 2
- ID du compte 3
- Dépôt initial du compte 1
- Dépôt initial du compte 2
- Dépôt initial du compte 3
Dans votre fichier principal, simulez la journée bancaire suivante :
- Créer trois comptes avec les ID donnés
- Déposer les montants initiaux sur chaque compte correspondant
- Le compte 1 transfère 100 au compte 2
- Le compte 2 transfère 150 au compte 3
- Le compte 3 transfère 50 au compte 1
- Le compte 1 tente de transférer 1000 au compte 3 (cela doit échouer)
- Afficher les trois comptes dans l’ordre (compte 1, puis 2, puis 3)
Par exemple, si les entrées sont A001, A002, A003, 500, 300 et 200, la sortie devrait être :
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Suivons le déroulement : le compte 1 commence avec 500, transfère 100 au compte 2 (il lui reste alors 400), puis reçoit 50 du compte 3 (il dispose alors de 450). Le compte 2 commence avec 300, reçoit 100 (il dispose alors de 400), puis transfère 150 au compte 3 (il lui reste alors 250). Le compte 3 commence avec 200, reçoit 150 (il dispose alors de 350), puis transfère 50 au compte 1 (il lui reste alors 300). Le transfert final de 1000 échoue, car le compte 1 ne dispose que de 450.
Essayez vous-même
-- Requiert le module Account
local Account = require('Account')
-- Lit les six entrées
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- Crée trois comptes avec des identifiants
-- TODO: créer account1, account2, account3 en utilisant Account:new()
-- Dépose les montants initiaux dans chaque compte respectif
-- TODO: déposer initialDeposit1 dans account1, initialDeposit2 dans account2, initialDeposit3 dans account3
-- Le compte 1 transfère 100 au compte 2
-- TODO: account1:transfer(account2, 100)
-- Le compte 2 transfère 150 au compte 3
-- TODO: account2:transfer(account3, 150)
-- Le compte 3 transfère 50 au compte 1
-- TODO: account3:transfer(account1, 50)
-- Le compte 1 tente de transférer 1000 au compte 3 (cela devrait échouer)
-- TODO: account1:transfer(account3, 1000)
-- Affiche les trois comptes dans l'ordre
-- TODO: afficher account1, account2, account3
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