> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud4-elementos-da-programacion-orientada-a-obxectos/uml-linguaxe-de-modelado-unificada/relacions-entre-clases-utilizacion-asociacion-composicion-e-agregacion.md).

# Relacións entre clases: Utilización, asociación, composición e agregación

## Utilización ou dependencia

Este tipo de relacións danse cando unha clase utiliza a outra de maneira puntual, pero non a posue nin e responsable do seu ciclo de vida. O mais común é:

* **Non é parte da clase**
* **Relación temporal**, non estructural
* Non se garda como atributo
* Aparece como parámetro dun método ou chamase nun método de outra clase

{% @mermaid/diagram content="classDiagram
direction LR
class Documento {
-String texto
-String nombre
+getNombre() String
}

```
class Impresora {
    +imprimir(Documento documento) void
}

Impresora ..> Documento : usa" %}
```

```java
public class Impresora {

    public void imprimir(Documento documento) {
        System.out.println("Imprimindo documento:" + documento.getNombre());
    }
}

```

```java
public class Documento {
    private String texto;
    private String nombre;
    
    public String getNombre(){
        return this.nombre;
    }
}
```

## Asociación

Unha clase coñece a outra e manten unha relación estable no tempo, que se caracteriza

* Relación estrutural (atributo)
* Non implica propiedade nin control do ciclo de vida

No exemplo que se mostra a continuación, a nivel semántico:

* Un profesor traballa en un centro
* So existe unha relación organizativa ou funcional

```java
public class Centro {
    private String nome;
}
```

```java
public class Profesor {
    private Centro centro;
}
```

{% @mermaid/diagram content="classDiagram
direction LR
class Profesor {
\- Centro centro
}

```
class Centro {
    -String nome
}

Profesor "0..*" --> "1" Centro : traballa en" %}
```

## Agregación

Un obxecto contén a outro, pero pode existir de forma independente. As caracteristicas de este tipo de relacións son:

* **Relación todo-parte** con independencia (Pode verbabilzarse como: ten-un)
* O obxecto **agregado** (parte) **pode existir sen o obxecto agregación** (todo)
* O obxecto agregación (todo) **non controla o ciclo de vida completo do obxecto agregado** (parte)

No exemplo que se mostra a continuación, a nivel semántico:

* Un equipo ten xogadores
* O todo (equipo) xestiona os elementos parte (xogador) como parte da sua estructura
* Os xogadores existen sen necesidade do equipo

{% @mermaid/diagram content="classDiagram
direction LR
class Xogador {
-String nome
}

```
class Equipo {
    -Xogador[] xogadores
    +Equipo()
}

Equipo "1" o--> "*" Xogador : contén" %}
```

```java
public class Xogador {
    private String nome;
}

```

```java
public class Equipo {

    private Xogador[] xogadores;

    public Equipo() {
        this.xogadores = new Xogador[11];
    }
}

```

## **Composición**

Un obxecto conten a outro, e o obxecto contido non pode existir sen o obxecto continente. As características de este tipo de relacións son as seguintes:

* **Relación todo-parte** forte (Pode verbabilzarse como: ten-un)
* O obxecto **contido** (parte) **non** **pode existir sen o obxecto composición** (todo)
* O obxecto **composición** (todo) **controla o ciclo de vida completo do obxecto contido** (parte)

No exemplo que se mostra a continuación, a nivel semántico:

* Unha casa ten unha cociña
* A cociña non pode existir sen a casa
* O todo (casa) xestiona os elementos parte (cociña) como parte da sua estructura

{% @mermaid/diagram content="classDiagram
direction LR
class Casa {
-Cocina cocina
+Casa()
}

```
class Cocina {
    -int m2
}

Casa "1" *--> "1" Cocina : componse de" %}
```

```java
public class Cocina {
    private int m2;
}
```

```java
public class Casa {
    
    private Cocina cocina;
    
    public Casa(){
        this.cocina = new Cocina();
    }
}
```

## Cardinalidade

As cardinalidades (ou multiplicidades) en UML indican cantas instancias dunha clase poden estar asociadas con instancias de outra clase.

| Cardinalidad | Significado                        |
| ------------ | ---------------------------------- |
| **1**        | Uno y sólo uno (exactamente uno)   |
| **0..1**     | Cero o uno (opcional)              |
| **0..**\*    | Cero o varios (ilimitado)          |
| **1..**\*    | Uno o varios (al menos uno)        |
| **N..M**     | Desde N hasta M (rango específico) |
| \*\*\*       | Cero o varios (ilimitado)          |

## Direccionalidade

A direccionalidade é unha propiedade que indica quen coñece a quen la relacion. Pode ser:

* **Unidireccional (→):** A clase "A" e a que coñece á clase "B". (A recibe como parametro ou ten un atributo tipo B)
* **Bidireccional (↔) :** A clase "A" coñece a clase "B", e a "B" coñece a "A". A clase A ten un atributo tipo B, e a clase B ten un atributo tipo A.

## Composición vs Agregación

| Comparación                   | Pregunta clave                                             | Si la respuesta es **SÍ** | Si la respuesta es **NO** |
| ----------------------------- | ---------------------------------------------------------- | ------------------------- | ------------------------- |
| **Composición vs Agregación** | ¿La parte **no puede existir** sin el todo?                | Es **Composición**        | Es **Agregación**         |
|                               | ¿Al destruir el todo, se destruyen las partes?             | Composición               | Agregación                |
|                               | ¿La parte pertenece **exclusivamente** a un solo todo?     | Composición               | Agregación                |
|                               | ¿El todo es responsable del **ciclo de vida** de la parte? | Composición               | Agregación                |
|                               | ¿Tiene sentido la parte por sí sola?                       | NO → Composición          | SÍ → Agregación           |

## Agregación vs Asociación

| Comparación                  | Pregunta clave                               | Si la respuesta es **SÍ** | Si la respuesta es **NO** |
| ---------------------------- | -------------------------------------------- | ------------------------- | ------------------------- |
| **Agregación vs Asociación** | ¿Existe una relación “**tiene un**”?         | Agregación                | Asociación                |
|                              | ¿Hay una relación estructural todo–parte?    | Agregación                | Asociación                |
|                              | ¿La parte puede existir sin el todo?         | Agregación/Asociación     | No aplica                 |
|                              | ¿Solo hay interacción, no pertenencia?       | Asociación                | Agregación                |
|                              | ¿Es más bien “usa”, “conoce”, “trabaja con”? | Asociación                | Agregación                |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud4-elementos-da-programacion-orientada-a-obxectos/uml-linguaxe-de-modelado-unificada/relacions-entre-clases-utilizacion-asociacion-composicion-e-agregacion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
