2016-04-12 4 views
1

Ich bin verwirrt über die Verwendung von Verknüpfungen mit Java Enums in UML-Klassendiagrammen. Derzeit modelliere ich ein System mit einer Auto Klasse, die einige Eigenschaften hat. Einige sind auch Aufzählungen, wie FuelKind oder CarBrand:Assoziationen zu Java-Enums in UML-Klassendiagrammen modellieren

enter image description here

Es gehen zu viele Autos in der Datenbank (Car ist eine JPA-Entität) sein, und ich frage selbst, das ist die beste Verbindung und Kardinalität zu FuelKind und CarBrand.

Meine Gedanken bis jetzt:

  • Enum-Instanzen auf ihre eigenen instanziiert sind, so hängen sie nicht technisch auf Car. Auch nicht-technisch enthalten diese Enums alle verfügbaren "Auswahlmöglichkeiten", so dass es keine strenge Abhängigkeit gibt. Es kann also keine Kompositionsaggregation zwischen ihnen sein.
  • One Auto hat eine CarBrand und eine FuelKind. Aber von der anderen Seite: Hat eine Marke oder Kraftstoffart ein Auto oder mehrere Autos? Logischerweise können mehrere Autos von Mercedes oder Benzin fahren sein. Technisch gesehen hat eine Enum-Instanz jedoch keine Verbindung zu einem oder mehreren Autos.

Haben Sie einige Vorschläge und Gedanken, wie Sie dieses Problem lösen können?

Antwort

4

Sie tun es fast richtig. Eine gerichtete Assoziation ist die richtige Beziehung für diese Situation.

Um zu verdeutlichen, dass sich die Zuordnung auf ein bestimmtes Attribut in der Klasse bezieht, verwenden Sie eine Zielrolle. Dies wird als eine Textbeschriftung mit dem Namen des Attributs (fuelKind) auf der Enumerationsseite (nicht des Klassenendes) des Verbinders angezeigt.

Wenn Sie zwei Attribute des gleichen Aufzählungstyps hätten, müssten Sie zwei separate Zuordnungen erstellen.

Da Sie jedoch die Typnamen in den Attributen verwenden, müssen Sie überhaupt keine Beziehungen zeichnen. Wenn Sie dies jedoch tun, ist eine gerichtete Assoziation mit einer Zielrolle semantisch äquivalent zur Benennung des Typs im Attribut. Was Sie wählen, ist eine Frage des Stils, und Sie können beides tun, wenn es hilft, Dinge zu klären.

In Bezug auf eine Beziehung, die in die andere Richtung geht, bedeutet die gerichtete Natur der Assoziation, dass die Beziehung einseitig ist. Mit anderen Worten, wenn Sie es so zeichnen, wie Sie es getan haben, zeigt es keine Beziehung von den Enum-Typen zurück zur Klasse an. Und für Enum-Typen sollte es normalerweise nicht mehr geben als für Ganzzahlen oder Strings.

+0

Danke, geklärt Ihre Antwort ziemlich gut, dass die Situation. Interessant ist auch, dass es zwei separate Assoziationen für zwei Attribute geben würde, die man vorher nie gesehen hat. Zur Klarstellung denke ich, dass die Attributbenennung für mich ausreichend ist. – jverhoelen

+0

Zu sagen "Sie können beides, wenn es hilft, Dinge zu klären" ist wie zu sagen "Sie können Ihr Diagramm durcheinander bringen, wenn es hilft". Es ist verwirrend und entmutigt, eine Assoziation sowohl mit einer Eigenschaft als auch mit einer Assoziation auszudrücken (Ende). –

+0

Sie * können * Ihr Diagramm durcheinander bringen, wenn es hilft. UML ist eine Art Dokumentation, keine Religion. Was in einer bestimmten Situation richtig ist, hängt von mehreren Faktoren ab, einschließlich der Zielgruppe. Wenn * du * die Zielgruppe ist, könnten Sie verwirrt sein, und wenn * I * die Zielgruppe ist, könnte ich sagen, dass sie überflüssig ist. Wenn das Modell jedoch von Personen gelesen werden soll, die Java, aber nicht UML kennen, kann das Verwenden beider Stile gleichzeitig das Lesen des Diagramms erleichtern, aber es führt nicht zu Verwirrung, da sie wissen, dass in Java zwei Attribute nicht denselben Namen haben können. – Uffe

3

Dies ist nicht korrekt. Eine Enumeration ist ein Datentyp, keine Klasse. Sie ordnen es einfach Ihrem Attribut in der Car-Klasse zu. Sie können mit einer Abhängigkeit angeben, dass Sie eine bestimmte Enumeration in einer Klasse verwenden.

enter image description here

+0

Es gibt technisch kein Problem mit einer Assoziation. Es kann stilistisch nicht mit anderen Attributtypen übereinstimmen, aber es ist korrekt. –

+0

Es ist formal korrekt, eine Assoziation zu verwenden, selbst für gewöhnliche (z. B. string-bewertete) Attribute, aber es wäre umständlich und würde Best Practices verletzen. –

+0

@ JimL. Syntaktisch korrekt. Praktisch mehr als zweifelhaft. Deshalb habe ich gesagt, dass es nicht stimmt. Das Definieren einer Enumeration aus einer Klasse ist ebenfalls übertrieben, da UML speziell eine Enumeration anbietet. –

Verwandte Themen