Hoofdstuk 10: Een klasse maken

10.1          Probleemstelling een klasse maken
10.2          Een nieuw project aanmaken in BlueJ
10.3          Analyse van de broncode
10.4          Het programma testen
10.5          Het evaluatievak
10.6          Afdrukken vanuit een methode

Oefeningen hoofdstuk 10

10.1          Probleemstelling een klasse maken

De plaatselijke voetbalclub wil een kassasysteem dat de mogelijkheid biedt om een prijs in te stellen afhankelijk van de tegenstander. Zo kan bijvoorbeeld een prijsonderscheid gemaakt worden tussen topwedstrijden en wedstrijden tegen zwakkere ploegen.

De vrijwilliger die aan het loket zit, moet dan alleen maar het aantal gewenste tickets ingeven om het te betalen bedrag te berekenen.

Er moet ook een optie voorzien worden om de ingestelde prijs te raadplegen.

Hieronder is stap voor stap uitgelegd hoe we een eenvoudig kassasysteem ontwerpen dat helemaal aansluit bij de noden van de voetbalclub.
Top

10.2          Een nieuw project aanmaken in BlueJ

Klik op Project “New project” om een nieuw project “Kassa” aan te maken.

Figuur 10.1 klasse

Figuur 10.1: Nieuw project in BlueJ

Maak vervolgens binnen het project “Kassa” een nieuwe klasse “Kasticket” aan.

Figuur 10.2 klasse

Figuur 10.2: Nieuwe klasse aanmaken

Figuur 10.3 klasse

Figuur 10.3: Nieuwe klasse in BlueJ

Top

10.3          Analyse van de broncode

Als je dubbelklikt op de klasse Kasticket, dan opent de broncode. In de broncode kan je zien dat de klasse Kasticket automatisch aangemaakt is.

Figuur 10.4 klasse

Figuur 10.4: Broncode BlueJ

In de broncode vinden we velden, constructors en methoden. We gebruiken voor de eenduidigheid steeds deze volgorde:

Public class Klassenaam
{
velden
constructors
methodes
}

Velden (instance variables) slaan gegevens permanent op binnen een object. Ze bevatten gegevens die door een object gebruikt worden. In ons voorbeeld heeft de klasse Kasticket 2 velden, namelijk “intPrijs” en “intAantal”. In figuur 2.5 kan je zien dat we alle velden privaat definiëren beginnend met het woord “private”. We komen hier later op terug. Verder zien we ook het type van het veld, namelijk “int”, wat betekent dat beide velden gehele getallen kunnen bevatten. Zoals je kan zien, kiezen we voor de variabelen steeds namen met betekenis die het eenvoudig maken om het programma te begrijpen. Velden sluiten we af met ;.

Constructors zorgen ervoor dat een object tijdens de creatie op de juiste manier ingesteld wordt. Ze stellen de startwaarden voor de velden in.  We noemen dit proces ook wel initialisatie. Het veld prijs komt overeen met de ingegeven ticketprijs, namelijk “int intPrijsInvoer”. Het veld “intAantal” heeft initieel de waarde 0. Merk ook hier op dat we iedere regel afsluiten met ;.

Methoden implementeren het gedrag van een object. In deze eenvoudige oefening zijn er 4 methoden:

  • int getPrijs( ): de ticketprijs opvragen;
  • void setAantal(int intAantalInvoer): het aantal gewenste tickets ingeven;
  • int getAantal( ): het aantal tickets opvragen;
  • int getTeBetalen( ): het totaal te betalen bedrag berekenen.

In tegenstelling tot de velddeclaraties, bevatten de methodeheaders altijd haakjes ( ) en worden ze niet afgesloten met ;. De body van de methode staat altijd tussen accolades { }. Het verschil tussen headers van de constructor en de methode is het retourtype. Een retourtype vinden we terug net voor de naam van de methode. Hier is dit bij “int” of “void”. Een constructor kan geen retourtype hebben. Het retourtype “void” zorgt dat de methode geen waarde retourneert.

Commentaar om de broncode goed leesbaar te maken voor iedereen geven we in beginnend met de tekencombinatie // voor 1 regel commentaar of de tekencombinatie /** voor meerdere regels, waarbij iedere regel begint met * en we afsluiten met */. Commentaren hebben geen enkel effect op de functionaliteit van de klasse.

Figuur 10.5 klasse

Figuur 10.5: Broncode project Kassa

Top

10.4          Het programma testen

Maak een nieuw object “topper” door rechts te klikken op de klasse Kasticket en te kiezen voor “newKasticket(int intPrijsInvoer)”. Het programma vraagt om een prijs in te geven. Voor topwedstrijden bedraagt het inkomgeld 25 EUR. Klik op OK en het object is aangemaakt. Je vindt dit terug links onderaan in de objectenbank.

Figuur 10.6 klasse

Figuur 10.6: Object aanmaken

Als je met de rechtermuisknop klikt op het object dan verschijnt een menu waarin de methoden opgesomd staan.

Figuur 10.7 klasse

Figuur 10.7: Overzicht methodes

Kies de methode “void setAantal(int intAantalInvoer)” en geef hier bijvoorbeeld 3 in. Klik op OK om het ingegeven aantal te bevestigen.

Figuur 10.8 klasse

Figuur 10.8: Methode “void setAantal”

Om de waarde van de velden van een klasse te raadplegen, klik je rechts op het object en kies je voor het menu “Inspect”.

Figuur 10.9 klasse

Figuur 10.9: Object-inspector

De methode “int getTeBetalen( )” berekent aan de hand van het ingegeven aantal het totaal te betalen bedrag. Ziehier het resultaat.

Figuur 10.10 klasse

Figuur 10.10: Resultaat methode “int getTeBetalen”

Top

10.5          Het evaluatievak

Rechts onderaan in BlueJ bevindt zich het evaluatievak. Hier kunnen we experimenteren met expressies (methodes of operatoren). Onmiddellijk worden de expressies berekend en de resultaten weergegeven.

Figuur 10.11 klasse

Figuur 10.11: Evaluatievak BlueJ

Top

10.6          Afdrukken vanuit een methode

We voegen de methode “void printTicket( )” toe om een kasticket af te printen. Het resultaat dat weergegeven wordt in de tekstterminal is afgebeeld in figuur 10.12.

Figuur 10.12 klasse

Figuur 10.12: Resultaat van printen vanuit een methode

De broncode van de methode “void printTicket” staat beschreven in figuur 10.13. Ieder statement dat we wensen af te drukken, begint met “System.out.println”  en sluiten we af met ;.

Figuur 10.13 klasse

Figuur 10.13: Broncode van printen vanuit een methode

Top

Oefeningen hoofdstuk 10

Oefening 10-1     Ontwerp een klasse voor de opslag van de gegevens van leerlingen. Sla de voornaam, de naam en de klas elk op in een objectvariabele. Geef de klasse een constructor waaraan je de voornaam, naam en klas kan meegeven als parameter. Maak een methode die de gegevens verandert en een methode die de gegevens weergeeft.

Oefening 10-2     Ontwerp een klasse voor de opslag van de gegevens van een rechthoek. Sla de basis en de hoogte elk op in een objectvariabele. Geef de klasse een constructor waaraan je de basis en de hoogte kan meegeven als parameter. Maak een methode die de oppervlakte van de rechthoek als waarde teruggeeft. Voorzie ook methoden waarmee je de waarden van de basis en de hoogte kan opvragen en aanpassen.

Oefening 10-3     Ontwerp een klasse voor de opslag van de gegevens van een breuk, namelijk teller en noemer. Voorzie 2 constructors. De eerste constructor maakt een nieuwe breuk aan met standaardwaarden. De tweede constructor voorziet parameters voor het ingeven van teller en noemer.
Voeg methoden toe voor de opvraging en de aanpassing van de teller en de noemer. Uiteraard voorzie je ook een methode om het quotiënt uit te rekenen.

Oefening 10-4     Ontwerp de klasse “Cirkel” voor de opslag van de straal. Voorzie 2 constructors. De eerste constructor maakt een nieuwe cirkel aan met standaardafmetingen. De tweede constructor maakt een nieuwe cirkel aan met de ingegeven parameter (straal). Verder voorzie je ook een methode om de straal aan te passen.
Vervolgens voeg je 2 methoden toe om de oppervlakte en de omtrek van de cirkel te berekenen. Rond de resultaten af tot op 2 cijfers na de komma.

Oefening 10-5     Ontwerp een klasse CD voor de opslag van de titel en de uitvoerder. De constructor maakt een nieuwe CD aan met de ingegeven titel en uitvoerder. Voeg twee methoden toe om de inhoud van de velden titel en uitvoerder op te vragen.
Voeg nog een veld toe waarin het aantal liedjes op de CD wordt opgeslagen. Zorg ook voor een accessormethode om het aantal liedjes weer te geven.
Voeg een methode toe om alle informatie over de titel, uitvoerder en aantal liedjes te printen naar het terminalvenster. Voorzie een duidelijke weergave van de informatie in het terminalvenster.

Oefening 10-6     De Belgische quiz-bond houdt de gegevens bij van de aangesloten quiz-teams. Ieder team bestaat uit 4 leden. Elk lid heeft een bepaalde specialiteit, bijvoorbeeld sport, film en muziek, actualiteit of fauna en flora… Maak een klasse Lid. Geef de klasse een constructor waarmee je de naam van het lid en zijn/haar specialiteit kan invoeren. Geef de klasse ook een methode print( ) die de attributen van het betreffende object “lid” op het scherm weergeeft.
Maak een klasse Team die 4 instanties van Lid maakt. Geef de klasse een methode printAlleLeden()  die de namen van de leden en hun specialiteiten op het scherm zet.

Extra oefening 10-7     Ter promotie van Belgische appels en peren wordt een nieuw type fruitautomaat gelanceerd. Maak een nieuwe klasse Fruitautomaat aan. Een fruitautomaat bevat appels en peren. Het maximum aantal van elk is gelimiteerd op 50 stuks.
Voorzie twee constructors. De eerste constructor maakt een lege fruitautomaat aan. De andere constructor maakt een fruitautomaat aan die je (deels) kan opvullen.
Voeg vervolgens een aantal methoden toe om:

  • appels aan te vullen;
  • peren aan te vullen;
  • appels te kopen;
  • peren te kopen;
  • te kijken hoeveel stukken fruit er nog in de automaat zitten;
  • te controleren of een bepaalde fruitsoort uitverkocht is.

Houd er rekening mee dat je bijvoorbeeld geen appel kan kopen als er geen appels meer in de automaat zitten.

Extra oefening 10-8     Met de klasse Bankrekening kan je de stand van je bankrekening bijhouden. In deze klasse wensen we volgende informatie bij te houden:

  • de stand van de rekening;
  • de limiet (je kan maar een bepaald bedrag onder nul gaan);
  • het aantal verrichtingen.

Voorzie een constructor die een nieuwe bankrekening aanmaakt, waarbij uiteraard de waarde van alle velden nul is. De limiet kan je met een methode instellen.
Voeg een methode toe om geld te storten, waarbij je als parameter het te storten bedrag ingeeft. De stand van de rekening vermeerdert met het gestorte bedrag. Als return krijgen we dan de nieuwe stand van de rekening. Omgekeerd, verlaagt bij het afhalen van een ingegeven bedraagt de stand van de rekening. Ook hier krijgen we de nieuwe stand van de rekening te zien.
Voorzie ook een methode om de verrichtingen naar de tekstterminal te printen.

Extra oefening 10-9     Ontwerp een klasse Resultaat voor de opslag van de punten van een student. Enkel het totaal behaalde % wordt bijgehouden. Via een methode kan de behaalde graad worden weergegeven. Dit zijn de mogelijkheden:

  • < 50: niet geslaagd;
  • tussen 50 en 68: voldoende;
  • tussen 68 en 75: onderscheiding;
  • tussen 75 en 85: grote onderscheiding;
  • > 85: grootste onderscheiding.

Top
OPLOSSINGEN

Vorige          Volgende