Skip to content

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 Sprieten 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.


Last update: December 9, 2022