CodeGym /Blog Java /Aleatoriu /Diagrama de clasă UML
John Squirrels
Nivel
San Francisco

Diagrama de clasă UML

Publicat în grup

Introducere

Cred că toată lumea a auzit zicala „Măsoară de două ori, taie o dată”. Este un adevărat sfat în programare. Este întotdeauna mai bine să vă gândiți la implementare înainte de a petrece timp realizării acesteia. În timpul implementării, deseori trebuie să creați clase și să vă gândiți cum vor interacționa acestea. O reprezentare vizuală a tuturor vă poate ajuta adesea să găsiți cea mai corectă soluție. Aici ne vine în ajutor diagrama de clasă UML.

Ce este UML?

Dacă te uiți la imagini relevante în motoarele de căutare, vei vedea că UML are ceva de-a face cu diagramele, săgețile și pătratele. Trebuie să știți că UML înseamnă Unified Modeling Language. Unificat este cuvântul important aici. Aceasta înseamnă că imaginile noastre vor fi înțelese nu numai de noi, ci și de oricine altcineva care cunoaște UML. Este lingua franca pentru desenarea diagramelor.

Conform Wikipedia,

„UML este un limbaj de modelare cu scop general, de dezvoltare, în domeniul ingineriei software, care are scopul de a oferi o modalitate standard de vizualizare a designului unui sistem.”
Cel mai interesant lucru, pe care nu toată lumea l-ar ghici, este că UML are specificații. Și există chiar și o specificație UML 2. Mai multe informații despre specificație sunt disponibile pe site-ul Object Management Group . De fapt, acest grup dezvoltă specificațiile UML. De asemenea, este interesant că UML nu se limitează la descrierea structurii claselor. Există multe tipuri de diagrame UML. Wikipedia are o scurtă descriere a diferitelor tipuri de diagrame UML: diagrame UML . Revenind la diagramele de clasă UML, merită menționată cartea „Head First Design Patterns” , folosește diagramele UML pentru a ilustra modelele de design. Concluzia este că UML este într-adevăr folosit. Și se dovedește că cunoașterea și înțelegerea modului de utilizare sunt destul de utile.

Aplicație

Să ne dăm seama că putem lucra cu UML într-un IDE. Vom folosi IntelliJ IDEA ca IDE. Dacă utilizați IntelliJ IDEA Ultimate, atunci vom avea pluginul „UML Support” instalat „din cutie”. Vă permite să generați automat diagrame de clasă frumoase. De exemplu, utilizați Ctrl+N sau elementul de meniu „Navigate” -> „Class” pentru a merge la clasa ArrayList. Acum, în meniul contextual al numelui clasei, selectați „Diagramă” -> „Afișați pop-up diagramă”. Drept urmare, obținem o diagramă frumoasă. UML: de la teorie la practică - 2 Dar dacă vrei să desenezi singur diagrama? Și dacă nu aveți versiunea Ultimate? Folosind IntelliJ IDEA Community Edition, nu avem altă opțiune. Deci trebuie să înțelegem cum este organizată o diagramă UML. Primul,. Este un set de instrumente de vizualizare grafică. Pluginul pe care îl vom folosi depinde de el. După instalare, trebuie să adăugați directorul bin din directorul de instalare Graphviz la variabila de mediu PATH. După aceea, în IntelliJ IDEA, selectați Fișier -> Setări în meniu. În fereastra „Setări”, selectați categoria „Plugin-uri”, faceți clic pe butonul „Răsfoiți depozitele” și instalați pluginul de integrare PlantUML . Ce este atât de bun la PlantUML? Descrie UML folosind un limbaj de descriere grafic numit „punct”, ceea ce îl face mai universal, deoarece limbajul punct este folosit de mai mult decât de PlantUML. În plus, tot ceea ce facem mai jos se poate face nu numai într-un IDE, ci și online la planttext.com. După instalarea pluginului PlantUML, vom putea crea diagrame UML folosind „Fișier” -> „Nou”. Să creăm o diagramă „clasă UML”. Acest lucru va genera automat un șablon cu un exemplu. Îi vom șterge conținutul și îl vom adăuga pe al nostru. Pentru a înțelege cum să reprezentați acest lucru în text, aruncați o privire la manualul PlantUML: plantuml class-diagram. UML: de la teorie la practică - 3Bazându-ne pe aceste materiale, să începem să creăm diagrama noastră UML. Adăugați următorul conținut, care descrie două clase:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Pentru a vedea rezultatul în IDEA, selectați „View” -> „Tool Windows” -> „PlantUML”. Obținem doar două pătrate care reprezintă clase. Știm că ambele clase implementează interfața List . Această relație de clasă se numește realizare. Această relație este reprezentată folosind o săgeată cu o linie punctată. Să-l desenăm:

interface List
List <|.. ArrayList
List <|.. LinkedList
List este unul dintre copiii clasei Collection . Adică moștenește Collection . Această relație se numește generalizare. Arată ca o săgeată cu o linie continuă obișnuită. Să-l desenăm:

interface Collection
Collection <|-- List
Pentru următorul tip de relație, adăugați la descrierea clasei ArrayList o intrare despre un pachet privat de elemente:

~Object[] elementData
Acum vrem să arătăm că ArrayList conține câteva obiecte. În acest caz, va exista o relație de agregare. ArrayListeste un agregat, deoarece conține alte obiecte. Spunem agregare deoarece obiectele listei pot exista fără listă: nu sunt părți integrante ale listei. Viața lor nu este legată de durata de viață a listei. Cuvântul „agregat” ne vine din latină și se traduce prin „asamblat”, adică ceva alcătuit din ceva. De exemplu, în viață, avem un ansamblu de pompă (agregat), care constă dintr-o pompă și un motor. Ansamblul în sine poate fi dezasamblat și putem lăsa unele dintre componentele sale în pace. De exemplu, pentru a vinde sau a pune într-un alt ansamblu. La fel este într-o listă. Aceasta este exprimată cu un romb gol la agregat și o linie continuă. Vom reprezenta acest lucru după cum urmează:

class Object{
}
ArrayList o- Object
Acum vrem să arătăm că, spre deosebire de ArrayList , clasa LinkedList conține Node s — containere care fac referire la datele stocate. În acest caz, nodurile fac parte din LinkedList și nu au o existență independentă. Un Nod nu este conținutul în sine. Conține doar o referință la conținut. De exemplu, când adăugăm un șir la un LinkedList , adăugăm un nou Nod care conține o referință la șir, precum și o legătură către nodul anterior și următor.. Această relație se numește compoziție. Este reprezentat prin trasarea unei linii continue cu un romb umplut pe compozit (ceva format din părți constitutive). Acum vom reprezenta relația ca text:

class Node{
}
LinkedList *-- Node
Și acum trebuie să înveți cum să descrii un alt tip important de relație: dependența. Este folosit atunci când o clasă folosește alta, dar clasa nu conține și nici nu moștenește clasa utilizată. De exemplu, LinkedList și ArrayList știu cum să creeze un ListIterator . Reprezentăm aceasta ca săgeți cu o linie punctată:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
După ce facem toate acestea, obținem: UML: de la teorie la practică - 4Puteți adăuga cât de multe detalii este necesar. Desigur, nu este nimic supranatural să desenezi o astfel de diagramă. Când lucrați la propriile sarcini, îl puteți desena rapid cu mâna. Acest lucru vă va ajuta să dezvoltați capacitatea de a gândi arhitectura unei aplicații și de a identifica deficiențele din structura clasei devreme, nu după ce ați petrecut deja ziua implementând modelul greșit. Pare un motiv bun să încerci, nu-i așa? :)

Automatizare

Există diferite moduri de a genera automat diagrame PlantUML. De exemplu, IDEA are pluginul SketchIT , dar nu desenează diagramele în întregime corect. Să presupunem că implementarea interfețelor este desenată incorect (este afișată ca moștenire). Internetul are exemple despre cum să integrați acest lucru în procesul de construire al proiectului dumneavoastră. De exemplu, puteți găsi cum să utilizați uml-java-docklet cu Maven. Pentru a demonstra, vom folosi Maven Archetype pentru a crea rapid un proiect Maven. Alerga

mvn archetype:generate
Ca răspuns la Alegeți un număr sau aplicați filtrul, lăsați valoarea implicită - doar apăsați Enter. Va fi întotdeauna „maven-arhetype-quickstart”. Selectați cea mai recentă versiune. În continuare, vom răspunde la câteva întrebări și vom termina crearea proiectului: UML: de la teorie la practică - 5Maven nu este subiectul acestui articol, așa că puteți găsi răspunsuri la întrebările dvs. despre Maven în Centrul de utilizatori Maven . În proiectul generat, deschideți fișierul de descriere a proiectului, pom.xml, pentru editare. Vom copia conținutul din descrierea de instalare a uml-java-docklet în acest fișier. Artefactul folosit în descriere nu poate fi găsit în depozitul Maven Central. Dar următoarele au funcționat pentru mine: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. Cu alte cuvinte, în descriere trebuie pur și simplu să înlocuiți groupId-ul de la „info.leadinglight” la „com.chfourie” și să setați versiunea la „1.0.0”. După aceea, putem executa următoarele comenzi în directorul cu fișierul pom.xml:

mvn clean install
și

mvn javadoc: javadoc
Dacă deschidem acum documentația generată (explorer target\site\apidocs\index.html), vom vedea diagramele UML. Apropo, relația de implementare este acum afișată corect :)

Concluzie

După cum puteți vedea, UML vă permite să vizualizați structura aplicației dvs. Dar UML poate face mult mai mult. Puteți utiliza UML pentru a descrie diferite procese din cadrul companiei dvs. sau pentru a descrie procesul de afaceri care cuprinde o funcție pe care o scrieți. Va trebui să decideți singur cât de util este UML pentru dvs. personal, dar indiferent de ce decideți, vă va fi util să găsiți timp pentru a afla mai multe despre el.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION