Introducción
Creo que todo el mundo ha oído el dicho "Mide dos veces, corta una vez". Es un verdadero consejo en programación. Siempre es mejor pensar en la implementación antes de dedicar tiempo a llevarla a cabo. Durante la implementación, a menudo necesita crear clases y pensar cómo interactuarán. Una representación visual de todo esto a menudo puede ayudarlo a encontrar la solución más correcta. Aquí es donde UML Class Diagram viene en nuestra ayuda.¿Qué es UML?
Si observa imágenes relevantes en los motores de búsqueda, verá que UML tiene algo que ver con diagramas, flechas y cuadrados. Debe saber que UML significa Lenguaje de modelado unificado. Unificado es la palabra importante aquí. Esto significa que nuestras imágenes serán entendidas no solo por nosotros, sino también por cualquier otra persona que conozca UML. Es la lingua franca para dibujar diagramas.Según Wikipedia,
"UML es un lenguaje de modelado de desarrollo de propósito general en el campo de la ingeniería de software que pretende proporcionar una forma estándar de visualizar el diseño de un sistema".Lo más interesante, que no todo el mundo adivinaría, es que UML tiene especificaciones. E incluso hay una especificación UML 2. Más información sobre la especificación está disponible en el sitio web de Object Management Group . De hecho, este grupo desarrolla las especificaciones UML. También es interesante que UML no se limite a describir la estructura de las clases. Hay muchos tipos de diagramas UML. Wikipedia tiene una breve descripción de varios tipos de diagramas UML: diagramas UML . Volviendo a los diagramas de clase UML, vale la pena mencionar el libro "Head First Design Patterns" , utiliza diagramas UML para ilustrar patrones de diseño. La conclusión es que UML realmente se usa. Y resulta que conocerlo y entender cómo usarlo es bastante útil.
Solicitud
Averigüemos que podemos trabajar con UML en un IDE. Usaremos IntelliJ IDEA como nuestro IDE. Si está utilizando IntelliJ IDEA Ultimate, entonces tendremos el complemento "UML Support" instalado "listo para usar". Te permite generar automáticamente hermosos diagramas de clase. Por ejemplo, use Ctrl+N o el elemento de menú "Navegar" -> "Clase" para ir a la clase ArrayList. Ahora, en el menú contextual del nombre de la clase, seleccione "Diagrama" -> "Mostrar diagrama emergente". Como resultado, obtenemos un hermoso diagrama.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Para ver el resultado en IDEA, seleccione "Ver" -> "Herramientas de Windows" -> "PlantUML". Solo obtenemos dos cuadrados que representan clases. Sabemos que ambas clases implementan la interfaz List . Esta relación de clases se llama realización. Esta relación se representa mediante una flecha con una línea de puntos. Dibujémoslo:
interface List
List <|.. ArrayList
List <|.. LinkedList
List es uno de los hijos de la clase Collection . Es decir, hereda Collection . Esta relación se llama generalización. Parece una flecha con una línea continua ordinaria. Dibujémoslo:
interface Collection
Collection <|-- List
Para el siguiente tipo de relación, agregue a la descripción de la clase ArrayList una entrada sobre una matriz privada de elementos del paquete :
~Object[] elementData
Ahora queremos mostrar que ArrayList contiene algunos objetos. En este caso, existirá una relación de agregación. Lista de arregloes un agregado, ya que contiene otros objetos. Decimos agregación porque los objetos de la lista pueden existir sin la lista: no son partes integrales de la lista. Su vida útil no está ligada a la vida útil de la lista. La palabra "agregado" nos viene del latín y se traduce como "ensamblado", es decir, algo formado por algo. Por ejemplo, en la vida, tenemos un conjunto de bomba (agregado), que consta de una bomba y un motor. El conjunto en sí se puede desmontar, y podemos dejar algunos de sus componentes solos. Por ejemplo, para vender o para poner en otro montaje. Es lo mismo en una lista. Esto se expresa con un rombo vacío en el agregado y una línea continua. Representaremos esto de la siguiente manera:
class Object{
}
ArrayList o- Object
Ahora queremos mostrar que, a diferencia de ArrayList , la clase LinkedList contiene Node s, contenedores que hacen referencia a los datos almacenados. En este caso, los Nodos son parte de LinkedList y no tienen una existencia independiente. Un nodo no es el contenido en sí mismo. Solo contiene una referencia al contenido. Por ejemplo, cuando agregamos una cadena a LinkedList , estamos agregando un nuevo nodo que contiene una referencia a la cadena, así como un enlace al nodo anterior y siguiente.. Esta relación se llama composición. Se representa dibujando una línea continua con un rombo relleno sobre el compuesto (algo hecho de partes constituyentes). Ahora representaremos la relación como texto:
class Node{
}
LinkedList *-- Node
Y ahora necesita aprender a representar otro tipo importante de relación: la dependencia. Se usa cuando una clase usa otra, pero la clase no contiene ni hereda la clase usada. Por ejemplo, LinkedList y ArrayList saben cómo crear un ListIterator . Representamos esto como flechas con una línea punteada:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Después de hacer todo esto, obtenemos: 
Automatización
Hay varias formas de generar automáticamente diagramas PlantUML. Por ejemplo, IDEA tiene el complemento SketchIT , pero no dibuja diagramas del todo correctamente. Digamos que la implementación de las interfaces se dibuja incorrectamente (se muestra como herencia). Internet tiene ejemplos de cómo integrar esto en el proceso de construcción de su proyecto. Por ejemplo, puede encontrar cómo usar uml-java-docklet con Maven. Para demostrarlo, usaremos Maven Archetype para crear rápidamente un proyecto Maven. Correr
mvn archetype:generate
En respuesta a Elija un número o aplique un filtro, deje el valor predeterminado: simplemente presione Entrar. Siempre será "maven-archetype-quickstart". Seleccione la última versión. A continuación, responderemos algunas preguntas y terminaremos de crear el proyecto: 
mvn clean install
y
mvn javadoc: javadoc
Si ahora abrimos la documentación generada (explorer target\site\apidocs\index.html), veremos los diagramas UML. Por cierto, la relación de implementación ahora se muestra correctamente :)
GO TO FULL VERSION