()
}
```
---
# Multiplicitat i rols
Representada per uns valors [min….max], indica el nombre màxim d’enllaços possibles que es podran donar en una relació. Aquesta multiplicitat no podrà ser mai negativa
- __N__ o __*__ representa sense número màxim.
- Els extrems d'una associació es poden anomenar amb el seu rol
classDiagram
direction LR
class Teacher{
+String name
+String dni
+String birthday
}
class Department{
+String name
}
Teacher "1" -- "0..1" Department : head
Teacher "1..*" -- "1" Department : works
---
# Relació d’agregació
- És una associació que representa el lligam entre una entitat i les seves ”parts”
- L'agregació pot tenir lloc quan la classe és una col·lecció o un contenidor d'altres classes, la classe filla (continguda) pot existir independentment del pare.
classDiagram
direction LR
class Book{
+String title
+String author
}
class Shelf{
+int position
+int size
}
Shelf "1" o-- "*" Book : stores
---
# Agregació codi
```kotlin
class Shelf( var position: Int, var size : Int){
var booksStored = mutableListOf()
}
class Book (var title: String ,var author: String){
var stored :Shelf? = null
}
```
---
# Relació de composició
- Un cas més fort d’agregació on les classes dependents no tenen sentit sense la classe pare
- Si el contenidor es destrueix, totes les instàncies que estaven contingudes en el contenidor també es destrueixen.
![diagram](https://mermaid.ink/svg/pako:eNplULsOwjAM_BXLI9CBNTNsICFYs1ixSyM1DkrdoUL8O1FbBsDT-XR3fjwxZBZ0GHoahkOke6HkFWpxLBIsZoXTdWFmDVykDFmfCwWwvVmJegelJL8ca_T6-jLTlETtLNZl_ssIVHg2LDPA494jbJqmok1FX24Hj6XFHSYpiSLXO-ZMj9ZJXQddhSwtjb15rMlVOj6YTI4cLRd0LfWD7JBGy7dJAzoro3xE6ztW1esNoT1j3A)
---
# Composició - codi
```kotlin
class Person(var name: String, var dni: String) {
var paymentMethod: PaymentMethod? = null
}
class PaymentMethod(var card: String) {}
```
---
# Generalització - Especialització
- És una relació d'__herència__ entre dues classes, una de les quals és superclasse de l'altra (subclasse).
- La subclasse és considerada una forma "d'__especialització__", subtipus, de la superclasse i la superclasse una "__generalització__", supertipus, de la subclasse.
- Una instància de la subclasse és també una instància de la superclasse.
---
# Generalització - Especialització
![diagram](https://mermaid.ink/svg/pako:eNpdkDFuwzAMRa9CcE1yASNLg3Yv4IxeCJFJBMhUQVGDkeTuVW0HKcyJ-Hj8_OQdQ2bBDkOiUj4jXY3GQaEVR5PgMSucT4syM_AtVrLeFwlg17tFvYLSKFuNNQ76_D_ce2VRf0-fck5CCrF8cE2-wc9C4Sb2xqM6FEpk00wuWQCOj8Ph5b1RVwvc4yg2UuR27Ow3oN-kZcautSwX-luPzbah9YfJ5YujZ8PuQqnIHql67icN2LlVeUHrz1bq-Qvrz3CF)
---
# Generalització - especificació
```
open class Person(var name: String, var dni: String) {}
class Student(name: String, dni: String, var birthDay: Date) : Person(name, dni) {
val isAdult: Boolean get() { TODO() }
}
class Teacher(name: String, dni: String, var salary: Double) : Person(name, dni) {}
```
---
# Realització (implementa interfície)
classDiagram
direction TB
class CanFly{
fly()
}
CanFly <|.. Bird
CanFly <|.. Plane
---
# Bibliografia i material de consulta
- http://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M05/web/html/index.html
- https://www.youtube.com/watch?v=JioEGJIlg88
- https://www.youtube.com/watch?v=Z0yLerU0g-Q