W UML interfejsy są zestawem operacji, które wyznaczają usługi oferowane przez klasę i sposobem na przejrzystą prezentację projektu.
Zapoznałeś się już ze sposobem prezentacji
klas na diagramach klas, więc nadszedł czas
na interfejsy. Twórcy języka UML rozumieją
interfejsy jako zestaw operacji, które wyznaczają
usługi oferowane przez klasę (lub komponent, lecz
o komponentach będzie w przyszłości). Zagmatwane?
Jak wszystkie regułki. Podejdźmy do sprawy od
bardziej praktycznej strony – jak programiści.
Jeśli programowanie obiektowe nie jest ci obce,
zapewne wiesz, jak rozumieć interfejs. Jeśli zaś
w programowaniu obiektowym dopiero stawiasz
pierwsze kroki, oto co powinieneś wiedzieć
o interfejsach:
- twoja aplikacja posiada zbiór klas wykonujących
to samo zadanie w różny sposób. - z takiego zestawu klas robiących \”to samo
w różny sposób\” (np. sortujących pewną tablicę
różnymi algorytmami) wyłuskaj wspólny zestaw
nazw operacji (metod), które pozwolą na ujednolicenie
obsługi. Mówiąc inaczej, zadbaj o to,
aby ta powiązana ze sobą rodzina klas miała
takie same nazwy operacji publicznych. - zbierz takie operacje w specjalną klasę, w której
operacjom nie będzie odpowiadał żaden kod.
Będzie to jedynie zbiór nazw – to właśnie nasz
interfejs.
Co to daje? Klasy implementujące nasz interfejs
(w UML klasy realizują interfejsy) są zgodne co do
typu. Wystarczy, że kod korzystający z takich klas
zna budowę interfejsu, a już potrafi poprawnie
posługiwać się wszystkimi klasami implementującymi
ten interfejs.
Dlaczego? Interfejs wymaga, aby klasa realizująca
go dostarczyła implementacji wszystkich
określonych w nim operacji. Co więcej, operacje te
muszą w klasie mieć takie same nazwy jak w interfejsie.
Dzięki temu kod używający takiej rodziny
klas, znając jednie interfejs, może bezpiecznie
posługiwać się całą rodziną, nawet jeśli niektóre z klas powstały na długo po utworzeniu tego kodu.
Typowy interfejs w UML-u może mieć taki sam
symbol jak klasa, jednak wzbogacony o stereotyp
{html}<
Widać tutaj zarówno nazwę interfejsu, jak
i wszystkie jego operacje. Interfejs można także
przedstawić w postaci uproszczonej – wówczas ma
on postać kuli i nie widać na nim żadnych operacji
(zobacz rysunek 2).
Powyższe interfejsy to tak zwane interfejsy
udostępniające. Klasy realizują je, a zadanie realizacji
przedstawiane jest
na diagramie za pomocą
strzałki z przerywaną linią
i niezamalowanym grotem
– zobacz rysunek 3.
W przypadku, gdy interfejs
prezentowany jest
w postaci kuli, związek
realizacji pomiędzy klasą
a interfejsem przedstawia
się za pomocą linii ciągłej
– rysunek 4.
Jeśli klasa korzysta
z usług innych klas za
pośrednictwem interfejsu,
wówczas mówimy o interfejsie pozyskującym.
Interfejs taki ma symbol łuku – rysunek 5.
Klasa asocjacyjna
Wiesz już czym jest związek asocjacji – jeśli nie
pamiętasz, zapoznaj się raz jeszcze z poprzednim
odcinkiem kursu UML-a. Warto też wiedzieć o istnieniu
klas asocjacyjnych. Są to klasy powiązane
za pomocą linii przerywanej z asocjacją. Dzięki
temu dana klasa opisuje asocjacje pomiędzy
klasami, których ta asocjacja dotyczy. Na rysunku 6 zaprezentowano klasę asocjacyjną, mówiącą nam,
że Osoba jest powiązana z Firmą poprzez bycie jej
pracownikiem.
Warto także pamiętać, że w przypadku występowania
klasy asocjacyjnej w kodzie programu,
klasy biorące udział w asocjacji mogą, ale nie
muszą, posiadać bezpośrednie połączenia pomiędzy
sobą.
A więc klasa Osoba nie musi mieć bezpośredniego
połączenia z klasą Firma. Klasa Osoba może
mieć na przykład połączenie z klasą Pracownik, zaś
klasa Pracownik z klasą Firma. Dzięki temu przez
pośrednictwo klasy asocjacyjnej Pracownik jest
powiązany z Firmą.
Diagramy obiektów
W przypadku gdy mamy do czynienia z bardziej
złożonymi diagramami klas, można pokusić się
o zbudowanie dodatkowo diagramu obiektów.
Obiekty na diagramie prezentuje się za pomocą
prostokątów, w których nazwa jest podkreślona. Po
niej, po dwukropku, znajduje się nazwa klasy, której
obiekt reprezentuje dany prostokąt. Na rysunku 7
przedstawiono powiązanie obiektów pracowników
(klasy Pracownik) z obiektem klasy Firma.
Zakończenie
W kolejnym odcinku zapoznasz się z nowymi
diagramami – diagramami przypadków użycia.
Tymczasem ćwicz z poznanymi już diagramami klas.
Jeśli nie dysponujesz żadnym programem, który by
to ułatwił, możesz zawsze rysować diagramy ołówkiem
na kartce. Pamiętaj tylko o gumce do ścierania,
ponieważ przyda się ona niejeden raz.