2010-05-29 11 views
5

Jak mogę wskazać, że metoda zwróci kolekcję obiektów w języku UML? Czy istnieje lepszy sposób wyjaśnienia relacji niż posiadanie klasy kolekcji jako typu zwrotu?UML - Metoda obiektowa Zwraca kolekcję

+0

Nie ma prawdziwej alternatywy dla używania typów zwrotu, o których mowa w odpowiedziach. Ale może tag "wzór" jest tu trochę mylący. – ShiDoiSi

Odpowiedz

4

Możesz rozważyć użycie "powiązania". Istnieją trzy podstawowe typy powiązań: skład, agregacja i "normalne" powiązanie. Każdy z nich wyraża inną egzystencjalną zależność całości od części i odwrotnie.

Zwykle asocjacje wyrażane są przez połączenie dwóch klas za pomocą linii. Skład i agregacja mają symbol diamentu po stronie kompozytu/agregatu. Kompozyt/kruszywo składa się z jednej lub więcej części. (Patrz wiki-article)

Przykład:

Immagine masz dwie klasy: Biblioteka, książka. Możemy powiedzieć, że Biblioteka jest całością i Zarezerwuj część. Możemy to zapisać w ten sposób (w ASCII, proszę google na prawdziwe diagramy).

Library (łącznie) <> --- Book (Part)

Jeśli chcesz wyrazić te relacje stowarzyszenie będzie twoim przyjacielem.

EDIT:

Jak powiedział w komentarzu, nie sądzę, nie ma specjalnej notacji dla powracających kolekcjach. Jednak masz rację, zwrot kolekcji jest specyficzny dla danego języka. Ale możesz rozważyć zwrócenie tablicy (String[]), która jest bardziej ogólnym sposobem reprezentowania zestawu wartości i powinna być bardziej niezależna od kolekcji. To zależy od programisty, w jaki sposób go realizuje. Może używać wektora Collection, C++ STL ... punktem jest: zwraca zestaw wartości.

+0

Dobrze, ale jak wskazałbym, że metoda zwraca to skojarzenie? – derekerdmann

+0

Zazwyczaj metoda definiuje __behaviour__ klasy. Tak więc nie ma sposobu, aby wyrazić, że metoda zwraca kolekcję za pomocą diagramu klas (z wyjątkiem wskazania jego wartości zwracanej). – Simon

+0

Tak więc chciałbym tylko powiedzieć, że metoda zwraca Collection (w Javie)? Myślałem, że w UML generalnie unika się używania tego rodzaju notacji specyficznej dla języka. – derekerdmann

0

Hmm, to prawda, że ​​w diagramach klas UML nie ma wyraźnego sposobu na wyrażenie typów kolekcji. Czytałem książkę, w której skrytykowali UML za to, ale wspomnieli, że w niektórych bardziej eraltowych wersjach UML były typy kolekcji. Kolejną rzeczą jest Object Constraint Language (OCL), który jest zintegrowany z UML (jako standard OMG) i ma własne typy kolekcji z ładnymi operacjami.

7

Podchodzę do tego trochę spóźniony, ponieważ szukałem odpowiedzi na podobne pytanie. Piszę o tym, ktoś inny szuka podobnej odpowiedzi.

Czy chcesz wskazać, że metoda zwraca kolekcję określonego typu? Jeśli tak, dla metody powinieneś być w stanie ustawić typ parametru zwracanego i krotności parametru zwracającego na 0 .. * lub 1 .. *. To by wskazywało, że metoda zwraca określony typ i że ma on dowolną wielokrotność, którą podajesz.

E.g. przy użyciu biblioteki <> --- Przykład książki, załóżmy, że w bibliotece istnieje metoda o nazwie GetBooks, która pobiera parametr ciągu, nazwę autora i zwraca kolekcję instancji Book. UML będzie wyglądać mniej więcej tak:

Biblioteka + GetBooks (AUTHORNAME: String): książki [0 .. *]

Twój diagramów UML narzędzie powinno to wspierać; Używam Magic Draw. Ten UML stwierdza, że ​​GetBooks zwraca 0 lub wiele instancji Book. Teraz od programistów zależy, jak zaimplementować parametr powrotu w języku implementacji (jak stwierdził Simon).

0

Istnieje pośredni sposób reprezentowania tego.

Można zdefiniować inną klasę złożoną, która ma złożoną relację 1 .. * z określonym typem zwracanej wartości i użyć tej nowej klasy złożonej jako typu zwracanego.

Dla np. jeśli chcesz zwrócić kolekcję klasy Book, utwórz nową klasę Książki z powiązaniem 1 .. * z Książką i użyj klasy Książki jako typu zwrotu.

Powiązane problemy