JavaRush /Blog Java /Random-PL /UML: od teorii do praktyki
Viacheslav
Poziom 3

UML: od teorii do praktyki

Opublikowano w grupie Random-PL

Wstęp

Chyba każdy słyszał w dzieciństwie takie powiedzenie: „ Zmierz dwa razy, przetnij raz ”. Podobnie jest w programowaniu. Zawsze lepiej jest pomyśleć o implementacji, zanim poświęcisz czas na jej wykonanie. Często podczas wdrożenia trzeba stworzyć klasy i wymyślić ich interakcję. Często wizualna reprezentacja tego może pomóc w rozwiązaniu problemu w najbardziej poprawny sposób. W tym właśnie pomaga nam UML .

Co to jest UML?

Jeśli spojrzysz na zdjęcia w wyszukiwarkach, stanie się jasne, że UML to coś, co dotyczy diagramów, strzałek i kwadratów. Ważne jest to, że UML przekłada się na ujednolicony język modelowania . Słowo „Ujednolicony” jest tutaj istotne. Oznacza to, że nasze obrazy zostaną zrozumiane nie tylko przez nas, ale także przez innych, którzy znają UML. Okazuje się, że jest to międzynarodowy język do rysowania diagramów.

UML: od teorii do praktyki - 1

Jak podaje Wikipedia

UML to graficzny język opisu służący do modelowania obiektów w tworzeniu oprogramowania, modelowaniu procesów biznesowych, projektowaniu systemów i wyświetlaniu struktur organizacyjnych.
Najciekawszą rzeczą, o której nie każdy myśli i nie zdaje sobie sprawy, jest to, że UML ma specyfikacje. Co więcej, istnieje nawet specyfikacja UML2. Więcej szczegółów na temat specyfikacji można znaleźć na stronie Object Management Group . Właściwie ta grupa opracowuje specyfikacje UML. Interesujące jest również to, że UML nie ogranicza się do opisu struktury klas. Istnieje wiele typów diagramów UML. Krótki opis rodzajów diagramów UML można zobaczyć w tej samej Wikipedii: Diagramy UML lub w filmie Timura Batyrshinova Recenzja diagramów UML . UML jest również szeroko stosowany do opisu różnych procesów, na przykład tutaj: Pojedyncze logowanie przy użyciu JWT . Wracając do wykorzystania diagramów klas UML, warto zwrócić uwagę na książkę Head First: Design Patterns , w której wzorce ilustrują te same diagramy UML. Okazuje się, że rzeczywiście używany jest język UML. I okazuje się, że wiedza i zrozumienie jego zastosowania to całkiem przydatna umiejętność.

Aplikacja

Przyjrzyjmy się, jak możesz pracować z tym samym UML-em z poziomu IDE. Weźmy IntelliJ Idea jako IDE . Jeśli korzystamy z IntelliJ Idea Ultimate , będziemy mieć zainstalowaną wtyczkę „ Obsługa UML ” od razu po wyjęciu z pudełka. Pozwala automatycznie generować piękne diagramy klas. Przykładowo za pomocą Ctrl+N lub pozycji menu „Nawiguj” -> „Klasa” przechodzimy do klasy ArrayList . Teraz z menu kontekstowego nazwy klasy wybierz „Diagram” -> „Pokaż wyskakujące okienko diagramu”. W rezultacie otrzymujemy piękny diagram:
UML: od teorii do praktyki - 2
Ale co, jeśli chcesz to narysować sam, a nie masz nawet ostatecznej wersji Idea? Jeśli korzystamy z IntelliJ Idea Community Edition, to nie mamy innego wyjścia. Aby to zrobić, musisz zrozumieć, jak zbudowany jest taki diagram UML. Najpierw musimy zainstalować Graphviz . Jest to zestaw narzędzi do wizualizacji wykresów. Jest używany przez wtyczkę, z której będziemy korzystać. Po instalacji musisz dodać katalog bin z katalogu instalacyjnego Graphviz do zmiennej środowiskowej PATH . Następnie w IntelliJ Idea wybierz z menu Plik -> Ustawienia. W oknie „Ustawienia” wybierz kategorię „Wtyczki”, kliknij przycisk „Przeglądaj repozytoria” i zainstaluj wtyczkę integrującą PlantUML . Dlaczego PlantUML jest tak dobry ? Do opisu UML używa języka opisu grafów zwanego „ kropką ”, co pozwala mu być bardziej uniwersalnym, ponieważ... Język ten jest używany nie tylko przez PlantUML. Co więcej, wszystko, co robimy poniżej, można wykonać nie tylko w IDE, ale także w serwisie internetowym planttext.com . Po zainstalowaniu wtyczki PlantUML będziemy mogli tworzyć diagramy UML poprzez „Plik” -> „Nowy”. Utwórzmy diagram typu „klasa UML”. Podczas tego procesu automatycznie generowany jest szablon z przykładem. Usuńmy jego zawartość i stwórzmy własną, uzbrojoną w artykuł z Habr: Relacje klasowe - od UML-a do kodu . Aby zrozumieć, jak przedstawić to w tekście, weźmy podręcznik PlantUML: diagram klas plantuml . Na samym początku znajduje się tabela pokazująca jak należy opisać połączenia:
UML: od teorii do praktyki - 3
Samemu powiązaniu możemy przyjrzeć się także tutaj: „ Relacje pomiędzy klasami w UML-u. Przykłady ”. Na podstawie tych materiałów zacznijmy tworzyć nasz diagram UML. Dodajmy następującą treść opisującą obie klasy:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Aby zobaczyć wynik w Idea, wybierz „Widok” -> „Okna narzędzi” -> „PlantUML”. Otrzymamy po prostu dwa kwadraty reprezentujące klasy. Jak wiemy, obie te klasy implementują interfejs List. Ta relacja klas nazywa się implementacją. Aby zobrazować takie połączenie, użyj strzałki z linią przerywaną. Przedstawmy to:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- jedna z klas dziecięcych Collection. Oznacza to, że dziedziczy z Collection. To połączenie nazywa się uogólnieniem. Wygląda jak strzałka z regularną linią ciągłą. Przedstawmy to:
interface Collection
Collection <|-- List
Dla poniższego typu połączenia dodaj do opisu klasy ArrayListwpis dotyczący prywatnej tablicy elementów pakietu :
~Object[] elementData
Teraz chcemy pokazać, co ArrayListzawiera pewne obiekty. W tym przypadku typem połączenia będzie agregacja . Jednostką w tym przypadku jest ArrayList, ponieważ zawiera inne obiekty. Wybieramy agregację, ponieważ obiekty na liście mogą żyć bez listy: nie są jej integralną częścią. Ich czas życia nie jest powiązany z czasem życia listy. Kruszywa w tłumaczeniu z łaciny oznaczają „złożony”, czyli coś składającego się z czegoś. Na przykład w życiu istnieje jednostka pompująca, która składa się z pompy i silnika. Samo urządzenie można zdemontować, pozostawiając część jego elementów. Na przykład sprzedać lub umieścić w innej jednostce. Podobnie jest z listą. Wyraża się to w postaci pustego rombu w pobliżu jednostki i ciągłej linii. Przedstawmy to tak:
class Object{
}
ArrayList o- Object
Teraz chcemy pokazać, że w przeciwieństwie do ArrayListklasy ta LinkedListzawiera Nodekontenery, które odwołują się do przechowywanych danych. W tym przypadku Nodesą częścią siebie LinkedListi nie mogą żyć osobno. Nodenie jest bezpośrednio przechowywaną treścią, a jedynie zawiera link do niej. Na przykład, kiedy dodajemy do LinkedListwiersza, dodajemy nowy Node, który zawiera link do tego wiersza, a także link do poprzedniego i następnego Node. Ten rodzaj komunikacji nazywa się kompozycją . Aby wyświetlić kompozyt (składający się z części), rysowany jest kolorowy romb, do którego prowadzi ciągła linia. Zapiszmy to teraz jako tekstową prezentację połączenia:
class Node{
}
LinkedList *-- Node
A teraz musimy nauczyć się okazywać inny ważny rodzaj relacji - relację zależności . Używa się go, gdy jedna klasa korzysta z drugiej, ale klasa ta nie zawiera używanej klasy i nie jest jej potomkiem. Na przykład wiedzą, LinkedListjak ArrayListtworzyć pliki ListIterator. Wyświetlmy to jako strzałki z linią przerywaną:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Po tym wszystkim będzie to wyglądało tak:
UML: od teorii do praktyki - 4
Możesz zagłębić się w tyle szczegółów, ile potrzeba. Wszystkie oznaczenia są tutaj wskazane: „ PlantUML - diagram klas ”. Poza tym w rysowaniu takiego diagramu nie ma nic nadprzyrodzonego, a pracując nad swoimi zadaniami, możesz szybko narysować go ręcznie. Rozwinie to Twoje umiejętności myślenia o architekturze aplikacji i pomoże Ci wcześnie zidentyfikować wady struktury klas, a nie dopiero po dniu spędzonym na wdrażaniu niewłaściwego modelu. Myślę, że to dobry powód, aby spróbować? )
UML: od teorii do praktyki - 5

Automatyzacja

Istnieją różne sposoby automatycznego generowania diagramów PlantUML. Na przykład Idea ma wtyczkę SketchIT , ale nie rysuje ich całkiem poprawnie. Na przykład implementacja interfejsów jest rysowana niepoprawnie (wyświetlana jako dziedziczenie). W Internecie można znaleźć także przykłady, jak włączyć to do cyklu życia projektu. Załóżmy, że istnieje przykład Mavena używającego uml-Java-docklet . Aby pokazać, jak to się robi, użyjemy Maven Archetype do szybkiego stworzenia projektu Maven. Wykonajmy polecenie: mvn archetype:generate Gdy zostaniesz poproszony o wybranie filtra ( Wybierz liczbę lub zastosuj filtr ), pozostaw domyślne, naciskając po prostu Enter. Zawsze będzie to „ maven-archetype-szybki start ”. Wybierz najnowszą wersję. Następnie odpowiadamy na pytania i kończymy tworzenie projektu:
UML: od teorii do praktyki - 6
Ponieważ Maven nie jest tematem tego artykułu, odpowiedzi na pytania dotyczące Mavena można znaleźć w Centrum użytkowników Mavena . W wygenerowanym projekcie otwórz plik opisu projektu pom.xml do edycji . Skopiujmy do niego zawartość z opisu instalacji uml-java-docklet . Artefakt użyty w opisie nie został znaleziony w repozytorium Maven Central. Ale zadziałało to dla mnie z tym: https://mvnrepository.com/artifact/com.chfourie/uml-Java-doclet/1.0.0 . Oznacza to, że w tym opisie wystarczy zamienić groupId z „ info.leadinglight ” na „ com.chfourie ” i ustawić wersję na „ 1.0.0 ”. Następnie możemy wykonać następujące polecenia w katalogu, w którym znajduje się plik pom.xmlmvn clean install : i mvn javadoc:javadoc. Teraz, jeśli otworzymy wygenerowaną dokumentację (explorer target\site\apidocs\index.html), zobaczymy diagramy UML. Nawiasem mówiąc, implementacja jest już tutaj poprawnie wyświetlana)

Wniosek

Jak widać, UML pozwala na wizualizację struktury aplikacji. Co więcej, UML nie ogranicza się tylko do tego. Za pomocą UML-a możesz opisać różne procesy zachodzące w Twojej firmie lub opisać proces biznesowy, w ramach którego działa pisana funkcja. To, jak przydatny będzie dla Ciebie UML, zależy od Ciebie, ale poświęcenie czasu na bardziej szczegółowe przeczytanie go będzie przydatne w każdym przypadku. #Wiaczesław
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION