Cover
Comença ara de franc hoorcollege1b_compositie_minimaal - Tagged.pdf
Summary
# Introductie tot software-ontwerp en compositie
Dit onderwerp introduceert de basisprincipes van software-ontwerp in Java, met een focus op het concept van compositie en de toepassing ervan in het ontwerpen van een autoradioapplicatie.
### 1.1 Reflectie op een eerdere oplossing
Een eerdere oplossing voor een autoradio-applicatie bevatte vier frequenties en vier banden (AM/FM) voor de voorkeurzenders en de huidige zender. Dit werd als onoverzichtelijk beschouwd. Een verbetering zou zijn om een aparte klasse voor het concept 'zender' te maken, omdat een zender zelf voldoende gegevens bevat [3](#page=3).
### 1.2 Verbeterde oplossing: autoradio met zender klasse
De verbeterde oplossing introduceert een aparte klasse genaamd `Zender`. De `AutoRadio` klasse bevat nu data members van het type `Zender` voor zender één, twee en drie, evenals een `huidig` zender object van het type `Zender`. Andere data members in `AutoRadio` zijn onder andere `gekozenZender` (een `int`), `volume` (een `int`) en `mute` (een `boolean`). De `Zender` klasse zelf bevat informatie over de AM/FM band en de frequentie. Een `enum` type wordt gebruikt voor de band. Dit principe wordt aangeduid als compositie, zoals besproken in hoofdstuk 4 [4](#page=4).
### 1.3 Basisidee van compositie
Compositie is een software-ontwerpprincipe waarbij een object als data member een waarde van een ander klasse bevat [5](#page=5).
Bijvoorbeeld:
* Een `AutoRadio` heeft data members `zender1`, `zender2`, `zender3` van het type `Zender` [5](#page=5).
* Een `BeReal` heeft objecten van het type `Foto` [2](#page=2) [5](#page=5).
* Een `Paard` heeft een data member `eigenaar` van het type `Persoon` [5](#page=5).
* Een `Bedrijf` heeft een data member `ceo` van het type `Werknemer` [5](#page=5).
Via delegatie kunnen methodes van de onderliggende klasse worden aangeroepen. Dit maakt het bijvoorbeeld mogelijk om na te gaan of een bedrijf een vrouwelijke CEO heeft [5](#page=5).
### 1.4 Het `enum`-type in Java
Een `enum` (enumeratie) type in Java wordt gebruikt voor een exclusieve opsomming. Dit is een alternatief voor een gewone klasse [6](#page=6).
Voorbeeld van een `enum` voor geslacht:
```java
public enum Geslacht {
M, V, X
}
```
De waarde van een enum wordt gebruikt door middel van de notatie `Klasse.WAARDE`, vergelijkbaar met een statisch data member [6](#page=6).
### 1.5 Klasse `Zender`
De klasse `Zender` bevat de attributen voor een zender, zoals de AM/FM band en de frequentie [7](#page=7).
> **Tip:** De implementatie van de `Zender` klasse kan triviale getters bevatten om deze data toegankelijk te maken [7](#page=7).
### 1.6 `AutoRadio` met `Zender` (Compositie)
De `AutoRadio` klasse demonstreert het gebruik van compositie door data members van het type `Zender` te bevatten. Dit zorgt voor een betere structuur en overzichtelijkheid in vergelijking met het direct beheren van losse frequentie- en bandvariabelen [3](#page=3) [8](#page=8).
---
# Ontwerp van de autoradio applicatie
Dit onderwerp verkent de evolutie van het ontwerp van een autoradio applicatie, met een focus op de introductie van een aparte klasse voor zenders om de structuur te verbeteren [2](#page=2) [3](#page=3).
### 2.1 Probleemstelling en reflectie op initiële oplossing
De initiële implementatie van de autoradio applicatie bevatte duplicatie van informatie en maakte het beheer van zendergegevens onoverzichtelijk. Specifiek werden frequenties en banden (AM/FM) vier keer herhaald voor de voorkeurzenders en de huidige zender. Dit gebrek aan een duidelijke representatie van het concept 'zender' leidde tot een onoverzichtelijke codebasis [3](#page=3).
### 2.2 Verbeterde oplossing met een `Zender` klasse
Om de structuur te verbeteren en de conceptuele duidelijkheid te vergroten, werd een aparte klasse genaamd `Zender` geïntroduceerd. Deze klasse bevat alle relevante informatie die bij een zender hoort [3](#page=3) [4](#page=4).
#### 2.2.1 Attributen van de `AutoRadio` klasse in de verbeterde oplossing
In de verbeterde `AutoRadio` klasse zijn de volgende attributen aanwezig, waarbij de zenderinformatie nu is georganiseerd via de `Zender` klasse [4](#page=4):
* Een verzameling van `Zender` objecten, mogelijk vertegenwoordigd door indices zoals `zender een`, `zender twee`, `zender drie` [4](#page=4).
* Een index `gekozenZender` om de momenteel geselecteerde zender bij te houden [4](#page=4).
* Een `Zender` object dat de `huidig`e zender representeert [4](#page=4).
* Een `volume` instelling, opgeslagen als een `int` [4](#page=4).
* Een `mute` status, opgeslagen als een `boolean` [4](#page=4).
* Een `enum` voor de band (AM/FM), die gecomponeerd wordt in hoofdstuk 4 [4](#page=4).
#### 2.2.2 Attributen van de `Zender` klasse
De `Zender` klasse zelf bevat de volgende specifieke details over een zender [4](#page=4):
* De band van de zender, welke `AM/FM` kan zijn [4](#page=4).
* De frequentie van de zender, opgeslagen als een `double` [4](#page=4).
> **Tip:** Het gebruik van een aparte `Zender` klasse bevordert de modulariteit en herbruikbaarheid van code. Het maakt de `AutoRadio` klasse ook eenvoudiger te begrijpen doordat de details van een zender worden afgehandeld door de `Zender` klasse zelf [3](#page=3).
### 2.3 Compositie in het ontwerp
De verbeterde autoradio applicatie maakt gebruik van compositie, waarbij de `AutoRadio` klasse een `Zender` klasse bevat. Dit wordt visueel weergegeven als een structuur waarin de autoradio is samengesteld uit zenders. Dit ontwerp is consistenter met het objectgeoriënteerd programmeren en verbetert de onderhoudbaarheid van de applicatie [3](#page=3) [8](#page=8).
---
# Compositie in Java
Compositie in Java is een ontwerpprincipe waarbij een object een ander object bevat als een van zijn data members, wat leidt tot een "has-a" relatie.
### 3.1 Basisidee van compositie
Het kernconcept van compositie is dat een klasse een instantie van een andere klasse bezit als een van zijn attributen. Dit creëert een sterke koppeling tussen de twee klassen, waarbij de ene klasse afhankelijk is van de andere voor functionaliteit [5](#page=5).
#### 3.1.1 Voorbeelden van compositie
Verschillende voorbeelden illustreren dit principe:
* Een `AutoRadio` klasse kan data members hebben van het type `Zender`, bijvoorbeeld `zender1`, `zender2`, en `zender3` [4](#page=4) [5](#page=5).
* Een `BeReal` klasse kan een of meerdere objecten van het type `Foto` bevatten [5](#page=5).
* Een `Paard` klasse kan een data member `eigenaar` van het type `Persoon` hebben [5](#page=5).
* Een `Bedrijf` klasse kan een data member `ceo` van het type `Werknemer` hebben [5](#page=5).
#### 3.1.2 Delegatie via compositie
Via compositie kan een object methodes van de onderliggende klasse aanroepen. Dit proces wordt delegatie genoemd. Bijvoorbeeld, om te controleren of een bedrijf een vrouwelijke CEO heeft, kan de `Bedrijf` klasse een methode aanroepen die in de `Werknemer` klasse (van de CEO) is gedefinieerd [5](#page=5).
> **Tip:** Delegatie is essentieel voor het benutten van de functionaliteit van de gecomponeerde objecten zonder de logica direct in de containerklasse te hoeven implementeren.
### 3.2 AutoRadio met Zender als voorbeeld
De `AutoRadio` klasse die data members van het type `Zender` bevat, is een direct voorbeeld van compositie in Java. Hierbij heeft de `AutoRadio` de functionaliteit en de staat van meerdere `Zender` objecten. De `Zender` klasse zelf kan attributen hebben zoals de AM/FM band en de frequentie. De `AutoRadio` kan ook eigen attributen hebben zoals het volume en de mute-status [4](#page=4) [8](#page=8).
---
# Gebruik van enumeraties (enum) in Java
Enumeraties (enums) in Java bieden een gestructureerde manier om een set van constante waarden te definiëren, die vaak gebruikt worden als een alternatief voor gewone klassen bij exclusieve opsommingen [6](#page=6).
### 4.1 Wat zijn enumeraties (enums)?
Een enumeratie, of enum, is een speciaal type variabele in Java dat wordt gebruikt om een exclusieve opsomming van waarden te vertegenwoordigen. Dit betekent dat een enum-variabele slechts één van de vooraf gedefinieerde waarden kan aannemen [6](#page=6).
#### 4.1.1 Het doel van enums
Enums zijn met name nuttig wanneer je een beperkt en vaststaand aantal mogelijke waarden hebt. Een klassiek voorbeeld hiervan is de band van een radiozender, die óf AM óf FM kan zijn. In plaats van deze waarden te representeren met losse constanten of strings, biedt een enum een typeveilige en leesbare oplossing [4](#page=4).
> **Tip:** Enums helpen de code duidelijker te maken en voorkomen veelvoorkomende fouten die kunnen optreden bij het gebruik van magische getallen of strings.
#### 4.1.2 Alternatief voor gewone klassen
Een enum kan gezien worden als een alternatief voor een gewone klasse die enkel constanten bevat. Het belangrijkste voordeel is de beperking tot een vooraf gedefinieerde set van waarden, wat de code robuuster maakt [6](#page=6).
#### 4.1.3 Syntaxis en gebruik
De basis syntaxis voor het definiëren van een enum is eenvoudig. Je gebruikt het sleutelwoord `enum` gevolgd door de naam van de enum en de mogelijke waarden, gescheiden door komma's.
Een veelvoorkomend patroon is het definiëren van een enum voor een geslachtsindicatie:
```java
public enum Geslacht {
M, V, X
}
```
Om een waarde van een enum te gebruiken, verwijs je ernaar via de naam van de enum, gevolgd door een punt en de gewenste waarde: `EnumNaam.WAARDE` [6](#page=6).
Voorbeeld:
```java
Geslacht mijnGeslacht = Geslacht.V;
```
Dit is vergelijkbaar met het gebruik van statische constanten, maar met het extra voordeel van typeveiligheid. Als je bijvoorbeeld een `Geslacht`-variabele probeert toe te kennen met een ongeldige waarde, zal de compiler een fout geven.
#### 4.1.4 Enums in context: de AutoRadio
In het context van een `AutoRadio` klasse, kan een enum gebruikt worden om de band van een zender te specificeren. In plaats van een `String` of `int` te gebruiken voor de band, zou een `enum Band { AM, FM }` een betere keuze zijn [4](#page=4).
De `AutoRadio` klasse kan dan kenmerken hebben zoals:
* Een `Band` voor de zenderfrequentie [4](#page=4).
* Een `double` voor de frequentie [4](#page=4).
* Een `int` voor het volume [4](#page=4).
* Een `boolean` voor de mute-status [4](#page=4).
Door enums te gebruiken voor gesloten opsommingen zoals de band (AM/FM), creëer je code die gemakkelijker te lezen, te onderhouden en minder gevoelig voor fouten is.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Compositie | Een ontwerptechniek waarbij een klasse objecten van andere klassen bevat als data members. Dit stelt objecten in staat om functionaliteit te delegeren aan de onderliggende objecten. |
| Data member | Een variabele die deel uitmaakt van een klasse. Deze variabelen slaan de staat van een object op en worden gebruikt om de gegevens van het object te representeren. |
| Klasse | Een blauwdruk voor het creëren van objecten. Een klasse definieert de eigenschappen (data members) en het gedrag (methoden) die objecten van die klasse zullen hebben. |
| Object | Een instantie van een klasse. Een object heeft een specifieke staat, bepaald door de waarden van zijn data members, en kan operaties uitvoeren via zijn methoden. |
| Delegeren | Het proces waarbij een methode in een klasse een verzoek doorstuurt naar een methode in een ander object (meestal een object dat het als een data member bevat) om de taak uit te voeren. |
| Enum-type (Enumeratie) | Een speciaal datatype in Java dat een vaste set van benoemde constanten vertegenwoordigt. Het is nuttig voor het definiëren van exclusieve opsommingen, zoals de mogelijke waarden van een band (AM of FM). |
| Triviale ge|ers | Dit zijn eenvoudige methoden of attributen binnen een klasse die vaak slechts data teruggeven of instellen, zonder veel complexiteit. Ze vormen de basiselementen van de klasse. |
| Hoorcollege | Een academische les die voornamelijk in de vorm van een lezing wordt gegeven, waarbij de docent de stof presenteert aan een groep studenten. |
| BlueJ | Een geïntegreerde ontwikkelomgeving (IDE) die speciaal is ontworpen voor het onderwijzen van objectgeoriënteerd programmeren in Java, met een focus op visuele representatie van klassen en objecten. |