IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Aide Conception UML vers Java pb mémoire


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    octobre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : octobre 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut Aide Conception UML vers Java pb mémoire
    Bonjour,

    Je souhaite représenter le schéma UML suivant en code java

    | Pays |<>------| Region |<>------| Dpt |<>------| Ville |


    Les relations sont de type 1 - *

    Je crée les 4 classes sous la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public class Region {
     
    private String nom;
    private ArrayList listeDpt;
    private Pays lePaysAssocie;
    private Dpt unDpt;
     
    //Constructeur
    public Region(String nom, Pays pays) {
    <div style="margin-left:40px">this.nom = nom;
    this.lePaysAssocie = pays;
    this.listeDpt = getListeDpt(nom);</div>}
     
    //Methodes
    getListeDpt(String nom) {
    <div style="margin-left:40px">recuperation depuis SGBD</div>}
    ...
    }

    Les autres classes suivent la même structure.
    Sachant que le nombre de données est très très grand, est-ce que je vais avoir un problème de mémoire au vu de la structure de mon code? Comme je relis un objet avec plusieurs fils et aussi avec son parent, le GC va pas me supprimer mes objets inutiles??

    L'attribut unDpt me permet de stocker l'element qui me sert actuellement. Par exemple à partir de France je peux faire France.getRegion().getDpt().getVille() pour recuperer la ville "enregistrée".

    Comment coder ce genre de relations sans causer de problèmes de mémoire??

  2. #2
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Une solution classique est de recourir au lazy instanciations, c'est à dire des instanciations paresseusses survenant que lorsque c'est nécessaire.

    L'instance créé n'est détenue que par celui qui en fait la demande de telle sorte qu'elle est nettoyée dès que plus utile.

    On peut en plus rajouter un mécanisme de cache dont la taille est fixe de manière à optimiser.

    Un moyen simple serait de recourir aux common collections: http://commons.apache.org/collection...ase/index.html)

  3. #3
    Membre du Club
    Inscrit en
    octobre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : octobre 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    Ah cool ca

    Grâce à ton lien, j'ai pu regarder la LazyList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class Region {
     
    private String nom;
    private List listeDpt = LazyList.decorate(new ArrayList(), factory);
    private Pays lePaysAssocie;
    private Dpt unDpt;
     
    //Constructeur
    public Region(String nom, Pays pays) {
     this.nom = nom;
     this.lePaysAssocie = pays;
    }
     
    //Methodes
    public List getListeDpt {
     return listDpt;
    }
     
    public void set ListeDpt(List liste) {
    this.listeDpt = liste;
    }
     
    public Dpt getDpt(int index) {
     return (Dpt) listeDpt.get(index);
    }
     
    Factory factory = new Factory() {
         public Object create() {
             return new Dpt();
         }
     }
     
    }
    Mais je ne comprend pas complètement le principe.

    Grace à la méthode getDpt(3) je peux récupérer le 4ieme élément de la liste et les autres (0,1,et 2) sont mis a null. Mais ici, ca me crée un new Dpt(), or je veux récupérer mes départements à partir d'un SGBD. Il faut modifier la méthode create() et mettre ma requete SQL dedans? Si je veux récuprérer toutes la liste, ca va me créer autant de requetes qu'il y a d'elements dans ma liste? Il y a un truc qui ne tourne pas rond dans ce que je raconte mais je ne sais pas quoi

  4. #4
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Ah ouaihhhh....

    Ca fait pas du tout ce à quoi je m'attendais ?!?! j'avais parcouru un peu rapidement la javadoc

    Ok, dans ce cas il faut que tu réalise une implémentation de l'interface List. Le size() retournant le résultat d'un "count *", et le get(i) le résultat d'un "select".

  5. #5
    Membre du Club
    Inscrit en
    octobre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : octobre 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    Si je fais un truc dans ce genre, est-ce bien niveau "qualité" de code, c'est - a dire dans ma méthode getListeDpt au lieu de retouner l'attribut liste, cela retourne une liste crée à partir de la requete SQL a l'intérieur. Dans la méthode on voit un new Dpt() : y'aura pas de problème de mémoire au bout d'un certain temps de créer des objets en boucle? J'ai du mal a voir a quoi son référencés ces objets? A la méthode? Des que j'ai fini d'utiliser la méthode, ils sont supprimés?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class Region {
     
    private String nom;
    private List listeDpt;
    private Pays lePaysAssocie;
    private Dpt unDpt;
     
    //Constructeur
    public Region(String nom, Pays pays) {
     this.nom = nom;
     this.lePaysAssocie = pays;
    }
     
    //Methodes
    public List getListeDpt {
     List resultat = new ArrayList();
     ...
    
     SELECT NOM,etc
     FROM TABLEDEPARTEMENT
     WHERE REGION = 'maRegion'
     ...
     while(rs.next) {
       resultat.add(new Dpt(rs.getString(1), rs.getString(2),... etc))
     }
     return resultat;
    }
     
    public void set ListeDpt(List liste) {
    this.listeDpt = liste;
    }
    }

  6. #6
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Ils sont supprimés s'ils ne sont plus détenus (référencés) quelque part dans le code.

    Pour ton code, c'est une solution, à ceci près que j'externaliserais les requêtes au sein d'un DAO (http://java.sun.com/blueprints/patterns/DAO.html)...

  7. #7
    Membre du Club
    Inscrit en
    octobre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : octobre 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ATL] [Débutant] UML vers Java
    Par Fiitch dans le forum Eclipse Modeling
    Réponses: 1
    Dernier message: 04/06/2014, 17h21
  2. [EMF] De UML Vers Java
    Par saber.trimech dans le forum Eclipse Modeling
    Réponses: 5
    Dernier message: 08/03/2014, 14h25
  3. [TOPCASED] UML vers Java
    Par jejeman dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 17/06/2012, 08h36
  4. Aide conception UML, s'il vous plaît
    Par Laidback dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 07/05/2011, 18h42
  5. Règles de transformation d'un diagramme de classe UML vers classes Java
    Par Deallyra dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 01/04/2010, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo