Czym jest profil UML#

Profil UML (UML profile) jest mechanizmem lekkiego rozszerzania języka UML dla określonej dziedziny, platformy lub metody. Definiuje stereotypy, ich właściwości, ograniczenia i relacje z elementami metamodelu UML. Profil pozwala używać pojęć bardziej wyspecjalizowanych niż ogólne Class, Component czy Activity, pozostając przy istniejącej strukturze UML.

Przykładowo zespół integracyjny może wprowadzić stereotyp «UsługaSieciowa», który rozszerza element Component i dodaje informacje o protokole oraz adresie bazowym. Gdy stereotyp zostanie zastosowany do komponentu w modelu, jego instancja może otrzymać wartości tych właściwości. Dzięki temu można opisać konwencje dziedziny w sposób powtarzalny i walidowalny.

Profil nie tworzy zupełnie nowego metamodelu i nie usuwa reguł UML. Jest pakietem definicji, które dostosowują istniejące elementy przez stereotypy, wartości oznaczone i ograniczenia. Gdy potrzebny jest całkowicie odmienny język modelowania z własnym metamodelom, profil może być niewystarczający; jego celem jest rozszerzenie, a nie zastąpienie UML.

Czym jest diagram profili#

Diagram profili pokazuje elementy definiujące profil i relacje między nimi: pakiet profilu, stereotypy, metaklasy UML, które stereotypy rozszerzają, oraz właściwości stereotypów. Może również przedstawiać zależności profilu od innych profili albo relacje między stereotypami.

Diagram opisuje definicję rozszerzenia. Nie jest tym samym co diagram modelu, na którym stereotyp został już zastosowany. Warto odróżnić trzy rzeczy:

  • Profil — pakiet zawierający definicje rozszerzeń.
  • Definicja stereotypu — reguła określająca, do jakich elementów UML stereotyp można zastosować i jakie informacje dodaje.
  • Zastosowanie stereotypu — użycie stereotypu na konkretnym elemencie modelu, wraz z ewentualnymi wartościami właściwości.

Diagram profili może być techniczny, ponieważ operuje na metaklasach, czyli elementach opisujących język modelowania. Nie należy mylić metaklasy z klasą domenową z modelu aplikacji.

Profil jako pakiet#

Profil jest specjalnym rodzajem pakietu. W notacji oznacza się go stereotypem «profile». Zawiera definicje stereotypów oraz ewentualne typy, wyliczenia i inne elementy potrzebne do określenia wartości właściwości.

Profil może importować lub odwoływać się do metaklas UML, które chce rozszerzać. W modelu źródłowym zależności te wiążą definicje stereotypów z istniejącym metamodelom. Samo utworzenie pakietu o nazwie „Profil” nie daje jeszcze żadnemu elementowi nowej semantyki; trzeba zdefiniować stereotypy i ich rozszerzenia.

Profile można łączyć w modelu, o ile nie powoduje to konfliktów nazw, ograniczeń ani narzędziowych. Model może mieć zastosowanych więcej niż jeden profil. Jeśli stereotypy pochodzą z kilku profili, ich pochodzenie i wersje powinny być możliwe do ustalenia.

Stereotypy i rozszerzane metaklasy#

Stereotyp jest klasą profilu, która definiuje, w jaki sposób istniejąca metaklasa może zostać rozszerzona. Zapisuje się go z oznaczeniem «stereotype». Stereotyp nie jest samodzielnym typem elementu UML poza metaklasą, którą rozszerza; stosuje się go w połączeniu z właściwym elementem bazowym.

Metaklasa jest elementem metamodelu, np. Class, Component, Activity lub UseCase. Określa rodzaj modelowanego elementu, do którego można zastosować stereotyp. Nie jest to klasa aplikacji o takiej samej nazwie. W narzędziu element metaklasy bywa oznaczony «metaclass».

Relacja rozszerzenia (extension) łączy stereotyp z rozszerzaną metaklasą. W notacji UML jest to specjalny rodzaj asocjacji: wypełniony trójkątny grot wskazuje od stereotypu ku metaklasie, którą rozszerza. Rozszerzenie domyślnie nie jest wymagane, co oznacza, że nie każdy element metaklasy musi mieć zastosowany stereotyp. Jeśli profil wymaga stereotypu dla każdego takiego elementu, obowiązkowość powinna być jawnie określona, a nie domyślana z samej linii.

Stereotyp może rozszerzać jedną lub więcej metaklas, a metaklasa może być rozszerzana przez wiele stereotypów. Wielokrotne rozszerzenie wymaga przemyślenia, ponieważ zastosowanie stereotypu na różnych rodzajach elementów powinno mieć spójne znaczenie.

Właściwości i wartości oznaczone#

Stereotyp może deklarować właściwości, które stają się definicjami znaczników (tag definitions). Właściwość ma nazwę i typ, a może też mieć krotność, wartość domyślną lub ograniczenia. Przykłady to protokół: Protokół, punktKońcowy: URI albo wymagaUwierzytelnienia: Boolean.

Gdy stereotyp jest zastosowany do modelowanego elementu, wartości przypisane do jego właściwości są nazywane wartościami oznaczonymi (tagged values). Na diagramie mogą być pokazane jako para nazwa–wartość, np. {protokół = HTTPS}. Wartość oznaczona nie jest swobodnym komentarzem: powinna odpowiadać zdefiniowanej właściwości, jej typowi i ograniczeniom.

Typowanie właściwości pomaga uniknąć dowolnych, niespójnych tekstów. Jeśli protokół przyjmuje tylko wartości HTTP i HTTPS, profil może użyć wyliczenia zamiast nieograniczonego tekstu. Właściwości nie powinny jednak powielać pól, które już istnieją w UML, bez jasnego uzasadnienia.

Ograniczenia i notacja#

Profil może dodawać ograniczenia do elementów, które rozszerza. Ograniczenie może określać dozwolone wartości, warunki zgodności lub relacje między właściwościami stereotypu. Należy odróżnić ograniczenie zapisane w profilu od konwencji zespołu, która nie jest walidowana.

Stereotyp może zmieniać sposób prezentacji elementu przez ikonę lub kształt, jeśli narzędzie i profil to obsługują. Zmiana wyglądu nie zastępuje semantycznej definicji stereotypu. Dwa elementy o różnych kolorach nie stają się różnymi rodzajami modelu, chyba że profil tak je definiuje i potrafi tę różnicę zweryfikować.

Elementy stereotypowane mogą być zapisywane w notacji w guillemetach, np. «UsługaSieciowa» KatalogAPI. Nazwa stereotypu zazwyczaj rozpoczyna się wielką literą w nowszych wersjach UML. Narzędzia mogą oferować własne skróty, ikony lub sposoby renderowania wartości, więc warto opisać używaną konwencję.

Przykład: profil usług sieciowych#

Poniższy schemat przedstawia definicję profilu dla klas opisujących punkty końcowe usług. Stereotyp UsługaSieciowa rozszerza metaklasę Class i definiuje dwie właściwości: protokół oraz punkt końcowy. W modelu aplikacji stereotyp mógłby zostać zastosowany do klasy reprezentującej API.

Profil UML Usługi definiuje stereotyp Usługa sieciowa, rozszerzający metaklasę klasy i dodający typowane właściwości protokół oraz punkt końcowy.
Definicja profilu i przykład zastosowanego stereotypu.

Na diagramie właściwości w klasie stereotypu są definicjami znaczników; wartości przy Katalog API ilustrują ich użycie po zastosowaniu stereotypu. Pakiet Model sklepu stosuje profil Profil Usługi. PlantUML pokazuje rozszerzenie jako zwykłą strzałkę z etykietą «extends»; pełna notacja UML profilu używa wypełnionego trójkątnego grotu. PlantUML nie tworzy w tym przykładzie pełnego modelu profilu UML ani nie weryfikuje reguł metamodelu — diagram jest dydaktyczną ilustracją relacji, a nie wymiennym plikiem profilu.

Wartości HTTPS i /api/katalog są przykładowe. Poprawny profil wymagałby ustalenia, czy HTTP jest dozwolone, czy adres ma być typu URI, czy właściwość jest obowiązkowa oraz jakie ograniczenia dotyczą szyfrowania i autoryzacji. Samo oznaczenie komponentu stereotypem nie zapewnia bezpieczeństwa ani działania endpointu.

Zastosowanie profilu w modelu#

Profil należy najpierw zdefiniować, a następnie zastosować do pakietu modelu. Po zastosowaniu można używać jego stereotypów na elementach odpowiednich metaklas. Na przykład «UsługaSieciowa» może zostać użyty na komponencie, jeśli definicja stereotypu rozszerza Component.

Po zastosowaniu stereotypu można przypisać wartości jego właściwości. Narzędzie może prezentować je w przedziale stereotypu, w sekcji właściwości albo w panelu modelu. Sposób prezentacji jest zależny od narzędzia; znaczenie powinno wynikać z definicji profilu i typu modelu, a nie z samego wyglądu.

Profil powinien być wersjonowany i dostępny odbiorcom modelu. Jeśli model korzysta z profilu, ale jego definicja jest niedostępna, część semantyki elementów może być nieczytelna. Przy zmianie profilu sprawdź, czy istniejące zastosowania stereotypów nadal są poprawne oraz czy narzędzie potrafi je zaktualizować.

Jak projektować profil#

  1. Uzasadnij potrzebę. Zidentyfikuj powtarzające się pojęcia lub ograniczenia dziedziny, których standardowy UML nie wyraża wystarczająco jasno.
  2. Wybierz bazowe metaklasy. Wskaż, jakie elementy UML stereotyp może rozszerzać.
  3. Zaprojektuj spójne stereotypy. Każdy stereotyp powinien mieć jednoznaczne znaczenie i nazwę.
  4. Określ właściwości. Ustal typy, krotności, wartości domyślne i warunki dla danych.
  5. Dodaj ograniczenia. Zapisz zasady, które da się jednoznacznie wyrazić i zweryfikować.
  6. Zdecyduj o wymaganym rozszerzeniu. Określ, czy element metaklasy może istnieć bez danego stereotypu.
  7. Przygotuj przykładowe zastosowanie. Sprawdź, czy model jest czytelny dla osoby, która zna UML, ale nie brała udziału w tworzeniu profilu.
  8. Wersjonuj i testuj. Zweryfikuj zgodność z narzędziami i zaplanuj migrację istniejących modeli.

Profil powinien pozostać mały i spójny. Dodanie stereotypu dla każdego elementu modelu prowadzi do stworzenia równoległego słownika bez wystarczającego zysku. Zanim rozszerzysz UML, sprawdź, czy pojęcie nie jest już reprezentowane przez standardowy element, właściwość lub ograniczenie.

Zalety i ograniczenia#

Zalety#

  • Profil wprowadza wspólne słownictwo domenowe i zmniejsza liczbę nieformalnych konwencji.
  • Typowane właściwości mogą być sprawdzane przez narzędzia i używane w raportach.
  • Profil pozwala rozszerzyć sposób zapisu bez definiowania nowego metamodelu od podstaw.
  • Stereotypy mogą ujawniać role, które w ogólnym UML byłyby ukryte w nazwach lub komentarzach.
  • Zastosowany profil może być usunięty lub zmieniony niezależnie od podstawowego elementu UML, o ile narzędzie i model poprawnie obsługują tę operację.

Ograniczenia i koszty#

  • Odbiorca musi znać lub otrzymać definicję profilu; niestandardowe stereotypy nie są automatycznie zrozumiałe.
  • Zgodność między narzędziami może się różnić, zwłaszcza dla ikon, ograniczeń i eksportu profilu.
  • Profil wymaga właściciela, wersjonowania, dokumentacji i zasad aktualizacji.
  • Nadmierne profilowanie może uczynić model hermetycznym i trudnym do wymiany.
  • Mechanizm nie pozwala dowolnie zmienić podstawowej semantyki UML ani usunąć obowiązujących ograniczeń metamodelu.
  • Poprawne wygenerowanie diagramu profilu nie dowodzi, że definicja jest formalnie poprawna lub wspierana przez wybrane narzędzie.

Diagram profilu a diagram z zastosowanym stereotypem#

Diagram profilu opisuje, co stereotyp znaczy i jakie elementy może rozszerzać. Diagram aplikacyjny pokazuje konkretne elementy, do których stereotyp został zastosowany. Są to dwa różne widoki i zwykle mają inny cel: pierwszy służy twórcom profilu, drugi osobom modelującym system.

Przykładowo profil może definiować stereotyp «UsługaSieciowa» rozszerzający Component, a model komponentów może pokazać «UsługaSieciowa» KatalogAPI. W profilu definiuje się, że element ma właściwości protokół i punktKońcowy; w modelu podaje się ich wartości.

Częste błędy#

  • Mylenie stereotypu z nową metaklasą UML. Stereotyp rozszerza istniejący element, nie zastępuje całego metamodelu.
  • Stosowanie stereotypu bez wskazania metaklasy. Odbiorca musi wiedzieć, do jakiego rodzaju elementu można go zastosować.
  • Nazywanie każdej etykiety stereotypem. Stereotyp ma definicję w profilu i określone znaczenie.
  • Traktowanie właściwości stereotypu jak dowolnego tekstu. Zdefiniuj typ, krotność i ograniczenia wartości.
  • Przyjmowanie, że profil zmienia znaczenie standardowego UML bez ograniczeń. Rozszerzenie nie może znosić reguł bazowego metamodelu.
  • Mylenie definicji znacznika z wartością oznaczoną. Pierwsza jest częścią stereotypu, druga wartością przypisaną do jego zastosowania.
  • Założenie, że ikona stanowi semantykę. Wygląd może pomóc, ale nie zastępuje definicji i ograniczeń.
  • Brak kontroli wersji profilu. Zmiana nazwy lub typu tagu może wpłynąć na istniejące modele.
  • Używanie profilu dla jednorazowej adnotacji. Jeżeli informacja nie jest powtarzalna ani walidowalna, wystarczy komentarz lub notatka.

Co diagram profili pokazuje, a czego nie#

Diagram profili pokazuje definicję rozszerzenia UML: stereotypy, metaklasy, relacje rozszerzenia, właściwości i ograniczenia. Pomaga zrozumieć, jak powstaje modelowy słownik wyspecjalizowany dla konkretnej dziedziny.

Nie przedstawia automatycznie wszystkich zastosowań profilu, nie waliduje modelu bez narzędzia i nie gwarantuje zgodności między narzędziami. Do pracy z konkretnym systemem potrzebny jest również diagram, na którym stereotypy zostały zastosowane, oraz dostępna definicja profilu i jego wersji.