Einführung
Ich denke, jeder hat in seiner Kindheit ein Sprichwort gehört wie „ Zweimal messen, einmal schneiden “. Beim Programmieren ist es genauso. Es ist immer besser, über die Implementierung nachzudenken, bevor Sie Zeit damit verbringen, sie auszuführen. Oftmals muss man bei der Implementierung Klassen erstellen und deren Interaktion erfinden. Und oft kann eine visuelle Darstellung davon helfen, das Problem auf die korrekteste Art und Weise zu lösen. Hier hilft uns UML .Was ist UML?
Schaut man sich Bilder in Suchmaschinen an, wird einem klar, dass es bei UML um Diagramme, Pfeile und Quadrate geht. Wichtig ist, dass UML in Unified Modeling Language übersetzt wird . Das Wort Unified ist hier wichtig. Das heißt, unsere Bilder werden nicht nur von uns verstanden, sondern auch von anderen, die UML kennen. Es stellt sich heraus, dass dies eine internationale Sprache zum Zeichnen von Diagrammen ist.
Wie Wikipedia sagt
UML ist eine grafische Beschreibungssprache für die Objektmodellierung in der Softwareentwicklung, Geschäftsprozessmodellierung, Systemdesign und Darstellung von Organisationsstrukturen.Das Interessanteste, woran nicht jeder denkt oder es erkennt, ist, dass UML Spezifikationen hat. Darüber hinaus gibt es sogar eine UML2-Spezifikation. Weitere Details zur Spezifikation finden Sie auf der Website der Object Management Group . Tatsächlich entwickelt diese Gruppe UML-Spezifikationen. Interessant ist auch, dass sich UML nicht auf die Beschreibung der Struktur von Klassen beschränkt. Es gibt viele Arten von UML-Diagrammen. Eine kurze Beschreibung der Arten von UML-Diagrammen finden Sie in derselben Wikipedia: UML-Diagramme oder im Video von Timur Batyrshinov Rezension von UML-Diagrammen . UML wird auch häufig zur Beschreibung verschiedener Prozesse verwendet, zum Beispiel hier: Single Sign-On mit JWT . Zurück zur Verwendung von UML-Klassendiagrammen: Erwähnenswert ist das Buch „ Head First: Design Patterns“ , in dem die Muster durch dieselben UML-Diagramme veranschaulicht werden. Es stellt sich heraus, dass tatsächlich UML verwendet wird. Und es stellt sich heraus, dass das Wissen und Verständnis seiner Anwendung eine durchaus nützliche Fähigkeit ist.
Anwendung
Schauen wir uns an, wie Sie mit derselben UML aus der IDE arbeiten können. Nehmen wir IntelliJ Idea als IDE . Wenn wir IntelliJ Idea Ultimate verwenden , ist das Plugin „ UML-Unterstützung “ sofort installiert. Es ermöglicht Ihnen, automatisch schöne Klassendiagramme zu generieren. Mit Strg+N oder dem Menüpunkt „Navigieren“ -> „Klasse“ gelangen wir beispielsweise zur ArrayList- Klasse . Wählen Sie nun über das Kontextmenü für den Klassennamen „Diagramm“ -> „Diagramm-Popup anzeigen“. Als Ergebnis erhalten wir ein schönes Diagramm:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Um das Ergebnis in Idea anzuzeigen, wählen Sie „Ansicht“ -> „Werkzeugfenster“ -> „PlantUML“. Wir erhalten lediglich zwei Quadrate, die Klassen darstellen. Wie wir wissen, implementieren diese beiden Klassen die List-Schnittstelle. Diese Klassenbeziehung wird Implementierung genannt. Um eine solche Verbindung darzustellen, verwenden Sie einen Pfeil mit einer gepunkteten Linie. Stellen wir es dar:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- eine der Kinderklassen Collection
. Das heißt, es erbt von Collection. Diesen Zusammenhang nennt man Generalisierung. Es sieht aus wie ein Pfeil mit einer regelmäßigen durchgehenden Linie. Stellen wir es dar:
interface Collection
Collection <|-- List
Fügen Sie für den folgenden Verbindungstyp der Klassenbeschreibung ArrayList
einen Eintrag über das private Elementarray des Pakets hinzu:
~Object[] elementData
Jetzt wollen wir zeigen, was ArrayList
einige Objekte enthält. In diesem Fall ist der Verbindungstyp Aggregation . Die Einheit ist in diesem Fall ArrayList
, weil es enthält andere Objekte. Wir wählen die Aggregation, weil Objekte in der Liste ohne die Liste leben können: Sie sind keine integralen Bestandteile der Liste. Ihre Lebensdauer ist nicht an die Lebensdauer der Liste gebunden. Aggregat wird aus dem Lateinischen als „zusammengebaut“ übersetzt, also etwas, das aus etwas besteht. Im Leben gibt es beispielsweise eine Pumpeinheit, die aus einer Pumpe und einem Motor besteht. Das Gerät selbst kann zerlegt werden, wobei einige seiner Komponenten übrig bleiben. Zum Beispiel zum Verkauf oder zur Eingliederung in eine andere Einheit. So ist die Liste. Und dies wird in Form einer leeren Raute in der Nähe der Einheit und einer durchgehenden Linie ausgedrückt. Stellen wir es uns so vor:
class Object{
}
ArrayList o- Object
Nun wollen wir zeigen, dass ArrayList
die Klasse im Gegensatz zu Containern LinkedList
enthält Node
, die auf gespeicherte Daten verweisen. In diesem Fall Node
sind sie Teil ihrer selbst LinkedList
und können nicht getrennt leben. Node
handelt es sich dabei nicht um direkt gespeicherte Inhalte, sondern enthält lediglich einen Link darauf. Wenn wir beispielsweise etwas zu LinkedList
einer Zeile hinzufügen, fügen wir ein neues hinzu Node
, das einen Link zu dieser Zeile sowie einen Link zum vorherigen und nächsten enthält Node
. Diese Art der Kommunikation nennt man Komposition . Um ein Komposit (das aus Teilen besteht) anzuzeigen, wird eine farbige Raute gezeichnet, zu der eine durchgehende Linie führt. Schreiben wir dies nun als Textanzeige der Verbindung:
class Node{
}
LinkedList *-- Node
Und jetzt müssen wir lernen, wie man eine weitere wichtige Art von Beziehung darstellt – die Abhängigkeitsbeziehung . Es wird verwendet, wenn eine Klasse eine andere verwendet und die Klasse die verwendete Klasse nicht enthält und nicht ihr Nachkomme ist. LinkedList
Sie wissen zum Beispiel, ArrayList
wie man erstellt ListIterator
. Lassen Sie uns dies als Pfeile mit einer gepunkteten Linie darstellen:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Nach all dem wird es so aussehen:
Automatisierung
Es gibt verschiedene Möglichkeiten, PlantUML-Diagramme automatisch zu generieren. Idea verfügt beispielsweise über ein SketchIT- Plugin , das diese jedoch nicht ganz korrekt zeichnet. Beispielsweise wird die Implementierung von Schnittstellen falsch gezeichnet (als Vererbung angezeigt). Im Internet finden Sie auch Beispiele, wie Sie dies in den Build-Lebenszyklus Ihres Projekts integrieren können. Nehmen wir an, es gibt ein Beispiel für Maven , das uml-java-docklet verwendet . Um zu zeigen, wie das geht, verwenden wir Maven Archetype , um schnell ein Maven-Projekt zu erstellen. Führen wir den Befehl aus:mvn archetype:generate
Wenn Sie aufgefordert werden, einen Filter auszuwählen ( Wählen Sie eine Zahl oder wenden Sie einen Filter an ), belassen Sie die Standardeinstellung, indem Sie einfach die Eingabetaste drücken. Dies wird immer „ maven-archetype-quickstart “ sein. Wählen Sie die neueste Version aus. Als nächstes beantworten wir die Fragen und schließen die Erstellung des Projekts ab:
mvn clean install
befindet: und mvn javadoc:javadoc
. Wenn wir nun die generierte Dokumentation öffnen (Explorer-Ziel\site\apidocs\index.html), sehen wir die UML-Diagramme. Die Umsetzung wird hier übrigens schon korrekt dargestellt)
GO TO FULL VERSION