Skip to content

3. Relaciones Entre Clases

Las relaciones entre clases son elementos fundamentales en los diagramas UML que representan cómo las clases interactúan, se conectan y dependen unas de otras. Estas relaciones permiten modelar la estructura estática de un sistema con mayor precisión y claridad.

La asociación es la relación más básica y común entre clases. Representa una conexión estructural o conceptual entre dos o más clases.

  • Se representa mediante una línea sólida que conecta las clases relacionadas
  • Puede ser unidireccional (con una flecha en un extremo) o bidireccional (sin flechas)
  • Puede incluir un nombre que describe la naturaleza de la relación
  • Puede mostrar roles en cada extremo, indicando el papel que juega cada clase en la relación
Asociación unidireccional
[Estudiante] ────────> [Curso]
se inscribe
Asociación bidireccional con roles
[Profesor] <────────> [Curso]
imparte contiene
Diagrama UML
Asociación entre Estudiante y Curso
[Estudiante] [Curso]
----------------- ---------------
| -id: String | | -codigo: String |
| -nombre: String | | -nombre: String |
----------------- ---------------
| |
| 1..* | 0..*
|--------> se inscribe --->|

La multiplicidad define cuántos objetos de una clase pueden relacionarse con un objeto de otra clase. Es un aspecto crucial de las asociaciones que especifica las restricciones cuantitativas de la relación.

NotaciónSignificadoEjemplo
1Exactamente unoUna persona tiene exactamente un número de identificación
0..1Cero o uno (opcional)Una persona puede tener o no un pasaporte
* o 0..*Cero o muchosUn cliente puede realizar cualquier número de pedidos (o ninguno)
1..*Uno o muchosUn pedido debe contener al menos un producto
n..mDe n a m instanciasUn equipo tiene entre 2 y 11 jugadores (2..11)
Un pedido tiene una o más líneas de pedido
[Pedido] 1 ----------> 1..* [LineaPedido]
tiene
Relación muchos a muchos
[Estudiante] 0..* ----------> 0..* [Curso]
se inscribe
Diagrama UML
Una biblioteca contiene muchos libros
[Biblioteca] [Libro]
----------------- ---------------
| -nombre | | -titulo |
| -direccion | 1 | -autor |
----------------- ---------------
| |
| | *
|--------> contiene ------>|

La agregación es un tipo especial de asociación que representa una relación “todo-parte” o “tiene un” donde las partes pueden existir independientemente del todo.

  • Se representa mediante una línea con un diamante vacío en el extremo de la clase “todo”
  • Indica una relación débil entre el todo y sus partes
  • Las partes pueden existir independientemente del todo
  • Si el todo se destruye, las partes pueden seguir existiendo
Agregación: Un departamento tiene empleados
[Departamento] <>----------> [Empleado]
tiene
Diagrama UML
Un equipo tiene jugadores (agregación)
[Equipo] [Jugador]
----------------- ---------------
| -nombre | | -nombre |
| -categoria | 1 | -posicion |
----------------- ---------------
| |
| <> | 1..*
|--------> tiene --------->|

La composición es una forma más fuerte de agregación que representa una relación “todo-parte” donde las partes no pueden existir sin el todo.

  • Se representa mediante una línea con un diamante sólido en el extremo de la clase “todo”
  • Indica una relación fuerte entre el todo y sus partes
  • Las partes no pueden existir independientemente del todo
  • Si el todo se destruye, las partes también se destruyen
  • Una parte pertenece solo a un todo a la vez
Composición: Una casa contiene habitaciones
[Casa] <*>----------> [Habitacion]
contiene
Diagrama UML
Un pedido contiene líneas de pedido (composición)
[Pedido] [LineaPedido]
----------------- ---------------
| -fecha | | -cantidad |
| -total | 1 | -precio |
----------------- ---------------
| |
| <*> | 1..*
|--------> contiene ------>|

La herencia o generalización representa una relación “es un” entre clases, donde una clase (subclase) hereda atributos y métodos de otra clase (superclase).

  • Se representa mediante una línea con una flecha triangular hueca apuntando a la superclase
  • Permite la reutilización de código y la implementación del principio de sustitución
  • La subclase hereda todos los miembros (atributos y métodos) de la superclase
  • La subclase puede añadir nuevos miembros o sobrescribir los heredados
Herencia: Automóvil y Motocicleta heredan de Vehículo
[Vehiculo]
^
|
|
+--------+---------+
| |
[Automovil] [Motocicleta]
Diagrama UML
Empleado hereda de Persona
[Persona]
-----------------
| -nombre |
| -edad |
| +saludar() |
-----------------
^
|
|
[Empleado]
-----------------
| -salario |
| -puesto |
| +trabajar() |
-----------------

La dependencia es una relación más débil que indica que una clase usa o depende de otra clase, pero sin contener una referencia permanente a ella.

  • Se representa mediante una línea discontinua con una flecha apuntando a la clase de la que se depende
  • Indica que una clase usa temporalmente a otra clase
  • Puede ser a través de parámetros de métodos, variables locales o llamadas a métodos estáticos
  • Es la relación más débil entre clases
Dependencia: Controlador usa Servicio
[Controlador] - - - - -> [Servicio]
usa
Diagrama UML
Impresora depende de Documento
[Impresora] [Documento]
----------------- ---------------
| -modelo | | -titulo |
| +imprimir() | | -contenido |
----------------- ---------------
| |
| |
|-- - - -> usa - - - - - ->|
RelaciónNotaciónFuerzaDescripción
DependenciaLínea discontinua con flechaMuy débil”Usa temporalmente”
AsociaciónLínea sólidaDébil”Conoce a”
AgregaciónLínea con diamante vacíoMedia”Tiene un” (partes independientes)
ComposiciónLínea con diamante sólidoFuerte”Contiene” (partes dependientes)
HerenciaLínea con flecha triangularMuy fuerte”Es un”
🐝