Skip to content

Track 3 - Oefenopdracht - De band

Codelab

npx @hboictcloud/codelab-cli new oop/3-deband

Beschrijving

De opdracht gaat over Inheritance (overerving). We gaan werken met voorbeeld van een popband. Er zijn vier bandleden. Een drummer en drie gitaristen. Er zijn drie soorten gitaristen. Een bassist, een lead-gitarist en een slag-gitarist. Schrijf een applicatie die het volgende doet:

  1. Vraag de naam van de band en lees deze in.
  2. Vraag vervolgens de naam van de drummer.
  3. Vraag vervolgens de naam van de lead-gitarist.
  4. Vraag vervolgens de naam van de slag-gitarist.
  5. Vraag vervolgens de naam van de bassist.
  6. Druk de tekst af met console.logs zoals aangegeven in het tekstvoorbeeld.

Hieronder een voorbeeld van input/output van deze applicatie. Input die de gebruiker invoert is onderstreept.

Voorbeeld

Wat is de naam van de band: The Beatles
Voeg nu muzikanten toe aan de band.

Eerst de drummer, dan de gitarist en als laatste de bassist.

Wat is de naam van de drummer: Ringo                                                                                                                                                                                         
Wat is de naam van de leadgitarist: George
Wat is de naam van de slaggitarist: John
Wat is de naam van de bassist: Paul                                                                                                                                                                                          
De band The Beatles gaat nu optreden!

Ringo speelt op het drumstel.
George speelt op de gitaar.
Paul speelt op de basgitaar.

Klassendiagram

Onderstaand diagram vat de structuur van de class samen:

classDiagram
    direction LR

    class Band {
        - _bandName: string
        - _musicians: Musician[]
        + constructor(name: string)*
        + addMusician() void
        + performMusic() void
    }

    class Musician {
        - _name: string
        + constructor(name: string)
        + play() void
    }

    class Drummer {
        + play() void
    }

    class Guitarist {
        + play() void
    }

    class Bassist {
        - startTheGroove() void
        + play() void
    }

    class LeadGuitarist {
        + play() void
        + playSolo() void
    }

    class RhythmGuitarist {
        + play() void
        + playTheBrigde() void
    }

    Musician <|-- Drummer
    Musician <|-- Guitarist
    Guitarist <|-- Bassist
    Guitarist <|-- LeadGuitarist
    Guitarist <|-- RhythmGuitarist
    Band -- "0..*" Musician

Let op:

  • Er zijn geen getters en setters getoond. Voeg zelf getters en setters toe die je denkt nodig te hebben. Meer mag, maar hoeft niet.
  • Zorg dat je performMusic() methode soortgelijke output genereert als in de outputvoorbeelden.
  • De classes voor Band en Musician moet je zelf aanmaken.
  • De Musician sub classes Drummer, Guitarist zijn niet aanwezig. Deze zal je zelf moeten maken, gebruik hiervoor het bovenstaande class diagram.
  • De Guitarist sub classes Bassist, LeadGuitarist en RhythmGuitarist zijn niet aanwezig. Deze zal je zelf moeten maken, gebruik hiervoor het bovenstaande class diagram.
  • Als je zelf nog zaken wil toevoegen die niet in het class diagram staan (omdat je denkt dat ze nodig zijn), geef dat dan duidelijk met commentaar aan in de code.

Stappenplan

  1. Importeer de scanner uit @hboictcloud/scanner voor het krijgen van invoer van de gebruiker.
  2. Gebruik de scanner.promptString voor de invoer van de bandnaam.
  3. Gebruik de scanner.promptString voor de invoer van de naam van de drummer.
  4. Gebruik de scanner.promptString voor de invoer van de naam van de lead-gitarist.
  5. Gebruik de scanner.promptString voor de invoer van de naam van de slag-gitarist.
  6. Gebruik de scanner.promptString voor de invoer van de naam van de bassist.
  7. Maak de benodigde classes en subclasses.
  8. Maak een array musicians aan in de Band class.
  9. Zorg dat de functie performMusic een loop bevat die door een array musicians gaat om alle van alles Musician subclasses de play functie te activeren.
  10. Zorg ervoor dat je input en output precies overeenkomt met het hierboven gegeven voorbeeld.

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, @param en @return.
  • Denk aan encapsulation, gebruik private waar mogelijk.