De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

1 HOOFDSTUK 6 METHODEN 6.1 Inleiding  Tot nu toe: kleine, eenvoudige programma’s applicatie: methode main() applet: methode paint() en eventueel init()

Verwante presentaties


Presentatie over: "1 HOOFDSTUK 6 METHODEN 6.1 Inleiding  Tot nu toe: kleine, eenvoudige programma’s applicatie: methode main() applet: methode paint() en eventueel init()"— Transcript van de presentatie:

1 1 HOOFDSTUK 6 METHODEN 6.1 Inleiding  Tot nu toe: kleine, eenvoudige programma’s applicatie: methode main() applet: methode paint() en eventueel init()  Vanaf hoofdstuk 6: complexere, grotere programma’s (= realiteit)  Gevolg: programma verdelen in kleine stukjes, modules genoemd = verdeel en heers methode

2 2 6.2 Programmamodules in JAVA  Modules in Java: methoden klassen  Java API voorziet meerdere modules  Programmeurs kunnen zelf ook modules ontwerpen, nl. programmer-defined modules JAVA-programma = combinatie van nieuwe methoden en klassen, die de programmeur schrijft, met methodes en klassen die beschikbaar zijn in de Java API! VERMIJD HET HERUITVINDEN VAN HET WIEL!

3 3  Methoden om specifieke taken te definiëren Voorbeeld: invoer van een positief geheel getal + test kan meerdere keren in een programma gebruikt worden! aanroepen via een method call; specifieert de naam van de methode en de data, die de methode nodig heeft om de taak uit te voeren = argumenten kan een resultaat teruggeven aan de calling method (caller) 6.2 Programmamodules in JAVA (vervolg)

4 4  Methoden Te vergelijken met de baas (caller), die zijn werknemer vraagt (called method) een taak te volbrengen en de resultaten te rapporteren. De baas moet niet weten hoe de werker zijn taak volbrengt. Een werker kan ook beroep doen op andere werkers, zonder dat de baas dit weet! 6.2 Programmamodules in JAVA (vervolg)

5 5 Fig. 6.1 Hierarchische baas-methode/werkman-methode relatie. baas werkman1 werkman2werkman3 werkman4werkman5

6 6  class java.lang.Math voorziet gebruikelijke mathematische bewerkingen Voorbeeld: de vierkantswortel van double x = Math.sqrt(900.0); De methode sqrt behoort tot de klasse Math en is static, zoals alle methoden in deze klasse!  aanroep: klassenaam.methodenaam(argumenten) 6.3 Klassemethoden van de klasse Math

7 7  class java.lang.Math na de methodenaam volgen de argumenten tussen ronde haakjes; nul, één of meerdere gescheiden door komma’s Argumenten kunnen  constanten zijn: double x = Math.sqrt(50);  variabelen zijn: double y = 14, x = Math.sqrt(y);  expressies zijn: double z = 70.5; System.out.println( Math.sqrt(z+7)); 6.3 Klassemethoden van de klasse Math (vervolg)

8 8

9 9 Oef 1. Wat is de waarde van x na evaluatie ? a) x = Math.abs(7.5); b) x = Math.floor(7.5); c) x = Math.abs(0.0); d) x = Math.ceil(0.0); e) x = Math.abs(-6.4); f) x = Math.ceil(-6.4); g) x = Math.ceil(-Math.abs(-8 + Math.floor(- 5.5)));

10 10  Methoden laten modularisatie van een programma toe Voordelen:  maakt programmaontwikkeling eenvoudiger  software kan opnieuw gebruikt worden  vermijd herhalende code 6.4 Methoden definitie.

11 11  Methoden gebruiken lokale variabelen enkel de methode kent de lokale variabelen lokale variabelen bestaan enkel vanaf de declaratie tot aan de sluitaccolade van de body waarin ze gedeclareerd zijn 6.4 Methoden definitie (vervolg).

12 12  Methoden hebben meestal een lijst van parameters parameters voorzien uitwisseling van informatie tussen methoden via de methode oproep (method call) een parameter is eveneens een lokale variabele voor de methode Voorbeelden: public static void main (String[] args) -> args public void paint (Graphics g) -> g public double square (double x) -> x 6.4 Methoden definitie (vervolg).

13 13  Programmeurs kunnen hun eigen methoden schrijven, naast het gebruikmaken van methoden uit de Java API.  Voorbeeld 1: SquareIntegers.java een applet, dat de kwadraten van de gehele getallen van 1 t.e.m. 10 bepaalt en weergeeft op het scherm Hierbij wordt een for-herhalingsstructuur en een zelfgedefinieerde methode square gebruikt. De functie square bepaalt het kwadraat van een willekeurig geheel getal. 6.4 Methoden definitie (vervolg).

14 14 1 // Fig. 6.3: SquareIntegers.java 2 // Met zelfgedefinieerde square methode 3 4 // Java core packages 5 import java.awt.Container; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class SquareIntegers extends JApplet 11 { 12 // opzetten van GUI en berekenen van kwadraten van 1 tot public void init() 14 { 15 // JTextArea om resultaten weer te geven 16 JTextArea outputArea = new JTextArea(); // een referentie naar de applets content pane 19 Container container = getContentPane(); // outputArea vasthechten aan container 22 container.add( outputArea ); int result; // resultaat van methode-aanroep square 25 String output = ""; // String die resultaten bevat 26

15 15 27 // lus 10 keer 28 for ( int counter = 1; counter <= 10; counter++ ) 29 { 30 // berekenen kwadraat van counter en in result stoppen 31 result = square( counter ); // result toevoegen aan String output 34 output += "The square of " + counter + 35 " is " + result + "\n"; } // einde for-lus outputArea.setText( output ); // zet resultaten in JTextArea } // einde methode init // square methode definitie 44 public int square( int y ) 45 { 46 return y * y; // return square of y } // einde methode square } // einde klasse SquareIntegers

16 16

17 17 12 // opzetten van GUI en berekenen van kwadraten van 1 tot public void init() 14 { 15 // JTextArea om resultaten weer te geven 16 JTextArea outputArea = new JTextArea(); // een referentie naar de applets content pane 19 Container container = getContentPane(); // outputArea vasthechten aan container 22 container.add( outputArea );  Lijn 19 :  Elk weergavescherm van een applet heeft een “content pane”, waaraan GUI componenten kunnen worden gekoppeld.  De “content pane” is een object van de klasse Container (java.awt).  getContentPane() geeft een referentie terug naar het “content pane” van de applet; deze functie erven we van de klasse JApplet  Lijn 22 :  outputArea GUI-component wordt aan “content pane” gekoppeld en neemt het volledige grafische scherm van de applet in beslag

18 // lus 10 keer 28 for ( int counter = 1; counter <= 10; counter++ ) 29 { 30 // berekenen kwadraat van counter en in result stoppen 31 result = square( counter ); // result toevoegen aan String output 34 output += "The square of " + counter + 35 " is " + result + "\n"; } // einde for-lus  Lijn 31  Aanroep van de methode square  Methode square levert een int (returns), die in result wordt opgeslagen. Deze terugkeerwaarde is het kwadraat van counter.

19 19 43 // square methode definitie 44 public int square( int y ) 45 { 46 return y * y; // return square of y } // einde methode square } // einde klasse SquareIntegers  Lijn 44 tot 48  Zelfgedefinieerde methode square  Terugkeerwaarde = int  Methodenaam = square  Parameterlijst = 1 integer, nl. y  Return = y*y

20 Methoden definitie (vervolg).  Algemeen formaat van een methode: terugkeerwaarde-type methodenaam( parameterlijst ) { declaraties en statements } De methodenaam moet een geldige, betekenisvolle identifier zijn! Het terugkeerwaardetype is het type van het resultaat dat de methode teruggeeft aan de caller.  void (leeg): er is geen terugkeerwaarde  int: de methode geeft een geheel getal terug Een methode kan tenhoogste één waarde teruggeven!

21 Methoden definitie (vervolg). De parameterlijst = lijst van elke parameternaam en –type, gescheiden door komma’s. Voor elke parameter MOET er een argument zijn in de aanroep van de methode én het type moet compatibel zijn! Voorbeeld: public double square (double y) y kan één van de volgende waarden ontvangen: 7.35, 22, y kan de string “Hello” niet ontvangen! Een parameterlijst kan leeg zijn! Voorbeeld: public void init() { }

22 Methoden definitie (vervolg). Er zijn drie verschillende mogelijkheden om terug te keren naar de caller:  als er geen terugkeerwaarde is, keren we terug wanneer * de sluitaccolade van de methode bereikt is OF * het statement return; wordt uitgevoerd  als er wel een terugkeerwaarde is, keren we terug wanneer het statement return expression; wordt uitgevoerd; de expressie wordt geëvalueerd en de resulterende waarde wordt teruggegeven aan de caller

23 Methoden definitie (vervolg). Methode-body = block met  declaraties van lokale variabelen  statements Een methode kan NIET gedefinieerd zijn binnen een andere methode! Een methode kan wel caller zijn van zichzelf = recursieve methode (zie $ 6.12)

24 Methoden definitie (vervolg). Er zijn drie verschillende manieren om methoden aan te roepen:  via een referentie naar een object, gevolgd door de puntoperator:g.drawLine(x1,y1,x2,y2);  via een klassenaam, gevolgd door de puntoperator: int i = Integer.parseInt(stringToConvert); (enkel voor static-methoden van een klasse!)  gewoon de naam van de methode en de argumenten int result = square(counter); Dit kan enkel door een caller uit dezelfde klasse!

25 25  Maximum.java Een applet, die het maximum van drie reële getallen bepaalt. Er wordt een zelfgedefinieerde methode maximum uitgewerkt, die op haar beurt een voorgedefinieerde methode Math.max() gebruikt. VOORBEELD 2

26 26 1 // Fig. 6.4: Maximum.java 2 // Het maximum vinden van drie doubles 3 4 // Java core packages 5 import java.awt.Container; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class Maximum extends JApplet 11 { 12 // initialiseer applet door gebruikersinput en maken van GUI 13 public void init() 14 { 15 // vraag gebruikersinput 16 String s1 = JOptionPane.showInputDialog( 17 "Enter first floating-point value" ); 18 String s2 = JOptionPane.showInputDialog( 19 "Enter second floating-point value" ); 20 String s3 = JOptionPane.showInputDialog( 21 "Enter third floating-point value" ); // converteer gebruikersinput naar double 24 double number1 = Double.parseDouble( s1 ); 25 double number2 = Double.parseDouble( s2 ); 26 double number3 = Double.parseDouble( s3 ); 27

27 28 // methode-aanroep maximum om grootste waarde te bepalen 29 double max = maximum( number1, number2, number3 ); // maak JTextArea om resultaten weer te geven 32 JTextArea outputArea = new JTextArea(); outputArea.setText( "number1: " + number "\nnumber2: " + number2 + "\nnumber3: " + number "\nmaximum is: " + max ); // referentie naar de applets GUI component display area 40 Container container = getContentPane(); // outputArea vasthechten aan Container c 43 container.add( outputArea ); } // einde methode init // maximum methode gebruikt Math klasse methode max om 48 // de maximum waarde te bepalen 49 public double maximum( double x, double y, double z ) 50 { 51 return Math.max( x, Math.max( y, z ) ); } // einde methode maximum } // einde klasse Maximum

28 28 Maximum.java

29 29 12 // initialiseer applet door gebruikersinput en maken van GUI 13 public void init() 14 { 15 // vraag gebruikersinput 16 String s1 = JOptionPane.showInputDialog( 17 "Enter first floating-point value" ); 18 String s2 = JOptionPane.showInputDialog( 19 "Enter second floating-point value" ); 20 String s3 = JOptionPane.showInputDialog( 21 "Enter third floating-point value" ); // converteer gebruikersinput naar double 24 double number1 = Double.parseDouble( s1 ); 25 double number2 = Double.parseDouble( s2 ); 26 double number3 = Double.parseDouble( s3 ); // methode-aanroep maximum om grootste waarde te bepalen 29 double max = maximum( number1, number2, number3 ); 30  Lijn 29  Aanroep van de methode maximum. Deze methode geeft een double terug, die het grootste getal van de drie meegegeven argumenten voorstelt. Dit resultaat komt in max.

30 30 31 // maak JTextArea om resultaten weer te geven 32 JTextArea outputArea = new JTextArea(); outputArea.setText( "number1: " + number "\nnumber2: " + number2 + "\nnumber3: " + number "\nmaximum is: " + max ); // referentie naar de applets GUI component display area 40 Container container = getContentPane(); // outputArea vasthechten aan Container c 43 container.add( outputArea ); } // einde methode init  Lijn 40 tot 43  getContentPane() geeft een referentie terug naar het “content pane” van de applet  outputArea GUI-component wordt aan “content pane” gekoppeld

31 31 47 // maximum methode gebruikt Math klasse methode max om 48 // de maximum waarde te bepalen 49 public double maximum( double x, double y, double z ) 50 { 51 return Math.max( x, Math.max( y, z ) ); } // einde methode maximum } // einde klasse Maximum  Lijn 49 tot 53  Zelfgedefinieerde methode maximum :  Terugkeerwaarde = double  Methodenaam = maximum  Parameterlijst = 3 doubles x,y en z  Return = maximum van de 3 doubles, gebruikmakend van de voorgedefinieerde methode max uit de klasse Math, die van 2 getallen het grootste kan bepalen.

32 32 Oef 2. Schrijf een methode getTemperatuurStatus. int intTemp = Integer.parseInt(JOptionPane.showInputDialog(null, “geef de temperatuur”)); String temp = getTemperatuurStatus(intTemp);  In temp komt de “koud” bij x < 10 of “lauw” bij x tussen [10 en 20] of “warm” bij x > 20 Met x de ingegeven temperatuur.

33 33 Oef 3. Wijzig de methode getTemperatuurStatus. Maak de methode getTemperatuurStatus meer algemeen bruikbaar. De temperatuur moet zowel in graden Celcius (oorspronkelijke versie) als in Fahrenheit doorgegeven kunnen worden. Het eindresultaat blijft uiteraard hetzelfde. de formule F = 32 + (C * 9)/5.

34 Argumentpromotie  Typeconversie (Coercion) van argumenten Forceert argumenten naar het gepaste type om door te geven aan de methode bv. sqrt() verwacht een double: System.out.println( Math.sqrt( 4 ) ); –Evalueert Math.sqrt( 4.) –Evalueert dan System.out.println(2.)  Promotieregels Specifiëren hoe types converteren naar andere types zonder gegevensverlies Het type van een argument kan steeds gepromoveerd worden naar een “hoger” type (zie tabel)

35 35  Deze regels worden eveneens toegepast bij een gemengde expressie! Voorbeeld: int a = 10; double b = 0; b += a;  Om de methode square(int y) aan te roepen met een double (x = 3.5), gebruiken we de volgende aanroep: double res= square((int)x);

36 Java API Packages  Packages Klassen gegroepeerd in categorieën van gerelateerde klassen. Promoot software hergebruik (reuse). import statements specifiëren de nodige klassen in het Java programma om te compileren bv. import javax.swing.JApplet;

37 37

38 38

39 Generatie van willekeurige getallen  Java kan willekeurige getallen (random-numbers) genereren via een methode uit de klasse Math: Math.random() double randomValue = Math.random();  1.0 > randomValue >= 0.0  Het zijn pseudo-random getallen, want ze worden bepaald door een complexe wiskundige berekening, die gebruik maakt van de actuele tijd.  Het interval van waarden dat geproduceerd wordt door deze methode, is meestal verschillend van het gewenste interval! Voorbeelden: kop (0) of munt (1); gooien van een dobbelsteen (1, 2,..., 6);....

40 Generatie van willekeurige getallen (vervolg)  Om een geheel getal tussen 1 en 6 (beide inbegrepen) te verkrijgen, gebruiken we de volgende expressie: (int) (Math.random() * 6) We brengen het interval van waarden op schaal en het cijfer 6 noemen we de schaalfactor! Door vervolgens één op te tellen bij ons vorig resultaat, verkrijgen we het gewenste resultaat: (int) (Math.random() * 6) + 1  Algemeen: int n = a + (int)(Math.random() * b); a = shiftwaarde, b = schaalfactor

41 41  RandomIntegers.java een applicatie, die 20 willekeurige getallen genereert met een waarde tussen 1 en 6. gebruikt een for-herhalingsstructuur en de voorgedefinieerde methode Math.random(). VOORBEELD 3

42 42 1 // Fig. 6.7: RandomIntegers.java 2 // Willekeurige geschaalde integers. 3 4 // Java extension packages 5 import javax.swing.JOptionPane; 6 7 public class RandomIntegers 8 { 9 // main methode begint uitvoering van Java applicatie 10 public static void main( String args[] ) 11 { 12 int value; 13 String output = ""; // lus 20 keer 16 for ( int counter = 1; counter <= 20; counter++ ) { // kies willekeurige integer tussen 1 en 6 19 value = 1 + ( int ) ( Math.random() * 6 ); output += value + " "; // value toevoegen aan output // als counter deelbaar is door 5, 24 // voeg newline toe aan String output 25 if ( counter % 5 == 0 ) 26 output += "\n"; } // end for structuur

43 JOptionPane.showMessageDialog( null, output, 31 "20 Random Numbers from 1 to 6", 32 JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // be ë indigt de applicatie } // einde methode main } // einde klasse RandomIntegers

44 44 15 // lus 20 keer 16 for ( int counter = 1; counter <= 20; counter++ ) 17 { 18 // kies willekeurige integer tussen 1 en 6 19 value = 1 + ( int ) ( Math.random() * 6 ); output += value + " "; // value toevoegen aan output // als counter deelbaar is door 5, 24 // voeg newline toe aan String output 25 if ( counter % 5 == 0 ) 26 output += "\n"; } // end for structuur  Lijn 19  Genereert integers in het bereik 1- 6  Math.random levert een double, die >= 0.0 en <1.0. We converteren (casten) de double naar een int

45 45  RollDie. java Applicatie, die een simulatie doet van 6000 teerlingworpen, om te bewijzen dat elk getal (1,..,6) bijna evenveel kans heeft om voor te komen. Deze gebruikt een for-herhalingsstructuur en een switch-case. VOORBEELD 4

46 46 1 // Fig. 6.8: RollDie.java 2 // Werp een dobbelsteen 6000 keer. 3 4 // Java extension packages 5 import javax.swing.*; 6 7 public class RollDie 8 { 9 // main methode begint uitvoering van Java applicatie 10 public static void main( String args[] ) 11 { 12 int frequency1 = 0, frequency2 = 0, frequency3 = 0, 13 frequency4 = 0, frequency5 = 0, frequency6 = 0, face; // resultaten samenvatten 16 for ( int roll = 1; roll <= 6000; roll++ ) { 17 face = 1 + ( int ) ( Math.random() * 6 ); 18

47 47 RollDie.java 19 // bepaal waarde teerlingworp en verhoog gepaste teller 20 switch ( face ) 21 { 22 case 1: 23 ++frequency1; 24 break; case 2: 27 ++frequency2; 28 break; case 3: 31 ++frequency3; 32 break; case 4: 35 ++frequency4; 36 break; case 5: 39 ++frequency5; 40 break; case 6: 43 ++frequency6; 44 break; } // einde switch structuur

48 48 RollDie.java } // einde for structuur JTextArea outputArea = new JTextArea(); outputArea.setText( "Face\tFrequency" + 53 "\n1\t" + frequency1 + "\n2\t" + frequency "\n3\t" + frequency3 + "\n4\t" + frequency "\n5\t" + frequency5 + "\n6\t" + frequency6 ); JOptionPane.showMessageDialog( null, outputArea, 58 "Rolling a Die 6000 Times", 59 JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // be ë indigt applicatie } // einde methode main } // einde klasse RollDie

49 49 RollDie.java

50 50 1 // Fig. 6.8: RollDie.java 2 // Werp een dobbelsteen 6000 keer. 3 4 // Java extension packages 5 import javax.swing.*; 6 7 public class RollDie 8 { 9 // main methode begint uitvoering van Java applicatie 10 public static void main( String args[] ) 11 { 12 int frequency1 = 0, frequency2 = 0, frequency3 = 0, 13 frequency4 = 0, frequency5 = 0, frequency6 = 0, face; // resultaten samenvatten 16 for ( int roll = 1; roll <= 6000; roll++ ) 17 { face = 1 + ( int ) ( Math.random() * 6 ); 18  Lijn  Tellers die frequentie gegooide ogen, bijhouden  Lijn  Genereert integers in het bereik 1- 6, voor 6000 worpen

51 51 RollDie.java 19 // bepaal waarde teerlingworp en verhoog gepaste teller 20 switch ( face ) 21 { 22 case 1: 23 ++frequency1; 24 break; case 2: case 6: 43 ++frequency6; 44 break; } // einde switch structuur } // end for structure 49  Lijn  voor elke worp wordt de juiste frequentie-teller aangepast

52 VOORBEELD 5: Een kansspel  Craps simulatie Gooi de teerlingen een eerste keer  Als de som gelijk is aan 7 of 11, de speler wint  Als de som gelijk is aan 2, 3 of 12, de speler verliest  Elke andere som (4, 5, 6, 8, 9, 10) is de spelers point Blijf teerlingen gooien totdat …  de som overeenkomt met de spelers point  speler wint  de som komt overeen met 7 of 11  speler verliest

53 53 Craps.java 1 // Fig. 6.9: Craps.java 2 // Craps 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*; public class Craps extends JApplet implements ActionListener 12 { 13 // constanten voor status van het spel weer te geven 14 private final int WON = 0, LOST = 1, CONTINUE = 2; // andere gebruikte variabelen 17 private boolean firstRoll = true; // true bij eerste worp 18 private int sumOfDice = 0; // som van teerling 19 private int myPoint = 0; // niet gewonnen op eerste worp 20 private int gameStatus = CONTINUE; // spel nog niet over // GUI componenten 23 private JLabel die1Label, die2Label, sumLabel, pointLabel; 24 private JTextField die1Field, die2Field, sumField, pointField; 25 private JButton rollButton; 26

54 54 Craps.java 1 // Fig. 6.9: Craps.java 2 // Craps 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*; public class Craps extends JApplet implements ActionListener 12 { 13  Lijn 11 We maken een klasse Craps die ActionListener implementeert. Een ActionListener is letterlijk een klasse die ‘luistert’ of er een Actionevent plaatsvindt, bv. de gebruiker drukt op een button.  Lijn 6 : import van het pakket java.awt.event, waar de klasse ActionListener deel van uitmaakt.

55 55 Craps.java 27 // opzetten van GUI componenten 28 public void init() 29 { 30 // haal referentie naar content pane en verander de layout 31 // naar die van een FlowLayout 32 Container container = getContentPane(); 33 container.setLayout( new FlowLayout() ); // maak label en tekstveld voor eerste teerling 36 die1Label = new JLabel( "Die 1" ); 37 container.add( die1Label ); 38 die1Field = new JTextField( 10 ); 39 die1Field.setEditable( false ); 40 container.add( die1Field ); // maak label en tekstveld voor tweede teerling 43 die2Label = new JLabel( "Die 2" ); 44 container.add( die2Label ); 45 die2Field = new JTextField( 10 ); 46 die2Field.setEditable( false ); 47 container.add( die2Field ); 48  Lijn  voor uitvoer van teerling 1 en teerling 2

56 56 49 // maak label en tekstveld voor som 50 sumLabel = new JLabel( "Sum is" ); 51 container.add( sumLabel ); 52 sumField = new JTextField( 10 ); 53 sumField.setEditable( false ); 54 container.add( sumField ); // maak label en tekstveld voor punten 57 pointLabel = new JLabel( "Point is" ); 58 container.add( pointLabel ); 59 pointField = new JTextField( 10 ); 60 pointField.setEditable( false ); 61 container.add( pointField ); 62 // maak knop voor gebruikers om teerling te werpen 63 // registreer rolButton als component waarop de event zal 64//plaatsgrijpen 65 rollButton = new JButton( "Roll Dice" ); 66 rollButton.addActionListener( this ); 67 container.add( rollButton ); 68 }  Lijn :voor uitvoer van de som van de worpen  Lijn : voor uitvoer van de speler zijn ‘point’  Lijn : knop om teerlingen te werpen

57 57 69 // proces van een teerlingworp 70 public void actionPerformed ( ActionEvent actionEvent ) 71 { 72 // eerste teerlingworp 73 if ( firstRoll ) 74 { sumOfDice = rollDice(); // werp teerling switch ( sumOfDice ) { // winnen op eerste worp 79 case 7: case 11: 80 gameStatus = WON; 81 pointField.setText( "" ); // leeg pointveld 82 break; // verliezen op eerste worp 85 case 2: case 3: case 12: 86 gameStatus = LOST; 87 pointField.setText( "" ); // leeg pointveld 88 break; 89 Indien de som 7 of 11 is, speler wint Indien de som is 2, 3 of 12 is, speler verliest  Lijn 70 :  Methode wordt automatisch geactiveerd als Jbutton wordt ingedrukt om de event af te handelen. Indien eerste worp activeer rollDice

58 58 90 // Onthoud punt 91 default: 92 gameStatus = CONTINUE; 93 myPoint = sumOfDice; 94 pointField.setText( Integer.toString( myPoint ) ); 95 firstRoll = false; 96 break; } // einde switch structuur } // einde body if structuur // aansluitende teerlingworp 103 else { 104 sumOfDice = rollDice(); // werp teerling // bepaal status van het spel 107 if ( sumOfDice == myPoint ) // winnen door maken punt 108 gameStatus = WON; 109 else 110 if ( sumOfDice == 7 ) // verliezen door 7 te werpen 111 gameStatus = LOST; 112 } // toon boodschap die status spel weergeeft 115 displayMessage(); } // end method actionPerformed Bij een van som 4, 5, 6, 8, 9 of 10 wordt dit de point Als de som gelijk is aan point, speler wint; Als som 7 is, speler verliest

59 // werp teerling, bereken som en toon resultaten 120 public int rollDice () 121 { 122 int die1, die2, sum; // kies willekeurige waarden teerlingworpen 125 die1 = 1 + ( int ) ( Math.random() * 6 ); 126 die2 = 1 + ( int ) ( Math.random() * 6 ); sum = die1 + die2; // som van de teerlingogen // toon resultaten 131 die1Field.setText( Integer.toString( die1 ) ); 132 die2Field.setText( Integer.toString( die2 ) ); 133 sumField.setText( Integer.toString( sum ) ); return sum ; // geef som van worpen terug } // einde methode rollDice 138  Lijn :  Methode rollDice() gebruikt Math.random() om twee teerlingen te simuleren en geeft de som ervan terug.

60 // bepaal spel status en geef de gepaste boodschap weer 140 // in de statusbalk 141 public void displayMessage() 142 { 143 // spel mag doorgaan 144 if ( gameStatus == CONTINUE ) 145 showStatus( "Roll again." ); // spel gewonnen of verloren 148 else { if ( gameStatus == WON ) 151 showStatus ( "Player wins. " "Click Roll Dice to play again." ); 153 else 154 showStatus ( "Player loses. " "Click Roll Dice to play again." ); // volgende worp is eerste van een nieuw spel 158 firstRoll = true; 159 } } // eind methode displayMessage } // einde klasse Craps  Lijn 151 : Methode showStatus toont een string in de applet zijn containers statusbalk.

61 61 Craps.java

62 Levensduur van identifiers  Identifier levensduur Levensduur  Periode dat de identifier bestaat in het geheugen Automatic levensduur  Lokale variabelen  Bestaan van zodra het declaratiestatement wordt uitgevoerd, totdat de programmacontrole het betreffende blok verlaat.

63 Levensduur van identifiers (vervolg)  Identifier levensduur Static levensduur  static klasse attributen (class variabele/ class reference)  Bestaan van zodra de klasse die ze definieert is geladen, tot het einde van het programma. Kunnen echter niet noodzakelijk overal in het programma gebruikt worden!  Identifier scope Definieert waar de identifier kan worden gebruikt.

64 Scope regels  Scope van een identifier is het deel binnen de broncod e waarin naar de identifier kan gerefereerd worden. Klasse scope  Begint bij de openingsaccolade ({) en eindigt bij de sluitingsaccolade (}) van de klasse  bv. object-variabelen en methoden Blok scope  Begint bij de identifierdeclaratie en eindigt bij de sluitingsaccolade (}) van de blok  bv. lokale variabelen en methodeparameters

65 65  Scoping.java een object-variabele x en twee lokale variabelen, ook met als naam x worden gedeclareerd in een applet deze applet zal, voor de eerste keer, de methode start() (her)definiëren met de vaste hoofding public void start() {....} VOORBEELD 6

66 66 Scoping.java 1 // Fig. 6.10: Scoping.java 2 // A scoping example. 3 4 // Java core packages 5 import java.awt.Container; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class Scoping extends JApplet 11 { private JTextArea outputArea; // object-variabele x 14 private int x = 1; // initialiseert de applet: GUI toekennen aan de applet 17 public void init() 18 { 19 outputArea = new JTextArea(); 20 Container container = getContentPane(); 21 container.add( outputArea ); } // einde methode init // methode start wordt opgeroepen nadat de methode init werd uitgevoerd; De methode 26 // start roept de methodes useLocal en useInstance op. 27 public void start() 28 { 29 int x = 5; // lokale variabele x van de methode start outputArea.append( "local x in start is " + x ); useLocal(); // useLocal bevat een lokale variabele x 34 useInstance(); // useInstance gebruikt de object-variabele x

67 67 35 useLocal(); // useLocal herinitialiseert zijn lokale variabele x 36 useInstance(); // object-variable x heeft zijn vorige waarde behouden outputArea.append( "\n\nlocal x in start is " + x ); } // einde methode start // useLocal herinitialiseert de lokale variable x telkens deze methode wordt opgeroepen 43 public void useLocal() 44 { 45 int x = 25; // initialisatie van de lokale variabele x outputArea.append( "\n\nlocal x in useLocal is " + x + 48 " after entering useLocal" ); 49 ++x; 50 outputArea.append( "\nlocal x in useLocal is " + x + 51 " before exiting useLocal" ); } // einde methode useLocal // useInstance wijzigt de object-variabele x telkens deze methode wordt opgeroepen 56 public void useInstance() 57 { 58 outputArea.append( "\n\ninstance variable x is " + x + 59 " on entering useInstance" ); 60 x *= 10; 61 outputArea.append( "\ninstance variable x is " + x + 62 " on exiting useInstance" ); } // einde methode useInstance } // einde klasse Scoping

68 68 Scoping.java 1 // Fig. 6.10: Scoping.java 2 // A scoping example. 3 4 // Java core packages 5 import java.awt.Container; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class Scoping extends JApplet 11 { private JTextArea outputArea; // object-variabele x 14 private int x = 1;  Lijn 14 Object-variabele x heeft klasse scope. M.a.w. x kan gebruikt worden in alle methoden en in alle inwendige klassen van de klasse Scoping.

69 69 Scoping.java 16 // initialiseert de applet: GUI toekennen aan de applet 17 public void init() 18 { 19 outputArea = new JTextArea(); 20 Container container = getContentPane(); 21 container.add( outputArea ); } // einde methode init  Lijn 21 In een container kan je componenten stoppen, zoals het GUI-component JTextArea. Met de methode add kan je een component (een knop, een tekstvak, een panel) toevoegen aan een container-object.

70 70 Scoping.java 25 // start wordt opgeroepen nadat de methode init werd uitgevoerd. 26 // De methode start roept de methodes useLocal en useInstance op. 27 public void start() 28 { 29 int x = 5; // lokale variabele x van de methode start outputArea.append( "local x in start is " + x ); useLocal(); // useLocal bevat een lokale variabele x 34 useInstance();// useInstance gebruikt de object-variabele x 35 useLocal(); // useLocal herinitialiseert zijn lokale variabele useInstance();// object-variable x heeft zijn vorige waarde behouden 38 outputArea.append( "\n\nlocal x in start is " + x ); } // einde methode start  Lijn 29 Lokale variabele x heeft blok scope. M.a.w. x kan uitsluitend gebruikt worden vanaf de plaats waar hij is gedefinieerd (lijn 29) tot aan de sluitingsaccolade van het blok waarin de declaratie staat (lijn 40).

71 71 41 // useLocal herinitialiseert de lokale variable x 42 // telkens deze methode wordt opgeroepen 43 public void useLocal() 44 { 45 int x = 25; // initialisatie van de lokale variabele x outputArea.append( "\n\nlocal x in useLocal is " + x + 48 " after entering useLocal" ); 49 ++x; 50 outputArea.append( "\nlocal x in useLocal is " + x + 51 " before exiting useLocal" ); } // einde methode useLocal  Lijn 45 : Lokale variabele x heeft blok scope. Deze variabele heeft een andere scope als de lokale variabele x (lijn 29), dus het zijn twee verschillende variabelen en ze zitten elkaar niet in de weg! 27 public void start() 28 { 29 int x = 5; // lokale variabele x van de methode start … 40 } // einde methode start

72 72 54 // useInstance wijzigt de object-variabele x 55 // telkens deze methode wordt opgeroepen 56 public void useInstance() 57 { 58 outputArea.append( "\n\ninstance variable x is " + x + 59 " on entering useInstance" ); 60 x *= 10; 61 outputArea.append( "\ninstance variable x is " + x + 62 " on exiting useInstance" ); } // einde methode useInstance } // einde klasse Scoping  Lijn 60 Object-variabele x heeft klasse scope, dus kan x gebruikt worden in de methode useInstance. De object- variabele x wordt met 10 vermenigvuldigd.

73 73 Scoping.java

74 Methode Overloading  Methode overloading Meerdere methoden met dezelfde naam in één programma. NOODZAAK : een verschillende argumentenset voor elke methode  Het aantal argumenten moet verschillend zijn EN/OF  De argumenttypen moeten verschillend zijn

75 75 1 // Fig. 6.16: MethodOverload.java 2 // methode overloading 3 4 // Java core packages 5 import java.awt.Container; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class MethodOverload extends JApplet 11 { 12 // roept verschillende versies van methode square op. 13 public void init() 14 { 15 JTextArea outputArea = new JTextArea(); 16 Container container = getContentPane(); 17 container.add( outputArea );  VOORBEELD 7 : MethodOverload.java voorbeeld van methode overloading:  het programma bevat de methode square met argument int en de methode square met argument double.

76 76 19 outputArea.setText( 20 "The square of integer 7 is " + square( 7 ) + 21 "\nThe square of double 7.5 is " + square( 7.5 ) ); 22 } //einde methode init  Lijn 20 de methode square wordt opgeroepen. Als argument geven we het geheel getal 7 door.  Lijn 21 de methode square wordt opgeroepen. Als argument geven we het decimaal getal 7.5 door.

77 77 24 // methode square met argument int 25 public int square( int intValue ) 26 { 27 System.out.println( 28 "Called square with int argument: " + intValue ); return intValue * intValue; } // einde methode square met argument int  Lijn 25 Methode square ontvangt int als argument en geeft dus ook een int terug!

78 78 34 // square methode met argument double 35 public double square( double doubleValue ) 36 { 37 System.out.println( 38 "Called square with double argument: " + doubleValue ); return doubleValue * doubleValue; } // einde methode square met argument double } // einde klasse MethodOverload  Lijn 35 Overloaded methode square ontvangt double als argument en geeft een double terug.

79 79 1 // Fig. 6.17: MethodOverload.java 2 // Twee methodes met dezelfde naam en hetzelfde argument 3 // maar met een andere return type. 4 5 // Java extension packages 6 import javax.swing.JApplet; 7 8 public class MethodOverload extends JApplet { 9 10 // eerste definitie van de methode square met argument double 11 public int square( double x ) 12 { 13 return x * x; 14 } // tweede definitie van de methode square met argument double 17 // veroorzaakt een ‘ syntax error ’ 18 public double square( double y ) 19 { 20 return y * y; 21 } } // einde klasse MethodOverload  VOORBEELD 8 : MethodOverload.java aantonen dat een compiler geen onderscheid kan maken tussen methoden met identieke namen, die dezelfde argumentenset bevatten; nochtans hebben ze een verschillend return type.

80 80 Compiler error messages tengevolge van gelijke argumentenlijst en enkel verschillende return types. 10 // eerste definitie van de methode square met argument double 11 public int square( double x ) 12 { 13 return x * x; 14 } // tweede definitie van de methode square met argument double 17 // veroorzaakt een ‘ syntax error ’ 18 public double square( double y ) 19 { 20 return y * y; 21 } 22 MethodOverload.java:18: square(double) is already defined in MethodOverload public double square( double y ) ^ MethodOverload.java:13: possible loss of precision found : double required: int return x * x; ^ 2 errors

81 Recursie  Recursieve methode Roept zichzelf op (direct of indirect via een andere methode) De methode kan enkel de basis case(s) oplossen, m.a.w. roepen we de methode aan met de basis case(s), dan geeft deze een resultaat terug. Als de methode wordt aangeroepen met een complexer probleem, dan wordt het probleem verdeelt in  Basis case  Eenvoudiger probleem  De methode verdeelt nu dit eenvoudiger probleem, totdat het opgelost is.

82 Recursie (vervolg)  Recursieve methode Bevat een recursieve oproep (call): Het nieuwe, eenvoudiger probleem lijkt op het originele probleem, dus roept de methode zichzelf terug aan om het eenvoudiger probleem op te lossen = recursieve doorloop (step). De recursieve stap bevat normaal ook het keyword return, vermits het resultaat van deze aanroep moet gecombineerd worden met het resultaat van het gedeelte dat de methode wel kan oplossen om uiteindelijk een eindresultaat aan de originele caller te kunnen teruggeven!

83 83  VOORBEELD : De faculteit berekenen van het getal 5 5! = 5 * 4 * 3 * 2 * 1 5! = 5 * (4 * 3 * 2 * 1) 5! = 5 * 4!  De recursieve methode verdeelt het probleem in een eenvoudiger probleem: 5! = 5 * 4!  De recursieve methode verdeelt het probleem in een eenvoudiger probleem: 4! = 4 * 3!  De recursieve methode verdeelt het probleem in een eenvoudiger probleem: 3! = 3 * 2!  De recursieve methode verdeelt het probleem in een eenvoudiger probleem: 2! = 2 * 1!  De recursieve methode verdeelt het probleem in een basis case: 1! = 1

84 84 Fig. 6.11Recursieve evaluatie van 5!. 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 (a) Verwerking van de recursieve calls.(b) Waarde returned bij iedere recursieve call. 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 Finale waarde = 120 4! = 4 * 6 = 24 is returned 5! = 5 * 24 = 120 is returned 3! = 3 * 2 = 6 is returned 2! = 2 * 1 = 2 is returned 1 returned

85 85 1 // Fig. 6.12: FactorialTest.java 2 // Programma bevat de recursieve methode factorial 3 4 // Java core packages 5 import java.awt.*; 6 7 // Java extension packages 8 import javax.swing.*; 9 10 public class FactorialTest extends JApplet 11 { 12 private JTextArea outputArea;  FactorialTest.java De faculteit van de getallen 0 t.e.m. 10 worden berekend. VOORBEELD 9

86 86 13 // initialisatie applet 14 public void init() 15 { 16 outputArea = new JTextArea(); Container container = getContentPane(); 19 container.add( outputArea ); // het faculteit berekenen van 0 tot en met for ( long counter = 0; counter <= 10; counter++ ) 23 outputArea.append( counter + "! = " + 24 factorial( counter ) + "\n" ); } // einde methode init  Lijn 24 De methode factorial wordt 10 keer opgeroepen.

87 87 28 // Recursieve methode factorial 29 public long factorial( long number ) 30 { 31 // basis case 32 if ( number <= 1 ) 33 return 1; // recursive step 36 else 37 return number * factorial( number - 1 ); } // einde methode factorial } // einde klasse FactorialTest  Lijn De recursieve methode verdeelt het probleem in de basis cases: 1! = 1 en 0!= 1 EN  Lijn in een eenvoudiger probleem fac(n) = n * fac(n-1)

88 88

89 Voorbeeld met Recursie: De Fibonacci Reeks  Fibonacci reeks Elk getal in de reeks is de som van de twee voorgaande getallen vb. 0, 1, 1, 2, 3, 5, 8, 13, 21… fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n - 1) + fibonacci( n – 2 ) fibonacci(0) en fibonacci(1) zijn basis cases Gulden snede

90 90 Fig. 6.14Verzameling recursive calls naar methode fibonacci ( f in dit diagram). f( 3 ) return 1 f( 1 )f( 2 ) f( 0 )f( 1 ) return 1return 0 return + +

91 91  FibonacciTest.java de fibonacci-waarde van een ingegeven getal wordt berekend in deze applet VOORBEELD 10

92 92 1 // Fig. 6.13: FibonacciTest.java 2 // Programma bevat de recursieve methode fibonacci 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*; public class FibonacciTest extends JApplet 12 implements ActionListener 13 { 14 private JLabel numberLabel, resultLabel; 15 private JTextField numberField, resultField; // initialiseert de applet: GUI toekennen aan de applet 18 public void init() 19 { 20 // "get content pane" en ken zijn layout toe aan FlowLayout 21 Container container = getContentPane(); 22 container.setLayout( new FlowLayout() ); // cre ë er numberLabel en ken het toe aan “ content pane ” 25 numberLabel = 26 new JLabel( "Enter an integer and press Enter" ); 27 container.add( numberLabel ); // cre ë er numberField en ken het toe aan “ content pane ” 30 numberField = new JTextField( 10 ); 31 container.add( numberField ); // bewaar deze applet als “ numberField ’ s ActionListener ” 34 numberField.addActionListener( this ); 35

93 93 36 // cre ë er resultLabel en ken het toe aan “ content pane ” 37 resultLabel = new JLabel( "Fibonacci value is" ); 38 container.add( resultLabel ); // cre ë er resultField, maak het “ uneditable ” 41 // en ken het toe aan “ content pane ” 42 resultField = new JTextField( 15 ); 43 resultField.setEditable( false ); 44 container.add( resultField ); } // einde methode init // input wordt aan de gebruiker gevraagd en de methode fibonacci wordt opgeroepen 49 public void actionPerformed( ActionEvent e ) 50 { 51 long number, fibonacciValue; // de input van de gebruiker wordt omgezet naar long 54 number = Long.parseLong( numberField.getText() ); showStatus( "Calculating..." ); // bereken de fibonacci van het ingegeven getal 59 fibonacciValue = fibonacci( number ); // het resultaat (fibonacci van het ingegeven getal) weergeven 62 showStatus( "Done." ); 63 resultField.setText( Long.toString( fibonacciValue ) ); } // einde methode actionPerformed 66

94 94 67 // recursieve methode fibonacci 68 public long fibonacci( long n ) 69 { 70 // basis case 71 if ( n == 0 || n == 1 ) 72 return n; // recursieve stap 75 else 76 return fibonacci( n - 1 ) + fibonacci( n - 2 ); } // einde methode fibonacci } // einde klasse FibonacciTest

95 95

96 96

97 97 FibonacciTest.ja va 1 // Fig. 6.13: FibonacciTest.java 2 // Programma bevat de recursieve methode fibonacci 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*; public class FibonacciTest extends JApplet 12 implements ActionListener 13 { 14 private JLabel numberLabel, resultLabel; 15 private JTextField numberField, resultField;  Lijn We maken een klasse FibonacciTest die ActionListener implementeert. Een ActionListener is letterlijk een klasse die ‘luistert’ of er een Actionevent plaatsvindt, bv. de gebruiker drukt op enter.

98 98 FibonacciTest.ja va 17 // initialiseert de applet: GUI toekennen aan de applet 18 public void init() 19 { 20 // "get content pane" en ken zijn layout toe aan FlowLayout 21 Container container = getContentPane(); 22 container.setLayout( new FlowLayout() ); 23  Lijn 22 De eenvoudigste layout-manager is de FlowLayout. De FlowLayout zet de componenten, in de volgorde waarin ze in de container gestopt worden, van links naar rechts gecentreerd op een rij. Als de rij vol is komen de volgende componenten gecentreerd op de rij eronder. methode setLayout stelt de layout, voor de container, in op de eenvoudige FlowLayout, VOOR de componenten toegevoegd worden aan de container.

99 99 FibonacciTest.ja va 24 // cre ë er numberLabel en ken het toe aan “ content pane ” 25 numberLabel = 26 new JLabel( "Enter an integer and press Enter" ); 27 container.add( numberLabel ); // cre ë er numberField en ken het toe aan “ content pane ” 30 numberField = new JTextField( 10 ); 31 container.add( numberField ); numberLabelnumberField  Lijn 27, 31 In de volgorde waarin je de componenten met de methode add aan de applet toevoegt, komen ze ook op het scherm.

100 //registreer numberField als component waarop de event zal //plaatsgrijpen 34 numberField.addActionListener( this ); // cre ë er resultLabel en ken het toe aan “ content pane ” 37 resultLabel = new JLabel( "Fibonacci value is" ); 38 container.add( resultLabel ); // cre ë er resultField, maak het “ uneditable ” 41 // en ken het toe aan “ content pane ” 42 resultField = new JTextField( 15 ); 43 resultField.setEditable( false ); 44 container.add( resultField ); } // einde methode init resultLabelresultField  Lijn 34 : We vertellen aan numberfield dat “this applet” de event zal afhandelen.  Lijn 43 : De component resultField dient enkel als output.

101 // input wordt aan de gebruiker gevraagd en de methode fibonacci wordt opgeroepen 49 public void actionPerformed( ActionEvent e ) 50 { 51 long number, fibonacciValue; // de input van de gebruiker wordt omgezet naar long 54 number = Long.parseLong( numberField.getText() ); showStatus( "Calculating..." ); // bereken de fibonacci van het ingegeven getal 59 fibonacciValue = fibonacci( number ); // het resultaat (fibonacci van het ingegeven getal) weergeven 62 showStatus( "Done." ); 63 resultField.setText( Long.toString( fibonacciValue ) ); } // einde methode actionPerformed  Lijn 49: methode actionPerformed wordt AUTOMATISCH geactiveerd als de gebruiker op Enter drukt.  Lijn 51: we gebruiken long, omdat Fibonacci getallen snel groot worden.  Lijn 59: De input van de gebruiker wordt doorgegeven aan de methode fibonacci

102 // recursieve methode fibonacci 68 public long fibonacci( long n ) 69 { 70 // basis case 71 if ( n == 0 || n == 1 ) 72 return n; // recursieve stap 75 else 76 return fibonacci( n - 1 ) + fibonacci( n - 2 ); } // einde methode fibonacci } // einde klasse FibonacciTest  Lijn De recursieve methode verdeelt het probleem in een basis case: fibonacci(0) = 0 en fibonacci(1) = 1  Lijn 76 De recursieve methode verdeelt het probleem in een eenvoudiger probleem: fibonacci(n) = fibonacci(n - 1) + fibonacci( n – 2 )

103 103 Oef 4. Wat doet de volgende methode? // parameter b moet een positief integer zijn // om oneindige recursie te vermijden public int mysterie (int a, int b) { if (b == 1) return a; else return a + mysterie ( a, b – 1); }

104 Recursie vs. Iteratie  Iteratie Gebruikt herhalingstructuur (for, while of do- while) Herhaling door expliciet gebruik van een herhalingsstructuur Eindigt als lusvoorwaarde false evalueert  Recursie Gebruikt selectiestructuur (if, if-else of switch) Herhaling door herhaalde methode calls Eindigt als de basis case voldaan is Controleert herhaling door het probleem in eenvoudigere te delen

105 Recursie vs. Iteratie (verv.)  Recursie Meer overhead dan bij iteratie. M.a.w. elke recursieve call maakt een kopie van de argumenten van de methode. Geheugenintensiever dan bij een iteratie. Kan ook iteratief opgelost worden (maar soms met vele lijnen code). Kan dikwijls geïmplementeerd worden met slechts enkele lijnen code.

106 106

107 Methoden van Klasse JApplet  Java API definieert meerdere JApplet methoden De applet container (= viewer of browser) roept de methoden init, start, paint, stop en destroy, gedurende de uitvoering van de applet, op. We overschrijven enkel de methode(s) die we nodig hebben. M.a.w. we “overriden” de methode(s) die we nodig hebben.

108 108

109 109 JApplet methode die de appletcontainer oproept gedurende de applet’s executie  public void init() Deze methode wordt slechts eenmaal geactiveerd door de appletviewer of browser wanneer de applet wordt geladen voor executie. Ze verzorgt de initialisatie van de applet. Typische acties zijn initialisatie van object-variabelen en GUI-componenten van de applet, het laden van geluiden om af te spelen of beelden om te tonen (zie hfdst. 19, Multimedia) en de creatie van threads (zie hfdst. 16, Multithreading).

110 110 JApplet methode die de applet container oproept gedurende de applet’s executie  public void start() Wordt geactiveerd nadat de init methode is uitgevoerd en telkens als de gebruiker van de browser terugkeert naar de HTML pagina waarin de applet huist (na het bekijken van een andere HTML pagina). Deze methode voert taken uit die moeten volbracht worden als de applet voor de eerste keer wordt geladen in de browser en telkens opnieuw als de pagina wordt herbezocht. Typische acties zijn het starten van een animatie (zie hfdst. 19, Multimedia) en het starten van andere threads (zie hfdst. 16, Multithreading).

111 111 JApplet methode die de applet container oproept gedurende de applet’s executie  public void paint( Graphics g ) Deze methode wordt voor het eerst opgeroepen na de start methode en telkens weer opnieuw als het nodig is om de applet output te hertekenen (expliciet via de methode repaint()). Bv. de paint methode wordt opgeroepen als de gebruiker de applet overdekt met een ander venster en dan het venster weer weg doet. Typische acties zijn het tekenen met het Graphics object g, dat automatisch als argument met paint wordt meegegeven.

112 112 JApplet methode die de applet container oproept gedurende de applet’s executie  public void stop() Deze methode wordt geactiveerd als de applet moet eindigen—normaal wanneer de gebruiker van de browser de HTML pagina verlaat. Deze methode voert de vereiste taken uit om de applet’s executie te schorsen. Typische acties zijn het stoppen van de uitvoering van een animatie en threads.

113 113 JApplet methode die de applet container oproept gedurende de applet’s executie  public void destroy() Deze methode wordt geactiveerd als de applet uit het geheugen wordt verwijderd —normaal als de gebruiker van de browser de sessie beëindigt. Deze methode voert taken uit die vereist zijn om resources vrij te geven die door de applet werden gereserveerd.

114 114 Oef 5. Schrijf een applet die … Vraag de zijde voor een ‘vierkant’ en karakter om dat vierkant af te drukken. Druk het vierkant af met dat vulteken. **** Gebruik hiervoor een methode maakvierkant die het volledige vierkant afdrukt.

115 115 Oef 6. Schrijf een applicatie die … Nagaat welke gehele getallen perfect zijn uit de reeks natuurlijke getallen waarvan de kleinste en grootste waarde door de gebruiker worden ingevoerd. Een getal is perfect als het gelijk is aan de som van zijn delers, bv: 6 = Schrijf hiervoor een methode perfect die nagaat of zijn argument een perfect getal is. De methode perfect zelf gebruikt de methode somvandelers die je ook uitwerkt en die de som van de delers van zijn argument aflevert.


Download ppt "1 HOOFDSTUK 6 METHODEN 6.1 Inleiding  Tot nu toe: kleine, eenvoudige programma’s applicatie: methode main() applet: methode paint() en eventueel init()"

Verwante presentaties


Ads door Google