Class diagram¶
Een class diagram is een type diagram dat wordt beschreven in de UML specificatie. Dit type diagram geeft de eigenschappen en de relaties aan tussen klassen.
Class blok¶
Een class wordt aangegeven als een blok met drie delen:
classDiagram
class GameObject{
+PVector position
-color position
+update()
+draw()
+handleInput()
-reset()
}
Een dergelijk blok geeft de volgende informatie:
Bovenaan staat de titel van de class |
---|
Daarna volgt een onderdeel waarin de class-variabelen (soms “members” soms “properties”) staan aangegeven |
Als laatste volgt een onderdeel waarin de functies staan aangegeven |
Een member (variabele of functie) met een +
ervoor is een public
variabele. Met een -
ervoor betreft het een private
variabele.
Relaties¶
Pijlen tussen class blokken geven de relaties tussen de classes aan.
classDiagram
direction TB
Mier --|> Dier : inheritance (is een)
player --> PVector : associatie (heeft een)
Gras --> "many" Spriet : associatie (heeft meerdere)
Type | Pijl | Betekenis | Code |
---|---|---|---|
Inheritance | Solide pijlpunt | Geeft een inheritance relatie aan. Een Mier is een Dier . |
In JavaScript wordt een inheritance relatie aangegeven met het extends keyword. |
Association | Open pijlpunt | Geeft een associatie relatie aan. Een Player heeft een PVector . |
Een associatie wordt geprogrammeerd door een member variabele in de class op te nemen van het type van een andere class. |
Association (many) | Open pijlpunt met de “many” kardinaliteit | Geeft aan dat er een associatie is met meerdere instanties van een andere class. Gras heeft meerdere Spriet en |
Deze relatie kan worden geimplementeerd door een collectie (array, list, tree, etc.) aan de class toe te voegen die instanties bezit van een andere class |
In de context van een game zou een class diagram er zo uit kunnen zien:
classDiagram
direction RL
GameObject <|-- Enemy : is-een
GameObject <|-- Player : is-een
PVector <-- GameObject : heeft-een
GameObject <|-- GameObjectList : is-een
GameObject --> "many" GameObjectList : heeft-meerdere
class GameObject{
+PVector position
-color position
+update()
+draw()
+handleInput()
-reset()
}
class Enemy{
+ int health
+ shoot()
}
class PVector{
+double x
+double y
+normalize()
}
class GameObjectList{
-List children
+add(GameObject)
}
class Player{
+ int health
- collidesWith(Enemy)
}
Warning
Je programma kan vaak nogal uitgebreid worden. Class diagrams kunnen goed werken om bottle-necks en tekortkomingen in je programma op te sporen. Gebruik class diagrams echter alleen in je documentatie om specifieke onderdelen van je code uit te lichten. Niet om je volledige code-base in kaart te brengen.