Track 3 - Oefenopdracht - Vervoermiddelen¶
Codelab¶
Beschrijving¶
Het doel van deze opdracht is om een applicatie te schrijven waarin lijsten van verschillende soorten vervoermiddelen kunnen worden bijgehouden. Door inheritance en abstracte klassen te gebruiken kun je toch objecten van verschillend soort in een array zetten.
- Maak een hiërarchie van abstracte en concrete klassen voor verschillende vervoermiddelen met inheritance.
- Implementeer de abstracte methode
geefAandrijfKracht()in alle concrete klassen. - Test alle klassen door objecten aan te maken en deze in een array te plaatsen.
Hieronder een voorbeeld van output van deze applicatie.
Koets aantalPaarden: 2
(Voertuig aantalWielen: 4 gewichtInKg: 320
(Vervoermiddel id: 1 merk: Glinkowski type: marathonwagen))
Auto soortBrandstof: benzine
(Voertuig aantalWielen: 4 gewichtInKg: 1150
(Vervoermiddel id: 2 merk: Dacia type: Logan))
Fiets
(Voertuig aantalWielen: 2 gewichtInKg: 9
(Vervoermiddel id: 3 merk: Koga Mijata type: Colmaro Race Ultegra))
Zeilboot
(Vaartuig lengteInMeter: 11.5
(Vervoermiddel id: 4 merk: Dufour type: 36 Classic))
Motorboot soortBrandstof: diesel
(Vaartuig lengteInMeter: 13.75
(Vervoermiddel id: 5 merk: Broesder type: Kotter))
Klassendiagram¶
Onderstaand diagram vat de structuur van de class samen:
classDiagram
direction LR
class Vervoermiddel {
<<abstract>>
#_id: number
#_merk: string
#_type: string
+static aantalVervoermiddelen: number
#constructor(merk: string, type: string)
+toString() string
+geefAandrijfKracht() string*
}
class Voertuig {
<<abstract>>
#_aantalWielen: number
#_gewichtInKg: number
#constructor(merk: string, type: string, aantalWielen: number, gewichtInKg: number)
+toString() string
+geefAandrijfKracht() string*
}
class Vaartuig {
<<abstract>>
#_lengteInMeter: number
#constructor(merk: string, type: string, lengteInMeter: number)
+toString() string
+geefAandrijfKracht() string*
}
class Koets {
-_aantalPaarden: number
+constructor(merk: string, type: string, aantalPaarden: number, gewichtInKg: number)
+toString() string
+geefAandrijfKracht() string
}
class Auto {
-_soortBrandstof: string
+constructor(merk: string, type: string, soortBrandstof: string, gewichtInKg: number)
+toString() string
+geefAandrijfKracht() string
}
class Fiets {
+constructor(merk: string, type: string, gewichtInKg: number)
+toString() string
+geefAandrijfKracht() string
}
class Zeilboot {
+constructor(merk: string, type: string, lengteInMeter: number)
+toString() string
+geefAandrijfKracht() string
}
class Motorboot {
-_soortBrandstof: string
+constructor(merk: string, type: string, soortBrandstof: string, lengteInMeter: number)
+toString() string
+geefAandrijfKracht() string
}
Vervoermiddel <|-- Voertuig : extends
Vervoermiddel <|-- Vaartuig : extends
Voertuig <|-- Koets : extends
Voertuig <|-- Auto : extends
Voertuig <|-- Fiets : extends
Vaartuig <|-- Zeilboot : extends
Vaartuig <|-- Motorboot : extends
Stappenplan¶
-
Maak alle klassen aan zoals gegeven in het UML diagram. Houdt rekening met het volgende:
- De constructors in de abstracte klassen zijn
protected, zodat ze alleen in de subklassen gebruikt kunnen worden. Denk goed na over waar je de verschillende attributen initieert. Zorg dat je geen code dubbel hoeft te schrijven. - In de constructors kun je niet de id meegeven. Je moet er wel voor zorgen dat de id bij het aanmaken van een object de juiste waarde krijgt en dat
aantalVervoermiddelenwordt opgehoogd. - Het aantal wielen van een koets en een auto is standaard vier en van een fiets is het twee.
- Implementeer de methode
geefAandrijfKracht()in de concrete klassen. - Geef alle klassen een
toString()methode, zodat je gemakkelijk een object kunt printen.
- De constructors in de abstracte klassen zijn
-
Test de werking van al je klassen in de
index.tsdoor van alle concrete objecten minstens één object aan te maken:- Maak een koets van het merk Glinkowski, type marathonwagen voor twee paarden, 320kg.
- Maak een auto van het merk Dacia, type Logan MPV, 1150kg, rijdt op benzine.
- Maak een fiets van het merk Koga Mijata, type Colmaro Race Ultegra, 9kg.
- Maak een zeilboot van het merk Dufour type 36 Classic van 11.5 meter.
- Maak een motorboot van het merk Broesder type Kotter van 13.75 meter, vaart op diesel.
-
Voeg alle gemaakt objecten toe aan een array van vervoermiddelen. Print vervolgens met behulp van een loop van elk vervoermiddel achtereenvolgens het id, merk en type en per concreet object de juiste informatie, met daarbij de aandrijfkracht.
Richtlijnen bij coderen¶
- Zorg dat je naam en het doel van het programma bovenin staan.
- Gebruik de juiste inspringing (indentation) bij de lay-out.
- Let op juist gebruik hoofdletters en kleine letters.
- Gebruik goede namen.
- Voeg waar nodig commentaar toe dat inzicht geeft in je code.
- Vermijd magic numbers, gebruik constanten.
- Gebruik de TSDoc tags
@author,@paramen@return. - Denk aan encapsulation, gebruik
privatewaar mogelijk.