Commit 595ca789 authored by jg5dev's avatar jg5dev 💬
Browse files

better

parent 65901a10
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -121,10 +121,10 @@ class CompteEstalvi : Compte {

## Relacions entre objectes

A més dels conceptes anteriors (herència, composició i agregació), existeixen altres tipus de relacions entre objectes:
A més dels conceptes anteriors (herència, composició i agregació), existeixen altres tipus de relacions entre objectes. Es poden ordenar segons com d'acoblats deixen els objectes, des de la dependència puntual fins a la composició, en què una part no pot viure sense el seu tot:

* **Associació**: un objecte fa referència a un altre.
* **Dependència**: un objecte rep una referència en una de les seves operacions.
* **Associació**: un objecte manté una referència a un altre com a part de la seva estructura (habitualment un camp), de manera duradora.
* **Dependència**: un objecte només fa servir un altre de forma puntual dins d'una operació (com a paràmetre, variable local o valor de retorn), sense guardar-ne cap referència.

El diagrama següent mostra totes les relacions, incloent les ja explicades. S'utilitzen com a exemple classes de la biblioteca estàndard de Java (`Number`, `Double`, `Comparable`), que tenen equivalents directes en C# (`Object`, `Double`, `IComparable`).

@@ -200,12 +200,14 @@ Object1 ..> Object2
@enduml
```

1. **Herència** de `Number` i implementació de `Comparable`
1. **Associació** entre `Child1` i `Parent1`
1. **Associació navegable** des de `Child2` cap a `Parent2`
1. **Agregació**: `Wheel` pot existir sense `Car`
1. **Composició**: `Heart` no pot existir sense `Human`
1. **Dependència**: `Object1` usa l'`Object2`
Cada relació que hi apareix es llegeix així:

1. **Herència**: `Double` és un `Number`, i per tant n'hereta els camps i mètodes. Al diagrama, un triangle buit apunta de la subclasse cap a la superclasse. `Double` també **implementa** (realitza) la interfície `Comparable`, dibuixada amb el mateix triangle però amb línia discontínua: es compromet a oferir-ne les operacions.
1. **Associació**: `Parent1` i `Child1` es coneixen i es referencien mútuament, sense cap extrem privilegiat (línia simple, sense punta). Tot i els noms, aquí no hi ha herència sinó una relació de domini: pare i fill s'associen.
1. **Associació navegable**: com l'anterior, però amb un únic sentit. `Child2` pot accedir a `Parent2`, però no a l'inrevés; una punta de fletxa oberta n'indica la direcció.
1. **Agregació**: `Car` es compon de parts com `Wheel`, però aquestes poden existir per separat: una roda es pot treure del cotxe i seguir sent útil. Es dibuixa amb un rombe buit al costat del tot (`Car`).
1. **Composició**: `Human` **posseeix** les seves parts; si desapareix, se les emporta. Un `Heart` no té sentit fora d'un `Human`. Es dibuixa amb un rombe ple al costat del tot.
1. **Dependència**: `Object1` només fa servir `Object2` de manera puntual (per exemple, rebent-lo com a paràmetre d'un mètode), sense guardar-ne cap referència. És l'acoblament més feble i es dibuixa amb una fletxa discontínua.

## Tipus d'objectes