Diagram klas przedstawia klasy oraz relacje między nimi.
Aby dobrze zrozumieć zasadę działania musimy sobie przypomnieć/przyswoić podstawowe pojęcia:
- Klasa – jest to definicja według której będzie definiowany obiekt. Określa jego typy, zachowanie oraz działanie. Klasa posiada atrybuty oraz operacje. Przykładem może być klasa człowiek, którego atrybutami są: imię, nazwisko, wiek. A operacjami np. „przedstaw się”.
- Obiekt – konkretny egzemplarz klasy ze specyficznie określonymi atrybutami. Dla powyższego przykładu klasy człowiek, możemy utworzyć obiekt Jan Kowalski w wieku 30 lat. Możemy wywołać na nim operacje „przedstaw się”. Jednak wiadomo, że będzie ona wyglądała inaczej niż w przypadku innego obiektu np. Maria Nowak.
- Relacja – oddziaływanie/wpływ na siebie, jakie mają dwa lub więcej obiektów. Np. klasa samochód oraz klasa koło. Prosty związek: klasa samochód zawiera klasę koła.
Diagram klas, jak widać to na obrazku obok, jest podzielony na trzy sekcje:
- Nazywa klasy
- Atrybuty
- Operacje
Nazwa klasy
- Zazwyczaj (zalecany) rzeczownik.
- Jeśli klasa jest abstrakcyjna, jej nazwę wpisujemy czcionka pochyloną.
- Każdą inną dodatkową informacje o klasie wpisujemy w klamerkach w prawym dolnym rogu pierwszej sekcji.
Atrybuty
Atrybuty umieszczone w środkowej sekcji mają budowę:
[specyfikator dostępu] [nazwa] [typ] [krotność] [wartość początkowa] [opis cech]
Specyfikatory dostępu:
+ publiczny
– prywatny
~ pakietowy
# chroniony
Nazwa:
Określa to jak klasa ma odwoływać się do atrybutu. Są to rzeczowniki, a więc powinny zaczynać się z małej litery. Nazwa może zawierać krotność. Jeśli krotność jest mnoga, to można zapisać w postaci mnogiej np. „osoby” jako nazwę tablicy przechowującą obiekty typu człowiek.
Typ:
Określa ograniczenie rodzaju obiektu. Np. typ prosty int lub obiekt człowiek.
Krotność (nieobowiązkowe):
1 – w danym atrybucie może być przechowywany tylko jeden obiekt. Np. człowiek ma jedno serce.
0..1 – co najwyżej jeden (0 lub 1). Np. człowiek może mieć co najwyżej jednego partnera.
* – Dowolna liczba.
3…7 – dolne i górne ograniczenie prezentuje zakres ilości elementów, jakie mogą występować.
*Pominięcie krotności w opisie atrybutu oznacza, że atrybut występuje tylko raz.
Wartość początkowa (nieobowiązkowe):
Jeśli atrybut ma zostać zainicjowany jakąś wartością, to w tym miejscu podaje się jej wartość.
Brak takiej informacji na diagramie oznacza, ze obiekt ma przyjąć wartość domyślną – zgodną z językiem oprogramowania.
Opis cech (nieobowiązkowe):
Maksymalnie jedno, dwa wyrazy sugerujące szczególe cechy dla atrybutów np. readonly, const, unique, bag itp.
Operacje
Atrybuty umieszczone w ostatniej, trzeciej sekcji posiadają budowę:
[specyfikator dostępu] [nazwa] [lista parametrów] [opis cech]
Specyfikatory dostępu:
+ publiczny
– prywatny
~ pakietowy
# chroniony
Nazwa
napis zaczynający się od małych liter – powinien to być czasownik.
Lista parametrów
Lista parametrów oddzielonych przecinkami
Składnia listy paramentów
[kierunek] [nazwa]: [typ] = [wartość domyślna]
Kierunek in (wejściowy), out (wyjściowy), ref (referencyjny). Domyślnie in.
Nazwa, typ i wartość domyślna – dokładnie tak samo jak w atrybutach
Opis cech (nieobowiązkowe):
Można opisać dodatkową adnotację cechy dla operacji. Np. operacja Kwerendy (Query) – nie zmieniają stanu obiektu. Jeśli po liście parametrów podamy „{query}” to znaczy, że nie zmienia ona stanu obiektu. Wszystkie pozostałe to modyfikatory. Domyślenie nie padając żadnego oznacza, że dana operacja jest modyfikatorem i zmienia stan obiektu.
Na koniec chciałem dodać, że operacje, które nie zmieniają stanu obiektu (np. konwertery) powinny być statyczne i finalne ze względów wydajnościowych. Należy się również zastanowić, czy nie należy operacji statycznych wydzielić do innej klasy.
Na diagramie UML nie warto jest dodawać geterów i seterów. Są one oczywiste z punktu widzenia programisty, a na diagramie zaciemniają tylko obraz.