Transférer des fonds
Fait partie de la section Programmation orientée objet 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 consiste à pouvoir transférer de l’argent entre les comptes. C’est ici que votre conception orientée objet montre vraiment toute sa puissance : un objet compte peut interagir directement avec un autre objet compte.
Vous allez ajouter une méthode :transfer(targetAccount, amount) qui déplace de l’argent d’un compte vers 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. L’avantage, c’est que vous pouvez réutiliser les méthodes que vous avez déjà créées !
Continuez à travailler 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 deselfet, en cas de réussite, déposer ce montant sur letargetAccount. Si le retrait échoue (fonds insuffisants), le transfert ne doit pas avoir lieu. Conservez toutes vos fonctionnalités existantes (constructeur avec ID, dépôt, retrait, getBalance et __tostring).main.lua: créez plusieurs comptes et montrez des transferts entre eux, en illustrant la façon dont les soldes changent entre différents objets compte.
Vous recevrez cinq entrées :
- ID du premier compte
- ID du deuxième compte
- Dépôt initial sur le premier compte
- Premier montant à transférer (du compte 1 vers le compte 2)
- Deuxième montant à transférer (du compte 1 vers le compte 2)
Dans votre fichier principal, créez deux comptes avec les ID fournis (tous deux ayant un solde initial de 0), déposez le montant initial sur le premier compte, puis tentez les deux transferts du premier compte vers le deuxième. Après chaque tentative de transfert, affichez les deux comptes (__tostring affichera leur état actuel).
Par exemple, si les entrées sont 101, 102, 500, 200 et 400, la sortie doit ê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 ne possède que 300 ; les deux soldes restent donc inchangés.
Essayez vous-même
-- Charger le module Account
local Account = require('Account')
-- Lire 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éer deux comptes avec des IDs
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Déposer le montant initial dans le premier compte
account1:deposit(initialDeposit)
-- TODO: Tenter le premier transfert de account1 vers account2
-- TODO: Afficher les deux comptes après le premier transfert
-- TODO: Tenter le second transfert de account1 vers account2
-- TODO: Afficher les deux comptes après le second transfert
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