Be Software Architecture Wise
Be Wise Apps

Read in English · Lire en français · Auf Deutsch lesen

Sección 4.4 de 4.8 · Intermedio · 22 min de lectura

Los diagramas UML que los arquitectos todavía usan

Videolección

5 min · narrado en inglés, con subtítulos
Solo escuchar (audio)
Leer la transcripción

Las cajas y líneas sirven para la estructura, pero algunas preguntas necesitan más precisión. En esta lección aprenderás el puñado de diagramas del Lenguaje Unificado de Modelado, o UML, que los arquitectos todavía usan, y cuándo merecen el esfuerzo.

Músicos de todo el mundo pueden leer la misma partitura, porque las notas y los símbolos significan lo mismo en todas partes. UML es un conjunto compartido de símbolos parecido para dibujar software. Una flecha concreta significa "espera una respuesta". Otra significa "envía y sigue adelante". No necesitas conocerlo entero. Los arquitectos usan sobre todo un puñado de sus dibujos, cada uno solo cuando su precisión ayuda de verdad.

UML es un lenguaje gráfico de propósito general para describir la estructura y el comportamiento del software. Lo adoptó como estándar el Object Management Group en 1997, y la versión actual, la 2.5.1, define catorce tipos de diagrama. Su reputación ha cambiado. La ambición inicial de convertir modelos detallados en código fracasó en gran medida, y hoy muchos equipos dibujan cajas y líneas informales. Aun así, unos pocos diagramas UML siguen siendo las mejores herramientas para las preguntas sobre el comportamiento a lo largo del tiempo.

Martin Fowler describe tres formas de usar UML. Como boceto, es informal y selectivo: solo los elementos importantes, a menudo en una pizarra y a menudo para tirarlo después. En sus palabras, la exhaustividad es enemiga de la comprensibilidad. Como plano, produce modelos completos y precisos para que otra persona los implemente. Como lenguaje de programación, el modelo es lo bastante detallado para compilarse en código. Eso solo sobrevive en algunos nichos embebidos y críticos para la seguridad. Para los arquitectos, el boceto es la opción predeterminada. Pregúntate de cada diagrama: ¿quién lo leerá y qué decisión respalda?

Si los arquitectos se quedan con un solo diagrama UML, suele ser el diagrama de secuencia. Muestra cómo interactúan los participantes a lo largo del tiempo en un escenario. Cada participante, en la parte superior, tiene una línea de vida discontinua, y el tiempo avanza hacia abajo. Aquí, la app del cliente hace un pedido al servicio de pedidos, que llama al proveedor de pagos y espera. Una llamada síncrona tiene una línea continua y una punta de flecha rellena. La respuesta vuelve como una línea discontinua. Esta caja es un fragmento alt, que muestra alternativas. Si el pago se autoriza, el pedido se guarda y se confirma. Si se rechaza, la app recibe un error. Dibuja también los escenarios de fallo: ahí es donde ocurre la mayor parte del razonamiento arquitectónico. Por último, un evento de pedido realizado va al topic como mensaje asíncrono: una línea continua con una punta abierta. El servicio no espera. Acertar con estas puntas de flecha importa. Que un servicio espere o siga adelante determina su latencia, sus modos de fallo y su acoplamiento. La leyenda las explica.

Un diagrama de máquina de estados describe un ciclo de vida con precisión. Los estados son rectángulos redondeados, y cada transición lleva la etiqueta de un evento, una condición de guarda opcional y una acción opcional. Aquí, un pedido empieza en pago pendiente y pasa a creado cuando se autoriza el pago. Después pasa por aceptado, listo y en reparto. Solo pasa a entregado cuando el código de entrega coincide, y entonces se avisa al cliente. Los pedidos también pueden cancelarse: cuando se rechaza el pago, cuando el restaurante los rechaza o desde soporte, con un reembolso. Varios servicios comparten este ciclo de vida. Acordarlo en un solo diagrama evita bugs en los que un servicio cree que un pedido está cancelado mientras otro envía a un repartidor. Y responde a preguntas que el texto oculta. ¿Se puede cancelar un pedido cuando ya está en reparto? Aquí, no.

Otros cuatro diagramas completan el conjunto. Un diagrama de componentes muestra las interfaces que cada parte proporciona y requiere, lo que hace visible la dirección de las dependencias. Un diagrama de despliegue muestra los nodos, como un teléfono o un clúster, los artefactos desplegados en ellos y las vías de comunicación entre ellos. Un diagrama de actividades muestra un flujo de trabajo: quién hace cada paso y qué se ejecuta en paralelo entre una bifurcación y una unión. Y un diagrama de clases conviene reservarlo para un modelo de dominio pequeño de los conceptos de negocio clave. Dibujar a mano todas las clases queda desactualizado en semanas.

UML es excesivo cuando el público no lo conoce y la pregunta no lo necesita. Pero la precisión compensa cuando un malentendido sale caro, como en una interfaz entre empresas, donde cada parte construye a partir de la descripción de la otra. Las industrias reguladas y críticas para la seguridad a menudo exigen documentación de diseño que los auditores puedan rastrear. Las reglas de ciclo de vida que comparten varios equipos, como los estados del pedido, se benefician de una notación que obliga a declarar cada transición. Y cuando quienes construyen un diseño no pueden preguntar fácilmente a su autor, este debe dejar menos margen a la interpretación. Un último consejo: añade siempre una leyenda. Muchos lectores no conocen la notación.

La sección completa dibuja los seis diagramas para la plataforma de reparto de comida, con la notación de cada uno. A continuación, en la Sección cuatro punto cinco, veremos cómo registrar las razones de las decisiones. Nos vemos allí.

Lo que necesitas saber

Qué es UML y en qué punto está hoy

El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico de propósito general para describir la estructura y el comportamiento del software. Surgió de la fusión, en Rational Software a mediados de la década de 1990, de los métodos de Grady Booch, James Rumbaugh e Ivar Jacobson, y lo adoptó como estándar el Object Management Group (OMG), un consorcio de estándares del sector, en 1997. UML 2.0 (2005) fue una revisión importante. La versión actual es UML 2.5.1, publicada por el OMG en diciembre de 2017; la anterior, UML 2.4.1, también la publicó ISO como ISO/IEC 19505 (2012). La especificación define catorce tipos de diagrama, divididos en diagramas de estructura (como los de clases, componentes y despliegue) y diagramas de comportamiento (como los de actividades, máquina de estados y secuencia).

La reputación de UML ha cambiado considerablemente. A finales de la década de 1990 y principios de la de 2000 se promovió como la base del desarrollo dirigido por modelos, en el que modelos detallados se transformarían en código. Esa ambición fracasó en gran medida fuera de los dominios especializados, y muchos equipos asocian UML con procesos pesados y diagramas que nadie leía. Cuando Marian Petre entrevistó a 50 desarrolladores de software profesionales para un estudio presentado en ICSE 2013, 35 dijeron que no usaban UML en absoluto y la mayoría de los demás lo usaban de forma selectiva e informal; la mayoría de los equipos dibujan cajas y líneas informales en lugar de UML estricto. Aun así, un puñado de tipos de diagrama UML siguen siendo las mejores herramientas disponibles para ciertas preguntas, sobre todo las relativas al comportamiento a lo largo del tiempo, y su notación se entiende ampliamente. Un arquitecto no necesita los catorce tipos de diagrama; necesita quizá seis, usados de forma deliberada.

Esta sección trata esos seis, cada uno con un pequeño ejemplo de la plataforma de reparto de comida que se usa a lo largo de este capítulo. Da por sabido el vocabulario de C4 de la Sección 4.3; los dos se combinan bien, con C4 para la visión general de la estructura y UML donde la precisión sobre interfaces, interacciones o estados compensa su costo.

Boceto, plano o lenguaje de programación

UML Distilled de Martin Fowler (3.ª edición, Addison-Wesley, 2003) y sus ensayos del mismo año distinguen tres formas de usar UML, una clasificación a la que Steve Mellor llegó de manera independiente. Como boceto, UML se usa de forma informal y selectiva para comunicar ideas: en una pizarra antes de escribir código (boceto hacia delante) o para explicar parte de un sistema existente (boceto inverso). Solo aparecen los elementos importantes, la notación se sigue con flexibilidad y el diagrama a menudo se tira. El propio resumen de Fowler es la exhaustividad es enemiga de la comprensibilidad.

Como plano, UML se usa para producir modelos completos y precisos que otra persona implementa, o que se generan a partir del código existente para documentarlo por completo; lo que importa es la completitud, y normalmente hacen falta herramientas. Como lenguaje de programación, el modelo UML es lo bastante detallado para compilarse en código ejecutable, el objetivo de la arquitectura dirigida por modelos (MDA). Este modo sobrevive en algunos nichos embebidos y críticos para la seguridad (safety), a menudo mediante perfiles y herramientas especializados, pero no se ha generalizado.

Para los arquitectos, el modo boceto es el predeterminado y el modo plano, la excepción. La pregunta útil para cada diagrama es: ¿quién lo leerá y qué decisión o comprensión respalda? Un diagrama de secuencia esbozado para acordar cómo se gestionan los fallos de pago es valioso aunque ignore la mitad de la notación. Un modelo de clases completo de un servicio de 200 clases, mantenido a mano, normalmente no lo es.

Diagramas de componentes: las partes y sus interfaces

Un diagrama de componentes UML muestra las partes modulares de un sistema y, sobre todo, sus interfaces. Su notación característica es la de "bola y enchufe": un pequeño círculo sobre un palo (una interfaz proporcionada, que el componente ofrece) y un semicírculo (una interfaz requerida, que necesita que otro le proporcione). Cuando una bola encaja en un enchufe, los dos componentes quedan conectados a través de esa interfaz. Las dependencias son flechas discontinuas, que pueden llevar opcionalmente un estereotipo como «use».

Esto es exactamente lo que les importa a los arquitectos cuando quieren mostrar la dirección de las dependencias y la sustituibilidad. En el ejemplo, el componente de pedidos no depende directamente del proveedor de pagos; requiere una interfaz PaymentPort, que implementa un adaptador de pagos aparte. Es la inversión de dependencias y el enfoque de puertos y adaptadores del Capítulo 3 hechos visibles: cambiar de proveedor de pagos significa escribir un adaptador nuevo, no modificar el componente de pedidos. Un diagrama de componentes C4 puede mostrar las mismas partes, pero no distingue las interfaces proporcionadas de las requeridas.

Diagrama de componentes

Diagrama de componentes UML con el componente de pedidos y sus interfaces proporcionadas y requeridasDiagrama de componentes: pedidos y sus interfaces«component»BFF cliente«component»Pedidos«component»Adaptador pagos«component»Despacho«sistema externo»Proveedor de pagosOrderAPIPaymentPortOrderEvents«use»Pedidos proporciona OrderAPI yOrderEvents, y requiere unPaymentPort que implementa eladaptador.ClaveInterfaz proporcionadaInterfaz requeridaDependencia
Las bolas son interfaces que un componente proporciona; los enchufes son interfaces que requiere. Pedidos depende de un puerto, no del proveedor. (BFF: backend for frontend, un componente del lado del servidor dedicado a una app cliente concreta.)

Diagramas de despliegue: nodos y artefactos

Un diagrama de despliegue UML muestra la infraestructura física o virtual y lo que se ejecuta en ella. Sus elementos son los nodos, dibujados como cajas tridimensionales, que son recursos de cómputo: un «device», como un teléfono o un servidor, o un «executionEnvironment», como un sistema operativo, un entorno de ejecución de contenedores o un clúster de Kubernetes; los nodos pueden anidarse. Los artefactos, dibujados como rectángulos con un icono de documento y el estereotipo «artifact», son los archivos físicos que se despliegan: un JAR, una imagen de contenedor, un paquete de app móvil, un archivo de configuración. Las líneas entre nodos son vías de comunicación, etiquetadas con protocolos.

Los diagramas de despliegue son vistas de asignación en los términos del SEI (Sección 4.2). Responden a las preguntas del equipo de operaciones: dónde se ejecuta cada parte, cuántas copias hay, en qué región, qué rutas de red existen. El diagrama de despliegue de C4 cubre el mismo terreno con una notación menos formal; cualquiera de los dos sirve, siempre que haya uno por cada entorno importante y muestre las réplicas, los servicios gestionados y los límites de red.

Diagrama de despliegue

Diagrama de despliegue UML: los artefactos de la plataforma en un teléfono, un clúster de Kubernetes y servicios gestionadosDiagrama de despliegue: producción«device»Teléfono cliente«artifact»customer-app«node» Región de nube eu-west«executionEnvironment»Clúster Kubernetes«artifact»imagen ordering-service3 réplicas«artifact»imagen dispatch-service3 réplicas«artifact»imagen notification-service2 réplicas«node»ServicioPostgreSQLprincipal + reserva«node»Servicio Kafka3 brokersHTTPSTCPTCPCajas 3D:nodos. Líneas:vías decomunicación
Los nodos son donde se ejecutan las cosas; los artefactos son lo que se despliega; las líneas son vías de comunicación.

Diagramas de secuencia: quién llama a quién y en qué orden

Si los arquitectos se quedan con un solo diagrama UML, suele ser el diagrama de secuencia. Muestra cómo interactúan los participantes a lo largo del tiempo en un escenario. Los participantes aparecen en la parte superior, cada uno con una línea de vida vertical discontinua; el tiempo avanza hacia abajo. Un rectángulo estrecho sobre una línea de vida, la activación (especificación de ejecución), muestra cuándo ese participante está ocupado atendiendo un mensaje.

Las puntas de flecha tienen significado. Un mensaje síncrono, en el que el emisor espera una respuesta, tiene una línea continua y una punta de flecha rellena. Una respuesta (retorno) tiene una línea discontinua y una punta abierta. Un mensaje asíncrono, en el que el emisor sigue adelante sin esperar, tiene una línea continua y una punta abierta. Acertar con esto importa para la arquitectura: que el servicio de pedidos espere al proveedor de pagos o que publique y siga adelante determina su latencia, sus modos de fallo y su acoplamiento (consulta la Sección 0.6).

Los fragmentos combinados añaden flujo de control: una caja con la etiqueta alt y secciones con guarda separadas por una línea discontinua muestra alternativas (if/else), opt muestra una parte opcional, loop una repetición y par secciones en paralelo. Úsalos con moderación; un diagrama de secuencia con bucles y alternativas anidados es código mal dibujado. Dibuja un diagrama por cada escenario importante, incluidos los escenarios de fallo, que es donde ocurre la mayor parte del razonamiento arquitectónico.

Diagrama de secuencia

Diagrama de secuencia UML para hacer un pedido, con una llamada de pago síncrona, un fragmento alt y un evento asíncronoSecuencia UML: hacer un pedidoApp clienteServiciopedidosProveedorde pagosBD depedidosEv. de pedidos(topic)POST /ordersauthorise(amount, key)resultalt[autorizado]INSERT pedido + fila outboxconfirmado201 Created[rechazado]4xx pago rechazadoOrderPlaced (asínc., vía relé outbox)ClaveLlamada síncronaRetornoMensaje asíncronoActivación
Hacer un pedido: una llamada síncrona al proveedor de pagos, un fragmento alt para los dos resultados posibles y un evento asíncrono al final.

Diagramas de máquina de estados: ciclos de vida y reglas

Muchos objetos de negocio tienen un ciclo de vida: un pedido, un pago, una suscripción, un siniestro de seguros. Un diagrama de máquina de estados lo describe con precisión. Los estados son rectángulos redondeados; un círculo relleno marca el pseudoestado inicial y una diana el estado final. Las transiciones son flechas con la etiqueta event [guard] / action: el evento que desencadena la transición, una condición de guarda opcional que debe cumplirse y una acción opcional que se realiza por el camino. Los estados pueden tener comportamientos internos como entry / notify restaurant.

Las máquinas de estados son arquitectónicas más a menudo de lo que se cree. El ciclo de vida del pedido de abajo lo comparten varios servicios: pedidos es su dueño, despacho y notificaciones reaccionan a sus transiciones y el personal de soporte puede desencadenar algunas de ellas. Acordar los estados y las transiciones válidas, en un solo diagrama, evita toda una clase de bugs en los que un servicio cree que un pedido está cancelado mientras otro envía a un repartidor. El diagrama también saca a la luz preguntas que el texto oculta: ¿se puede cancelar un pedido cuando ya está en reparto? (Aquí, no: no hay ninguna transición desde ese estado a Cancelado.) ¿Un reembolso es una acción de una transición o un ciclo de vida aparte?

Diagrama de máquina de estados

Máquina de estados UML del ciclo de vida de un pedido de comida a domicilioEstados: ciclo de vida del pedidoPago pendienteCreadoentry / avisar restauranteAceptadoListoEn repartoentry / iniciar rastreoEntregadoCanceladopaymentAuthorisedrestaurantAcceptsfoodReadypickedUphandedOver[código válido]/ avisar al clientepaymentDeclinedrestaurantRejects/ devolvercancel[soporte lo aprueba]/ devolverClaveInicialFinalTransición: evento [guarda] / acción
El ciclo de vida del pedido: todas las transiciones válidas, con eventos, guardas y acciones, en una sola página.

Diagramas de actividades: flujos de trabajo y paralelismo

Un diagrama de actividades es un diagrama de flujo con una semántica precisa. Los rectángulos redondeados son acciones; los rombos son decisiones (con guardas en los flujos de salida) y fusiones; las barras gruesas son bifurcaciones, que dividen un flujo en flujos paralelos, y uniones, que esperan a todos los flujos de entrada antes de continuar. Las particiones, a menudo llamadas calles (swimlanes), muestran quién o qué realiza cada acción. Un bucle debe volver a través de un rombo de fusión: dos flujos que entraran directamente en una misma acción significarían que la acción espera a ambos, como una unión.

Los arquitectos usan los diagramas de actividades para procesos de negocio y flujos de trabajo que abarcan varias partes de un sistema, sobre todo cuando importan el paralelismo y las responsabilidades. El ejemplo muestra que la preparación de la comida y la asignación del repartidor se ejecutan en paralelo, que la asignación se repite en bucle hasta que un repartidor acepta y que la entrega espera a ambas. Eso plantea de inmediato una pregunta arquitectónica: ¿y si ningún repartidor acepta en veinte minutos mientras la comida ya está lista? El diagrama hace visible el hueco; la respuesta podría ser una transición por timeout, un paso de compensación o un cambio en el ciclo de vida del pedido. Los flujos de trabajo de larga duración de este tipo suelen implementarse como sagas o flujos orquestados, que se tratan en el Capítulo 6.

Diagrama de actividades

Diagrama de actividades UML con calles, bifurcación, bucle de decisión y unión para preparar la comida y asignar un repartidorDiagrama de actividades: de aceptar a entregarRestauranteServ. despachoAceptar pedidoCocinar pedidoBuscar repart. cercanosfusiónOfrecer a otro repartidor[rechazado oexpirado][aceptado]Entregar al repartidorBifurcación: ambas ramas van en paralelo.Unión: espera a ambas antes de la entrega.
La preparación de la comida y la asignación del repartidor se ejecutan en paralelo entre una bifurcación y una unión; la decisión se repite en bucle hasta que un repartidor acepta.

Diagramas de clases, con moderación: el modelo de dominio

El diagrama de clases es el diagrama UML más conocido y el que los arquitectos deberían usar con más moderación. Dibujar a mano todas las clases de un servicio es el modo plano en su versión menos útil: queda desactualizado en semanas y el código dice lo mismo con más precisión. Donde los diagramas de clases se ganan su sitio es en el modelo de dominio: un diagrama pequeño de los conceptos de negocio clave, sus atributos y sus relaciones, que desarrolladores, responsables de producto y expertos del dominio pueden discutir juntos. En términos de diseño guiado por el dominio (Capítulo 5), recoge el lenguaje ubicuo de un contexto delimitado.

Lo esencial es poco. Una caja de clase tiene un nombre, atributos y, opcionalmente, operaciones. Una línea simple es una asociación, con nombre opcional y con multiplicidades en cada extremo (1, 0..1, 0..*, 1..*). Un rombo relleno marca la composición: las partes pertenecen exactamente a un todo y no le sobreviven, como las líneas de pedido pertenecen a un pedido. Un triángulo hueco marca la generalización (herencia) y una línea discontinua con punta abierta, una dependencia. Las multiplicidades encierran decisiones de diseño reales: Order 1 to 0..1 Delivery dice que un pedido tiene como mucho una entrega, lo que descarta repartir un pedido grande entre dos repartidores. Si el negocio pudiera querer eso, el diagrama es donde aflora la pregunta.

Diagrama de clases del modelo de dominio

Diagrama de clases UML del modelo de dominio de pedidos con asociaciones, multiplicidades y composiciónDiagrama de clases: dominio de pedidosCustomerid: CustomerIdname: StringOrdenid: OrderIdstatus: OrderStatustotal: MoneyplacedAt: InstantRestauranteid: RestaurantIdname: StringOrderLinequantity: intunitPrice: MoneyMenuItemname: Stringprice: MoneyRepartohandoverCode: StringpickedUpAt: InstantCourierid: CourierIdvehicle: VehicleType10..*realiza0..*1de1..*0..*10..*10..10..*1Composición: las partes viven y mueren con el todoLos números son multiplicidades: 1, 0..1, 0..*, 1..*
Un modelo de dominio lo bastante pequeño para discutirlo con el negocio: conceptos clave, atributos, asociaciones y multiplicidades.

Los seis diagramas de un vistazo

DiagramaResponde aNotación claveUso típico por parte de los arquitectos
Componente¿Cuáles son las partes y a través de qué interfaces dependen unas de otras?Cajas de componentes, interfaces proporcionadas (bola) y requeridas (enchufe), dependenciasMostrar la dirección de las dependencias y las partes sustituibles; puertos y adaptadores
Despliegue¿Dónde se ejecuta cada parte, cuántas copias hay y cómo se conectan?Nodos (cajas 3D), artefactos, vías de comunicaciónInfraestructura de producción y preproducción (staging), zonas de red
Secuencia¿En qué orden interactúan los participantes en este escenario?Líneas de vida, activaciones, mensajes síncronos y asíncronos, respuestas, fragmentosEscenarios clave en tiempo de ejecución, sobre todo fallos, reintentos e integraciones
Máquina de estados¿En qué estados puede estar este objeto y qué lo hace pasar de uno a otro?Estados, estados inicial y final, transiciones con evento [guarda] / acciónCiclos de vida compartidos entre servicios: pedidos, pagos, siniestros
Actividades¿Cuál es el flujo de trabajo, quién hace cada paso y qué se ejecuta en paralelo?Acciones, decisiones, bifurcaciones y uniones, particionesProcesos de negocio, flujos de trabajo de larga duración, sagas
Clase¿Cuáles son los conceptos clave y cómo se relacionan?Clases, asociaciones, multiplicidades, composición, generalizaciónModelos de dominio pequeños; diagramas generados a partir del código

Cuándo UML es excesivo y cuándo importa la precisión

UML es excesivo cuando el público no lo conoce y la pregunta no lo necesita: un diagrama de contexto C4 comunica mejor con los directivos que un diagrama de casos de uso UML, y un boceto en la pizarra es la herramienta adecuada para una discusión de diseño que habrá terminado en una hora. Es excesivo cuando se mantienen a mano diagramas que podrían generarse y cuando se impone una notación estricta en un boceto cuyo propósito es explorar. La observación de Fowler de que la precisión añadida en UML 2 sirve sobre todo a quienes lo usan como plano y como lenguaje de programación, y supone una carga para quienes hacen bocetos, sigue siendo válida.

La precisión compensa cuando un malentendido sale caro. Las interfaces entre empresas son el caso más claro: cuando la empresa de reparto de comida se integra con un proveedor de pagos o con el sistema de pedidos de una gran cadena de restaurantes, cada parte construye a partir de la descripción de la otra y solo descubre los desajustes en las pruebas o en producción. Un diagrama de secuencia preciso del flujo de pago, con timeouts, reintentos, claves de idempotencia y webhooks, adjunto a la especificación de la interfaz, es un seguro barato. Las industrias reguladas y críticas para la seguridad (safety) (dispositivos médicos, ferrocarril, aviación, automoción, algunos sistemas financieros) a menudo exigen documentación de diseño que los auditores puedan rastrear desde los requisitos hasta la implementación; allí es habitual el UML formal o su pariente de la ingeniería de sistemas, SysML. Las reglas de concurrencia y de ciclo de vida que comparten varios equipos, como los estados del pedido de antes, se benefician de una notación que obliga a declarar cada transición. Y el desarrollo externalizado o distribuido, en el que quienes implementan un diseño no pueden preguntar fácilmente a su autor, necesita descripciones que dejen menos margen a la interpretación.

Preguntas frecuentes

¿Debería nuestro equipo aprender UML?

Aprende lo esencial de la notación de los seis diagramas de esta sección; lleva unas pocas horas y da al equipo un vocabulario compartido para interfaces, interacciones y ciclos de vida. Apenas hace falta aprender los demás tipos de diagrama o la especificación completa, salvo que trabajes en un dominio que los exija.

¿Qué relación hay entre UML y C4?

Son complementarios. C4 ofrece un pequeño conjunto de abstracciones y una jerarquía de diagramas estructurales; UML ofrece notaciones precisas, sobre todo para el comportamiento. Muchos equipos usan C4 para las vistas de contexto, contenedores y componentes, y UML para los diagramas de secuencia, de estados y, de vez en cuando, de despliegue.

¿Puedo dibujar UML con texto en lugar de con una herramienta de dibujo?

Sí. Tanto PlantUML como Mermaid generan diagramas de secuencia, de estados, de clases y de actividades a partir de archivos de texto breves que pueden vivir en el control de versiones. La Sección 4.7 muestra ejemplos.

Comprueba lo que has entendido

En un diagrama de secuencia, ¿cómo distingues una llamada síncrona de un mensaje asíncrono?

Una llamada síncrona tiene una línea continua con una punta de flecha rellena (el emisor espera); un mensaje asíncrono tiene una línea continua con una punta abierta (el emisor continúa). Las respuestas son líneas discontinuas con puntas abiertas.

¿Qué significa la etiqueta handedOver [code matches] / notify customer en una transición?

Cuando ocurre el evento handedOver y la guarda "el código coincide" (code matches) es verdadera, la transición se dispara y se realiza la acción "avisar al cliente" (notify customer).

¿Por qué los arquitectos rara vez deberían dibujar a mano diagramas de clases de servicios enteros?

Duplican lo que el código expresa con más precisión y se desactualizan rápido; vale la pena dibujar modelos de dominio pequeños, y los diagramas completos pueden generarse cuando hagan falta.

Da dos situaciones en las que el UML preciso merece el esfuerzo.

Por ejemplo, las interfaces entre empresas, el desarrollo regulado o crítico para la seguridad (safety), los ciclos de vida que comparten varios equipos o el desarrollo externalizado en el que quienes implementan no pueden preguntar fácilmente a los diseñadores.

Siguiente · 4.5Registros de decisionesCómo registrar las decisiones significativas para que sus razones perduren: el formato de Nygard, MADR y las declaraciones Y, los estados y la sustitución, dónde guardar los registros, qué merece uno, la revisión y los antipatrones.Continuar →

Fuentes y lecturas recomendadas

¿Tienes una pregunta sobre esta sección? ArchitectBot, el asistente de estudio con IA del curso, responde primero a partir del curso.

Pregunta: “¿Qué diagramas UML debería incluir en la especificación de interfaz para una empresa socia que se integra con nuestra API?”