Problème conception objet pour modeleur UML en GWT

Problème conception objet pour modeleur UML en GWT - Java - Programmation

Marsh Posté le 06-05-2009 à 11:24:51    

Bonjour à tous,
Je travaille actuellement sur un projet open source de modeleur UML en GWT : http://code.google.com/p/gwtuml/
Mais je bloque sur un point :
Ma hiérarchie de classe simplifiée est la suivante :
http://zero.dontexist.net/diagf.png
 
Concrètement je dois lier les artifacts (grosso modo les objets graphiques) entre eux. Les liens n'étant pas les mêmes en fonction de ce qu'ils relient j'ai donc une classe abstraite LinkArtifact qui regroupent les différents type de liens en fonction des cas.
Le problème est que dans l'interface (UMLCanvas) je récupère deux objets de type générique (UMLArtifact) que je dois relier entre eux.
Pour l'instant je n'ai trouvé d'autre solution que de faire ainsi :

Code :
  1. if (relationKind == RelationKind.NOTE) {
  2.  if (uMLArtifactNew.getClass() == NoteArtifact.class) {
  3.      return new LinkNoteArtifact((NoteArtifact) uMLArtifactNew,
  4.       uMLArtifact);
  5.  }
  6.  if (uMLArtifact.getClass() == NoteArtifact.class) {
  7.      return new LinkNoteArtifact((NoteArtifact) uMLArtifact,
  8.       uMLArtifactNew);
  9.  }
  10.  return null;
  11.     } else if (relationKind == RelationKind.CLASSRELATION) {
  12.  if (uMLArtifactNew.getClass() == RelationLinkArtifact.class
  13.   && uMLArtifact.getClass() == NodeArtifact.class) {
  14.      return new LinkClassRelationArtifact(
  15.       (ClassArtifact) uMLArtifact,
  16.       (RelationLinkArtifact) uMLArtifactNew);
  17.  }
  18.  if (uMLArtifact.getClass() == RelationLinkArtifact.class
  19.   && uMLArtifactNew.getClass() == NodeArtifact.class) {
  20.      return new LinkClassRelationArtifact(
  21.       (ClassArtifact) uMLArtifactNew,
  22.       (RelationLinkArtifact) uMLArtifact);
  23.  }
  24.   return null;
  25.     }
  26.     else if (uMLArtifact.getClass() == NodeArtifact.class
  27.      && uMLArtifactNew.getClass() == NodeArtifact.class) {
  28.  return new RelationLinkArtifact((ClassArtifact) uMLArtifactNew, (ClassArtifact) uMLArtifact, relationKind);
  29.     }
  30.  return null;


 
Ce que je trouve plutôt mal fait et pas très évolutif.
 
Ma question est comment faire ca de manière plus objet, avec par exemple une méthode createLink(UMLArtifact, UMLArtifact) redéfinie en fonction des types d'UMLArtifact qui retournerait l'objet LinkArtifact adéquat ?
 
Je vous remercie grandement de votre aide.
 
PS : Si mon projet vous intéresse et que vous voulez contribuer n'hésitez pas !

Reply

Marsh Posté le 06-05-2009 à 11:24:51   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed