Diagram pakietów
- W miarę wzrostu wielkości modelowanego systemu, rośnie liczba wykorzystywanych elementów (klas, interfejsów, komponentów...)
- Można grupować modelowane byty w pakietach.
- Dobrze zaprojektowane pakiety składają się z podobnych znaczeniowo i razem zmieniających się bytów. Są luźno powiązane ze sobą, ale silnie spójne wewnętrznie.
- Dostęp do zawartości pakietów jest kontrolowany
- Reprezentacja graficzna pakietu (Nazwa pakietu (może teżbyć napisana na zakładce):
![](images/pakiet/1.png)
Zawartość pakietów
Widoczność składniki: + publiczny, - prywatny
Odwołanie do składnika pakietu:
klient::FormularzZamowienia
klient::składnik::składnikWewn...
![](images/pakiet/2.png)
![](images/pakiet/3.png)
![](images/pakiet/4.png)
Składnikami pakietu mogą być różne elementy, przykładowo:
![](images/pakiet/5.png)
- klasy
- interfejsy
- operacje
- przypadki użycia
- diagramy
- inne pakiety
- komponenty
- ....
- lecz najczęściej są to klasy
Widoczność elementów pakietów
Jeśli umieścimy klasy A i B w dwu różnych pakietach to odwołania powinny mieć następującą postać:
Pakiet1::KlasaA oraz Pakiet2::KlasaB
![](images/pakiet/6.png)
Powiązania pakietów
Aby uprościć dostęp należy powiązać pakiety zależnością: << import >>, << access >> lub << merge >>
<< import >>
umożliwia dostęp w klasie źródła do zawartości klasy celu (w Pakiecie1 można teraz używać klasy B bez podawania ścieżki). Odpowiada dziedziczeniu publicznemu (następny import przejmie też klasę B).
<< access >>
podobnie, ale jak dziedziczenie prywatne (następny import nie umożliwi już dostępu do klasy B)
Zależności << merge >>
powoduje przyłączenie zawartości klasy docelowej z zachowaniem określonej listy reguł. W praktycznym modelowaniu mało użyteczne i rzadko używane
![](images/pakiet/7.png)
Powiązania pakietów uogólnienia
Dziedziczenie pakietów jest podobne do dziedziczenia klas.
![](images/pakiet/8.png)
Pakiet szczegółowy WindowsGUI może się pojawiać wszędzie tam, gdzie pakiet ogólny GUI. Jeśli pakiet zawiera klasy abstrakcyjne, można użyć stereotypu << abstract >>
Podsumowanie
Diagramy pakietów (ang. package diagrams) służą do modelowania fizycznego i logicznego podziału systemu. Pakiety są elementem strukturalizującym elementy UML i służą do grupowania ich według dowolnego kryterium. W pakiecie można umieścić praktycznie dowolne elementy: klasy, komponenty, przypadki użycia, a także inne pakiety. W ten sposób przedstawiają one drzewiastą strukturę elementów modelu.
Pakiety doskonale nadają się do wizualizacji podstawowych zależności pomiędzy częściami systemu, dzięki czemu łatwo ocenić jakość i stopień powiązań pomiędzy nimi. Dobra struktura pakietów, w której zależności są jasno uporządkowane oraz nie występują (lub występują tylko na niskim poziomie) zależności cykliczne, wspiera późniejszą rozbudowę systemu. W szczególności przydają się w dużych aplikacjach, podzielonych na wiele podsystemów, ponieważ w prosty sposób obrazują podstawowe zależności pomiędzy nimi.
Pakiet tworzy także jednostkę hermetyzacji: elementy z pakietu odwołują się do elementów zewnętrznych posługując się ich pełnymi kwalifikowanymi (zawierającymi nazwy pakietów) nazwami, zgodnie z ich zakresem widoczności, natomiast wewnątrz pakietu elementy mogą odwoływać się do siebie bezpośrednio.
Elementy wewnątrz pakietu mogą mieć jeden z dwóch poziomów widoczności: prywatny lub publiczny. Elementy publiczne są widziane i mogą być użyte poza własnym pakietem, natomiast prywatne - nie. Aby elementy pakietu mogły odwołać się do elementów prywatnych z innego pakietu, muszą go importować. Oznacza to, że elementy te stają się dla importującego pakietu widoczne. Import pakietu oznaczany jest zależnością ze słowem kluczowym << import >>
.
Przykład diagramu pakietów - Aukcja internetowa
![](images/pdf.png)
Diagram pakietów