Orienté Objet
Résolu/Fermé
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
-
Modifié par KX le 3/10/2016 à 18:40
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 3 oct. 2016 à 20:57
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 3 oct. 2016 à 20:57
A voir également:
- Orienté Objet
- Vente objet occasion entre particulier - Guide
- Identifier un objet à partir d'une photo - Guide
- Objet interdit en cabine ryanair - Guide
- Ce document fait l'objet d'un trop grand nombre de modifications ✓ - Forum Word
- Combien de temps restent les empreintes digitales sur un objet - Forum Vos droits sur internet
2 réponses
Pierre1310
Messages postés
8564
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
649
3 oct. 2016 à 12:10
3 oct. 2016 à 12:10
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".
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 3/10/2016 à 19:04
Modifié par KX le 3/10/2016 à 19:04
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
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
Modifié par KX le 3/10/2016 à 20:06
Modifié par KX le 3/10/2016 à 20:06
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);
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
3 oct. 2016 à 20:15
3 oct. 2016 à 20:15
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...
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
3 oct. 2016 à 20:41
3 oct. 2016 à 20:41
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.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
3 oct. 2016 à 20:46
3 oct. 2016 à 20:46
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.
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
3 oct. 2016 à 20:57
3 oct. 2016 à 20:57
Oui pardon je n'ai pas vérifié c'est bien retrait(montant); mais du coup lorsque je fait retrait(montant); mon programme considère il comme si cela représentait un objet courant ?
3 oct. 2016 à 13:15
3 oct. 2016 à 13:56