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

  FORUM HardWare.fr
  Programmation
  Java

  Problème de conception ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de conception ?

n°1932433
singletonn​e
Posté le 16-10-2009 à 13:23:44  profilanswer
 

Hello,
 
Je débute en POO (avec Java donc), et je rencontre le problème suivant :
 
J'ai deux classes T1 et T2, et une classe mère T.
La plupart des méthodes de T1 et T2 sont quasiment identiques à un point près : dans ces méthodes, j'utilise soit un objet de type T1, soit un objet de type T2.
Vu que j'aimerais éviter la redondance de code, j'aimerais bien mettre ces méthodes directement dans ma classe T (qui est abstraite).
 
La seule "solution" que j'ai trouvé pour l'instant est de définir :

Code :
  1. abstract protected T newT();


dans ma classe T
 
Dans T1 je spécifie :

Code :
  1. protected T newT() {
  2.  return new T1();
  3. }


 
et dans T2 :

Code :
  1. protected T newT() {
  2.  return new T2();
  3. }


 
et dans mes méthodes, je fais donc :

Code :
  1. T monobjet = newT();


en résumé, j'ai juste besoin de créer un objet de même type (T1 ou T2) que l'objet courant.
(mon but est aussi d'éviter l'utilisation d'instanceOf)
 
Ma solution me semble être du vrai bricolage assez moche, donc si vous avez des idées/remarques... :)
 
Merci !

mood
Publicité
Posté le 16-10-2009 à 13:23:44  profilanswer
 

n°1932434
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-10-2009 à 13:26:16  profilanswer
 

une Factory ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1932630
cbeyls
Hail to the King, Baby
Posté le 16-10-2009 à 21:55:31  profilanswer
 

Si tu veux juste créer un objet de même type que la classe courante, tu fais déjà ce qu'il faut. Ce n'est pas du bricolage mais une factory method. Si T1 et T2 ont des constructeurs différents, tu devras de toutes façons avoir un code d'instanciation différent.
 
Tu peux travailler avec la classe T partout dans ton code où cela est possible afin d'éviter la redondance, mais au moment d'instancier quelque chose de concret tu devras de toutes façons mentionner T1 ou T2.

n°1932864
singletonn​e
Posté le 18-10-2009 à 16:49:57  profilanswer
 

Ok, hé bien si c'est une méthode courante, c'est super !
 
Merci !

n°1932878
esox_ch
Posté le 18-10-2009 à 17:55:38  profilanswer
 

Question à la con :
ça serait pas plus simple de définir une classe T mère dont après les autres heritent ? Après tu appelles juste le constructeur par defaut et elle est belle?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1932943
cbeyls
Hail to the King, Baby
Posté le 18-10-2009 à 23:00:00  profilanswer
 

Je crois que c'est ce qu'il fait, il met le code commun dans T et le code spécifique dans T1 et T2. Il voulait savoir si dans T on pouvait mettre une implémentation générique qui appelle le constructeur par défaut de la classe actuellement instanciée, ce qui est possible mais uniquement via réflection. Il vaut donc mieux mettre ces appels dans T1 et T2.

n°1932990
esox_ch
Posté le 19-10-2009 à 08:43:42  profilanswer
 

Ok ce que je voulais dire était exactement le fait d'avoir une implémentation générique + appel au constructeur de la classe instanciée.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait

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

  Problème de conception ?

 

Sujets relatifs
Problème conception objet pour modeleur UML en GWTProbleme de conception : Apache XML RPC + Spring
Petit problème de conception (UML)[Java] Problème de conception par rapport à l'utilisation d'une BD
[C++/ihm VB] Petit problème de conceptionproblème de conception de graphiques dans une page jsp
problème conception table (problème clé primaire)problème spécifique de conception d'une base
[résolu][MCD]Petit problème de conception[Caml] Conception de ptit jeux --> probleme!
Plus de sujets relatifs à : Problème de conception ?


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