Jezyk UML - K.Subieta.pdf

(351 KB) Pobierz
1
V Konferencja PLOUG
Zakopane
Październik 1999
Język UML
Kazimierz Subieta
Instytut Podstaw Informatyki PAN, Warszawa
Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa
Streszczenie
UML (Unified Modeling Language), zunifikowany język do modelowania, jest następcą i syntezą notacji
występujących w obiektowych metodykach analizy i projektowania systemów informatycznych, które
pojawiły się w końcu lat 80-tych i na początku lat 90-tych. Jest on oparty o pojęcia obiektowości, takie jak
obiekty, klasy, atrybuty, związki, agregacje, dziedziczenie, metody i inne. UML powstał w wyniku
połączonych wysiłków trzech znanych metodologów: Grady Boocha, Ivara Jacobsona i Jamesa Rumbaugh'a.
Są oni autorami popularnych metodyk: OODA (Booch), Objectory (Jacobson) i OMT (Rumbaugh). UML
jest zestawem pojęć oraz notacji graficznych (diagramów), które pozwalają wszechstronnie odwzorować
modelowaną dziedzinę problemu, założenia projektowanego systemu informatycznego, oraz większość
istotnych aspektów jego konstrukcji. UML jest obecnie wspomagany przez wiele narzędzi CASE. Został on
także zaakceptowany jako przemysłowy standard przez ciało standardyzacyjne OMG rozwijające standard
CORBA. Artykuł wprowadza w motywacje i cele UML oraz objaśnia na przykładach podstawowe pojęcia,
notacje i zastosowania UML.
1 Wstęp
Wzrost popularności obiektowości w informatyce spowodował prawdziwą eksplozję metodyk i
notacji określanych jako „obiektowe”, wśród nich: BON, Catalysis, DOOS (Wirfs/Brock),
EROOS, Express, Fusion, Goldberg/Rubin, MainstreamObjects, Martin/Odell, MOSES, Objectory
(Jacobson), OMT (Rumbaugh), OOA/OOD (Coad/Yourdon), OOAD (Booch), OSA, Sintropy,
OOSA (Shlaer/Mellor) i inne [Booc94, CoYo91a, CoYo91b, Cole+94, GoRu95, Jaco92, MaOd91,
MaOd94, MaOd96, Mart93, Meye97, Rumb+91, Your+95]. Mimo różnic zarówno w podejściu jak
i w przeznaczeniu, metodyki te mają ze sobą wiele wspólnego. Dość powszechne stało się
odczucie, że różnice pomiędzy notacjami wprowadzanymi w tych metodykach są drugorzędne.
UML ma (w założeniu) dokonać unifikacji notacji używanych w istniejących metodykach. W
odróżnieniu od metodyk obiektowych, które oprócz notacji ustalają także postępowanie w każdej
fazie projektu, UML jest tylko zestawem pojęć i notacji. Może on być użyty do dowolnej
metodyki. Zdaniem autorów, UML swoim zakresem przykrywa większość elementów i faz
procesów analizy i projektowania.
UML jest dziełem trzech znanych metodologów: Grady Booch’a, Ivara Jacobsona i James’a
Rumbaugh’a (określanych w literaturze jako „ three amigos ”, trzej przyjaciele), w ramach firmy
Rational Software Corporation. Są oni autorami popularnych metodyk: OMT [Rumb+91]
(głównym autorem był J.Rumbaugh), OODA [Booc94] (autorem był G.Booch) oraz Objectory
[Jaco92] (głównym autorem był I.Jacobson). Celem ich wysiłków jest uzyskanie popularności
wybranej przez nich notacji i przez to opanowanie znacznej części rynku narzędzi CASE, szkoleń,
analiz, ekspertyz, projektów, konsultacji, itd. Szanse rynkowe UML zostały wzmocnione poprzez
zaakceptowanie go jako przemysłowego standardu przez ciało standardyzacyjne OMG ( Object
Management Group ) opracowujące standard CORBA [OMG95].
Pierwsze wersje (UML 0.8-0.91) datują się na lata 1995-1996. W styczniu 1997 powstała
wersja UML 1.0 [UML97], która została przesłana do OMG. Wersja UML 1.1, powstała w końcu
1997, została zatwierdzona jako składnik standardu OMG. Wersja UML 1.3 ukazała się w kwietniu
1999. Obecnie mówi się o wersji UML 1.4. Ponadto autorzy UML pracują nad zunifikowaną
metodyką analizy i projektowania [Kruc98, JBR99]. UML jest przedmiotem ogromnej ilości
książek, artykułów, stron WWW i innych materiałów, patrz np. [BJR98, Cant98, DoHu98,
DSWi98, FSJ97, Laem97, Mull99, OdFo98, Oest99, RoSc99, RJB99, Subi98, UML97, WaKl99].
Słowniki [FiEy95, Subi99] wyjaśniają znaczenia terminów i pojęć obiektowości, które leżą u
podstaw UML.
Podstawowym celem UML jest modelowanie systemów (nie tylko oprogramowania) z
użyciem pojęć obiektowych. UML jest notacją pośrednią, pomostem pomiędzy ludzkim
rozumieniem struktury i działania programów, a kodem programów. Taka notacja jest niezbędna
do specyfikacji, konstrukcji, wizualizacji i dokumentacji wytworów związanych z systemami
intensywnie wykorzystującymi oprogramowanie. Diagramy UML ustanawiają bezpośrednie
powiązanie elementów modelu pojęciowego z wykonywalnymi programami. Jednocześnie
umożliwiają one objęcie zagadnień związanych ze skalą problemu, towarzyszących złożonym
systemom o krytycznej misji.
Ideałem byłoby utworzenie języka do modelowania użytecznego zarówno dla ludzi jak i
maszyn, czyli czegoś w rodzaju super-języka programowania, który z jednej strony byłby
całkowicie adekwatny w stosunku do ludzkiej percepcji, zaś z drugiej strony, mógłby być użyty do
automatycznej generacji programów. W związku z tym (zdaniem autorów UML) prace nad
konstrukcją UML nie są istotnie różne od zaprojektowania nowego języka programowania. Można
jednak mieć sceptyczny stosunek do tego rodzaju zapowiedzi. UML jest przede wszystkim
językiem odwołującym się do ludzkiej percepcji i wyobraźni. Uczynienie z niego języka
algorytmicznego wymagałoby m.in. precyzji w specyfikacji struktur danych oraz środków
manipulacji tymi strukturami danych, co nieuchronnie prowadziłoby do znacznego zmniejszenia
czytelności diagramów, czyli zmniejszenia potencjału UML jako środka modelowania
2
pojęciowego. Uwzględnienie w jednym języku zarówno wymagań dotyczących naturalności,
poglądowości i wysokiego poziomu abstrakcji niezbędnego dla ludzi zajmujących się projektem,
jak i wymagań dotyczących algorytmicznej precyzji niezbędnej dla komputera, wydaje się
nieosiągalne.
Zgodnie z deklaracjami autorów, UML przykrywa wszystko to, co może być zrobione przy
pomocy istniejących metodyk. Jak można się domyśleć, to twierdzenie ma podłoże marketingowe i
nie jest ani do udowodnienia, ani do obalenia, gdyż bazuje na subiektywnych odczuciach. (Autorzy
innych metodyk są często innego zdania.) Wysiłek autorów UML jest skoncentrowany na
stworzeniu wspólnego meta-modelu (unifikacji semantyki) i wspólnej notacji (odbioru tej
semantyki przez ludzi). Promowany jest iteracyjny i przyrostowy proces rozwoju oprogramowania,
który jest napędzany przez przypadki użycia ( use cases ) i skoncentrowany na koncepcyjnej
architekturze projektowanego systemu. Zdaniem autorów, UML przykrywa także projektowanie
systemów współbieżnych i rozproszonych.
2 Diagramy definiowane w UML
Ze względu na mnogość aspektów projektowanych systemów żadna pojedyncza perspektywa
spojrzenia na projektowany system nie jest wystarczająca. Tę sytuację można porównać do
projektu złożonego mechanizmu. Pojedynczy rzut tego mechanizmu na jedną płaszczyznę nie jest
wystarczający do zrozumienia jego budowy; potrzebne jest wiele rzutów i przekrojów. Stąd
metodyki projektowania wprowadzają wiele środków graficznych (diagramów) służących do
„rzutowania” analizowanego lub projektowanego systemu na pewien szczególny jego aspekt.
W notacji UML można zapisać następujące diagramy:
¾ Diagramy przypadków użycia ( use case ). Są one podstawą metodyki Objectory. Ich
głównym celem jest odwzorowanie funkcji projektowanego systemu w taki sposób, w jaki
będą je widzieć jego użytkownicy. W metodykach opartych na UML przypadkom użycia
przypisuje się szczególne znaczenie jako środka napędzającego cały proces rozwoju systemu.
¾ Diagramy klas ( class diagrams ). Są one odmianą dość klasycznych diagramów encja-związek
( entity-relationship ). Zostały praktycznie bez większych zmian przejęte z OMT. Wprowadzone
są rozszerzenia poprawiające czytelność diagramów i przystosowujące je do konkretnej
dziedziny zastosowań (np. stereotypy i odpowiadające im ikony). Odmianą diagramów klas sa
diagramy pakietów ( package diagrams ).
¾ Diagramy odwzorowujące dynamiczne własności systemu ( behavior ), w tym:
Diagramy sekwencji (szczególny przypadek diagramów interakcji): pokazanie
kolejności komunikatów przesyłanych pomiędzy obiektami dla pewnej sytuacji, np.
przypadku użycia.
Diagramy współpracy ( collaboration ) (szczególny przypadek diagramów interakcji):
podobne do diagramów sekwencji, ale z jednoczesnym odwzorowaniem statycznej
struktury obiektów.
Diagramy stanów : odwzorowanie istotnych stanów (w których może znaleźć się proces
przetwarzania) oraz przejść pomiędzy tymi stanami.
Diagramy aktywności : diagramy przepływu sterowania ( flowcharts ) uzupełnione o
proste środki odwzorowania równoległych procesów.
¾ Diagramy implementacyjne , w tym:
Diagramy komponentów
Diagramy wdrożeniowe ( deployment )
Ze względu na ograniczoną objętość tego artykułu omówione zostaną tylko niektóre z
wymienionych diagramów.
3
1.1 Przypadki użycia
Przypadki użycia ( use cases ) [Jaco92, RoSc99, SWJ98] były w sposób intuicyjny stosowane w
tradycyjnym projektowaniu systemów informatycznych na długo przed pojawieniem się metodyk
obiektowych. Zasługą Jacobsona jest zarówno wyodrębnienie przypadków użycia jako metody
projektowania, jak i stworzenie metodyki i notacji graficznej dla tego paradygmatu. Jak często
bywa z powszechnie stosowanymi, lecz nie nazwanymi rzeczami, kariera przypadków użycia w
literaturze z zakresu projektowania SI zaczęła się od wprowadzenia dla nich specjalnej nazwy,
przypisaniu tej nazwie określonego znaczenia i rozpropagowanie tego pojęcia jako specjalnego
paradygmatu projektowania.
Przypadek użycia jest to pewna nazwana lub dobrze określona interakcja pomiędzy
użytkownikiem a systemem komputerowym. Przypadek użycia odwzorowuje pewną funkcję
systemu w taki sposób, w jaki będą ją widzieć jego przyszli użytkownicy. Jakkolwiek w tym
stwierdzeniu można podejrzewać banał, rzecz tak oczywistą, że nie warto o niej mówić, okazuje
się, że dla dużych systemów o wielu złożonych i wzajemnie powiązanych funkcjach tego rodzaju
podejście ma ogromny sens. Pozwala ono zapomnieć o strukturze/architekturze systemu i jego
detalach technicznych i skoncentrować się na zewnętrznych funkcjach systemu. Podejście do
projektowania od strony przypadków użycia jest uważane za znacznie bardziej zdrowe od podejść
„technokratycznych”, ponieważ sprzyja ono punktowi widzenia, w którym centralnym ośrodkiem
zainteresowania staje się człowiek - przyszły użytkownik systemu - a nie budowa mechanizmu
systemu. Jak pokazały doświadczenia wielu projektów, jedną z głównych przyczyn ich
niepowodzeń było zbytnie skoncentrowanie się projektantów na detalach technicznych, z
pominięciem lub brakiem dostatecznej uwagi dla interakcji pomiędzy użytkownikami a systemem
komputerowym.
Podejście przypadków użycia ma przede wszystkim na względzie określenie wymagań na
projektowany system. Celem tej metody jest:
¾ Głębsze zrozumienie użycia systemu będącego przedmiotem procesu projektowania.
¾ Zwiększenie stopnia świadomości analityków i projektantów co do celów tego systemu.
¾ Umożliwienie interakcji zespołu projektowego z przyszłymi użytkownikami systemu.
¾ Weryfikacja poprawności i kompletności projektu.
¾ Ustalenie wszystkich strukturalnych i funkcjonalnych własności systemu.
¾ Ustalenie składowych systemu i związanego z nimi planu konstrukcji systemu.
¾ Dostarczenie podstawy do sporządzenia planu testów systemu.
Diagramy przypadków użycia są bardzo proste. Rys.1 przedstawia diagram przypadków użycia
dla pewnej (hipotetycznej) firmy zajmującej się pośrednictwem w sprzedaży.
Ustalenie limitów
Aktualizacja
rozliczeń
Dyrektor handlowy
System
rozliczeniowy
Analiza ryzyka
«uses»
Wyliczenie
ocen
Sprawy cenowe
«uses»
Handlowiec
Ocena zysków
«extends»
Sprzedawca
Przekroczenie
limitów
Rys.1. Przykładowy diagram przypadków użycia
4
6324176.001.png
Model przypadków użycia dostarcza bardzo abstrakcyjnego poglądu na system z pozycji
aktorów, którzy go używają. Nie włącza jakichkolwiek szczegółów, co pozwala wnioskować o
systemie na odpowiednio ogólnym, abstrakcyjnym poziomie. Diagram przypadków użycia zawiera
znaki graficzne oznaczające aktorów (ludziki) oraz przypadki użycia (owale z wpisanym tekstem).
Te oznaczenia połączone są liniami odwzorowującymi powiązania poszczególnych aktorów z
poszczególnymi przypadkami użycia.
Podstawowym zastosowaniem takich diagramów jest dialog z użytkownikami zmierzający do
sformułowania wymagań na system. Stąd wynika, że diagramy i opis przypadków użycia muszą
być bardzo naturalne, proste i nie mogą wprowadzać elementów komputerowej egzotyki i żargonu.
W późniejszej fazie przypadki użycia mogą być wyspecyfikowane bardziej precyzyjnie przy
pomocy notacji lub diagramów obiektowych. Następną fazą w postępowaniu opartym na
przypadkach użycia jest rozpisanie ich przy pomocy notacji wprowadzanych w innych diagramach
UML. Należy podkreślić, że tworzenie przypadków użycia jest niezdeterminowane i subiektywne.
Na ogół różni analitycy tworzą różne modele.
Metoda przypadków użycia wymaga od analityka określenia wszystkich aktorów związanych
w jakiś sposób z projektowanym systemem. Każdy aktor używa lub będzie używać systemu na
kilka specyficznych sposobów (przypadków użycia). Zazwyczaj aktorem jest osoba, ale może nim
być także pewna organizacja (np. biuro prawne) lub inny system komputerowy. Należy zwrócić
uwagę, że metoda modeluje aktorów, a nie konkretne osoby. Jedna osoba może pełnić rolę wielu
aktorów; np. być jednocześnie sprzedawcą i klientem. I odwrotnie, jeden aktor może odpowiadać
wielu osobom, np. strażnik budynku. Aktor jest pierwotną przyczyną napędzającą przypadki
użycia. Jest on sprawcą zdarzeń powodujących uruchomienie przypadku użycia, jak też odbiorcą
informacji wyprodukowanych przez przypadki użycia. Aktor reprezentuje rolę, którą może grać w
systemie jakiś jego użytkownik, np. kierownik, urzędnik, klient. Można tworzyć aktorów
abstrakcyjnych, na podobieństwo klas abstrakcyjnych. Np. aktor „urzędnik” jest nadklasą dla
aktorów „kasjer” i „dyrektor”; powiązania z konkretnymi przypadkami użycia mogą być ustalone
zgodnie z tą hierarchią klas aktorów.
Przypadek użycia reprezentuje sekwencję operacji lub transakcji wykonywanych przez system
w trakcie interakcji z użytkownikiem; np. potwierdzenie pisma, złożenie zamówienia. Przypadki
użycia reprezentują przepływ zdarzeń w systemie i są uruchamiane (inicjowane) przez aktorów.
Przypadek użycia jest zwykle charakteryzowany przez krótką nazwę. Opis przypadku użycia może
być jednak dowolnie rozbudowany, w szczególności może zawierać następujące fragmenty:
¾ Jak i kiedy przypadek użycia zaczyna się i kończy?
¾ Opis interakcji przypadku użycia z aktorami, włączając w to kiedy interakcja ma miejsce i co
jest przesyłane.
¾ Kiedy i do czego przypadek użycia potrzebuje danych zapamiętanych w systemie, lub jak i
kiedy zapamiętuje dane w systemie?
¾ Wyjątki przy przepływie zdarzeń.
¾ Jak i kiedy używane są pojęcia dziedziny problemowej?
UML wprowadza także bardzo proste powiązania pomiędzy przypadkami użycia, oznaczane
strzałkami dodatkowymi napisami «extends» (rozszerza) i «uses» (używa), Rys.1. Przypadek
użycia podłączony przez strzałkę «extends» oznacza, że niekiedy (nie zawsze) dany przypadek
użycia jest rozszerzony przez inny przypadek użycia. Przypadek użycia podłączony przez strzałkę
«uses» oznacza wspólny fragment w wielu przypadkach użycia, który warto jest wyodrębnić ze
względu na jego podobieństwo koncepcyjne oraz ze względu na późniejszą możliwość uniknięcia
wielokrotnej implementacji tego fragmentu. Taki fragment jest niekiedy określany jako blok
ponownego użycia ( reuse ).
Typowa dokumentacja przypadków użycia powinna zawierać następujące elementy:
¾ Krótki opis przypadku użycia.
¾ Przepływ zdarzeń opisany nieformalnie.
¾ Związki pomiędzy przypadkami użycia.
5
Zgłoś jeśli naruszono regulamin