Archyno
UMLDiagramas de estructura

Ejemplos de diagramas de clases UML

Dos dominios modelados en serio, con un motivo para cada línea: una biblioteca que necesita herencia y una cesta que necesita composición.

6 min de lecturaUML 2.5.15 de 35

La respuesta corta

  • Dos dominios cubren todos los tipos de relación que vas a dibujar: una biblioteca que necesita herencia y una cesta que necesita composición.
  • Un diagrama es una vista de un modelo, no el modelo. Una vista que contiene todas las clases no responde a nada.
  • De cinco a doce clases. Por encima de doce las relaciones se cruzan y la atención se va en seguir líneas en vez de en el dominio.
  • Dibuja las clases de las que trata la pregunta y deja las otras doscientas en el modelo, donde una herramienta seguirá encontrándolas.
Un diagrama de clases UML de una biblioteca. LibraryItem es una clase abstracta con title e id; Book y DVD la generalizan las dos. Member está asociada con Loan, uno a cero o más, y Loan está asociada con exactamente un LibraryItem.
Una biblioteca. La base abstracta lleva lo que tiene todo ejemplar; los subtipos llevan lo que solo ellos tienen.

01Una biblioteca, donde la herencia se gana su sitio#

El diagrama de arriba merece leerse relación por relación. Book y DVD generalizan LibraryItem, que se dibuja como un triángulo hueco apuntando al padre, y la razón para dibujarlo así en vez de como dos clases sin relación con atributos duplicados es la asociación de debajo. Loan apunta a exactamente un LibraryItem, y como apunta al padre abstracto, puede prestar cualquiera de los subtipos sin saber cuál.

Esa es toda la prueba de la herencia en un modelo de dominio: no "¿estas dos cosas se parecen?", sino ¿hay en algún punto del modelo algo que quiera sostener una u otra sin importarle cuál? Si no lo hay, dos clases separadas son la respuesta más pequeña y más honesta.

Fíjate en las multiplicidades de la asociación Member-Loan: 1 a 0..*. Un socio sin préstamos es un socio; un préstamo sin socio es un fallo. Esa asimetría es un hecho real del dominio y está puesta en la línea en vez de dejarse a un comentario. El artículo del diagrama de clases cubre cómo se dibuja cada uno de esos símbolos.

02Una cesta, donde la composición se gana su sitio#

Un diagrama de clases UML de una cesta de la compra. Basket está compuesta de una o más BasketLine, y cada BasketLine está asociada con exactamente un Product. Basket está asociada con una interfaz PricingRule, que PercentageOff y BuyOneGetOne realizan las dos.
Una cesta. El rombo relleno dice que una línea no sobrevive a la cesta en la que está.

Este no contiene herencia ninguna, y de eso se trata al mostrarlo junto a la biblioteca. Lo que tiene en su lugar es una composición y una interfaz, y cada una está ahí por una razón para la que el otro diagrama no tenía uso.

El rombo relleno entre Basket y BasketLine es una afirmación: borra la cesta y las líneas se van con ella, porque una línea de cesta no significa nada por su cuenta. Compáralo con la asociación simple de BasketLine a Product, donde el producto sobrevive claramente a la línea: la misma forma de relación, dos vidas distintas, y la notación las distingue.

PricingRule es el punto de extensión. Se dibujan dos realizaciones porque una sola realización no es una abstracción, es una clase con un paso de más, y en cuanto hay dos, añadir una tercera promoción es una clase nueva y no una rama nueva en un método existente.

03Cómo leer cualquiera de los dos en treinta segundos#

Los dos diagramas premian el mismo orden de lectura, y no es de izquierda a derecha. Empieza por las multiplicidades, porque son las decisiones: dicen qué permite el sistema y son lo más difícil de cambiar después. Luego lee los rombos, que dicen qué se borra con qué. Después los triángulos, que dicen qué puede sustituir a qué. Los atributos al final, y solo los que te den dudas.

Un diagrama que sobrevive a esa lectura merece conservarse. Uno con las multiplicidades en blanco no está acabado, por muchos atributos que liste, y ese es con diferencia el estado en que más veces te encontrarás un diagrama de clases.

En una línea cada uno

  1. 01Dibuja herencia cuando algo del modelo sostenga el tipo padre sin importarle qué subtipo tiene.
  2. 02Usa composición cuando la parte se borra con el todo, y asociación simple en los demás casos.
  3. 03Una interfaz con una sola realización es una clase con pasos de más; dos la convierten en punto de extensión.
  4. 04Las multiplicidades son las decisiones del diagrama. En blanco significan que está sin acabar.
  5. 05De cinco a doce clases por diagrama. Una vista que lo contiene todo no responde a nada.

Siguiente: cómo dibujar uno desde cero, y la referencia de símbolos para comprobar una marca de la que no estés seguro.

04Preguntas frecuentes#

¿Cuál es un buen ejemplo de diagrama de clases UML?

Uno lo bastante pequeño para leerse de un vistazo y lo bastante completo como para discutirlo. Una biblioteca con un LibraryItem abstracto y dos subtipos muestra herencia; una cesta compuesta por sus líneas muestra composición. Entre los dos cubren cada tipo de relación que vas a dibujar.

¿Debe un diagrama de clases mostrar todas las clases?

No. Un diagrama es una vista de un modelo, no el modelo, y una vista que contiene todo no responde a nada. Dibuja las clases de las que trata la pregunta actual y deja las otras doscientas en el modelo, donde una herramienta seguirá encontrándolas.

¿Cuántas clases caben en un diagrama de clases?

Entre cinco y unas doce. Por debajo de cinco normalmente aún no se ha dicho lo suficiente para que valga la pena dibujarlo; por encima de doce las relaciones empiezan a cruzarse y el lector gasta su atención siguiendo líneas en lugar de entendiendo el dominio.

En esta serie

Lecturas relacionadas

Todos los artículos