Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2751 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Problème de conception

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Problème de conception

n°351403
noldor
Rockn'roll
Posté le 03-04-2003 à 12:44:27  profilanswer
 

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
mood
Publicité
Posté le 03-04-2003 à 12:44:27  profilanswer
 

n°351438
bobuse
Posté le 03-04-2003 à 13:28:51  profilanswer
 

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 ?

n°351439
noldor
Rockn'roll
Posté le 03-04-2003 à 13:30:28  profilanswer
 

bobuse a écrit :

 
qui ne pourrai contenir que des instances d'une sous-classe de Noeud, plutot, non ?

Oui c'est ça, merci
J'ai édité

n°351443
bobuse
Posté le 03-04-2003 à 13:35:51  profilanswer
 

pour resume tu veux :
 
 


Arbre                 Noeud
  |                     |
  +--ArbreMieux         +--NoeudMieux


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 :D


Message édité par bobuse le 03-04-2003 à 13:36:25
n°352280
noldor
Rockn'roll
Posté le 04-04-2003 à 09:21:00  profilanswer
 

une petite idée ? y a un pattern qui permettrait ce genre de choses ?

n°352769
BifaceMcLe​OD
The HighGlandeur
Posté le 04-04-2003 à 14:11:43  profilanswer
 

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.

n°352778
El_gringo
Posté le 04-04-2003 à 14:16:35  profilanswer
 

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.

n°352785
bobuse
Posté le 04-04-2003 à 14:22:21  profilanswer
 

El_gringo a écrit :

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.


vouii, je savais bien qu'il y avait une sol. (je l'avais deja utilise une fois).
kidimieux

n°352801
noldor
Rockn'roll
Posté le 04-04-2003 à 14:31:14  profilanswer
 

El_gringo a écrit :

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.

ah ben oui, c'est le mieux en effet !
Merci bcp :jap:

n°352813
El_gringo
Posté le 04-04-2003 à 14:41:52  profilanswer
 

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 !)

mood
Publicité
Posté le 04-04-2003 à 14:41:52  profilanswer
 

n°352819
noldor
Rockn'roll
Posté le 04-04-2003 à 14:43:33  profilanswer
 

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

n°352822
El_gringo
Posté le 04-04-2003 à 14:45:07  profilanswer
 

noldor a écrit :


Oui, mais des classes héritées peuvent aussi être des spécialisations de la classe mère


 
Ouais, c'est vrai. Pas besoin de chercher bien loin d'ailleurs : la classe Object par exemple !

n°352826
El_gringo
Posté le 04-04-2003 à 14:45:54  profilanswer
 

Mais justement, la classe Object défini le minimum qu'est capable de faire toute classe. Tu vois ce que je veux dire ?

n°352837
nraynaud
lol
Posté le 04-04-2003 à 14:52:02  profilanswer
 

El_gringo a écrit :

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.


 
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 ?

n°352895
El_gringo
Posté le 04-04-2003 à 15:15:29  profilanswer
 

nraynaud a écrit :


 
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 ?


 
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 ! :D). 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 !

n°352921
nraynaud
lol
Posté le 04-04-2003 à 15:30:04  profilanswer
 

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.


Message édité par nraynaud le 04-04-2003 à 15:31:37
n°352971
El_gringo
Posté le 04-04-2003 à 15:45:39  profilanswer
 

nraynaud a écrit :


 
Point vocabulaire : axe de spécialisation/axe de généralisation
 
Essaye de reformuler maintenant.


 
1 - ça avance à quoi au juste ton point vocabulaire ?
2 - tu pinailles alors que le sujet est clos, tout le monde à compris. (sauf toi !? :D)

n°353191
BifaceMcLe​OD
The HighGlandeur
Posté le 04-04-2003 à 17:29:50  profilanswer
 

C'est toujours intéressant d'utiliser le vocabulaire le plus précis possible, mon cher...

n°353254
nraynaud
lol
Posté le 04-04-2003 à 19:58:48  profilanswer
 

El_gringo a écrit :


2 - tu pinailles alors que le sujet est clos, tout le monde à compris. (sauf toi !? :D)


 
Ç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.

n°353453
benou
Posté le 05-04-2003 à 02:21:19  profilanswer
 

débat "is a" vs "use a".
 
je vote pour le "use a" !


---------------
ma vie, mon oeuvre - HomePlayer
n°354043
bobuse
Posté le 06-04-2003 à 18:20:06  profilanswer
 

benou a écrit :

débat "is a" vs "use a".
 
je vote pour le "use a" !


 :heink: 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  
 :??:


---------------
get amaroK plugin
n°354053
benou
Posté le 06-04-2003 à 18:44:38  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°354239
nraynaud
lol
Posté le 06-04-2003 à 23:23:02  profilanswer
 

benou a écrit :

débat "is a" vs "use a".
 
je vote pour le "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.

n°354312
El_gringo
Posté le 07-04-2003 à 08:48:59  profilanswer
 

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.

n°354361
bobuse
Posté le 07-04-2003 à 09:59:37  profilanswer
 

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 ...
 
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


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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Problème de conception

 

Sujets relatifs
[C] Problème graphique en CGros probleme avec un tableau
[Resolu (Merci MagicBuzz)] Problème pour lire un flux de byte en C#phplib problème
[Java + Linux] Il me manque des fichiers :(problème d'actualisation
[PHP]Probleme de download de fichier débugger moi STP ! c pr les pro ![HTML] Problème avec la balise <table>
probleme de fichier include[Java] Problème de conception lié aux interfaces
Plus de sujets relatifs à : [JAVA] Problème de conception


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR