Orienté Objet
Résolu
Jiko-java
Messages postés
186
Date d'inscription
Statut
Membre
Dernière intervention
-
Jiko-java Messages postés 186 Date d'inscription Statut Membre Dernière intervention -
Jiko-java Messages postés 186 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Voilà j'suis sûr un mini programme qui consiste à faire divers opérations à savoirs des retraits , des dépôts et des virements bancaires toute fois en arrivant à la méthode virements je présente quelques lacunes quant à la réflexion de la méthode. C'est un peut par hasard que j'ai réussi a y arriver mais j'ai du mal à comprendre comment le programme arrive a différencier qu'il faut faire un dépôt dans l'Objet 1 (compte1) et un retrait dans l'Objet 2 (compte2) .
public void retrait( double montantRetrait) { solde = solde - montantRetrait; } public void depot( double depotMontant) { solde = solde + depotMontant; } public void virement( CompteEnBanque compte, double montantEnvoyer) { compte.depot(montantEnvoyer); .retrait(montantEnvoyer); }
A voir également:
- Orienté Objet
- Vente objet occasion entre particulier - Guide
- Objet interdit en cabine ryanair - Guide
- Identifier un objet à partir d'une photo - Guide
- Mesurer un objet - Guide
- Vous devez disposer d'autorisations d'accès en lecture pour afficher les propriétés de cet objet - Guide
2 réponses
Salut,
Effectivement tu as mal fait, il ne faut pas appeler les 2 car ça veut dire que tu peux déposer et retirer en même temps.
Il ne fait que l'un des 2 car si tu déposes, je supposes que ta variable de retrait est à 0 donc solde - retrait = solde.
Mais modifies ton programme, il fonctionne mais ce n'est pas "propre".
Effectivement tu as mal fait, il ne faut pas appeler les 2 car ça veut dire que tu peux déposer et retirer en même temps.
Il ne fait que l'un des 2 car si tu déposes, je supposes que ta variable de retrait est à 0 donc solde - retrait = solde.
Mais modifies ton programme, il fonctionne mais ce n'est pas "propre".
Jiko-java
Messages postés
186
Date d'inscription
Statut
Membre
Dernière intervention
Merci Pour votre intervention , Mais le programme fonctionne quand j'depose un montant dans un compte1 , le montant déposé et automatiquement débité sur le compte2 C'est sa qui m'a interpellé justement. Mais c'est la seule méthode que j'ai trouvé j'vois pas d'autre alternative pour débiter un compte et en crédité un autre mis à part le fait de passé par des méthodes tels que le dépôt et le retrait.
Pierre1310
Messages postés
8564
Date d'inscription
Statut
Membre
Dernière intervention
651
Je ne comprends pas comment tu t'es débrouiller, tu utilises une interface web? Si oui, tu n'as qu'à faire un bouton pour créditer et un autre bouton pour débiter. Ou permettre un choix (cases à cocher, liste déroulante) permettant de choisir le mode.
Bonjour,
"comment le programme arrive a différencier qu'il faut faire un dépôt dans l'Objet 1 (compte1) et un retrait dans l'Objet 2 (compte2)"
Chaque objet disposes de son propre espace mémoire. Donc l'attribut
Quand tu fais
"j'vois pas d'autre alternative pour débiter un compte et en crédité un autre mis à part le fait de passé par des méthodes tels que le dépôt et le retrait"
Ce que tu as fait n'est pas faux techniquement, même si sémantiquement on ne fait pas vraiment un retrait/dépôt mais plutôt un crédit/débit.
Ce serait bien par contre de mieux nommer tes paramètres afin de lever l’ambiguïté de savoir qui envoie/reçoit l'argent.
La confiance n'exclut pas le contrôle
"comment le programme arrive a différencier qu'il faut faire un dépôt dans l'Objet 1 (compte1) et un retrait dans l'Objet 2 (compte2)"
Chaque objet disposes de son propre espace mémoire. Donc l'attribut
soldeest propre à chaque objet.
Quand tu fais
compte1.depot(42)cela va augmenter le solde enregistré dans la mémoire de l'objet compte1, et quand tu fais
compte2.retrait(42)cela va diminuer le solde enregistré dans la mémoire de l'objet compte2.
compte1.soldeet
compte2.soldesont deux valeurs différentes.
"j'vois pas d'autre alternative pour débiter un compte et en crédité un autre mis à part le fait de passé par des méthodes tels que le dépôt et le retrait"
Ce que tu as fait n'est pas faux techniquement, même si sémantiquement on ne fait pas vraiment un retrait/dépôt mais plutôt un crédit/débit.
Ce serait bien par contre de mieux nommer tes paramètres afin de lever l’ambiguïté de savoir qui envoie/reçoit l'argent.
public void debit(double montant) { solde -= montant; } public void credit(double montant) { solde += montant; } public void retrait(double montant) { debit(montant); } public void depot(double montant) { credit(montant); } public void virement(CompteEnBanque destinataire, double montant) { this.debit(montant); destinataire.credit(montant); }
La confiance n'exclut pas le contrôle
Merci pour votre intervention , mais par exemple Quand je fait la méthode virement et que j'utilise le compte passé en paramètre pour effectuer un débit et un crédit les 2 comptes dans ma classe tests qui sont impliqués dans la transaction ne débites et ne crédites pas comme il faut :
C'est pour sa que je comprends pas pourquoi on utilise compte pour fait un dépôt
Mais lorsque j'essaie d'utiliser le même compte passé en paramètre pour faire un retrait sa ne fonctionne pas.
du coup c'est sa qui accentue cette ambiguïté pourquoi on utilise le compte pour invoqué la méthode dépôt mais qu'on ne peut pas utiliser compte pour invoquer la méthode retrait. Et du coup puisque quand on utilise compte.depot(montant) comment mon programme sait que c'est un compte x qu'il faut crédité et un compte y qu'il faut débité alors que dans ma méthode virement on ne peut pas utiliser
public void virement( CompteEnBanque compte, double montant) { compte.depot(montant); compte.retrait(montant); }
C'est pour sa que je comprends pas pourquoi on utilise compte pour fait un dépôt
compte.depot(montant);
Mais lorsque j'essaie d'utiliser le même compte passé en paramètre pour faire un retrait sa ne fonctionne pas.
compte.retrait(montant);
du coup c'est sa qui accentue cette ambiguïté pourquoi on utilise le compte pour invoqué la méthode dépôt mais qu'on ne peut pas utiliser compte pour invoquer la méthode retrait. Et du coup puisque quand on utilise compte.depot(montant) comment mon programme sait que c'est un compte x qu'il faut crédité et un compte y qu'il faut débité alors que dans ma méthode virement on ne peut pas utiliser
compte.retrait(montant);
Pour faire un virement il faut deux comptes : celui qui envoie l'argent et celui qui le reçoit.
Si tu fais
Si tu regardes mon code
En gros si tu fais :
PS. Pour les balises de codes, c'est <code java> ton code </code>
Et non pas <code java></code> ton code <code java></code> comme tu fais...
Si tu fais
compte.depot(montant); compte.retrait(montant);c'est le même compte qui fait le dépôt et le retrait, donc c'est le même solde qui est tour à tour augmenté et diminué du même montant, ce qui s'annule.
Si tu regardes mon code
this.debit(montant); destinataire.credit(montant);tu as bien deux comptes,
thisqui est le compte courant, celui sur lequel tu appliques la méthode virement, qui va envoyer l'envoyer l'argent et voir son solde diminuer, et compte, que tu passes en paramètre, qui va recevoir l'argent et avoir son solde augmenté.
En gros si tu fais :
solde1.virement(solde2, montant)cela va faire l'équivalent de
solde1.debit(montant); solde2.credit(montant);
PS. Pour les balises de codes, c'est <code java> ton code </code>
Et non pas <code java></code> ton code <code java></code> comme tu fais...
Merci mais dans mon code suivant
on est d'accord qu'on sait qu'il y'a un compte qui va recevoir l'argent puisque on utilise le compte passé en paramètre et on invoque la méthode dépôt mais dans la méthode retrait il n'est invoqué par rien il n'est précédé que d'un ". " du coup comment ma class Test peut savoir qu'il faut effectuer un retrait si ma méthode retrait n'est même pas invoqué par un paramètre et comment le Test peut savoir qu'il faut effectuer un retrait dans un compte différent du compte ou il y'a eu un dépôt.
public void virement( CompteEnBanque compte, double montant) {
compte.depot(montant);
.retrait(montant);
}
on est d'accord qu'on sait qu'il y'a un compte qui va recevoir l'argent puisque on utilise le compte passé en paramètre et on invoque la méthode dépôt mais dans la méthode retrait il n'est invoqué par rien il n'est précédé que d'un ". " du coup comment ma class Test peut savoir qu'il faut effectuer un retrait si ma méthode retrait n'est même pas invoqué par un paramètre et comment le Test peut savoir qu'il faut effectuer un retrait dans un compte différent du compte ou il y'a eu un dépôt.
Déjà
Donc soit tu fais
.retrait(montant);c'est faux, tu ne peux pas mettre
.sans rien devant.
Donc soit tu fais
this.retrait(montant);où
thisreprésente l'objet courant (c'est à dire l'objet sur lequel on applique la méthode), soit tu mets directement
retrait(montant);et cela revient au même car
thisest implicite.