W trakcie projektowania systemów na poziomie komponentów istotnym jest aby dobrze wyspecyfikować kanały komunikacji pomiędzy komponentami. Poniżej w tekście tym, postaram się przedstawić kilka technik umożliwiających pracę na tym poziomie abstrakcji.
Dobra specyfikacja kanałów komunikacji pomiędzy komponentami jest bardzo istotna i bytem w notacji UML, który na to pozwala jest element Interfejs
który można dość precyzyjnie wyspecyfikować określając jego atrybuty i metody (jeśli takowe posiada).
Następnie taki interfejs można dodać do komponentu korzystając z elementu Expose Interfejs.
gdzie po dodaniu tego elementu na komponent można wybrać wcześniej zdefiniowany interfejs. Należy kliknąć na kwadracik z wielokropkiem
i wybrać z drzewa repozytorium projektu odpowiedni element.
Tak zmapowany interfejs z komponentem pozwala zachować wszelkie zależności na poziomie diagramu komponentów jak i diagramie przedstawiającym interfejsy.
Natomiast jeśli nasz komponent komunikuje się ?ze światem spoza naszego systemu? należy ten fakt zaprezentować używając elementu port
który wskazuje na ten fakt,
Następnie kolejne czynności związane z wykorzystaniem interfejsu nie różnią się od wyżej wymienionego przykładu z tą różnicą, że Expose Interfejs jest ?nakładany? na port a nie na komponent.
W przypadku gdy kanał komunikacji pomiędzy dwoma komponentami wymaga współpracy kilku interfejsów nie ma potrzeby by dodawać więcej portów, gdyż port może być rozszerzany (poprzez dodanie kolejnych Expose Interfejs)
I nam koniec kilka słów na temat łączenia interfejsów.
Pierwsza metoda (interfejs B i A) to wskazanie na za pomocą realizacji, że interfejs wymagany, który jest w komponencie 2 jest realizowany za pomocą interfejsu A dostarczanego przez komponent 1.
Natomiast druga metoda polega na tym, że elementy typu Expose Interfejs w komponencie 1 i komponencie 2 są zmapowane z Interfejsem C i połączone z nim za pomocą realizacji (z interfejsu dostarczanego) i zależności ze stereotypem <<use>> (z interfejsu wymaganego). Zapis ten oznacza, że InterfejsC jest używany przez komponent 2 i jest realizowany (dostarczany) przez komponent 1.