UML – praktyczne podstawy dla programistów C#

Spotykam czasem programistów, którzy nie znają notacji UML-owej. Poniżej opisuje cześć nomenklatury stosowanej w języku UML. Skupię się głownie na diagramie klas. Czyli tym co dla Nas najważniejsze.

Szczegóły co to jest UML, jaka jest aktualna wersja i jakie są inne rodzaje diagramów, zamieszczone są na wikipedi. Polecam poczytać i przygotować grunt pod naukę.

Diagramy klas stosujemy gdy chcemy pokazać jakie zależności występują pomiędzy obiektami lub jakie obiekty występują w aplikacji. Stosujemy je głownie aby zaplanować architekturę aplikacji. Choć z doświadczenia wiem, że często stosuje się je do zaplanowania architektury pojedynczych rozwiązań.

Zaczynamy!

  • Pakiety

Czyli po prostu podzespoły czyli po ludzku dll-ki.

Dll-ka jest prostokątem gdzie jej nazwa jest wyjustowana do lewej. Wszystkie klasy należące do podzespołu są rysowane w środku. Dotyczy to też namespace-ów.

uml_pakiet

  • Klasa

Klasa jest prostokątem, gdzie nazwa klasy jest umieszczana na środku. W UML-u nie ma obowiązku wpisywać do klasy wszystkich metod, pól i właściwości. Wpisujemy te, które są istotne dla pokazania danej architektury.

uml_klasa

  •  Metody

Metody oznacza się wg wzoru:

[widoczność] nazwa_metody [(parametry)] [: typ wartości zwracanej] ustawienia}]

Dla widoczności mamy do wyboru:

„+” – element publiczny,
„-”  – element prywatny,
„#” – element chroniony.

Parametry oznacza się wg wzoru:

nazwa [: typa parametru]

uml_klasa_metody

Krótkie omówienie:

Moja klasa posiada 2 metody publiczne i 1 metodę prywatną.

Pierwsza metoda zwraca void i nie ma argumentów.
Druga metoda zwraca string i nie ma argumentów.
Trzecia metoda zwraca void i ma jeden argument typu string.

Jak widać, rysowanie klas i metod w nich zawartych jest proste.

  •  Relacje

uml_dziedziczenie

Powyżej przykład dziedziczenia. Strzałka pełna nie wypełniona pokazuje kierunek dziedziczenia. Czyli po ludzku, TwojaKlasa dziedziczy MojąKlasę.

uml_referencja

Powyżej przykład innej relacji. Strzałka jest otwarta linia jest ciągła. Oznacza to, że w klasie JejKlasa jest referencja do klasy MojaKlasa. Czyli JejKlasa posiada zmienną, która przechowuje referencje do obiektu MojaKlasa

 

uml_brak_referencji

Kolejny przykład przedstawia relację gdzie JejKlasa nie przechowuje referencji do MojejKlasy. Może to się zdarzyć gdyby klasa MojaKlasa była statyczna. Używając w klasie JejKlasa jakiś metod statycznych z MojejKlasy możemy śmiało zaznaczyć, że nie ma zmiennych przechowujących referencje do klasy MojaKlasa poprzez przerywaną linie i otwartą strzałkę.

so far, so good

  • Interfejsy

Interfejsy rysujemy tak jak klasę ale dodajemy nad nazwą napis <interfejs>.

uml_interfejs

Metody rysujemy z zachowaniem tych samych zasad co w klasach.

  • Implementacja interfejsu

uml_implementacja_interfejsu

Najważniejsza relacja jeśli chodzi o interfejsy to implementacja interfejsu.

Powyżej przykład jak MojaKlasa implementuje interfejs IJegoIntefejs

Powyższe diagramy są absolutnym minimum jeśli chodzi o notację UML. Dzięki zapamiętaniu tych zasad możemy już rysować architekturę aplikacji lub pojedynczych rozwiązań. Implementować wzorce projektowe. Do czego gorąco zachęcam.