El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico para visualizar, diseñar y documentar sistemas orientados a objetos. Los diagramas de clases son uno de los tipos de diagramas UML más utilizados y sirven para representar las clases de un sistema, sus atributos, métodos y las relaciones entre ellas.
Las clases en la programación orientada a objetos (POO)
En la POO, las clases son los elementos fundamentales para organizar el código y definir los objetos que componen un sistema. Se podría decir que son como planos o plantillas que describen las características y el comportamiento de un tipo específico de objeto.
¿Qué define una clase?
- Atributos: Son las propiedades o características que distinguen a un objeto de otro. Por ejemplo, en una clase “Coche”, los atributos podrían ser: color, marca, modelo, velocidad máxima, etc.
- Métodos: Son las acciones que un objeto puede realizar. En la clase “Coche”, los métodos podrían ser: encender (), apagar (), acelerar (), frenar (), etc.
¿Cómo se crean objetos a partir de una clase?
Una vez definida una clase, se pueden crear objetos individuales, que son instancias de esa clase. Cada objeto tendrá sus propios valores específicos para los atributos y podrá ejecutar los métodos definidos en la clase.
Relaciones entre clases
Las relaciones entre clases son un aspecto fundamental de los diagramas de clases. Existen diferentes tipos de relaciones, cada una con su propia notación y significado:
Asociación
Es la relación más básica entre clases. Indica que dos o más clases pueden colaborar entre sí. Se representa por una línea simple entre las clases.

Multiplicidad
La asociación de multiplicidad se refiere a los casos en que una clase vinculada aparece varias veces. En lugar de replantear la entidad, especificamos las instancias máximas y mínimas a las que puede estar vinculada. Por lo tanto, en tales relaciones, marcamos un asterisco con la línea de asociación. El asterisco representa un máximo intermedio.
La imagen siguiente ayuda a comprender cómo puede expresarse la multiplicidad en diferentes circunstancias.

Asociación Dirigida
Como su nombre indica, la asociación dirigida se refiere a la dirección del flujo de comunicación dentro de una relación de asociación. Por defecto, las relaciones de asociación son accesibles bilateralmente; sin embargo, la asociación dirigida ayuda a dirigir el flujo en una sola dirección. La asociación dirigida se representa mediante la presencia de una línea sólida con una punta de flecha.
Aquí se muestra una asociación unidireccional entre un servidor y el cliente. La dirección de la flecha muestra que un servidor puede procesar las peticiones de un cliente.

Asociación Reflexiva
La asociación reflexiva se describe como la relación entre las instancias de una misma clase. Dicha asociación se clasifica a su vez en dos tipos: Asociación Reflexiva Simétrica y Asimétrica. No se le asigna un símbolo específico; sin embargo, la relación apunta a la misma clase.

Agregación:
Es un tipo especial de asociación que representa una relación “parte-todo”. Una clase “todo” contiene instancias de la clase “parte”, pero la existencia de la clase “parte” no depende de la clase “todo”. Se representa por una línea con un rombo en un extremo.
En un diagrama UML, los datos fluyen desde el agregado (clase padre) hacia el conjunto (clase hija) con una forma de diamante (sin rellenar) cerca de la primera clase. El clasificador de piezas, o las entidades de ensamblaje, pueden estar vinculadas a más de un agregado y existir de forma independiente.

Composición
Las composiciones son también un tipo de asociación que representa una relación bidireccional y altamente dependiente entre dos clases diferentes. Si la composición se elimina, las otras entidades vinculadas con ella también se eliminan.
Representa la dependencia entre el padre y el hijo. En un diagrama UML, dibuja una línea entre la clase padre y la clase hija con una forma de diamante rellena cerca de la clase padre.

Diferencias entre agregación y composición
Agregación | Composición |
Un subconjunto de la asociación | Un subconjunto de la agregación. |
Un tipo de asociación débil. | Un tipo de asociación fuerte |
Los objetos enlazados son independientes entre sí. | Los objetos enlazados son altamente dependientes entre sí. |
Se representa con una línea sólida y una punta de flecha vacía. | Representado por una línea sólida con una punta de flecha rellena. |
La agregación se define como una relación ” tiene-un “. | La composición se define como una relación “parte-de”. |
Herencia
Es una relación que permite a una clase (clase hija) heredar los atributos y métodos de otra clase (clase padre). La clase hija puede agregar o modificar los atributos y métodos heredados de la clase padre. Se representa por una flecha triangular que apunta de la clase hija a la clase padre.
