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.
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:
@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 ArrayList
una voce sull'array privato di elementi del pacchetto :
~Object[] elementData
Ora vogliamo mostrare cosa ArrayList
contiene 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 LinkedList
contiene Node
contenitori che fanno riferimento a dati memorizzati. In questo caso Node
fanno parte di se stessi LinkedList
e non possono vivere separatamente. Node
non è contenuto memorizzato direttamente, ma contiene solo un collegamento ad esso. Ad esempio, quando aggiungiamo a LinkedList
una 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, LinkedList
sanno ArrayList
come 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:
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:
mvn 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)
GO TO FULL VERSION