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

UML Discussion :

classe dans une classe ?


Sujet :

UML

  1. #21
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    Elle est inconnue des autres classes, mais la classe A l'a connait puisqu'elle la déclare...
    Effectivement je pense que ça se rapproche de la notion de package, même si ce n'en pas un.

    Je fais ce genre de déclaration souvent (en C++, mais peut importe le langage) : c'est pratique de pouvoir encapsuler les classes dans d'autres, pour des notions d'encapsulation, de visibilité, etc...

    Je ne pensais pas que ça posait tant de problèmes en UML. Si c'est si difficile à représenter en UML, je présume qu'il doit être encore plus difficil d'arriver à faire générer du code correspondant à cela....

    Ca ne se représente pas car c'est conceptuellement invalide. Définir une classe dans une autre classe implique que la classe contenue est inconnue du modèle,
    ah bon, et pourquoi ?

    La relation entre les classe dans le cas décrit est obligatoirement une aggrégation (ou composition), ce n'est pas parce qu'un objet est contenu dans un autre que cela impliquent que les appelants du conteneur savent ce qu'est le contenu.
    C'est vrai qu'il y a une aggrégation entre A et B, A étant une collection de B.
    Donc alors la question serait plutôt : comment représenter la portée de visibilité d'une classe en UML ?

    Il faut que tu utilises un package.
    Je ne pense pas, en C++ (mon langage d'implémentation), la notion de package peut se traduire par un namespace, et c'est trop lourd pour ce que je veux faire.

    Merci pour les réponses en tout cas.

  2. #22
    Membre du Club

    Inscrit en
    Mai 2003
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 27
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par tut
    Ca ne se représente pas car c'est conceptuellement invalide. Définir une classe dans une autre classe implique que la classe contenue est inconnue du modèle,
    ah bon, et pourquoi ?
    Et bien on a tendance à l'oublier mais l'objet ce n'est pas le langage Java ou C++ ou autres. Il y a des concepts derrière l'objet et l'encapsulation de classe n'en fait pas partie sauf à ce que quelqu'un en démontre le contraire, ce qui n'est pas le cas depuis le début du thread.

  3. #23
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par tut
    Elle est inconnue des autres classes, mais la classe A l'a connait puisqu'elle la déclare...
    Effectivement je pense que ça se rapproche de la notion de package, même si ce n'en pas un.

    Je fais ce genre de déclaration souvent (en C++, mais peut importe le langage) : c'est pratique de pouvoir encapsuler les classes dans d'autres, pour des notions d'encapsulation, de visibilité, etc...
    C'est peut être pratique mais c'est pas propre.
    Je ne pensais pas que ça posait tant de problèmes en UML. Si c'est si difficile à représenter en UML, je présume qu'il doit être encore plus difficil d'arriver à faire générer du code correspondant à cela....
    Ce n'est pas difficile c'est impossible. Il ne faut pas mélanger modélisation et implémentation.
    Ca ne se représente pas car c'est conceptuellement invalide. Définir une classe dans une autre classe implique que la classe contenue est inconnue du modèle,
    ah bon, et pourquoi ?
    La suite de ma phrase répondait à cette question, mais je vais la reformuler pour être sûr que cela soit plus clair.
    Si ta classe B est définie dans ta classe A alors seule ta classe A connait B, donc le modèle (dans lequel est définie A) ne connait pas B, or si le modèle ne connait pas B tu ne peux pas dire dans ton modèle que A est une collection de B puisque B n'existe pas dans le modèle.
    La relation entre les classe dans le cas décrit est obligatoirement une aggrégation (ou composition), ce n'est pas parce qu'un objet est contenu dans un autre que cela impliquent que les appelants du conteneur savent ce qu'est le contenu.
    C'est vrai qu'il y a une aggrégation entre A et B, A étant une collection de B.
    Donc alors la question serait plutôt : comment représenter la portée de visibilité d'une classe en UML ?
    C'est le rôle des packages de gérer la visibilité entre éléments de modèle.
    Je ne pense pas, en C++ (mon langage d'implémentation), la notion de package peut se traduire par un namespace, et c'est trop lourd pour ce que je veux faire.
    Certes mais ce n'est pas parce que les packages peuvent se traduire en namespace qu'il faille les utiliser si cela est gênant. De plus il faut vraiment te poser la question de savoir pourquoi tu as besoin de cette non-visibilité. Si c'est juste pour que les appelants ne connaissent pas le type du contenu de ta collection et bien c'est inutile car si les appelants de A n'ont pas de lien direct avec ta classe B alors il est implicite qu'ils ne connaissent pas B. Seul le modèle connait (et doit connaitre) tous les éléments, par défaut chaque élément ne connait que lui-même. Pour qu'un élément en connaisse un autre il faut qu'il y est une association directe entre eux.
    Merci pour les réponses en tout cas.
    Ben de rien

  4. #24
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    C'est peut être pratique mais c'est pas propre.
    Voila une affirmation bien péromptoire, et qui n'engage que toi.

    C'est le rôle des packages de gérer la visibilité entre éléments de modèle.
    oui c'est vrai. Je devrai faire appel au paquetage, en fait.

    Certes mais ce n'est pas parce que les packages peuvent se traduire en namespace qu'il faille les utiliser si cela est gênant. De plus il faut vraiment te poser la question de savoir pourquoi tu as besoin de cette non-visibilité. Si c'est juste pour que les appelants ne connaissent pas le type du contenu de ta collection et bien c'est inutile car si les appelants de A n'ont pas de lien direct avec ta classe B alors il est implicite qu'ils ne connaissent pas B
    en fait, je pense que tu as raison, d'un point de vue UML.
    Maintenant, d'un point de vue implémentation C++, je trouvais ça bien de pouvoir encapsuler des classes dans d'autres, et d'en contrôler la visibilité avec les public-protected-private. C'est utile quand tu fais des bibliothèques par exemple. Et c'est moins lourd que les namespace, ça revient à faire des sous-namespaces, en quelque sorte. Personellement je préfère utiliser un namespace pour un composant (l'ensemble d'une bibliothèque par exemple).
    Mais là on n'est dans l'implémentation, et plus dans la modélisation.
    Donc, je considère le débat comme clos.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  2. Créer une classe dans une classe
    Par FabaCoeur dans le forum C++
    Réponses: 9
    Dernier message: 02/06/2007, 20h26
  3. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36

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