Frage

Ich habe verbrachte vor kurzem eine Menge Zeit detaillierte UML-Designs verschiedener SW-Komponenten durchführen, die ich da geschrieben habe. Im Rückblick auf das, was ich vor kurzem abgeschlossen haben und zu vergleichen, dass, wenn ich UML erst gelernt, wie ich sehe, dass ich Aggregation und Komposition Beziehungen fast streng jetzt verwenden, und haben praktisch aufgegeben „Vanille“ ungerichtete / gerichteten Beziehungen. Ich natürlich noch Verallgemeinerungen verwenden und Realisierungen, aber diese sind deutlich anders als die oben und sind nicht Teil dieser Frage berücksichtigt.

Es scheint mir, dass Aggregation / Komposition die gleiche Bedeutung von „Vanilla“ Assoziationen schon sagt, und vieles mehr. Aggregation und Komposition natürlich eine Richtung bedeuten, und jedes modernes UML-Programm wird immer noch erlauben Ihnen Vielzahl auf einer Aggregation / Komposition Beziehung zu definieren und ein Verb auf die Beziehung als auch anzuwenden. An diesem Punkt sehe ich wenig Sinn zu Vanille-Assoziationen.

Ich verstehe einige Leute haben Schwierigkeiten zu verstehen, den Unterschied zwischen Aggregation und Komposition. Schon früh hatte ich ein bisschen schwierig zu erfassen, wie sie sich unterscheiden, und ich glaube, dass Verwirrung Teil des Grundes war ich Vanille-Verbände verwendet. Ich bin jetzt an dem Punkt, wo ich wenig oder gar keine Verwendung für Vanille-Verbände zu sehen, und nicht mag sie tatsächlich verwenden da ich sie glaube, einige Dinge für Frage überlassen (vor allem eine starke oder schwache Lebenszyklus Beziehung zwischen zwei Objekten). Ich glaube, Vanille-Verbände nur die praktische Anwendung ist, wenn Ihr Verständnis für das Problem bei der Hand ist noch nicht entwickelt genug, um den gesamten Lebenszyklus Unterschied zwischen Aggregation und Zusammensetzung zu bestimmen. In einem solchen Fall ist es besser, atleast zeigen , dass die Beziehung existiert, und Sie können dann zurückkommen und sie entsprechend ändern, wenn Sie ein besseres Verständnis für das Problem bei der Hand haben.

Lange Rede kurzer Sinn, ich glaube, die überwiegende Mehrheit der Zeit, dass die Menschen Vanille-Verbände verwenden, sie genauer als eine Ansammlung beschrieben werden könnten, und manchmal als Komposition. Bin ich in meinem Glauben schrecklich falsch? Bin ich etwas fehlt? Lassen Sie mich hören Sie es!

War es hilfreich?

Lösung

Sie haben auf dem Kopf getroffen, wenn Sie sagen, "Vanille-Verbände nur die praktische Anwendung ist, wenn Ihr Verständnis für das Problem bei der Hand ist noch nicht entwickelt genug, um die gesamte Lebenszyklus Differenz zu bestimmen und < em> zeigt, dass die Beziehung besteht und Sie können dann zurückkommen und sie entsprechend ändern, wenn Sie ein besseres Verständnis für das Problem bei der Hand haben .

Das UML Meta-Modell Aggregation und Komposition als Erweiterungen der Gesellschaft definiert. Ein Verband kann eine nicht raffinierte Beziehung zwischen Domänenobjekten betrachtet wird, auf die gleichen Art und Weise, dass ein Domain-Objekt ist eine nicht raffiniert Klasse. Ich verwenden in der Regel einfache Verbände an der Domain Modelling Bühne und verfeinern es in jeder Zusammensetzung oder Aggregation als angemessen, wenn ich die ausführliche Klassenmodell lösen.

Andere Tipps

In der Tat sind die meisten Fälle von Assoziationen in UML-Klassenmodellen weder Aggregationen noch Kompositionen. Zum Beispiel ist die Assoziation zwischen den Klassen Publisher und Book für die Zuordnung der von einem Verlag zu diesem Verlag veröffentlichten Bücher weder eine Aggregation noch eine Zusammensetzung, weil die von einem Verlag veröffentlichten Bücher sind nicht Teile oder Komponenten dieses Anbieters.

Ein Modell des Zusammenhangs zwischen Verlag und Book

Eine Aggregation ist eine besondere Form der Vereinigung mit der beabsichtigten Bedeutung eines Teil-Ganzes-Beziehung, aber ohne eine genaue Semantik (die UML-Spezifikation sagt: „Precise Semantik der gemeinsamen Aggregation variiert je nach Anwendungsgebiet und Modellierer“). Zum Beispiel können wir eine Aggregation zwischen den Klassen Car und Engine und zwischen den Klassen Course und Lecture seit einem Motor ist Teil eines Auto-Modell und ein Vortrag ist Teil eines Kurses.

Eine Zusammensetzung (auch als „Verbund Aggregation“ in dem UML spec genannt) ist eine spezielle Form der Aggregation, wobei eine Komponenteninstanz Teil von höchstens einer Aggregate-Instanz zu einer Zeit ist (das heißt, es kann nicht zwischen mehreren Aggregaten geteilt werden ). Dies bedeutet, dass die Aggregation zwischen Car und Engine ist eine Zusammensetzung (weil der Motor nicht zwischen zwei Autos zur gleichen Zeit gemeinsam genutzt werden kann), während eine Aggregation zwischen Course und Lecture ist nicht unbedingt eine Zusammensetzung, da ein Vortrag unter zwei Kursen geteilt werden kann ( zB ein Datenbank-Management-Kurs und ein Software-Engineering könnte natürlich einen Vortrag über UML) teilen. Dies bedeutet, dass die Vielfalt einer Assoziationsende der Zusammensetzung auf der aggregierten Seite ist entweder 1 oder 0..1, während es auch im Fall einer Nicht-Verbund Aggregation * sein kann.

Zusätzlich zu diesen Hauptmerkmalen einer Zusammensetzung (auf exklusive Teile haben), kann eine Zusammensetzung wird mit einer Lebenszyklus-Abhängigkeit zwischen einem Aggregate und seinen Komponenten impliziert, dass, wenn ein Aggregat gelöscht wird, alle seine Teile werden gelöscht damit. Dies gilt jedoch nur für einige Fälle von Zusammensetzung, und nicht an Dritte weitergegeben, und es ist daher nicht ein bestimmendes Merkmal. Die UML-Spezifikation lautet: „Ein Teil von einer zusammengesetzten Instanz entfernt werden kann, bevor die zusammengesetzte Instanz gelöscht wird, und somit nicht als Teil der zusammengesetzten Instanz gelöscht.“ In unserem Beispiel der Auto-Motor-Zusammensetzung, es ist eindeutig der Fall, dass der Motor aus dem Fahrzeug entfernt werden kann, bevor das Auto zerstört wird, wobei in diesem Fall der Motor nicht zerstört und wiederverwendet werden kann.

Auf einem Klassendiagramm, Sie denken an den statischen Beziehungen zwischen den Klassen. Sie wahrscheinlich nicht wirklich über die Verhaltensaspekte diese Beziehungen auf dem Klassendiagramm zu denken brauchen, es trübt nur das Wasser und ist ein Beweis für über Analyse. (IMHO natürlich)

Vanilla Verbände, Aggregation und Zusammensetzungen erläuterten manchmal mit der folgenden Semantik:

  • Vanille-Verband: ein Objekt ‚weiß‘ eine oder mehr andere Objekte
  • Aggregation: ein Objekt 'hat' ein oder mehrere andere Objekte
  • Zusammensetzung: Ein Objekt ‚besteht aus‘ einem oder mehreren anderen Objekten - das Subobjekt kann ohne Komponieren Container
  • nicht

meist Differentiation von Aggregation und Komposition geht um die Frage „wenn das Master-Objekt verschwunden ist - was auf die Teilobjekte geschieht?“.

Die Idee ist es, einige Integritätsbedingung wie „auf Lösch Kaskade“ zu haben, in eine Differenzierung beschreiben, bei der eine der drei Optionen. UML hat drei verschiedene Symbole für diese

  • kein Symbol - Vanille-Vereinigung
  • Diamant - Aggregation
  • gefüllt Diamant - Zusammensetzung

Das Problem mit diesen drei Optionen ist, dass die Semantik nicht präzise genug sind, um für das wirkliche Leben Situationen, besonders wenn man die Situationen, die im Laufe der Zeit ändern

z. Der Versuch, die einfache Frage „Wie viele Reifen-Räder hat mein Auto?“ zu beantworten führen zu unterschiedlichen Antworten:

  • 4 Räder, die an meinem Auto permantly angebracht sind
  • 1 Ersatzrad, das ich im Notfall verwenden könnte
  • 4 Räder, die entweder mein Sommer oder meine Winterräder sind und nicht mit dem Auto in den anderen Jahreszeiten
  • angebracht

Wie viele dieser Räder verschwunden sein, wenn das Auto ist weg? Wenn Sie versuchen, diese Situation zu modellieren mit den drei Symbolen UML bietet Sie mit viel Diskussion am Ende und Verhandlung, was Ihr Modell wirklich bedeutet. Ich denke, dass es viel besser ist nie aggegation und Zusammensetzung Symbole zu verwenden, sondern stattdessen beschreibt immer die Assoziation Semantik als genau wie möglich mit ein paar Textzeilen. Auf diese Weise können Sie deutlich machen, den Menschen Ihr Modell zu lesen, was Sie wirklich wollen. Ich denke, es ist sogar o.k. zu schreiben „Ein Auto eine Zusammensetzung von Teilen ist die Räder, die umfasst ....“

Aber jetzt sind Sie kein Symbol Zusammensetzung, sondern verweisen wirklich die Handlung etwas zu komponieren.

siehe auch http://de.wikipedia.org/wiki/Assoziation_%28UML%29#Aggregation_und_Komposition (Deutsch)

Beide Aggregationen und Kompositionen bedeuten, dass ein Teilnehmer in der Beziehung „dominiert“ die andere (in Zusammensetzungen die Dominanz stärker ist), während normale Verbände diese Implikation nicht haben. Deshalb habe ich normale Verbände verwenden, wenn beide Teilnehmer die gleiche Bedeutung in der Beziehung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top