Por distintos motivos, hace un par de semanas, me tuve que sentar y tratar de recordar cómo hacer un diagrama de clases eficiente, algo que no es difícil pero que exige tener una cierta cantidad de práctica para poder realizarlos sin errores graves.
Muchas personas consideran que los diagramas de clase son un poco más complicados de construir en comparación con los diagramas ER (Entidad-Relación). La mayoría de las veces se debe a la incapacidad de comprender las diferentes relaciones en los diagramas de clase. Voy a tratar de explicar cómo determinar e implementar correctamente las diferentes relaciones de diagrama de clase que son aplicables en el modelado orientado a objetos.

¿Qué son los diagramas de clase?
Los diagramas de clases son el bloque de construcción principal en el modelado orientado a objetos. Se usan para mostrar los diferentes objetos en un sistema, sus atributos, sus métodos y las relaciones entre ellos.
La siguiente figura es un ejemplo de una clase simple:

En el ejemplo, se representa una clase llamada “Loan Account” (un préstamo, por lo general los ejercicios y las implementaciones más grandes tienen que ver con el mundo de las finanzas). Las clases en diagramas de clase están representadas por cuadros que están divididos en tres:
- La partición superior contiene el nombre de la clase.
- La parte media contiene los atributos de la clase.
- La partición inferior muestra los posibles métodos que están asociados con la clase.
El ejemplo muestra cómo una clase puede encapsular todos los datos relevantes de un objeto particular de una manera muy sistemática y clara. Un diagrama de clases es una colección de clases similar a la anterior.
Relaciones en diagramas de clase
Las clases están interrelacionadas entre sí de maneras específicas. En particular, las relaciones en los diagramas de clase incluyen diferentes tipos de conexiones lógicas. Los siguientes son tipos de conexiones lógicas que son posibles en UML:
- Asociación
- Asociación dirigida o directa
- Asociación reflexiva
- Multiplicidad
- Agregación
- Composición
- Herencia / generalización
- Realización
A no asustarse que es más fácil de lo que uno piensa.
Asociación
Es un término amplio que abarca casi cualquier conexión lógica o relación entre clases. Por ejemplo, pasajeros y aerolíneas pueden estar vinculados como se ve en la imagen:

Asociación dirigida
Se refiere a una relación direccional representada por una línea con una punta de flecha. La punta de flecha representa un flujo direccional contenido en un contenedor.

Asociación reflexiva
Esto ocurre cuando una clase puede tener múltiples funciones o responsabilidades. Por ejemplo, un miembro del personal que trabaja en un aeropuerto puede ser un piloto, un ingeniero aeronáutico, un despachador de boletos, un guardia o un miembro de la tripulación de mantenimiento. Si el miembro de la tripulación de mantenimiento es administrado por el ingeniero de aviación, puede haber una relación administrada por dos instancias de la misma clase.

Multiplicidad
Es la asociación lógica activa cuando se representa la cardinalidad de una clase en relación con otra. Por ejemplo, una flota puede incluir múltiples aviones, mientras que una aeronave comercial puede contener de cero a muchos pasajeros. La notación 0 .. * en el diagrama significa “cero a muchos”.

Agregación
Se refiere a la formación de una clase particular como resultado de una clase agregada o construida como una colección. Por ejemplo, la clase “biblioteca” está compuesta de uno o más libros, entre otros materiales. En agregación, las clases contenidas no dependen en gran medida del ciclo de vida del contenedor. En el mismo ejemplo, los libros permanecerán así incluso cuando la biblioteca se disuelva. Para mostrar la agregación en un diagrama, se dibuja una línea desde la clase principal hasta la clase secundaria con una forma de diamante o rombo cerca de la clase principal.

Para mostrar la agregación en un diagrama, dibuje una línea desde la clase principal hasta la clase secundaria con una forma de diamante cerca de la clase principal.
Composición
La relación de composición es muy similar a la relación de agregación. con la única diferencia de que su propósito principal es enfatizar la dependencia de la clase contenida con el ciclo de vida de la clase de contenedor. Es decir, la clase contenida se borrará cuando se destruya la clase contenedora. Por ejemplo, el bolsillo lateral de una bandolera también dejará de existir una vez que se destruya la bolsa de hombro.
Para mostrar una relación de composición en un diagrama UML, se usa una línea direccional que conecte las dos clases, con una forma de diamante llena adyacente a la clase de contenedor y la flecha direccional a la clase contenida.

Herencia / generalización
Se refiere a un tipo de relación en el que una clase asociada es hija de otra en virtud de asumir las mismas funcionalidades de la clase principal. En otras palabras, la clase hija es un tipo específico de la clase principal. Para mostrar la herencia en un diagrama UML, se dibuja una línea sólida desde la clase hija hasta la clase principal utilizando una punta de flecha sin carga.

Realización
Denota la implementación de la funcionalidad definida en una clase por otra clase. Para mostrar la relación en UML, se dibuja una línea discontinua con una punta de flecha sólida sin rellenar de la clase que define la funcionalidad de la clase que implementa la función. En el ejemplo, la impresora está implementando las preferencias de impresión establecidas mediante la interfaz de configuración de la impresora.
