Cómo utilizar diagramas de clases y secuencia para comunicar eficazmente en Java
Los diagramas de clases, cuando se utilizan en conjunto con los diagramas de secuencia, proporcionan un mecanismo de comunicación extremadamente efectivo. Puede utilizar un diagrama de clases para ilustrar las relaciones entre las clases, y el diagrama de secuencia le permite mostrar los mensajes enviados entre las instancias de estas clases y el orden en el que se envían. Cuando un objeto envía un mensaje a otro objeto, implica que las dos clases tienen una relación que debe mostrarse en un diagrama de clases.
El diagrama de secuencia
En Figura A, el objeto EventExample envía un mensaje al objeto TimeEventSource. Este mensaje provoca la activación del método addTimeChangeListener(). El orden de los mensajes enviados entre los objetos siempre se lee de arriba a abajo y típicamente se lee de izquierda a derecha. Observa las notas utilizadas en la Figura A para mejorar la comprensión.
Veamos más detalles sobre el diagrama de secuencia. Los números que siguen corresponden a los números en la figura:
- Algún EventExample, que puede ser cualquier objeto en su sistema, comienza la simulación de eventos creando un objeto TimeChangeListener. Obviamente, no se puede tener una instancia de una interfaz. Sin embargo, es importante comunicar que TimeEventSource no está acoplado a la implementación de TimeChangeListener, sino al propio listener.
- El objeto EventExample ahora registra el TimeChangeListener con el objeto TimeEventSource.
- EventExample llama a start en TimeEventSource, lo que comienza a enviar eventos a los listeners que se han registrado con él.
- TimeEventSource crea un objeto TimeChangeEvent, que encapsula información sobre este evento.
- TimeEventSource recorre cada uno de sus listeners, llamando al método timeChange en cada uno.
- Opcionalmente, TimeChangeListener puede obtener una referencia al objeto que causó la notificación del evento. Esta referencia se devuelve como una referencia genérica a java.lang.Object.
- TimeChangeListener llama a su método processEvent() para manejar el procesamiento del evento.
Observarás que he adjuntado una nota a la interfaz TimeChangeListener especificando que realmente crearé una clase que implemente esta interfaz. Esta nota permite una gran flexibilidad en el diagrama, porque toda la secuencia de mensajes es válida independientemente de qué clase use en lugar de TimeChangeListener. También puedo querer usar una nota para especificar que cuando el objeto TimeEventSource notifica a sus listeners un cambio de tiempo, puede notificar a múltiples listeners, lo que resulta en un bucle.
La idea es que los desarrolladores que necesiten interpretar este diagrama y usarlo para construir código deben tener la información proporcionada en las notas para hacerlo de manera efectiva. Las notas son una gran ayuda para ayudarte a comprender más completamente los detalles asociados con esta secuencia de eventos. Las notas deben aparecer en la mayoría de los diagramas. Típicamente tienes muchos diagramas de secuencia para un solo diagrama de clases porque cualquier sociedad de clases interactuará de muchas maneras diferentes. La intención de un diagrama de secuencia es modelar una forma en que la sociedad interactúa.
Guía para posicionar elementos en HTML con CSSEl diagrama de clases
El diagrama de clases en Figura B es una representación estructural de la simulación de eventos de Java. Observa cada una de las relaciones que aparecen en este diagrama. Primero, la clase EventExample tiene relaciones con TimeEventSource y TimePrinter, que corresponden a los mensajes que un objeto EventExample debe enviar a las instancias de estas clases.
El diagrama de secuencia de la Figura A no incluyó un objeto TimePrinter. De hecho, contenía un TimePrinter, pero estaba en forma de la interfaz TimeChangeListener. Como puedes ver en la Figura B, TimePrinter implementa la interfaz TimeChangeListener. Además, observa las relaciones de herencia estructural representadas en este diagrama que no eran evidentes en el diagrama de secuencia.
Cuando se interpretan los diagramas, a menudo es más fácil colocar el diagrama de clases y el diagrama de secuencia uno al lado del otro. Comienza leyendo el diagrama de secuencia, y a medida que los mensajes se envían entre los objetos, rastrea estos mensajes hasta las relaciones en el diagrama de clases. Hacer esto debería ser útil para comprender por qué existen las relaciones en el diagrama de clases. Después de leer los diagramas de secuencia, si encuentras una relación en un diagrama de clases que no se puede mapear a una llamada de método, debes cuestionar la validez de la relación.
El diagrama de paquetes
Los diagramas de paquetes son una forma de diagrama de clases. La diferencia es que un diagrama de paquetes muestra las relaciones entre los paquetes individuales. Puedes pensar en un diagrama de paquetes como una vista de alto nivel de tu sistema. Esto se vuelve importante al comprender la arquitectura del sistema. Las relaciones de dependencia ilustradas en Figura C indican la dirección de las relaciones estructurales entre las clases dentro de los diferentes paquetes.
Dónde acuden los desarrolladores en busca de ayuda y solucionesComo puedes ver, el paquete eventhandling depende del paquete util, lo que implica que las clases dentro de eventhandling pueden importar clases dentro de util pero no viceversa. Esta es una distinción importante porque tus dependencias de paquetes deben ser consistentes con las relaciones expresadas en los diagramas de clases correspondientes.
Los diagramas de paquetes, cuando se combinan con los diagramas de clases, son un mecanismo eficaz para comunicar la arquitectura de un sistema. Un diagrama como el de la Figura C proporciona una visión de alto nivel de la estructura general de un sistema. Esto permite a los desarrolladores hacer suposiciones sobre las relaciones entre las clases individuales, lo que resulta especialmente útil cuando nuevos desarrolladores se unen al proyecto y necesitan ponerse al día rápidamente, o cuando los desarrolladores necesitan mantener un sistema en el que pueden haber trabajado anteriormente pero no han interactuado en algún tiempo.
De cualquier manera, este tipo de modelado arquitectónico es beneficioso. Puedes descargar el código de este ejemplo en el Apéndice C en JOUP Online.
Interpretación cuidadosa
Como has visto, muchos de los elementos del UML tienen una correspondencia precisa con el lenguaje de programación Java, lo cual es consistente con las afirmaciones de que el UML es un mecanismo de comunicación preciso e inequívoco. Como desarrolladores, debemos interpretar cada uno de estos elementos de una manera que sea fiel a esta afirmación. Diferentes interpretaciones de estos elementos pueden dar lugar a una mala comunicación, que es el desafío mismo que el UML intenta resolver.
Aunque el UML es preciso, debes asegurarte de no derivar más significado del que los diagramas realmente transmiten. El UML no es un lenguaje de programación visual, sino un lenguaje de modelado. Como tal, la intención no es modelar al mismo nivel de detalle en el que existe el código. Los diagramas típicamente no indican cómo implementar algo, sino que solo indican que debes acomodar una necesidad particular.
Cómo pasar de constantes de tiempo de compilación a constantes en tiempo de ejecuciónEn Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo utilizar diagramas de clases y secuencia para comunicar eficazmente en Java , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados