JavaRush /Java Blog /Random-IT /UML: dalla teoria alla pratica
Viacheslav
Livello 3

UML: dalla teoria alla pratica

Pubblicato nel gruppo Random-IT

introduzione

Penso che tutti abbiano sentito durante l'infanzia un detto come " Misura due volte, taglia una volta ". È lo stesso nella programmazione. È sempre meglio pensare all'implementazione prima di dedicare tempo alla sua esecuzione. Spesso durante l'implementazione è necessario creare classi e inventare la loro interazione. E spesso una rappresentazione visiva di ciò può aiutare a risolvere il problema nel modo più corretto. È qui che UML ci aiuta .

Cos'è l'UML?

Se guardi le immagini nei motori di ricerca, diventerà chiaro che UML è qualcosa che riguarda diagrammi, frecce e quadrati. Ciò che è importante è che UML si traduca in Unified Modeling Language . La parola Unificato è importante qui. Cioè, le nostre immagini saranno comprese non solo da noi, ma anche da altri che conoscono UML. Si scopre che questa è una lingua internazionale per disegnare diagrammi.

UML: dalla teoria alla pratica - 1

Come dice Wikipedia

UML è un linguaggio di descrizione grafica per la modellazione di oggetti nello sviluppo di software, nella modellazione dei processi aziendali, nella progettazione di sistemi e nella visualizzazione di strutture organizzative.
La cosa più interessante a cui non tutti pensano o non si rendono conto è che UML ha delle specifiche. Inoltre esiste anche una specifica UML2. Maggiori dettagli sulla specifica possono essere trovati sul sito web dell'Object Management Group . Attualmente questo gruppo sta sviluppando le specifiche UML. È anche interessante notare che UML non si limita a descrivere la struttura delle classi. Esistono molti tipi di diagrammi UML. Una breve descrizione dei tipi di diagrammi UML può essere vista nella stessa Wikipedia: diagrammi UML o nel video di Timur Batyrshinov Recensione dei diagrammi UML . UML è anche ampiamente utilizzato per descrivere vari processi, ad esempio qui: Single Sign-On utilizzando JWT . Tornando all'uso dei diagrammi di classi UML, vale la pena citare il libro Head First: Design Patterns , in cui i pattern sono illustrati da quegli stessi diagrammi UML. Si scopre che UML viene effettivamente utilizzato. E si scopre che la conoscenza e la comprensione della sua applicazione sono abilità piuttosto utili.

Applicazione

Diamo un'occhiata a come puoi lavorare con lo stesso UML dall'IDE. Prendiamo IntelliJ Idea come IDE . Se utilizziamo IntelliJ Idea Ultimate , avremo il plug-in " Supporto UML " installato immediatamente. Ti consente di generare automaticamente bellissimi diagrammi di classe. Ad esempio, utilizzando Ctrl+N o la voce di menu "Naviga" -> "Classe" andiamo alla classe ArrayList . Ora, attraverso il menu contestuale relativo al nome della classe, seleziona “Diagramma” -> “Mostra popup diagramma”. Di conseguenza, otteniamo un bellissimo diagramma:
UML: dalla teoria alla pratica - 2
Ma cosa succede se vuoi disegnarlo da solo e non hai nemmeno la versione Ultimate di Idea? Se utilizziamo IntelliJ Idea Community Edition, non abbiamo altra scelta. Per fare ciò, è necessario capire come è strutturato un diagramma UML di questo tipo. Innanzitutto, dovremo installare Graphviz . Questo è un insieme di utilità per visualizzare i grafici. Viene utilizzato dal plugin che utilizzeremo. Dopo l'installazione, è necessario aggiungere la directory bin dalla directory di installazione di Graphviz alla variabile di ambiente PATH . Successivamente, in IntelliJ Idea, seleziona File -> Impostazioni dal menu. Nella finestra "Impostazioni", seleziona la categoria "Plugin", fai clic sul pulsante "Sfoglia repository" e installa il plug-in di integrazione PlantUML . Perché PlantUML è così buono ? Utilizza un linguaggio di descrizione dei grafici chiamato " punto " per descrivere UML e questo gli consente di essere più universale, perché... Questo linguaggio è utilizzato non solo da PlantUML. Inoltre, tutto ciò che facciamo di seguito può essere fatto non solo nell'IDE, ma anche nel servizio online planttext.com . Dopo aver installato il plugin PlantUML, potremo creare diagrammi UML tramite “File” -> “Nuovo”. Creiamo un diagramma del tipo "classe UML". Durante questo processo, viene generato automaticamente un modello con un esempio. Eliminiamo il suo contenuto e creiamone uno nostro, armati di un articolo di Habr: Relazioni di classe - da UML al codice . E per capire come rappresentarlo nel testo, prendiamo il manuale PlantUML: plantuml class-diagram . All'inizio c'è una tabella che mostra come dovrebbero essere descritte le connessioni:
UML: dalla teoria alla pratica - 3
Possiamo anche esaminare le connessioni stesse qui: " Relazioni tra classi in UML. Esempi ". Sulla base di questi materiali, iniziamo a creare il nostro diagramma UML. Aggiungiamo il seguente contenuto che descrive le due classi:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Per vedere il risultato in Idea, seleziona "Visualizza" -> "Strumenti Windows" -> "PlantUML". Otterremo solo due quadrati che rappresentano le classi. Come sappiamo, entrambe queste classi implementano l'interfaccia List. Questa relazione di classe è chiamata implementazione. Per rappresentare tale connessione, utilizzare una freccia con una linea tratteggiata. Rappresentiamolo:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- una delle classi per bambini Collection. Cioè, eredita da Collection. Questa connessione è chiamata generalizzazione. Sembra una freccia con una linea continua regolare. Rappresentiamolo:
interface Collection
Collection <|-- List
Per il seguente tipo di connessione, aggiungere alla descrizione della classe ArrayListuna voce sull'array privato di elementi del pacchetto :
~Object[] elementData
Ora vogliamo mostrare cosa ArrayListcontiene alcuni oggetti. In questo caso, il tipo di connessione sarà di aggregazione . L'unità in questo caso è ArrayList, perché contiene altri oggetti. Scegliamo l'aggregazione perché gli oggetti della lista possono vivere senza la lista: non ne sono parte integrante. La loro durata non è legata alla durata dell'elenco. L'aggregato è tradotto dal latino come "assemblato", cioè qualcosa composto da qualcosa. Ad esempio, nella vita esiste un'unità di pompaggio composta da una pompa e un motore. L'unità stessa può essere smontata, lasciando alcuni dei suoi componenti. Ad esempio, per vendere o mettere in un'altra unità. Così è l'elenco. E questo è espresso sotto forma di un diamante vuoto vicino all'unità e di una linea continua. Rappresentiamolo in questo modo:
class Object{
}
ArrayList o- Object
Vogliamo ora mostrare che, a differenza di ArrayList, la classe LinkedListcontiene Nodecontenitori che fanno riferimento a dati memorizzati. In questo caso Nodefanno parte di se stessi LinkedListe non possono vivere separatamente. Nodenon è contenuto memorizzato direttamente, ma contiene solo un collegamento ad esso. Ad esempio, quando aggiungiamo a LinkedListuna riga, aggiungiamo un new Node, che contiene un collegamento a quella riga, nonché un collegamento al precedente e al successivo Node. Questo tipo di comunicazione si chiama composizione . Per visualizzare un composito (composto da parti), viene disegnato un diamante colorato, a cui conduce una linea continua. Scriviamo ora questo come visualizzazione testuale della connessione:
class Node{
}
LinkedList *-- Node
E ora dobbiamo imparare come visualizzare un altro importante tipo di relazione: la relazione di dipendenza . Viene utilizzato quando una classe ne usa un'altra e la classe non contiene la classe utilizzata e non è il suo discendente. Ad esempio, LinkedListsanno ArrayListcome creare file ListIterator. Mostriamolo come frecce con una linea tratteggiata:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Dopo tutto ciò sarà simile a questo:
UML: dalla teoria alla pratica - 4
Puoi entrare nei dettagli necessari. Tutte le designazioni sono indicate qui: " PlantUML - Class Diagram ". Inoltre, non c'è nulla di soprannaturale nel disegnare un diagramma del genere e, quando lavori sui tuoi compiti, puoi disegnarlo rapidamente a mano. Ciò svilupperà le tue capacità di pensare attraverso l'architettura dell'applicazione e ti aiuterà a identificare i difetti della struttura delle classi nella fase iniziale, piuttosto che dopo aver passato la giornata a implementare il modello sbagliato. Penso che sia un buon motivo per provarlo? )
UML: dalla teoria alla pratica - 5

Automazione

Esistono vari modi per generare automaticamente i diagrammi PlantUML. Ad esempio, Idea ha un plugin SketchIT , ma non li disegna in modo abbastanza corretto. Ad esempio, l'implementazione delle interfacce viene disegnata in modo errato (visualizzata come ereditarietà). Ci sono anche esempi su Internet di come integrarlo nel ciclo di vita del tuo progetto. Diciamo che c'è un esempio per Maven che utilizza uml-java-docklet . Per mostrare come è possibile farlo, utilizzeremo Maven Archetype per creare rapidamente un progetto Maven. Eseguiamo il comando: mvn archetype:generate Quando viene richiesto di selezionare un filtro ( Scegli un numero o applica filtro ), lasciamo il valore predefinito semplicemente premendo Invio. Questo sarà sempre " maven-archetype-quickstart ". Seleziona la versione più recente. Successivamente, rispondiamo alle domande e completiamo la creazione del progetto:
UML: dalla teoria alla pratica - 6
Poiché Maven non è l'argomento centrale di questo articolo, le risposte alle tue domande su Maven possono essere trovate nel Centro utenti Maven . Nel progetto generato, aprire il file di descrizione del progetto, pom.xml, per modificarlo . Copiamo il contenuto dalla descrizione dell'installazione di uml-java-docklet al suo interno . Non è stato possibile trovare l'artefatto utilizzato nella descrizione nel repository Maven Central. Ma ha funzionato per me con questo: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Cioè, in quella descrizione devi solo sostituire il groupId di “ info.leadinglight ” con “ com.chfourie ” e impostare la versione su “ 1.0.0 ”. Successivamente, possiamo eseguire questi comandi nella directory in cui si trova il file pom.xmlmvn clean install : e mvn javadoc:javadoc. Ora, se apriamo la documentazione generata (explorer target\site\apidocs\index.html), vedremo i diagrammi UML. A proposito, l'implementazione è già visualizzata correttamente qui)

Conclusione

Come puoi vedere, UML ti consente di visualizzare la struttura della tua applicazione. Inoltre, UML non si limita solo a questo. Utilizzando UML, puoi descrivere vari processi all'interno della tua azienda o descrivere il processo aziendale all'interno del quale opera la funzione che stai scrivendo. Sta a te decidere quanto UML sia utile per te personalmente, ma prendersi il tempo per leggerlo in modo più dettagliato sarà utile in ogni caso. #Viacheslav
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION