traduction du diagrame de classe UML en JAVA

traduction du diagrame de classe UML en JAVA - Java - Programmation

Marsh Posté le 21-12-2010 à 17:51:19    

Bonjour,
 
j'ai un problème lors de la traduction de mon diagramme uml en java.
 
j'ai un diagramme de classes avec 2 classes (une classe personne et une class hotel) et une flèche bidirectionnelle. Une personne peut avoir 1 ou plusieurs hotels et un hotel peut appartenir à une ou plusieurs personnes.  
 
Lors de la traduction de mon diagrmme en java, j'ai dans la classe hotel une liste de personnes et dans la classe personne une liste d'hotels.
 
donc pour créer une personne j'ai besoin de savoir sa liste d'hotel et pour créer un hotel j'ai besoin de savoir la liste de personnes correspondantes.
 
Au final je ne peux créer l'un sans l'autre.
 
comment remedier à ce problème ?
 
Merci pour vos réponses

Reply

Marsh Posté le 21-12-2010 à 17:51:19   

Reply

Marsh Posté le 21-12-2010 à 17:54:18    

en faisant en sorte qu'une modification d'un coté se synchronise aussi de l'autre coté pour que les deux listes soient coherentes.  
 
Sinon, tu peux dire qu'un seul coté est réel, et l'autre va visiter le monde entier pour reconstruire dynamiquement la liste :op


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-12-2010 à 18:32:51    

comment considérer qu'un coté est réel et pas l'autre? car d'un coté j'ai besoin de savoir pour une personne la liste de ses hotels et de l'autre coté j'ai besoin de savoir pour un hotel la liste des personnes
 
maerci

Reply

Marsh Posté le 21-12-2010 à 18:41:44    

Je ne vois pas où est le problème.

Reply

Marsh Posté le 21-12-2010 à 18:41:45    

en ayant une vraie liste du coté réel, et juste des accesseurs qui vont requeter pour le coté virtuel :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-12-2010 à 18:49:53    

le problème c'est que pour créer un objet hotel j'ai besoin au préalable d'une liste de personnes et pour créer une personne j'ai besoin au préalable d'une liste d'hotels. ca fait une sorte de boucle

Reply

Marsh Posté le 21-12-2010 à 18:51:39    

merci kradeg. Etant débutante en JAVA j'irai voir ce qu'est un ascenseur.

Reply

Marsh Posté le 21-12-2010 à 18:58:21    

camloc a écrit :

le problème c'est que pour créer un objet hotel j'ai besoin au préalable d'une liste de personnes et pour créer une personne j'ai besoin au préalable d'une liste d'hotels. ca fait une sorte de boucle


Quel est l'intérêt d'avoir 1 personne => 1..* hotel et 1 hotel => 1..* personne

 

Autant avoir du 0..* de chaque côté de la relation et éviter de fermer ton modèle a certaines possibilités (genre 1 hotel dont les titres de propriété ont cramés lors d'un incendie et qui n'a donc plus de propriétaire, ou encore une personne qui a perdu tous ces hôtels suite à une faillite). De toutes les façon et en règle générale il vaut mieux toujours remplacer les relations 1..* en 0..* pour éviter d'avoir un modèle qui ne correspond pas à la réalité à un moment donné.

 

De plus rien ne t'empêche d'avoir une liste vide.


Message édité par exhortae le 21-12-2010 à 18:59:06
Reply

Marsh Posté le 22-12-2010 à 04:56:58    

camloc a écrit :

comment considérer qu'un coté est réel et pas l'autre? car d'un coté j'ai besoin de savoir pour une personne la liste de ses hotels et de l'autre coté j'ai besoin de savoir pour un hotel la liste des personnes


 
Alors il te faut des listes des 2 côtés : "class Personne... List<Hotel> hotels;" et "class Hotel... List<Personne> personnes;".
 
Quand je dis "List" ça devrait être un "Set" plutôt pour éviter les doublons.


---------------
When injustice becomes law, resistance becomes duty (Thomas Jefferson)
Reply

Marsh Posté le 22-12-2010 à 12:02:24    

Bonjour,
Une petite idée, surement améliorable, pour supprimer cette double dépendance...
La relation entre un client et un hotel caractérise la notion de contrat, soit d'interface (pseudo-code hein):
 

Code :
  1. Interface iLouable {
  2.    boolean isOccupe(); 
  3.    boolean setOccupe(boolean) throws DejaOccupeException;
  4. }
  5. class Chambre implements iLouable {
  6.    boolean isOccupe() {}
  7.    boolean setOccupe(boolean) {}
  8.    Hotel getHotel(); // on peut retrouver hotel à partir de chambre
  9.    Client getClient(); // occupant actuel de chambre
  10. }
  11. class Hotel {
  12.    iLouable chambres[]; // liste de chambres   
  13. }
  14. class Personne {
  15. }
  16. class Client extends Personne {
  17.    iLouable chambres[]; // un client 0..n chambres: on peut retrouver la chambre et donc le ou les hotel(s) depuis le client
  18. }


 
Bon courage!


Message édité par Ju - le 22-12-2010 à 14:26:40
Reply

Marsh Posté le 22-12-2010 à 12:02:24   

Reply

Marsh Posté le 22-12-2010 à 17:09:35    

merci budbreeder,
 
j'ai justement crée deux listes: "class Personne... List<Hotel> hotels;" et "class Hotel... List<Personne> personnes;".
 
le problème de la double dépendance s'est posée lors de la création des objets pour tester les méthodes de chaque classe.
 
j'ai opter pour la solution suivante:
 
Créer des hotels, sans personnes.
créer des personnes, avec leur liste d'hotels.  
Et mettre à jour les listes de personnes des hotels.  

Reply

Marsh Posté le 22-12-2010 à 17:13:38    

merci Ju
 
je n'ai pas de classe Chambre. J'ai deux classes une classe personne et une classe Hotel et une relation bidirectionnelle entre les deux classes
 
une personne possède 1 ou plusieurs Hotels et un Hotel est possèdé par 1 ou plusieurs personnes

Reply

Sujets relatifs:

Leave a Replay

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