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

Diagrammes de Classes Discussion :

[DC] spécialisation de relation


Sujet :

Diagrammes de Classes

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut [DC] spécialisation de relation
    Bonjour,

    j'aimerai savoir si une agrégation peut être "spécialisée" en "composition"...

    En fait j'ai deux classes abstraites A et B reliées par une agrégation (A vers B), mais je voudrais qu'une classe spécialisant A soit responsable des objets spécialisant B (d'où la composition) qu'elle contient, contrairement à d'autres classes spécialisant A.

    Je ne vois pas comment représenter autrement cette particularité.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut
    En fait je me rends compte qu'il y a un problème :

    la composition implique de le composant est "privé" dans le sens ou il n'est absolument pas partagé.

    Ce n'est donc pas finalement une relation de composition qu'il me faut.

    Or comment faire pour que l'agrégat soit responsable de l'objet sans qu'il en soit le seul dépositaire ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut
    Il faudrait que les objets faiblement agrégés puissent être supprimés de leur hôte lorsque l'agrégat "propriétaire" est détruit.

    Autrement dit il faudrait que les composants soient dotés d'une capacité à être détruits explicitement et que, lors de leur destruction, ils sachent s'ôter des objets qui les utilisent !

    Les composants devraient donc connaître leurs agrégats "faibles" et ceux-ci devraient être dotés d'une méthode "remove(Composant)"

    Suis-je sur la bonne voie ?

  4. #4
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Dans les langages de haut niveau, on ne gère pas la destruction de manière explicite.

    Il n'y a pas de changement à faire quant au passage d'une agrégation à une composition, la seule différence est que le schéma exprime le fait que seul un unique composant père contiendra un composant fils donné. Ainsi, si le père "meurt", les fils n'ont plus de référence sur eux, et le garbage collector les détruira. Toutefois, si la notion de destruction est plus complexe, il convient de mettre en place un mécanisme de destructeur (idem constructeur mais à l'envers). Le parent, dans son desctruteur, appèlera les destructeurs des fils dont il est composé (et non agrégé).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut
    Si je mets un nom d'association explicite comme "destroy" au lieu d'une composition ça peut être plus "normal" au sens d'UML ?

  6. #6
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Non, car le sens (sémantique) de la relation n'est pas que le père détruit ses fils.

    UML dit :
    Le père est composé de fils, dans une relation R, avec comme role "mesfillots".
    Le père possède une méthode (static?) destroy.
    Les fils aussi.

    L'implémentation dira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class pere{
      /// implements the R relation
      List<fils> mesfillots;
      static destroy(pere p)
      {
         // le boulot,
         // puis pour chaque fils f, 
         fils.destroy(f);
      }
    OCL pourrait dire que le body de l'operation est d'appeller destroy sur chaque élément du set de fils

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

Discussions similaires

  1. Relation entre classes spécialisées
    Par lenombre18 dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 27/03/2012, 18h07
  2. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26
  3. Distribution spécialisée apache ?
    Par FRANCKYIV dans le forum Développement
    Réponses: 5
    Dernier message: 23/10/2003, 15h46
  4. Réponses: 2
    Dernier message: 26/09/2003, 15h54
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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