Wie kann ich in der UML angeben, dass eine Methode eine Sammlung von Objekten zurückgibt? Gibt es eine bessere Möglichkeit, die Beziehung zu erklären, als eine Sammelklasse als Rückgabetyp zu verwenden?
Antworten
Zu viele Anzeigen?Ich komme ein wenig spät dazu, da ich nach einer Antwort auf eine ähnliche Frage gesucht habe. Ich schreibe dies für den Fall, dass jemand anderes nach einer ähnlichen Antwort sucht.
Möchten Sie angeben, dass eine Methode eine Sammlung eines bestimmten Typs zurückgibt? Wenn ja, sollten Sie für eine Methode den Typ des Rückgabeparameters und die Multiplizität des Rückgabeparameters auf 0..* oder 1..* setzen können. Dies würde bedeuten, dass die Methode den angegebenen Typ zurückgibt und dass sie die von Ihnen angegebene Multiplizität hat.
Anhand des Beispiels Bibliothek <>--- Buch, nehmen wir an, es gibt eine Methode auf Bibliothek namens GetBooks, die einen String-Parameter, den Namen des Autors, annimmt und eine Sammlung von Buch-Instanzen zurückgibt. Die UML würde etwa so aussehen:
Bibliothek +GetBooks(authorName: string) : Book[0..*]
Ihr UML-Diagrammwerkzeug sollte dies unterstützen; ich verwende Magic Draw. Diese UML besagt, dass GetBooks 0 oder viele Book-Instanzen zurückgibt. Es ist nun Sache des Programmierers zu entscheiden, wie der Rückgabeparameter in der Implementierungssprache implementiert werden soll (wie oben von Simon erwähnt).
Sie können eine "Vereinigung" in Betracht ziehen. Es gibt drei grundlegende Arten von Assoziationen: Komposition, Aggregation und "normale" Assoziation. Jede von ihnen drückt eine andere existenzielle Abhängigkeit des Ganzen vom Teil und umgekehrt aus.
In der Regel werden Assoziationen durch die Verbindung zweier Klassen durch eine Linie ausgedrückt. Komposition und Aggregation haben ein Rautensymbol an der Seite des Kompositums/Aggregats. Das Kompositum/Aggregat besteht aus einem oder mehreren Teilen. (Siehe die wiki-Artikel )
Beispiel:
Stellen Sie sich vor, Sie haben zwei Klassen: Bibliothek und Buch. Wir können sagen, die Bibliothek ist das Ganze und das Buch der Teil. Wir könnten es so notieren (in ASCII, für echte Diagramme bitte googeln).
Bibliothek (Aggregat) <>--- Buch (Teil)
Wenn Sie diese Beziehungen zum Ausdruck bringen wollen, wird die Assoziation Ihr Freund sein.
EDITAR:
Wie ich bereits in meinem Kommentar sagte, gibt es meines Erachtens keine besondere Notation für zurückgegebene Sammlungen. Allerdings haben Sie recht, die Rückgabe einer Collection ist etwas sprachspezifisch. Aber Sie können in Betracht ziehen, ein Array zurückzugeben ( String[]
), die eine allgemeinere Art ist, eine Menge von Werten darzustellen, und die sprachunabhängiger sein sollte als eine Collection. Es ist dann dem Programmierer überlassen, wie er es implementiert. Er kann eine Collection
, ein C++ STL-Vektor ... der Punkt ist: eine Menge von Werten zurückgeben.
Es ist wahr, dass es in UML-Klassendiagrammen keine explizite Möglichkeit gibt, Sammlungstypen auszudrücken. Ich habe ein Buch gelesen, in dem die UML dafür kritisiert wurde, aber es wurde erwähnt, dass es in einigen älteren Versionen der UML Sammlungsarten gab. Eine andere Sache ist die Object Constraint Language (OCL), die in die UML integriert ist (als OMG-Standard) und ihre eigenen Sammlungstypen mit schönen Operationen hat.
Es gibt eine indirekte Möglichkeit, dies darzustellen.
Sie können eine andere zusammengesetzte Klasse definieren, die die zusammengesetzte Beziehung 1..* mit Ihrem spezifischen Rückgabetyp hat, und diese neue zusammengesetzte Klasse als Ihren Rückgabetyp verwenden.
Wenn Sie z. B. eine Sammlung der Klasse Book zurückgeben möchten, erstellen Sie eine neue Klasse Books mit der Assoziation 1..* mit Book und verwenden Sie die Klasse Books als Rückgabetyp.