JavaRush /Blog Java /Random-ES /UML: de la teoría a la práctica
Viacheslav
Nivel 3

UML: de la teoría a la práctica

Publicado en el grupo Random-ES

Introducción

Creo que todo el mundo ha oído en la infancia un dicho como " Mida dos veces, corte una vez ". Es lo mismo en programación. Siempre es mejor pensar en la implementación antes de dedicar tiempo a ejecutarla. A menudo, durante la implementación hay que crear clases e inventar su interacción. Y, a menudo, una representación visual de esto puede ayudar a resolver el problema de la manera más correcta. Aquí es donde UML nos ayuda .

¿Qué es UML?

Si miras imágenes en los motores de búsqueda, quedará claro que UML se trata de diagramas, flechas y cuadrados. Lo importante es que UML se traduce a Unified Modeling Language . La palabra Unificado es importante aquí. Es decir, nuestras imágenes serán entendidas no sólo por nosotros, sino también por otras personas que conocen UML. Resulta que este es un lenguaje internacional para dibujar diagramas.

UML: de la teoría a la práctica - 1

Como dice Wikipedia

UML es un lenguaje de descripción gráfica para el modelado de objetos en el desarrollo de software, modelado de procesos comerciales, diseño de sistemas y visualización de estructuras organizativas.
Lo más interesante de lo que no todo el mundo piensa o se da cuenta es que UML tiene especificaciones. Además, existe incluso una especificación UML2. Se pueden encontrar más detalles sobre la especificación en el sitio web de Object Management Group . En realidad, este grupo está desarrollando especificaciones UML. También es interesante que UML no se limita a describir la estructura de clases. Hay muchos tipos de diagramas UML. Una breve descripción de los tipos de diagramas UML se puede ver en la misma Wikipedia: Diagramas UML o en el vídeo de Timur Batyrshinov Revisión de diagramas UML . UML también se usa ampliamente para describir varios procesos, por ejemplo aquí: Inicio de sesión único usando JWT . Volviendo al uso de los diagramas de clases UML, cabe destacar el libro Head First: Design Patterns , en el que los patrones se ilustran mediante esos mismos diagramas UML. Resulta que efectivamente se está utilizando UML. Y resulta que el conocimiento y la comprensión de su aplicación es una habilidad bastante útil.

Solicitud

Veamos cómo puedes trabajar con este mismo UML desde el IDE. Tomemos IntelliJ Idea como IDE . Si utilizamos IntelliJ Idea Ultimate , entonces tendremos el complemento “ UML Support ” instalado de fábrica. Le permite generar automáticamente hermosos diagramas de clases. Por ejemplo, usando Ctrl+N o el elemento de menú "Navegar" -> "Clase" vamos a la clase ArrayList . Ahora, a través del menú contextual del nombre de la clase, seleccione "Diagrama" -> "Mostrar ventana emergente de diagrama". Como resultado, obtenemos un hermoso diagrama:
UML: de la teoría a la práctica - 2
Pero, ¿qué pasa si quieres dibujarlo tú mismo y ni siquiera tienes la versión Ultimate de Idea? Si utilizamos IntelliJ Idea Community Edition, entonces no tenemos otra opción. Para hacer esto, necesita comprender cómo está estructurado dicho diagrama UML. Primero, necesitaremos instalar Graphviz . Este es un conjunto de utilidades para visualizar gráficos. Lo utiliza el complemento que usaremos. Después de la instalación, debe agregar el directorio bin del directorio de instalación de Graphviz a su variable de entorno PATH . Después de eso, en IntelliJ Idea, seleccione Archivo -> Configuración en el menú. En la ventana "Configuración", seleccione la categoría "Complementos", haga clic en el botón "Buscar repositorios" e instale el complemento de integración PlantUML . ¿Por qué PlantUML es tan bueno ? Utiliza un lenguaje de descripción de gráficos llamado " punto " para describir UML y esto le permite ser más universal, porque... Este lenguaje no solo lo utiliza PlantUML. Además, todo lo que hacemos a continuación se puede hacer no solo en el IDE, sino también en el servicio en línea planttext.com . Después de instalar el complemento PlantUML, podremos crear diagramas UML a través de “Archivo” -> “Nuevo”. Creemos un diagrama del tipo "clase UML". Durante este proceso se genera automáticamente una plantilla con un ejemplo. Eliminemos su contenido y creemos el nuestro, armados con un artículo de Habr: Relaciones de clases: de UML al código . Y para entender cómo representar esto en el texto, tomemos el manual de PlantUML: diagrama de clases plantuml . Al principio hay una tabla que muestra cómo se deben describir las conexiones:
UML: de la teoría a la práctica - 3
También podemos ver las conexiones mismas aquí: " Relaciones entre clases en UML. Ejemplos ". Basándonos en estos materiales, comencemos a crear nuestro diagrama UML. Agreguemos el siguiente contenido que describe las dos clases:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Para ver el resultado en Idea, seleccione "Ver" -> "Ventanas de herramientas" -> "PlantUML". Solo obtendremos dos cuadrados que representan clases. Como sabemos, ambas clases implementan la interfaz List. Esta relación de clases se llama implementación. Para representar dicha conexión, use una flecha con una línea de puntos. Representémoslo:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- una de las clases infantiles Collection. Es decir, hereda de Collection. Esta conexión se llama generalización. Parece una flecha con una línea continua regular. Representémoslo:
interface Collection
Collection <|-- List
Para el siguiente tipo de conexión, agregue a la descripción de la clase ArrayListuna entrada sobre la matriz privada de elementos del paquete:
~Object[] elementData
Ahora queremos mostrar qué ArrayListcontiene algunos objetos. En este caso, el tipo de conexión será agregación . La unidad en este caso es ArrayList, porque contiene otros objetos. Elegimos la agregación porque los objetos de la lista pueden vivir sin la lista: no son partes integrales de ella. Su vida útil no está ligada a la vida útil de la lista. Agregado se traduce del latín como "ensamblado", es decir, algo formado por algo. Por ejemplo, en la vida hay una unidad de bombeo, que consta de una bomba y un motor. La unidad en sí se puede desmontar, dejando algunos de sus componentes. Por ejemplo, para vender o poner en otra unidad. Así es la lista. Y esto se expresa en forma de un diamante vacío cerca de la unidad y una línea continua. Representémoslo así:
class Object{
}
ArrayList o- Object
Ahora queremos mostrar que, a diferencia de ArrayList, la clase LinkedListcontiene Nodecontenedores que hacen referencia a datos almacenados. En este caso, Nodeson parte de sí mismos LinkedListy no pueden vivir separados. Nodeno es contenido almacenado directamente, solo contiene un enlace al mismo. Por ejemplo, cuando agregamos a LinkedListuna fila, agregamos un nuevo Node, que contiene un enlace a esa fila, así como un enlace a la anterior y a la siguiente Node. Este tipo de comunicación se llama composición . Para mostrar un compuesto (uno que consta de partes), se dibuja un diamante de color, con una línea continua que conduce a él. Ahora escribamos esto como una visualización de texto de la conexión:
class Node{
}
LinkedList *-- Node
Y ahora necesitamos aprender a visualizar otro tipo importante de relación: la relación de dependencia . Se usa cuando una clase usa otra y la clase no contiene la clase que se está usando y no es su descendiente. Por ejemplo, LinkedListsaben ArrayListcrear ListIterator. Mostremos esto como flechas con una línea de puntos:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Después de todo esto quedará así:
UML: de la teoría a la práctica - 4
Puedes entrar en tantos detalles como sea necesario. Todas las designaciones se indican aquí: " PlantUML - Diagrama de clases ". Además, no hay nada sobrenatural en dibujar un diagrama de este tipo y, cuando trabaje en sus tareas, podrá dibujarlo rápidamente a mano. Esto desarrollará sus habilidades para pensar en la arquitectura de aplicaciones y lo ayudará a identificar fallas en la estructura de clases desde el principio, en lugar de después de haber pasado el día implementando el modelo incorrecto. ¿Creo que es una buena razón para intentarlo? )
UML: de la teoría a la práctica - 5

Automatización

Hay varias formas de generar automáticamente diagramas PlantUML. Por ejemplo, Idea tiene un complemento SketchIT , pero no los dibuja del todo correctamente. Por ejemplo, la implementación de las interfaces se dibuja incorrectamente (se muestra como herencia). También hay ejemplos en Internet sobre cómo incorporar esto en el ciclo de vida de construcción de su proyecto. Digamos que hay un ejemplo de Maven que usa uml-java-docklet . Para mostrar cómo se hace esto, usaremos Maven Archetype para crear rápidamente un proyecto Maven. Ejecutemos el comando: mvn archetype:generate Cuando se le solicite seleccionar un filtro ( Elija un número o aplique el filtro ), deje el valor predeterminado simplemente presionando Enter. Siempre será " maven-archetype-quickstart ". Seleccione la última versión. A continuación, respondemos las preguntas y completamos la creación del proyecto:
UML: de la teoría a la práctica - 6
Dado que Maven no es el tema central de este artículo, las respuestas a sus preguntas sobre Maven se pueden encontrar en el Centro de usuarios de Maven . En el proyecto generado, abra el archivo de descripción del proyecto, pom.xml, para editarlo . Copiemos el contenido de la descripción de la instalación de uml-java-docklet . El artefacto utilizado en la descripción no se pudo encontrar en el repositorio central de Maven. Pero funcionó para mí con esto: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Es decir, en esa descripción solo necesitas reemplazar el groupId de “ info.leadinglight ” por “ com.chfourie ” y configurar la versión en “ 1.0.0 ”. Luego de esto, ya podremos ejecutar estos comandos en el directorio donde se encuentra el archivo pom.xmlmvn clean install : y mvn javadoc:javadoc. Ahora, si abrimos la documentación generada (explorer target\site\apidocs\index.html), veremos los diagramas UML. Por cierto, la implementación ya se muestra correctamente aquí)

Conclusión

Como puede ver, UML le permite visualizar la estructura de su aplicación. Además, UML no se limita sólo a esto. Con UML, puede describir varios procesos dentro de su empresa o describir el proceso de negocio dentro del cual opera la función que está escribiendo. Depende de usted decidir qué tan útil es UML para usted personalmente, pero tomarse el tiempo para leerlo con más detalle será útil en cualquier caso. #viacheslav
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION