Problème de conception [JAVA] - Java - Programmation
Marsh Posté le 03-04-2003 à 13:28:51
noldor a écrit : J'aimerais pouvoir dériver cette classe Arbre pour en faire un arbre plus spécialisé qui ne pourrait contenir que des instances d'une sous classe donnée de Arbre |
qui ne pourrai contenir que des instances d'une sous-classe de Noeud, plutot, non ?
Marsh Posté le 03-04-2003 à 13:30:28
bobuse a écrit : |
Oui c'est ça, merci
J'ai édité
Marsh Posté le 03-04-2003 à 13:35:51
pour resume tu veux :
|
et une solution propre ...
et ben tu surcharges les méthodes d'ajout/acces aux noeuds de l'arbre, pour ne prendre en parametre que le type d'Objet que tu souhaite manipuler. Non ?
EDIT : non, en fait ca marche pas
Marsh Posté le 04-04-2003 à 09:21:00
une petite idée ? y a un pattern qui permettrait ce genre de choses ?
Marsh Posté le 04-04-2003 à 14:11:43
Pour un contrôle à la compilation, oui : ça s'appelle la généricité. Mais elle ne sera intégrée à Java qu'avec le JDK 1.5.
Sinon, tu peux toujours insérer des "assert(monNoeud instanceof NoeudMieux);" dans les méthodes de ArbreMieux qui attendent des arguments de type Noeud.
Marsh Posté le 04-04-2003 à 14:16:35
Ben, à mon avis, dans ce cas là, 'faut que t'utilise la délégation, pas l'héritage.
Je m'explique.
Dans ta classe Arbre, t'as forcément une méthode AddNoeud(Noeud leNoeud) qui prend une instance Noeud en paramètre. Si ta classe ArbreSpecial hérite d'arbre, elle comportera forcément cette meme méthode prenant elle aussi un Noeud en paramètre (surchargée ou non). La solution donc, c'est de ne pas héruter d'Arbre, mais d'utiliser une instance d'Arbre, attribut privé (ou protégé) de ArbreSpecial.
Marsh Posté le 04-04-2003 à 14:22:21
El_gringo a écrit : Ben, à mon avis, dans ce cas là, 'faut que t'utilise la délégation, pas l'héritage. |
vouii, je savais bien qu'il y avait une sol. (je l'avais deja utilise une fois).
kidimieux
Marsh Posté le 04-04-2003 à 14:31:14
El_gringo a écrit : Ben, à mon avis, dans ce cas là, 'faut que t'utilise la délégation, pas l'héritage. |
ah ben oui, c'est le mieux en effet !
Merci bcp
Marsh Posté le 04-04-2003 à 14:41:52
L'héritage c'est fait puor étendre le champ d'action, pas pour le restreindre (d'ou le mot clé "extends" d'ailleurs j'pense !)
Marsh Posté le 04-04-2003 à 14:43:33
El_gringo a écrit : L'héritage c'est fait puor étendre le champ d'action, pas pour le restreindre (d'ou le mot clé "extends" d'ailleurs j'pense !) |
Oui, mais des classes héritées peuvent aussi être des spécialisations de la classe mère
Marsh Posté le 04-04-2003 à 14:45:07
noldor a écrit : |
Ouais, c'est vrai. Pas besoin de chercher bien loin d'ailleurs : la classe Object par exemple !
Marsh Posté le 04-04-2003 à 14:45:54
Mais justement, la classe Object défini le minimum qu'est capable de faire toute classe. Tu vois ce que je veux dire ?
Marsh Posté le 04-04-2003 à 14:52:02
El_gringo a écrit : Ben, à mon avis, dans ce cas là, 'faut que t'utilise la délégation, pas l'héritage. |
Je la sent très mal ton affaire, ne serais-ce que parce que la plupart de mes arbre ne contienent pas de méthode pour ajouter un noeud.
on peut avoir un bout de code ?
Marsh Posté le 04-04-2003 à 15:15:29
nraynaud a écrit : |
Nan, mais j'donnais ça comme exemple. Ton arbre, il contient bien des noeuds, non !? (à moins que t'implémentes des arbres vides, mais là c'est autre chose ! ). Donc à un moment ou un autre, t'as bien une ou des méthodes qui prennent des instances de Noeud en paramètre, non ?
Et puis, le code c'est pas moi qui l'ai écrit, j'répond à la question de noldor, c'est tout !
Marsh Posté le 04-04-2003 à 15:30:04
El_gringo a écrit : Mais justement, la classe Object défini le minimum qu'est capable de faire toute classe. Tu vois ce que je veux dire ? |
Point vocabulaire : axe de spécialisation/axe de généralisation
Essaye de reformuler maintenant.
Marsh Posté le 04-04-2003 à 15:45:39
nraynaud a écrit : |
1 - ça avance à quoi au juste ton point vocabulaire ?
2 - tu pinailles alors que le sujet est clos, tout le monde à compris. (sauf toi !? )
Marsh Posté le 04-04-2003 à 17:29:50
C'est toujours intéressant d'utiliser le vocabulaire le plus précis possible, mon cher...
Marsh Posté le 04-04-2003 à 19:58:48
El_gringo a écrit : |
Ça m'étonnerai que le sujet soit clos dans ta tête vu comment tu définis l'affaire ; ou alors il va falloir faire une demande de réouverture de dossier.
Marsh Posté le 05-04-2003 à 02:21:19
ReplyMarsh Posté le 06-04-2003 à 18:20:06
benou a écrit : débat "is a" vs "use a". |
heu le "is a" ca correspond a l'heritage, et le "use a" a une association du genre aggrégation/composition ... donc il y a pas de versus
Marsh Posté le 06-04-2003 à 18:44:38
ben si : assez souvent, pour réutiliser les possibilités d'un objet, tu as le choix entre l'étendre ou l'agréger ...
exemple de débat : la classe java.util.Stack qui étend Vector, ce qui est une abération pour une pile ... ca a fait couler pas mal d'encre
Marsh Posté le 06-04-2003 à 23:23:02
benou a écrit : débat "is a" vs "use a". |
C'est pas compliqué si la question ce pose c'est délégation ; le mec qui est pas jouasse fera un adaptateur.
Par contre, quand ta hiérarchie est polluée tu te touches pour corriger.
Marsh Posté le 07-04-2003 à 08:48:59
Ouais, c'est bien ce que j'dis : le sujet est clos, depuis une quinzaine de posts d'ailleurs. Donc, à part que Raynaud m'emmerde avec je sais trop quels détails à la con, le sujet est clos.
Marsh Posté le 07-04-2003 à 09:59:37
benou a écrit : ben si : assez souvent, pour réutiliser les possibilités d'un objet, tu as le choix entre l'étendre ou l'agréger ... |
Ha ok, j'avais pas pigé !
Ben dans ce cas, je pense que quand on peut et que c'est justifié par une spécialisation, le "is a" est plus pratique
Marsh Posté le 03-04-2003 à 12:44:27
J'ai une classe Arbre qui contient des Noeud chainés entre eux
J'aimerais pouvoir dériver cette classe Arbre pour en faire un arbre plus spécialisé qui ne pourrait contenir que des instances d'une sous classe donnée de Noeud
Comment faire cela proprement, sans avoir à caster dans tous les sens ? Merci
Message édité par noldor le 03-04-2003 à 13:29:50