Transférer des fonds
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 24 sur 70.
Défi
FacileVotre banque numérique est presque terminée ! La dernière fonctionnalité majeure est la possibilité de transférer de l'argent entre les comptes. C'est ici que votre conception orientée objet brille vraiment : un objet de compte peut interagir directement avec un autre objet de compte.
Vous allez ajouter une méthode :transfer(targetAccount, amount) qui déplace l'argent d'un compte à un autre. Réfléchissez à ce que cette opération implique réellement : il s'agit d'un retrait du compte source suivi d'un dépôt sur le compte cible. La beauté de la chose est que vous pouvez réutiliser les méthodes que vous avez déjà construites !
Continuez à construire sur vos fichiers existants :
Account.lua: Ajoutez une méthode:transfer(targetAccount, amount)à votre classe Account. Cette méthode doit tenter de retirer le montant deself, et en cas de succès, déposer ce montant dans letargetAccount. Si le retrait échoue (fonds insuffisants), le transfert ne doit pas avoir lieu. Conservez toutes vos fonctionnalités existantes (constructeur avec ID, deposit, withdraw, getBalance et __tostring).main.lua: Créez plusieurs comptes et démontrez les transferts entre eux, en montrant comment les soldes changent à travers différents objets de compte.
Vous recevrez cinq entrées :
- L'ID du premier compte
- L'ID du deuxième compte
- Le dépôt initial dans le premier compte
- Le montant du premier transfert (du compte 1 vers le compte 2)
- Le montant du deuxième transfert (du compte 1 vers le compte 2)
Dans votre fichier principal, créez deux comptes avec les ID donnés (tous deux commençant avec un solde de 0), déposez le montant initial dans le premier compte, puis tentez les deux transferts du premier compte vers le second. Après chaque tentative de transfert, affichez les deux comptes (le __tostring montrera leur état actuel).
Par exemple, si les entrées sont 101, 102, 500, 200, et 400, la sortie devrait être :
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200Le premier compte commence avec 500 après le dépôt. Le premier transfert de 200 réussit, laissant le compte 101 avec 300 et le compte 102 avec 200. Le deuxième transfert de 400 échoue car le compte 101 n'a que 300 — les deux soldes restent donc inchangés.
Essayez vous-même
-- Requiert le module Account
local Account = require('Account')
-- Lit les cinq entrées
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- Crée deux comptes avec des identifiants
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Dépose le montant initial dans le premier compte
account1:deposit(initialDeposit)
-- TODO: Tenter le premier transfert du compte1 vers le compte2
-- TODO: Afficher les deux comptes après le premier transfert
-- TODO: Tenter le second transfert du compte1 vers le compte2
-- TODO: Afficher les deux comptes après le second transfert
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