Oefening 2: methode man
Doel
Code structureren aan de hand van statische methoden in Java.
Opdracht
Maak een programma om het spel "hoger / lager" te spelen, zoals in oefening 1. Structureer hierbij de code aan de hand van statische methoden. Voer de testen uit om te controleren of de methoden werken zoals verwacht.
Statische methoden
- Maak een nieuw project RinParallel. Maak in dit project een klasse genaamd RinParallel. Verwijder de overbodige code tussen de accolades van de klasse.
- De main methode die het startpunt van een Java programma vormt is een voorbeeld van een statische methode. Het is echter ook mogelijk om naast de main methode, andere methoden te definiëren.
- Definieer een methode rInParallel die twee weerstandswaarden als parameters neemt en de weerstandswaarde berekent als deze twee weerstanden in parallel worden geplaatst: Rtotaal = (R1*R2)/(R1+R2)
public static double rInParallel(double r1, double r2){ //Hier volgt de berekening }
- public en static duiden aan dat de methode publiek en statisch is.
- double is het terugkeertype. Dit is een belofte dat de methode een double waarde zal teruggeven. Indien niets teruggegeven wordt dan wordt dit met het type void aangeduid.
- rInParallel is de naam van de methode. Die kan je vrij kiezen, zolang die geen vreemde tekens of spaties bevat of begint met een cijfer.
- Alles tussen haakjes is de parameter lijst. Hier volgt een opsomming van alle parameters, gescheiden door een komma. Elke parameter wordt met zijn type aangeduid en krijgt een zelf te kiezen naam. Alle namen dienen aan dezelfde regels te voldoen. Bij een lege parameterlijst, i.e.
()
zijn er geen parameters gedefinieerd. Parameters zijn variabelen binnen de methode blok. - Tenslotte volgt een blok, aangeduid door
{}
. Hiertussen komen alle statements die behoren bij de methode. - Het laatste statement in de methode blok is typisch het return statement waarin de waarde wordt teruggegeven. Indien het terugkeertype void was, is er ook geen return statement.
- Schrijf de implementatie van de berekening van 2 weerstandswaarden in parallel.
public static double rInParallel(double r1, double r2){ return (r1*r2)/(r1+r2); }
Klik in het projectvenster rechts op de klasse RinParallel. Klik op de naam van de methode rInParallel, vul concrete parameter waarden in en klik op ok om het resultaat te zien.
Figuur 1: Bij een methode aanroep vul je concrete waarden in bij de parameters.
Een methode kan ook in code aangeroepen worden. Roep de methode rInParallel aan in de main methode. Geef het resultaat weer in het terminal venster.
public static void main(String[] args){ double resultaat = rInParallel(1000, 500); System.out.println(resultaat); }
Vraag 1
Hoe schrijf je code om het resultaat van een methode in een terminal venster weer te geven in 1 statement?
Test klasse
- Software testen controleren de werking van code. Bij unit testen gebeurt dit op het niveau van methodes. Hierbij wordt een bepaalde methode aangeroepen met concrete parameter waarden en wordt het resultaat gecontroleerd.
- Download van Toledo het bestand RinParallelTest.java.
- Importeer dit bestand. Klik in het projectvenster op Edit -> Add class from file en selecteer het bestand RinParallelTest.java.
- Klik op compile. De RinParallelTest klasse wordt groen en krijgt de aanduiding unit test.
Klik in het projectvenster op de knop Run Tests. Het zou kunnen dat deze knop niet direct wordt weergegeven. Klik hiervoor op het kleine pijltje in de balk links in het projectvenster.
Figuur 2: Na het klikken op Run Tests verschijnt het venster met de test resultaten.
- Indien dat de balk in het venster met de test resultaten groen aangeeft, betekent dit dat alle testen geslaagd zijn. Indien deze rood aanduidt, wil dit zeggen dat er minstens 1 test gefaald is. Het is mogelijk om op de gefaalde test te klikken, waardoor er meer informatie over de reden van het falen van de test verschijnt.
Javadoc
- Het beter structureren of herschrijven van code zonder de functionaliteit te veranderen noemt in Software Engineering refactoring. Voor de volgende opgave is het de bedoeling om de oplossing van de eerste Java opdracht volgens een vooropgesteld bronbestand te herschrijven.
- Maak een nieuw project genaamd HogerLagerBeter.
- Download van Toledo de bestanden HogerLager.java en HogerLagerTest.java.
- Importeer beide bestanden.
- Compileer het project en voer de testen uit. Alle testen zullen falen.
- Open de klasse HogerLager. Deze klasse bevat een bijna lege main methode, alsook vijf statische methodes die een stub implementatie bevatten. Een stub is een stukje code die ervoor zorgt dat de Java code correct lijkt voor de compiler, maar deze code werkt niet zoals het zou moeten. In dit geval wordt in de methode beschreven dat er een bepaalde waarde wordt teruggegeven. Indien er geen dergelijke waarde terug wordt gegeven dan zal de compiler dit als een fout aanduiden. Om dit voorlopig op te lossen wordt een stub waarde teruggegeven, bvb. null, 0, false, etc.
Elk van deze statische methodes worden door middel van Javadoc beschreven. Javadoc is een vorm van commentaar waarbij de methoden en klassen beschreven worden volgens een standaard manier. Bvb.
/** * Genereert een willekeurig geheel getal tussen [min, max[, verschillendVan het opgegeven getal * * @param verschillendVan getal * @param min * @param max * * @return geheel getal tussen [min,max[, verschillendVan het getal */ public static int genereerGetal(int verschillendVan, int min, int max){ return 0; }
- Javadoc beschrijft de onderstaande methode. Het begint steeds met
/**
en eindigt met*/
. Elke regel start met een *. - De eerste zin omschrijft de methode.
- Vervolgens krijg je een opsomming van alle parameters. Deze worden aangeduid met de annotatie
@param
gevolgd door de naam van de parameter. Hierbij kan nog extra uitleg over de parameter volgen. - Ten slotte volgt uitleg over de terugkeerwaarde. Dit wordt aangeduid met de annotatie
@return
. Indien er niets teruggegeven wordt, i.e. met het terugkeertype void dan wordt er ook geen@return
annotatie gegeven.
- Javadoc beschrijft de onderstaande methode. Het begint steeds met
Vraag 2
Gegeven de volgende javadoc, wat is een mogelijk bijhorende methode?
/**
* Berekent de grootste gemene deler van twee getallen.
*
* @param x eerste geheel getal
* @param y tweede geheel getal
*
* @return de grootste gemene deler
*/
Vraag 3
Gegeven de volgende methode, wat is een mogelijk bijhorende javadoc?
public static boolean schrikkelt(int jaartal){
//...
}
Hoger Lager (opnieuw)
- Vervolledig alle methodes. Controleer de werking van de methodes door de testen uit te voeren. Indien alle testen slagen, is de werking van methode correct.
- Maak zoveel mogelijk gebruik van de methodes om de main methode te vervolledigen. Het is de bedoeling om een programma te schrijven om een spelletje hoger lager te spelen. Na het aflopen van een spel wordt de score weergegeven. Ten slotte is het ook mogelijk om een nieuw spel te starten.
Temperatuur conversie
- Maak een klasse TemperatuurConversie. Schrijf methoden om alle mogelijke conversies tussen Kelvin, Celsius en Fahrenheit te berekenen. Bvb. van kelvin naar celsius en omgekeerd krijgen de naam celsiusNaarKelvin en kelvinNaarCelsius.
- Kelvin = Celsius + 273.15
- Celsius = (Fahrenheit - 32)/1.8
- Maak gebruik van TemperatuurConversieTest.java om je resultaten te controleren.
Vraag 4
42°C + 55°F - 208K = ? °C
Extra
- Maak een methode om te controleren of een jaartal een schrikkeljaar is. Zie de voorwaarden in de extra's van Blokken opdracht 3
- Maak een methode die controleert of een geheel getal een priemgetal is.