Infrastruktura języka UML w wersji 2.2 Część VII Pakiet Core::Constructs (diagramy: operacji, klas, typów danych, pakietów)
Diagram operacji
Metaklasa BehavioralFeature Opiera się na definicji Abstractions::BehavioralFeatures::BehavioralFeature Dodaje możliwość zgłaszania wyjątków w trakcie wywołania
Typ wyliczeniowy ParameterDirectionKind Definiuje literały używane do określenia kierunku przekazywania parametrów: in – parametr wejściowy inout – parametr wejściowo-wyjściowy out – parametr wyjściowy return – zwracana wartość
Metaklasa Parameter Scala definicje Basic::Parameter i Abstractions::BehavioralFeatures::Parameter Dodatkowo specjalizuje Constructs::MultiplicityElement zawiera specyfikację kierunku – domyślnie in daje możliwość określenia wartości domyślnej
Metaklasa Operation Operacja to cecha czynnościowa klasyfikatora określająca nazwę, typ, parametry i ograniczenia dla wywołania powiązanego zachowania Atrybuty pochodne /isOrdered, /isUnique, /lower i /upper odnoszą się do wartości zwracanej przez daną operację Atrybut isQuery określa czy wykonanie operacji zmienia stan systemu Wartość domyślna: false (nie zmienia) Operacja może zwracać najwyżej jedną wartość
Metaklasa Operation – powiązania /type (pochodny) – określa typ zwracanej wartości redefinedOperation – wskazuje operację przedefiniowywaną przez daną operację raisedException – określa typy zgłaszanych wyjątków precondition – ograniczenia stanu systemu, które muszą być spełnione w momencie wywołania operacji każda implementacja operacji może zakładać ich spełnienie postcondition – ograniczenia określające stan systemu po pomyślnym zakończeniu operacji (o ile spełnione były warunki wstępne) każda implementacja operacji musi gwarantować ich spełnienie bodyCondition – opcjonalne ograniczenie na zwracaną wartość może być przedefiniowane (w przeciwieństwie do postcondition) tylko dla isQuery = true
Metaklasa Operation – semantyka dodatkowa Jeśli wywołanie operacji zgłasza wyjątek, nie można zakładać spełnienia ograniczeń postcondition i bodyCondition Na tym poziomie nie określa się zachowania wywołania operacji wobec niespełnienia warunków precondition
Przedefiniowywanie operacji Operacja może być przedefiniowana w specjalizacji swojego klasyfikatora Operacja przedefiniowująca może Wyspecjalizować typy parametrów Dodać nowe warunki wstępne i końcowe Dodać zgłaszane wyjątki W inny sposób wzbogacić specyfikację operacji Dodatkowe reguły niezmienności, kowariancji lub kontrawariancji typów i warunków wstępnych decydują o tym czy specjalizowany klasyfikator może zastąpić klasyfikator bardziej ogólny
Notacja operacji [<visibility>] <name> ‘(‘ [<parameter-list>] ‘)’ [‘:’ [<return-type>] [‘[‘ <multiplicity> ‘]’] [‘{‘ <oper-property> [‘,’ <oper-property>]* ‘}’]] <oper-property> ::= ‘redefines’ <oper-name> | ‘query’ | ‘ordered’ | ‘unique’ | <oper-constraint> <parameter-list> ::= <parameter> [‘,’<parameter>]* <parameter> ::= [<direction>] <parameter-name> ‘:’ <type-expression> [‘[‘<multiplicity>’]’] [‘=’ <default>] [‘{‘ <parm-property> [‘,’ <parm-property>]* ‘}’] <direction> ::= ‘in’ | ‘out’ | ‘inout’ (domyślnie ‘in’)
Opcje prezentacyjne Lista parametrów może zostać pominięta Zwracana wartość może być pokazana jako parametr toString(return: String) albo jako typ operacji toString(): String
Przykłady notacji operacji display() -fireEvent() +findAllCustomers(): Person[*] {query, ordered} +giveRise(rate: Money, people: Employee[1..*]{unique})
Diagram klas
Metaklasa Operation (c.d.) Diagram pokazuje powiązanie metaklas Operation i Class reprezentujące przynależność operacji do klasy
Metaklasa Classifier (c.d.) Diagram pokazuje powiązanie między metaklasami Classifier i Property, które reprezentuje atrybuty klasyfikatora Wszystkie instancje klasyfikatora zawierają wartości odpowiadające jego atrybutom
Przykłady notacji atrybutów ClassB::id, ClassB::shape, ClassB::height i ClassB::width przedefiniowują odpowiednie atrybuty ClassA
Metaklasa Property Właściwość jest rodzajem cechy strukturalnej klasyfikatora Opisuje deklarowany stan instancji klasyfikatora w formie nazwanego związku z wartością lub zbiorem wartości Właściwość związana z klasyfikatorem jako attribute reprezentuje jego atrybut, może także reprezentować koniec powiązania Wartość (wartości) właściwości są przechowywane w szczelinach (slots) instancji klasyfikatora Właściwość związana z powiązaniem jako memberEnd reprezentuje koniec powiązania Wartość (wartości) właściwości stanowi odniesienie do instancji na innych końcach powiązania Zwykłe Association nie ma atrybutów (?). Powiązane Property jest końcem powiązania.
Typy kolekcji właściwości IsOrdered IsUnique Typ kolekcji false true Set OrderedSet Bag Sequence
Semantyka właściwości Właściwość jest pochodna (isDerived = true) jeśli jej wartość (wartości) może być wyliczona skądinąd Właściwości pochodne zwykle są tylko do odczytu (isReadOnly = true) Reguła wyliczenia wartości właściwości pochodnej może być określona przez ograniczenie Właściwość pochodna może przedefiniowywać właściwość „pierwotną”
Semantyka właściwości (c.d.) Właściwość może być oznaczona jako podzbiór innej (subsettedProperty) Kolekcja związana z instancją pierwszej właściwości musi być podzbiorem kolekcji odpowiadającej instancji drugiej właściwości Warunkiem koniecznym jest zgodność odpowiednich elementów Właściwość może być oznaczona jako suma pochodna (isDerivedUnion = true). Znaczy to, że kolekcja wartości wyznaczonych przez właściwość w pewnym kontekście jest wyliczona jako suma (mnogościowa) wszystkich kolekcji wartości wyznaczonych w tym samym kontekście przez właściwości-podzbiory. isDerivedUnion implikuje isDerived i isReadOnly
Notacja właściwości <property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [‘[‘ <multiplicity> ‘]’] [‘=’ <default>] [‘{‘ <prop-modifier > [‘,’ <prop-modifier >]* ’}’] <prop-modifier> ::= ‘readOnly’ | ‘union’ | ‘subsets‘ <property-name> | ‘redefines’ <property-name> | ‘ordered’ | ‘unique’ | <prop-constraint>
Metaklasa Class Klasa opisuje zbiór obiektów współdzielących specyfikację cech, ograniczeń i semantyki Klasa to klasyfikator, którego cechami są atrybuty i operacje Atrybutami klasy są instancje metaklasy Property będące własnością tej klasy Niektóre z atrybutów mogą reprezentować nawigowalne końce binarnych powiązań
Notacja klas Klasa używa notacji klasyfikatora Ponieważ klasa jest najpowszechniej używanym rodzajem klasyfikatora, opuszcza się z reguły słowo kluczowe <<class>> wewnątrz symbolu klasyfikatora
Klasy – przykłady notacji
Metaklasa Association Powiązanie opisuje zbiór krotek złożonych z instancji typów końców powiązania Instancją powiązania (association) jest wiązanie (link) Powiązanie specyfikuje związek semantyczny, który może zajść między typowanymi instancjami Powiązanie ma co najmniej 2 końce reprezentowane przez właściwości typów będących końcami
Nawigowalność końca powiązania Końcem nawigowalnym z przeciwnych końców jest taki, który Jest własnością klasy końca (ownedAttribute) LUB Jest określony jako nawigowalny koniec posiadany (navigableOwnedEnd) Zakłada się, że można dojść (w czasie wykonania) z obiektów uczestniczących w wiązaniach na innych końcach powiązania do obiektów na końcach nawigowalnych Do obiektów osiągalnych w ten sposób można w zwykły sposób wysyłać komunikaty
Dodatkowa semantyka powiązań Koniec powiązania może być oznaczony jako podzbiór końca innego powiązania jeśli Oba powiązania mają tyle samo końców Odpowiednie typy końców są zgodne Koniec powiązania może być oznaczony jako przedefiniowujący koniec innego powiązania (pod analogicznymi warunkami) Wtedy dla konkretnego zbioru instancji na innych końcach obu powiązań kolekcje wyznaczone przez koniec przedefiniowujący i przedefiniowany są takie same
Dodatkowa semantyka powiązań (c.d.) Powiązania mogą być specjalizowane Istnienie wiązania w powiązaniu specjalizującym implikuje istnienie wiązania wiążącego ten sam zbiór instancji w powiązaniu specjalizowanym Powiązanie (tylko binarne) może reprezentować kompozycję czyli agregację całkowitą (isComposite = true) Jest to silna postać agregacji czyli związku całość-część, w której instancja części jest zawarta w co najwyżej jednej instancji całości w danej chwili Usunięcie całości pociąga za sobą usunięcie wszystkich części
Uwagi Nie jest określony porządek i sposób tworzenia instancji części w kompozycji Nie jest określony związek między specjalizacją powiązania a przedefiniowywaniem i braniem podzbioru jego końca Nie jest określony związek logiczny między wyznaczaniem powiązania pochodnego a wyznaczaniem jego (pochodnych) końców
Powiązania – przykłady notacji
Powiązania – przykłady notacji
Diagram typów danych
Metaklasa DataType Typ danych (DataType) to klasyfikator (typ), którego instancje są identyfikowane tylko przez swoją wartość Może zawierać atrybuty – pozwala to modelować typy strukturalne
Metaklasy Property i Operation (c.d.) Diagram pokazuje związek między typem danych a jego atrybutami (instancje Property) i operacjami (instancje Operation)
Metaklasa PrimitiveType Podstawowy typ danych specyfikuje predefiniowany typ danych bez interesującej struktury wewnętrznej Jego operacje mogą być określone poza UML 4 typy podstawowe z Core::PrimitiveTypes są instancjami PrimitiveType
Metaklasa Enumeration Wyliczenie to typ danych, którego wartości są wymienione w modelu jako literały wyliczenia Jest możliwe poszerzenie dostępnych literałów wyliczenia w innym pakiecie lub profilu
Metaklasa EnumerationLiteral Zdefiniowana przez użytkownika wartość typu wyliczeniowego Ma nazwę identyfikującą go w ramach wyliczenia Nazwy literałów wyliczeń nie są globalne i muszą na ogół być kwalifikowane
Diagram pakietów
Metaklasa Type (c.d.) Diagram pokazuje powiązanie między metaklasami Type i Package reprezentujące przynależność typu do pakietu
Metaklasa Package Pakiet stanowi zgrupowanie elementów, zapewnia dla swoich elementów przestrzeń nazewniczą Może zawierać inne pakiety oraz scalać inne pakiety Jeśli element pakietu ma określoną widzialność, to jest ona prywatna albo publiczna
Pakiety – notacja
Metaklasa PackageMerge Scalenie pakietów to skierowany związek między dwoma pakietami określający jak elementy jednego pakietu rozszerzają elementy innego pakietu Powinno być używane wtedy, gdy elementy różnych pakietów mają takie same nazwy i reprezentują to samo pojęcie Pozwala to przyrostowo definiować pojęcia
Metaklasa PackageMerge (c.d.) Scalenie może być rozumiane jako operacja, która na podstawie zawartości 2 pakietów produkuje nowy pakiet, którego elementy stanowią kombinację elementów obu zaangażowanych pakietów Implikuje to wykonanie na elementach reprezentujących te same pojęcia szeregu transformacji podlegających formalnie określonym regułom Pakiet źródłowy (przyjmujący – receivingPackage) reprezentuje zarówno operand scalania, jak i rezultat scalania Formalne reguły transformacji opisane są szczegółowo w specyfikacji Infrastruktury UML
Scalenie pakietów – notacja
Scalenie pakietów – widok konceptualny Uwaga: to NIE jest diagram UML.
Semantyka scalania pakietów P3::A reprezentuje wynik scalenia P1::A z P2::A
Scalanie pakietów – przykład @ NIE jest standardowym operatorem scalania
Scalanie pakietów – przykład (c.d.)