We wcześniejszych tematach dotknęliśmy zagadnienia diagramu klas, który jest niezbędny by zobrazować zależności konstrukcyjne systemu na poziomie implementacyjnym. Wróćmy do tego zagadnienia porządkując go i rozszerzając.

Wpierw przyjrzyjmy się jakie diagramy spotykamy w UML

Hierarchia diagramów w UML

Diagram klas należy do diagramów strukturalnych, czyli opisujących strukturę systemu. Jest to schemat przedstawiający zbiór klas, interfejsów, kooperacji oraz związki między nimi. Używa się go do przedstawienia relacji pomiędzy klasami modelując strukturę systemu. Tak zobrazowany system można dalej rozbudowywać dla szerszego wizualizowania w diagramach komponentów i wdrożenia. Są przydatne w tworzeniu systemów opierając się na reverse-engineering oraz forward-engineering.

Diagram klas zawiera:

  • klasy,
  • interfejsy,
  • kooperacje,
  • zależności, uogólnienia, powiązania,
  • notatki, ograniczenia, pakiety, podsystemy.

Zastosowania:

  • modelowanie słownictwa systemu (struktura systemu),
  • modelowanie prostych kooperacji,
  • modelowanie schematu logicznej bazy danych.

Przykładowy diagram klas może wyglądać następująco:

Asocjacje

Przepływ informacji może być dwukierunkowy1 wtedy komunikacja może odbywać się w obu kierunkach lub jednokierunkowy (oznaczony strzałką)2wtedy komunikacja odbywa się w kierunku przedstawionym strzałką, ale nie musi być jednokierunkowa.

Asocjacja może przedstawiać się jako powiązanie zwykłe, nazwane, z wyspecyfikowanymi rolami, lub złożone (mixed).

Rodzaje powiązań między klasami

Agregacje i Kompozycje

Klasy mogą być powiązane w sposób szczególny tworząc Agregacje i Kompozycje.

  • Agregacja jest wtedy, kiedy klasa może istnieć bez przypisania drugiej strony,
  • Kompozycja jest wtedy, gdy klasa nie istnieje, jeśli nie występuje chociaż jedna instancja drugiej klasy wchodzącej w powiązanie.
Rodzaje agregacji

Jak widać powiązania opisują także liczebności i mogą przybierać wartości:

  • 1 – dokładnie jeden,
  • 1..* – od jednego do wielu,
  • 0..1 – zero albo jeden,
  • * – dowolna ilość,
  • 0..* – od zera do wielu,
  • n – dokładnie n (gdzie n>1),
  • 1..n – od jednego do n,
  • 0..n – od zera do n,
  • n..m – od n do m (gdzie n, m >1),
  • n..* – od n do wielu (gdzie n>1),
  • n, m, o..p, q – o wartościach n, m, od o do p i q.

Klasy

Klasy mogą pozostawać nieopisane tworząc klasy abstrakcyjne (zawierają tylko nazwę), bądź mogą zawierać część opisową w tym pola danych i metody z oznaczeniem ich dostępności.

Definicje klas

Selektory dostępu w ramach definicji klas mają znaczenia:

+ – pole/metoda publiczna
– pole/metoda prywatna
# – pole/metoda protected
~ – pole/metoda z dostępem pakietowym (tylko w obrębie pakietu do którego należy klasa).

Zastosowanie

Do podstawowych założeń stosowania diagramu klas należy:

  • Modelowanie struktury systemu – klasy, interfejsy, związki, nazewnictwo, itp.
  • Modelowanie prostych kooperacji – realizowanie zadań niemożliwych do wykonania przez pojedynczą klasę.
  • Na diagramie klas powinna być modelowana tylko jedna kooperacja.

Etapy modelowania kooperacji:

  1. identyfikacja mechanizmu (pewnej funkcjonalności systemu),
  2. wyznaczenie klas, interfejsów, innych kooperacji,
  3. określanie związków między ww.,
  4. skonfrontowanie diagramu z przypadkami użycia,
  5. ocena wartości poszczególnych bytów (może uda się część z nich wyeliminować)

Modelowanie schematu logicznej bazy danych:

Diagramy klas są nadzbiorem diagramów ERD (encja-związek). Rozszerzają ERD (modelowanie danych) o modelowanie zachowania.

Etapy modelowania schematu logicznej bazy danych:

  1. identyfikacja klas, dla których wartości pól powinny znaleźć się w bazie danych.
  2. utworzenie diagramu tych klas, zaznaczenie ich jako trwałe (metka {persistent}),
  3. wyspecyfikowanie atrybutów,
  4. wyspecyfikowanie powiązań między atrybutami i ich liczebności,
  5. odszukanie powiązań cyklicznych, wielo-argumentowych, itp., wprowadzenie dodatkowych pośrednich abstrakcji w celu uproszczenia struktury logicznej,
  6. zbadanie zagadnień fizycznego dostępu do danych, dostosowanie schematu logicznego do fizycznej bazy danych.