Approche Orienté Objet
Fermé
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
-
21 juil. 2017 à 01:03
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 juil. 2017 à 21:07
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 juil. 2017 à 21:07
A voir également:
- Approche 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
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
21 juil. 2017 à 12:11
21 juil. 2017 à 12:11
Bonjour,
Je ne pense pas que le problème soit lié à l'utilisation des classes time, car tu pourrais (devrais) te poser les même questions pour n'importe quelle classe, même si c'était des String ou d'autres objets "plus simples" en paramètre du constructeur.
Tout dépend en fait ce que tu veux faire et quelles valeurs sont censés représenter tes attributs.
Si tu fais
À l'opposé ce que l'on peut faire c'est mettre aucun paramètre au constructeur et donner des valeurs par défaut... si ça a un sens !
Par exemple, quand on fait une
Dans ton cas, il faut donc se demander, est-ce que tous les paramètres du constructeur ont du sens, ou est-ce que l'on ne peut pas en supprimer certains au profit de valeurs par défaut ?
On peut aussi faire des calculs dans un constructeur, on donne quand même des paramètres dans le constructeur et on fait des calculs pour déterminer les valeurs des attributs. Par exemple : tu donnes la date de début et de fin de l'appel, tu calcules la durée en faisant fin-début...
Remarque : LocalDateTime et Duration ne sont pas des classes extérieures, elles sont inclues dans l'API standard Java au même titre que String, ArrayList et 4000 autres classes et interfaces. On considère qu'une classe est "extérieure" à partir du moment où tu dois télécharger un jar complémentaire et l'attacher à ton programme, ce n'est pas le cas de java.time.
De plus, ce ne sont pas des classes si complexes que ça, elles ont plein de méthodes (comme String peut en avoir aussi par exemple) mais elles représentent des choses assez simples, assimilables à un entier (comme pour la classe Date) et les méthodes permettent de faire des calculs (addition, soustraction) sur ces entiers.
Par exemple pour faire le calcul fin-début dont je parlais tout à l'heure pour calculer une durée, tu as la méthode minus :
Du coup pour ton problème, tout dépend ce que tu veux faire avec ta classe, sachant que tu peux aussi avoir plusieurs constructeurs qui offrent plusieurs manières d'initialiser ton objet.
Je ne pense pas que le problème soit lié à l'utilisation des classes time, car tu pourrais (devrais) te poser les même questions pour n'importe quelle classe, même si c'était des String ou d'autres objets "plus simples" en paramètre du constructeur.
Tout dépend en fait ce que tu veux faire et quelles valeurs sont censés représenter tes attributs.
Si tu fais
this.callDate = callDate; this.callTiming = callTiming;c'est lors de l'appel du
new PhoneCall(callDate, callTiming)qu'il faudra passer les bonnes valeurs à l'objet, ce qui donne la liberté au code appelant (celui qui fait le new) de mettre ce qu'il veut comme valeurs, quitte à être complètement incohérent (date farfelue, durée négative, valeurs null, etc.)
À l'opposé ce que l'on peut faire c'est mettre aucun paramètre au constructeur et donner des valeurs par défaut... si ça a un sens !
Par exemple, quand on fait une
new ArrayList();c'est implicitement une liste vide qui ne contient aucun élément, le tableau de données qui représente la liste est donc initialisé avec un tableau vide.
Dans ton cas, il faut donc se demander, est-ce que tous les paramètres du constructeur ont du sens, ou est-ce que l'on ne peut pas en supprimer certains au profit de valeurs par défaut ?
On peut aussi faire des calculs dans un constructeur, on donne quand même des paramètres dans le constructeur et on fait des calculs pour déterminer les valeurs des attributs. Par exemple : tu donnes la date de début et de fin de l'appel, tu calcules la durée en faisant fin-début...
Remarque : LocalDateTime et Duration ne sont pas des classes extérieures, elles sont inclues dans l'API standard Java au même titre que String, ArrayList et 4000 autres classes et interfaces. On considère qu'une classe est "extérieure" à partir du moment où tu dois télécharger un jar complémentaire et l'attacher à ton programme, ce n'est pas le cas de java.time.
De plus, ce ne sont pas des classes si complexes que ça, elles ont plein de méthodes (comme String peut en avoir aussi par exemple) mais elles représentent des choses assez simples, assimilables à un entier (comme pour la classe Date) et les méthodes permettent de faire des calculs (addition, soustraction) sur ces entiers.
Par exemple pour faire le calcul fin-début dont je parlais tout à l'heure pour calculer une durée, tu as la méthode minus :
LocalDateTime debut = ..., fin = ...; Duration duree = fin.minus(debut);
Du coup pour ton problème, tout dépend ce que tu veux faire avec ta classe, sachant que tu peux aussi avoir plusieurs constructeurs qui offrent plusieurs manières d'initialiser ton objet.
22 juil. 2017 à 01:16
Voilà en gros l'idée sur quoi je voulais allé encore une fois je concedes mon absurdité sans équivalent que je viens de faire .
22 juil. 2017 à 05:41
Après je penses aussi que les appels de méthodes que j'ai faites ne sont sans doute pas ce que j'aurais du privilégié mais je préféré m'en assuré
22 juil. 2017 à 12:24
Les méthodes sont static, donc tu ne dois pas utiliser d'objet pour les appeler mais directement le nom de la classe : .
Cependant ici, il y a plus simple, ce serait de mettre dans ton constructeur les différentes valeurs que tu veux saisir, puis de t'en servir pour calculer tes attributs, ainsi l'appelant n'a pas besoin de savoir comment tu construit ton objet pour l'utiliser, il est inutile qu'il construise lui même l'objet LocalDateTime ou l'objet Duration, ce qui te laisse la liberté de changer l'implémentation sans impacter le client. Par exemple, je ne suis pas convaincu que stocker la durée soit pertinent, il paraît plus simple de stocker la date de fin, et calculer la durée à la demande.
Exemple :
Remarque : dans , tu as écris avec un 0 devant, c'est une notation en octale, pas en décimale. Pour 07 ça ne change rien, mais si tu écrivais par exemple 010 ce serait égal à 8, 0100 est égal à 64 etc.
22 juil. 2017 à 18:43
lors du premier appel d'une methode , la methode plusHours() n'était pas disponible pourtant c'est bien une méthode disponible de la class Duration dois - je en conclure que le premier appel de la methode doit être une méthode de class (static) ? voici mes class :
22 juil. 2017 à 21:07
Cela dépend du logiciel que tu utilises, mais parfois la vue des méthodes est limitée à celles qui sont compatibles avec le type de la variable que tu affectes.
Exemple, tu saisis l'éditeur peut ne proposer que les méthodes de l'objet dont le résultat est un , celles qui renvoient un autre type seront masquées ou alors listées plus loin dans la fenêtre.
Pour ton code, il y a des incohérences, par exemple l'usage de RATE. Normalement l'usage des noms en majuscules est limité aux constantes, or ici tu modifies sa valeur. De plus il est déclaré static mais est utilisé avec un contexte non-static comme dans qui est incorrect.
Plus largement je pense que tu devrais avoir (au moins) deux classes, une qui représente la durée de l'appel, et une autre qui calcule le montant, c'est dans cette deuxième classe que devrait apparaître ta notion de "rate".