Ga naar hoofdinhoud

Voorbereiding-Quiz

info

Hieronder zie je hoe je de aggregate Car in een klassendiagram kan weergeven. Onder elk diagram vind je een optionele uitklapbalk met tabs voor de broncode en een natuurlijke taal beschrijving. Dit stelt je in staat diagram wat beter te begrijpen, zelf met online tools het diagram aan te passen of uit te breiden en is voor accessibility (A11Y). Zie Bijlagen > Toegankelijke diagrammen voor meer info.

d9dde40055bb00aea06deb0a532abce9

PlantUML broncode voor "Voorbeeld klassendiagram"
@startuml
hide circle
skinparam linetype ortho

rectangle "Aggregate" {
class Car <<AR>> {
+ changeTire()
- addTire()
- removeTire()
}

class Tire <<Entity>>

class Gear <<Entity>>

class Color <<Value Object>>
}

Car "1" -l- "4" Tire
Car "1" -r- "*" Gear
Car "1" -- "1" Color
@enduml

Klassendiagram met 4 klasse(n) en 3 relatie(s).

Klassen:

  • Klasse Car met stereotype AR met:
    • publieke methode 'changeTire', zonder parameters, return type void
    • private methode 'addTire', zonder parameters, return type void
    • private methode 'removeTire', zonder parameters, return type void
    • geen attributen
  • Klasse Tire met stereotype Entity zonder methoden en attributen
  • Klasse Gear met stereotype Entity zonder methoden en attributen
  • Klasse Color met stereotype Value Object zonder methoden en attributen

Relaties:

  • Car heeft een associatie-relatie met Tire, multipliciteit 1 naar 4
  • Car heeft een associatie-relatie met Gear, multipliciteit 1 naar *
  • Car heeft een associatie-relatie met Color, multipliciteit 1 naar 1

4 Van Domain Story naar classes

📖 Lees "Domain Storytelling" hoofdstuk 12 - sectie "Implementing the Domain Model" tot Listing 12.4 (pagina 44 t/m 46 - 3 pagina's) uit de Reader DoEx.

❓ Beantwoord hierna onderstaande quiz vragen om je begrip te toetsen.

Quiz H12 - Implementing the domain model

fine grained domain story

0dcf8f21d393bc8544b239f01b5c4a3b

PlantUML broncode voor "Klassendiagram van een Bioscoop casus"

@startuml

' Optioneel: Stereotypes grafisch verbergen
' hide stereotypes

' Classes en hun inhoud
class Vertoning <<Entity>> {
id
+ getBeschikbareStoelen()
}

class Stoel <<Entity>> {
+ reserveer()
}

class Kaartje <<Value Object>> {
titel
datum
starttijd
filmzaal
stoelNummer
+ print()
}

' Relaties (associaties) met multipliciteiten en rolnamen
' De pijl (-->) geeft navigeerbaarheid aan: Vertoning houdt de referentie naar Stoel
Vertoning "1" --> "*" Stoel : beschikbareStoelen
Vertoning "1" --> "*" Stoel : gereserveerdeStoelen

@enduml

Klassendiagram met 3 klasse(n) en 2 relatie(s).

Klassen:

  • Klasse Vertoning met stereotype Entity met:
    • publieke methode 'getBeschikbareStoelen', zonder parameters, return type void
    • publieke attribuut 'id'
  • Klasse Stoel met stereotype Entity met:
    • publieke methode 'reserveer', zonder parameters, return type void
    • geen attributen
  • Klasse Kaartje met stereotype Value Object met:
    • publieke methode 'print', zonder parameters, return type void
    • publieke attribuut 'titel'
    • publieke attribuut 'datum'
    • publieke attribuut 'starttijd'
    • publieke attribuut 'filmzaal'
    • publieke attribuut 'stoelNummer'

Relaties:

  • Vertoning heeft een associatie-relatie met naam 'beschikbareStoelen' met Stoel, multipliciteit 1 naar *
  • Vertoning heeft een associatie-relatie met naam 'gereserveerdeStoelen' met Stoel, multipliciteit 1 naar *

Deze quiz helpt je toetsen of je de bron echt hebt bekeken/gelezen en begrepen. Zo niet: bekijk/lees de bron opnieuw. Gebruik deze quiz niet als 'gaming' voor de toets; de toetsvragen zijn inhoudelijk anders.

Zijn er naast de objecten die in het klassendiagram opgenomen zijn nog meer objecten te identificeren in de domain story?

Hoe realiseer je de lijnen met label `beschikbareStoelen` en `gereserveerdeStoelen` uit het klassendiagram?

Hoe realiseer je de implementatie van de activiteit `reserveert` van actor naar stoel uit de domain story?

Zou in het klassendiagram het object `Stoel` niet eigenlijk als value object gemodelleerd kunnen worden?

Voorbeelduitwerking - Vertoning

import java.util.ArrayList;
import java.util.List;

public class Vertoning {

private Long id;
private List<Stoel> beschikbareStoelen;
private List<Stoel> gereserveerdeStoelen;

public Vertoning(Long id) {
this.id = id;
this.beschikbareStoelen = new ArrayList<>();
this.gereserveerdeStoelen = new ArrayList<>();
}

public Long getId() {
return id;
}

/**
* Haal de (nog) beschikbare stoelen op.
* In dit voorbeeld is het gewoon de lijst,
* maar in een echte toepassing zou je hier
* mogelijk extra logica hebben.
*/
public List<Stoel> getBeschikbareStoelen() {
return beschikbareStoelen;
}

public List<Stoel> getGereserveerdeStoelen() {
return gereserveerdeStoelen;
}

/**
* Voorbeeld van het reserveren van een stoel:
* - Haal de stoel uit de lijst beschikbare stoelen
* - Roep reserveer() aan op de Stoel
* - Voeg de stoel toe aan de lijst gereserveerde stoelen
*/
public void reserveerStoel(Stoel stoel) {
if (beschikbareStoelen.contains(stoel)) {
beschikbareStoelen.remove(stoel);
stoel.reserveer();
gereserveerdeStoelen.add(stoel);
} else {
System.out.println("Stoel is niet beschikbaar voor reservering.");
}
}
}