Question

J'ai récemment passé beaucoup de temps à effectuer des conceptions UML détaillées de divers composants SW que j'ai écrit depuis. En regardant en arrière sur ce que j'ai récemment terminé et en le comparant quand j'ai appris UML, je vois que j'utilise maintenant presque strictement les relations d'agrégation et de la composition, et ont pratiquement abandonné « vanille » non dirigés / relations dirigées. Je l'utilise encore bien sûr des extrapolations et des réalisations, mais ceux-ci sont nettement différents de ceux ci-dessus et ne sont pas considérés comme faisant partie de cette question.

Il me semble que l'agrégation / Composition implique la même signification des associations « vanille », et plus encore. Agrégation et composition impliquent naturellement une direction, et tout programme d'UML moderne vous permettra toujours de définir la multiplicité sur une relation d'agrégation / Composition et appliquer un verbe à la relation. À ce moment-là, je vois peu d'utilité aux associations de vanille.

Je comprends que certaines personnes ont du mal à comprendre la différence entre l'agrégation et la composition. Dès le début, j'ai eu un peu de saisir difficile la façon dont ils diffèrent, et je crois que la confusion faisait partie de la raison pour laquelle je les associations de vanille. Je suis au point où je ne vois que peu ou pas pour les associations de vanille, et n'aime vraiment les voir utilisés comme je crois qu'ils laissent certaines choses pour la question (en particulier une relation de cycle de vie forte ou faible entre deux objets). Je crois que l'utilisation pratique des associations de vanille est quand votre compréhension du problème à portée de main n'est pas encore assez développée pour déterminer la différence de cycle de vie entre l'agrégation et la composition. Dans un tel cas, il est préférable de atleast show que la relation existe et vous pouvez alors revenir et changer de façon appropriée lorsque vous avez une meilleure compréhension du problème à portée de main.

Longue histoire courte, je crois que la grande majorité du temps que les gens utilisent des associations de vanille, ils pourraient être plus précisément décrit comme une agrégation, et parfois en tant que composition. Suis-je terriblement mal dans ma croyance? Est-ce que je manque quelque chose? Permettez-moi de l'entendre!

Était-ce utile?

La solution

Vous avez frappé à la tête quand vous dites, « associations de vanille » que l'utilisation pratique lorsque votre compréhension du problème à portée de main n'est pas encore assez développée pour déterminer la différence de cycle de vie et < em> montrent que la relation existe et vous pouvez alors revenir et changer de façon appropriée lorsque vous avez une meilleure compréhension du problème à portée de main .

Le UML méta-modèle définit l'agrégation et la composition des extensions de l'Association. Une association peut être considérée comme une relation entre les objets non raffiné de domaine, de la même manière qu'un objet de domaine est une classe non raffinée. J'utilise généralement les associations simples au stade de modélisation de domaine et raffinent soit dans la composition ou l'agrégation selon le cas quand je résous le modèle de classe détaillée.

Autres conseils

En fait, la plupart des cas d'associations dans les modèles de classes UML ne sont ni agrégations ni compositions. Par exemple, l'association entre les classes Publisher et Book pour attribuer les livres publiés par un éditeur à cet éditeur est ni une agrégation ni une composition parce que les livres publiés par un éditeur ne sont pas des pièces ou des composants de cet éditeur.

Un modèle de l'association entre l'éditeur et Book

Une agrégation est une forme particulière d'association avec le sens voulu d'une partie de l'ensemble de relations, mais sans une sémantique précise (la spécification UML dit: « sémantique précise de l'agrégation partagé varie selon le domaine d'application et modeler »). Par exemple, on peut modéliser une agrégation entre les classes Car et Engine et entre les classes Course et Lecture depuis un moteur fait partie d'une voiture et une conférence fait partie d'un cours.

Composition (également appelé « agrégation composite » dans la spécification UML) est une forme particulière d'agrégation, où une instance de composant est une partie d'au plus une instance globale à la fois (ce qui signifie qu'elle ne peut pas être partagé entre plusieurs agrégats ). Cela signifie que l'agrégation entre Car et Engine est une composition (car un moteur ne peut pas être partagé entre deux voitures en même temps), tandis qu'une agrégation entre Course et Lecture est pas nécessairement une composition depuis une conférence peut être partagée entre deux cours ( par exemple, un cours de gestion de base de données et un cours de génie logiciel peuvent partager une conférence sur UML). Ceci implique que la multiplicité de l'extrémité de l'association d'une composition au niveau du côté est soit 1 ou agrégat 0..1, alors il peut être aussi * dans le cas d'une agrégation non composite.

En plus de ces caractéristiques principales d'une composition (pour avoir des parties exclusives), une composition peut également provenir d'une dépendance à l'égard du cycle de vie entre un agrégat et de ses composants qui implique que, lorsqu'un ensemble est effacé, toutes ses parties sont supprimées avec ça. Toutefois, cela ne vaut que pour certains cas, de la composition, et non à d'autres, et il est donc pas une caractéristique déterminante. La spécification UML stipule: « Une partie peut être retirée à partir d'une instance composite avant l'instance composite est supprimé, et donc ne pas être supprimé dans le cadre de l'instance composite. » Dans notre exemple de la composition moteur de voiture, il est clairement le cas que le moteur peut être retiré de la voiture avant que la voiture est détruite, dans ce cas, le moteur est détruit et peut être réutilisée.

Sur un diagramme de classes, vous pensez des relations statiques entre les classes. Vous avez probablement ne pas vraiment besoin de penser aux aspects comportementaux de ces relations sur le diagramme de classes, il brouille seulement les eaux et est une preuve de plus d'analyse. (À mon humble avis bien sûr)

Associations vanille, Aggregration et compositions sont parfois expliquées avec la sémantique suivante:

  • association de vanille: un objet « sait » un ou plusieurs autres objets
  • agrégation: un objet « a » un ou plusieurs autres objets
  • composition: un objet « se compose de » un ou plusieurs autres objets - le sous-objet ne peut pas être sans le récipient de composition

la plupart du temps d'agrégation et la différenciation composition va autour de la question « si l'objet principal est parti - ce qui se passe aux objets partiels? ».

L'idée est donc d'avoir une contrainte d'intégrité comme « une suppression en cascade » être décrit en utilisant une différenciation en utilisant l'une des trois options. UML a trois symboles différents pour cette

  • aucun symbole - association de vanille
  • diamant - agrégation
  • diamant rempli - composition

Le problème avec ces trois options est que la sémantique ne sont pas assez précises pour des situations de la vie réelle, surtout si vous regardez les situations qui changent au fil du temps

par exemple. Essayer de répondre à la question simple « Combien de pneus roues ne ma voiture? » Conduira à des réponses différentes:

  • 4 roues qui sont permantly attachés à ma voiture
  • 1 roue de secours que je pourrais utiliser en cas d'urgence
  • 4 roues qui sont soit mon été ou mes roues d'hiver et ne sont pas attachés à la voiture dans les autres saisons

Combien de ces roues auront disparu lorsque la voiture est parti? Si vous essayez de modéliser cette situation avec les trois symboles UML offre, vous vous retrouverez avec beaucoup de discussions et de négociation ce que votre modèle signifie vraiment. Je pense qu'il est beaucoup mieux de ne jamais utiliser des symboles de aggegation et de composition mais toujours décrire la sémantique de l'association comme précisément que possible avec quelques lignes de texte. De cette façon, vous pouvez faire comprendre aux gens qui lisent votre modèle ce que vous voulez vraiment. Je pense qu'il est même Ö.K écrire « Une voiture est une composition de parties qui comprend des roues .... »

Mais maintenant, vous n'utilisez pas un symbole de composition, mais référencez vraiment l'acte de composer quelque chose.

voir aussi http://de.wikipedia.org/wiki/Assoziation_%28UML%29#Aggregation_und_Komposition (en allemand)

Les deux agrégations et compositions impliquent qu'un participant à la relation « domine » l'autre (dans les compositions de la domination est plus forte), alors que les associations normales ne sont pas cette implication. Par conséquent, j'utiliser des associations normales lorsque les deux participants ont la même importance dans la relation

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top