JAVA een platformonafhankelijke taal Voordelen n En keer

  • Slides: 129
Download presentation
JAVA: een platformonafhankelijke taal Voordelen: n Eén keer het programma schrijven n Eén keer

JAVA: een platformonafhankelijke taal Voordelen: n Eén keer het programma schrijven n Eén keer het programma compileren n Het programma op om het even welke computer uitvoeren

Hoe ? Hello. java Compiler Hello. class (byte code) Interpreter Windows Linux Mac. Os

Hoe ? Hello. java Compiler Hello. class (byte code) Interpreter Windows Linux Mac. Os

Het Java platform Hello. class Java Platform= Java API + Java Virtual Machine Operating

Het Java platform Hello. class Java Platform= Java API + Java Virtual Machine Operating System + Hardware

De Java API n n n n Basiscomponenten: numbers, strings, dates, files, threads, …

De Java API n n n n Basiscomponenten: numbers, strings, dates, files, threads, … AWT-Swing JDBC Networking RMI Servlets – JSP XML …

De java software (1. 4. 0) Ontwikkelaar Java 2 Standaard Edition SDK n Compiler

De java software (1. 4. 0) Ontwikkelaar Java 2 Standaard Edition SDK n Compiler n API n JVM Gebruiker Java 2 Standaard Edition JRE n n API JVM Java 2 Standaard Edition Docs (apart downloaden) www. java. sun. com

Een programma schrijven Teksteditor n n n Note. Pad Text. Pad … www. textpad.

Een programma schrijven Teksteditor n n n Note. Pad Text. Pad … www. textpad. com Ontwikkelomgeving n n n Forte (www. java. sun. com) Jbuilder (www. borland. com) Visual. Age for Age (www. ibm. com)

Eerste programma public class Hello { public static void main(String[] args) { /* dit

Eerste programma public class Hello { public static void main(String[] args) { /* dit is mijn eerste programma */ System. out. println("Goeiemorgen, "); // tekst tonen System. out. println("Goeiemorgen"); } }

Primitieve datatypes n Gehele getallen n n Getallen met decimalen n byte: -128 …

Primitieve datatypes n Gehele getallen n n Getallen met decimalen n byte: -128 … 127 short: -32. 768 … 32. 767 int: – 2. 147. 483. 648 … 2. 147. 483. 647 long: -9. 223. 372. 036. 854. 775. 808 … 9. 223. 372. 036. 854. 775. 807 float: 2 -128 … 2127 precies tot 6 à 7 decimalen double: 2 -1024 … 21023 precies tot 15 à 16 decimalen Andere types n n char: één teken in Unicode standaard (2 bytes) boolean: true of false

De naam van een variabele n n moet met een letter beginnen mag geen

De naam van een variabele n n moet met een letter beginnen mag geen gereserveerd woord uit Java zijn iedere variabele binnen een bepaald bereik moet een unieke naam hebben afspraak in de java wereld: n n naam van een variabele begint met een kleine letter ieder woord na het eerste woord begint met een hoofdletter (bv. aantal. Suks. Per. Doos)

Lokale variabelen public class Hello { public static void main(String[] args) { int aantal.

Lokale variabelen public class Hello { public static void main(String[] args) { int aantal. Kinderen; char geslacht; double wedde, wedde. Van. Mijn. Vrouw; boolean auto. Verzekering. Betaald; } } // merk op: lokale variabelen hebben geen beginwaarde // de initialisatie kan echter bij de declaratie gebeuren

Constante waarden 'M' "Hallo" 1 1 L 2478. 79 F het karakter M de

Constante waarden 'M' "Hallo" 1 1 L 2478. 79 F het karakter M de string Hallo de integer waarde 1 de long waarde 1 de double waarde 2478. 79 de float waarde 2478. 79

Constanten in een programma public class Hello { public static void main(String[] args) {

Constanten in een programma public class Hello { public static void main(String[] args) { final double EUROKOERS=40. 3399; //zie const in C++ final double CMINCH; double aantal=10. 0; CMINCH=2. 54; aantalcm=aantal; double aantalinch=aantalcm/CMINCH; System. out. println(aantalinch); } }

Typeconversie: van klein naar groot public class Hello { public static void main(String[] args)

Typeconversie: van klein naar groot public class Hello { public static void main(String[] args) { long groot. Getal, grootst. Getal; int klein. Getal, kleinstgetal; klein. Getal=5; groot. Getal=klein. Getal; grootst. Getal=10 L; kleinst. Getal=(int)grootst. Getal; } }

Rekenkundige bewerkingen Bewerking + * / % Betekenis optellen aftrekken vermenigvuldigen delen restbepaling (kan

Rekenkundige bewerkingen Bewerking + * / % Betekenis optellen aftrekken vermenigvuldigen delen restbepaling (kan ook op double)

Rekenkundige bewerkingen public class Hello { public static void main(String[] args) { final double

Rekenkundige bewerkingen public class Hello { public static void main(String[] args) { final double CMINCH; int aantal. Inch=10; double aantal. Cm; CMINCH=2. 54; aantal. Cm=CMINCH*aantal. Inch; /* automatische typeconversie */ System. out. println(aantal. Cm); } }

Verkorte bewerkingen Bewerking var+=waarde var-=waarde var*=waarde var/=waarde var%=waarde Betekenis var=var+waarde var=var-waarde var=var*waarde var=var/waarde var=var%waarde

Verkorte bewerkingen Bewerking var+=waarde var-=waarde var*=waarde var/=waarde var%=waarde Betekenis var=var+waarde var=var-waarde var=var*waarde var=var/waarde var=var%waarde

Voorbeeld: ++ public class Hello { public static void main(String[] args) { int kinderen=0;

Voorbeeld: ++ public class Hello { public static void main(String[] args) { int kinderen=0; System. out. println(kinderen++); System. out. println(kinderen); System. out. println(++kinderen); } } Resultaat: 0 1 2

Vergelijkingsbewerkingen Bewerking Betekenis == != > < >= Gelijk aan Verschillend van Groter dan

Vergelijkingsbewerkingen Bewerking Betekenis == != > < >= Gelijk aan Verschillend van Groter dan Kleiner dan Groter dan of gelijk aan Kleiner dan of gelijk aan <=

Logische bewerkingen Bewerking && || ! Betekenis en (and) of (or) niet (not)

Logische bewerkingen Bewerking && || ! Betekenis en (and) of (or) niet (not)

if(1) if (voorwaarde) { … // opdrachten die worden uitgevoerd als // voorwaarde==true }

if(1) if (voorwaarde) { … // opdrachten die worden uitgevoerd als // voorwaarde==true } if (voorwaarde) { … } else { … // opdrachten die worden uitgevoerd als // voorwaarde==false }

if(2) public class Hello { public static void main(String[] args) { double temperatuur=5. 0;

if(2) public class Hello { public static void main(String[] args) { double temperatuur=5. 0; if (temperatuur<=0. 0) { System. out. println("Het vriest"); } else { System. out. println("Het vriest niet"); } } }

De ? operator voorwaarde ? resultaat. Als. True: resultaat. Als. False public class Hello

De ? operator voorwaarde ? resultaat. Als. True: resultaat. Als. False public class Hello { public static void main(String[] args) { double temperatuur=5. 0; System. out. println(temperatuur <=0. 0? "Het vriest": "Het vriest niet"); } }

switch(1) switch (integerwaarde) { … case mogelijkheid n: … break; … default: … }

switch(1) switch (integerwaarde) { … case mogelijkheid n: … break; … default: … }

switch(2) Oefening Schrijf een programma dat gebruik maakt van switch en aan de hand

switch(2) Oefening Schrijf een programma dat gebruik maakt van switch en aan de hand van een integer de naam van een dag in de week (maandag, dinsdag of woensdag) toont, of de tekst weekend voor een zaterdag of zondag. In andere gevallen moet de tekst andere dag worden getoond. Test uw programma

while public class Hello { public static void main(String[] args) { int teller=1; while

while public class Hello { public static void main(String[] args) { int teller=1; while (teller<=5) System. out. println(teller++); } }

do … while public class Hello { public static void main(String[] args) { int

do … while public class Hello { public static void main(String[] args) { int teller=1; do System. out. println(teller++); while (teller<=5); } }

for public class Hello { public static void main(String[] args) { for(int teller=1; teller<=5;

for public class Hello { public static void main(String[] args) { for(int teller=1; teller<=5; teller++) System. out. println(teller); } }

Referentie variabelen n n n Het type String Is een class, geen primitief type

Referentie variabelen n n n Het type String Is een class, geen primitief type !!! Een String variabele is een reference naar een String object Voorbeeld The. Voice : merk op dat de String zanger immutable is Met String. Buffer kan je het object wel wijzigen Merk tevens de + operatie op

Een programma met String en+ public class The. Voice { public static void main(String[]

Een programma met String en+ public class The. Voice { public static void main(String[] args) { String voornaam="Eddy"; String familienaam="Wallyvis"; String zanger=voornaam+' '+familienaam; int rangnr=1; zanger=zanger+' '+rangnr; System. out. println(zanger); } }

De Tekens in een String public class The. Voice 2 { public static void

De Tekens in een String public class The. Voice 2 { public static void main(String[] args) { String zanger="Eddy Wallyvis"; for (int teller=0; teller<zanger. length(); teller++) System. out. println(zanger. char. At(teller)); } }

String variabelen en == public class Horses { public static void main(String[] args) {

String variabelen en == public class Horses { public static void main(String[] args) { String horse="Wilkena Z"; String zh="Wilkena"; zh+=" Z"; String mama. Cesar=horse; System. out. println(horse==zh); System. out. println(horse==mama. Cesar); } }

String objecten zijn immutable public class The. Voice 3 { public static void main(String[]

String objecten zijn immutable public class The. Voice 3 { public static void main(String[] args) { String bv="Eddy Wallyvis"; bv="Wendy weet van Wanten"; bv=bv. to. Upper. Case(); System. out. println(bv. to. Lower. Case()); } }

Methodes van String public class Horses 2 { public static void main(String[] args) {

Methodes van String public class Horses 2 { public static void main(String[] args) { String horse="Karim des Charpres"; System. out. println(horse. substring(6)); System. out. println(horse. substring(6, 8)); System. out. println(horse. last. Index. Of(‘r’)); System. out. println(horse. index. Of("r")); System. out. println(horse. starts. With("Ka")); System. out. println(horse. index. Of(‘C’)); System. out. println(horse. ends. With("res")); System. out. println(horse. to. Upper. Case()); System. out. println(horse. to. Lower. Case()); System. out. println(horse. replace(‘ ‘, ’_’)); } }

Conversie tussen Strings en primitieve varaiabelen n Van primitieve variabelen naar Strings: double temperatuur=5.

Conversie tussen Strings en primitieve varaiabelen n Van primitieve variabelen naar Strings: double temperatuur=5. 0; String tekst=String. value. Of(getal); n Van Strings naar primitieve variabelen String tekst="5. 0"; double temperatatuur=Double. parse. Double(tekst); String tekst="7"; int getal=Integer. parse. Int(tekst);

Lezen van toetsenbord import java. io. *; public class Lees. Toetsenbord { public static

Lezen van toetsenbord import java. io. *; public class Lees. Toetsenbord { public static void main(String[] args) throws IOException { Buffered. Reader toetsenbord = new Buffered. Reader( new Input. Stream. Reader(System. in)); System. out. println("Geef uw naam"); String naam; naam = toetsenbord. read. Line(); System. out. println("U bent "+naam); System. out. println("Aantal kinderen: "); String skinderen; skinderen=toetsenbord. read. Line(); int kinderen=Integer. parse. Int(skinderen); System. out. println("kindergeld : "+kinderen*4000); } }

String. Buffer objecten zijn mutable public class Str. Br { public static void main(String[]

String. Buffer objecten zijn mutable public class Str. Br { public static void main(String[] args) { String. Buffer leeg=new String. Buffer(); System. out. println(leeg. length()+": "+leeg. capacity()); // default=16 String. Buffer horse=new String. Buffer("Karim"); System. out. println(horse. length()+": "+horse. capacity()); naam. insert(6, " des Charpres"); naam. append(", klasse Midden"); naan. delete(6, 19); //van 6 tot 18 System. out. println(naam); } } n

String. Buffer Tekens kunnen gelezen en gewijzigd worden: n Lezen: char. At(positie); Schrijven: set.

String. Buffer Tekens kunnen gelezen en gewijzigd worden: n Lezen: char. At(positie); Schrijven: set. Char. At(positie, teken) public class Strb. Tekens { public static void main(String[] args) { String. Buffer naam=new String. Buffer("germaine_de_coeur_brisee"); for(int teller=0; teller<naam. length(); teller++) if (naam. char. At(teller)==‘_’) naam. set. Char. At(teller, ’ ‘); System. out. println(naam); } } n

Arrays n n Een variabele declareren die naar een array kan verwijzen: double kwartaal.

Arrays n n Een variabele declareren die naar een array kan verwijzen: double kwartaal. Verkoop[]; //leeg Een array maken en er met een variabele naar verwijzen: kwartaal. Verkoop=new double[4]; 4 mag ook een var. zijn Kombinatie van de twee acties: double kwartaal. Verkoop=new double[4]; Twee vormen van declaraties: n n double kwartaal. Verkoop[], totale. Verkoop; //1 array double[] kwartaal. Verkoop, totale. Verkoop; //2 array’s

Aantal elementen van een array public class Aantal. El { public static void main(String[]

Aantal elementen van een array public class Aantal. El { public static void main(String[] args) { double kwartaal. Verkoop[]=new double[4]; System. out. println(kwartaal. Verkoop. length); } }// length is hier per uitz. geen method, maar een property

Array initializer public class Arr. Init { public static void main(String[] args) {int dagen.

Array initializer public class Arr. Init { public static void main(String[] args) {int dagen. Per. Maand[]={31, 28, 31, 30, 31}; } } 31 28 31 30 31 0 1 2 3 4 5 6 7 8 9 10 11

Array elementen Wat is het resultaat van volgend programma? public class Arr. El {

Array elementen Wat is het resultaat van volgend programma? public class Arr. El { public static void main(String[] args) { double kwartaal. Verkoop[]=new double[4]; for (int tel=0; tel<kwartaal. Verkoop. length; tel++) System. out. println(kwartaal. Verkoop[tel]); } }

2 D-arrays Wat is het resultaat van volgend programma? public class Tweed. Arr {

2 D-arrays Wat is het resultaat van volgend programma? public class Tweed. Arr { public static void main(String[] args) { char vier. Op 1 Rij[][]=new char[6][7]; for (int rij=0; rij<vier. OP 1 Rij. length; rij++) for(int kolom=0; kolom<vier. Op 1 Rij[0]. length; kolom++) vier. Op 1 Rij[rij][kolom]=‘ ‘; } }

Objecten, classes n n n n Een object stelt een echt-wereld object voor (bankrekening,

Objecten, classes n n n n Een object stelt een echt-wereld object voor (bankrekening, televisie, klant) Object heeft eigenschappen (properties) en handelingen (methods) Class is prototype van soortgelijke objecten Class beschrijft properties en methods van soortgelijke objecten De naam van een class moet met een letter beginnen Mag geen gereserveerd woord uit Java zijn Iedere class binnen een bepaald bereik moet een unieke naam hebben Afspraak: n n Naam van een class begint met een hoofdletter Ieder woord na het eerste woord begint met een hoofdletter

Voorbeeldklasse n Class Rekening: n n n Properties: rekening. NR, saldo, houder Methods: storten,

Voorbeeldklasse n Class Rekening: n n n Properties: rekening. NR, saldo, houder Methods: storten, afhalen Subclasses n Zicht. Rekening • Properties: max. Krediet • Methods: afhalen, overschrijven n Spaar. Rekening • Properties: aangroei. Intrest • Methods: afhalen, overschrijven n Huwelijks. Rekening • Methods: storten (met maximum) (overriding) n Java kent alleen single inheritance(= een klasse kan maar een base klasse hebben, geen multiple inheritance zoals C++, alhoewel …

Een base en afgeleide klassen Eén publieke class per source file n public class

Een base en afgeleide klassen Eén publieke class per source file n public class Rekening {…} n public class Zicht. Rekening extends Rekening {…} n public class Spaar. Rekening extends Rekening {…} n public class Huwelijks. Rekening extends Rekening {…} n

Objecten en object variabelen Voorbeeld public class Bankprog { public static void main(String[] args)

Objecten en object variabelen Voorbeeld public class Bankprog { public static void main(String[] args) { Rekening mijn. Rekening=new Rekening(); Rekening onze. Rekeningen[]=new Rekening[10]; for(int tel=0; tel<onze. Rekeningen. length, tel++) onze. Rekeningen[tel]=new Rekening(); } }

Object variabelen en null public class Bank. Prog { public static void main(String[] args)

Object variabelen en null public class Bank. Prog { public static void main(String[] args) { Rekening mijn. Rekening=null; if (mijn. Rekening==null) System. out. println("niet verbonden"); else System. out. println("verbonden"); mijn. Rekening=new Rekening(); if (mijn. Rekening==null) //starten garbage collection System. out. println("niet verbonden"); else System. out. println("verbonden"); } }

Property-waarden bijhouden n Per property een variabele in de class declareren Ieder object van

Property-waarden bijhouden n Per property een variabele in de class declareren Ieder object van de class krijgt zijn eigen variabelen De variabelen private declareren (encapsulation) n n n Class code kan ze wijzigen Buitenwereld kan ze niet wijzigen Variabelen van een class krijgen een beginwaarde Type variabele Beginwaarde Byte, short, int, long 0 Float, double 0. 0 Char Teken met unicode 0 Boolean False Reference Null

Property-waarden invullen en ophalen n set. Xxx() routine in de class n n n

Property-waarden invullen en ophalen n set. Xxx() routine in de class n n n Om de private variabele in te vullen door de buitenwereld De routine public declareren zodat de buitenwereld de routine kan aanspreken Parameter van set. Xxx() routine is invulwaarde property Routine kontroleert parameter op geldige waarde get. Xxx() routine in de class n n n Zodat de buitenwereld de routine kan aanspreken De routine public declareren zodat de buitenwereld de routine kan aanspreken Resultaat van get. Xxx() routine is de waarde property

Property-waarden invullen en ophalen Public class Bank. Prog { public static void main(String[] args)

Property-waarden invullen en ophalen Public class Bank. Prog { public static void main(String[] args) { Rekening grote. Rekening=new Rekening(); Rekening kleine. Rekening=new Rekening(); grote. Rekening. set. Saldo(100000. 0); kleine. Rekening. set. Saldo(500. 0); System. out. println(grote. Rekening. get. Saldo()); System. out. println(kleine. Rekening. get. Saldo()); } }

De property saldo public class Rekening { private double saldo; … public void set.

De property saldo public class Rekening { private double saldo; … public void set. Saldo(double saldo) { this. saldo=saldo; } public double get. Saldo() { return saldo; } }

Property-waarde invullen en ophalen n Oefeningen

Property-waarde invullen en ophalen n Oefeningen

Methods in een class public class Rekening { public void storten(double bedrag) { if

Methods in een class public class Rekening { public void storten(double bedrag) { if (bedrag<0. 0) throw new Illegal. Argument. Exception("Bedrag negatief") saldo+=bedrag; } } public class Bank. Prog { public static void main(String[] args) { Rekening kleine. Rekening=new Rekening(); kleine. Rekening. set. Saldo(500. 0); kleine. Rekening. storten(20. 0); }

Overloaded methods n Een method mag meerdere keren in een class voorkomen als n

Overloaded methods n Een method mag meerdere keren in een class voorkomen als n n Het aantal parameters verschillend is Het type van de parameters verschillend is public class Rekening { public void storten(final double bedrag) { saldo+=bedrag; } public void storten(final double bedrag. Niet. Euro, final double koers) { storten(bedrag. Niet. Euro * koers); } }

Overloaded methods gebruiken public class Bank. Prog { public static void main(String[] args) {

Overloaded methods gebruiken public class Bank. Prog { public static void main(String[] args) { Rekening grote. Rekening=new Rekening(); grote. Rekening. set. Saldo(500. 0); grote. Rekening. storten(20. 0); System. out. println(grote. Rekening. get. Saldo()); grote. Rekening. storten(10. 0, 2. 0); System. out. println(grote. Rekening. get. Saldo()); } } Resultaat: 520. 0 540. 0

Constructor n n n Doel: object initialitiseren (In VB: Initialize) Method met zelfde naam

Constructor n n n Doel: object initialitiseren (In VB: Initialize) Method met zelfde naam als class public Rekening(…) {…} in class Rekening Mag geen returnwaarde hebben (zelfs geen void) Wordt automatisch opgeroepen bij aanmaak nieuw object (new) Rekening grote. Rekening; grote. Rekening=new Rekening(…) Mag overloaded worden

Constructor-voorbeeld public class Rekening { … public Rekening(final long rekening. Nr, String houder, final

Constructor-voorbeeld public class Rekening { … public Rekening(final long rekening. Nr, String houder, final double saldo) { set. Rekening. Nr(rekening. Nr); set. Houder(houder); set. Saldo(saldo); } … }

Constructor-gebruik public class Bankprog { public static void main(String[] args) { Rekening grote. Rekening=new

Constructor-gebruik public class Bankprog { public static void main(String[] args) { Rekening grote. Rekening=new Rekening(11223344556 L, "PDM", 500. 0); // Resultaat ophalen via get. Rekening. Nr() enz… } }

Overloaded constructor public class Rekening { … public Rekening(final long rekening. Nr, String houder,

Overloaded constructor public class Rekening { … public Rekening(final long rekening. Nr, String houder, final double saldo) { set. Rekening. Nr(rekening. Nr); set. Houder(houder); set. Saldo(saldo); } public Rekening(final long rekening. Nr, final String houder) { this(rekening. Nr, houder, 0. 0); // constructor chaining via this // this moet de eerste opdracht van een method zijn } }

Overloaded constructor-gebruik public class Bankprog { public static void main(String args[]) { Rekening grote.

Overloaded constructor-gebruik public class Bankprog { public static void main(String args[]) { Rekening grote. Rekening= new Rekening(11223344556 L, "Eddy Walvis", 500. 0); Rekening kleine. Rekening= new Rekening(11223344556 L, "La Eksterellala"); System. out. println(kleine. Rekening. get. Rekening. Nr()); System. out. println(kleine. Rekening. get. Houder()); System. out. println(kleine. Rekening. get. Saldo()); } } Resultaat: 11223344556 La Eksterellala 0. 0

Default constructor n n n Constructor zonder parameters Gemaakt door de compiler als U

Default constructor n n n Constructor zonder parameters Gemaakt door de compiler als U geen andere constructors maakt Niet gemaakt door de compiler als u wel andere constructors maakt public class Bankprog { public static void main(String args[]) { Rekening grote. Rekening= new Rekening(); } } //let op dit geeft een foutmelding !!!Daarom …

Eigen default constructor public class Rekening { … public Rekening(); { set. Houder("Onbekend"); }

Eigen default constructor public class Rekening { … public Rekening(); { set. Houder("Onbekend"); } … }

Class Zicht. Rekening Erft van Rekening n Extra properties: maxkrediet n Gewijzigde method: set.

Class Zicht. Rekening Erft van Rekening n Extra properties: maxkrediet n Gewijzigde method: set. Saldo n Extra methods: afhalen, overschrijven n public class Zicht. Rekening extends Rekening { } n

Constructors en inheritance De class Zicht. Rekening heeft geen constructor dus Java maakt een

Constructors en inheritance De class Zicht. Rekening heeft geen constructor dus Java maakt een default constructor n Deze default constructor roept automatisch de constructor van de base class op n Als de base class geen default constructor heeft, krijgt U een compiler fout: cannot resolve symbol: constructor Rekening() n De constructors worden geerfd Zicht. Rekening grote. Rekening= new Zicht. Rekening(11223344556 L, "Wallyvis", 500. 0); cannot resolve symbol: constructor Zicht. Rekening (int, java. lang. String, double) n

De property max. Krediet public class Zicht. Rekening extends Rekening { private double max.

De property max. Krediet public class Zicht. Rekening extends Rekening { private double max. Krediet; public void set. Max. Krediet(double max. Krediet) { if (max. Krediet>0. 0) throw new Illegal. Argument. Exception("max. Krediet positief"); this. max. Krediet=max. Krediet; } public double get. Max. Krediet() { return max. Krediet; } }

Constructors in de derived class public class Zicht. Rekening extends Rekening { … public

Constructors in de derived class public class Zicht. Rekening extends Rekening { … public Zicht. Rekening(long rekening. Nr, String houder, double saldo, double max. Krediet) { super(rekening. Nr, houder, saldo); // constructor base class oproepen set. Max. Krediet(max. Krediet); } public Zicht. Rekening(long rekening. Nr, String houder, double saldo) { this(rekening. Nr, houder, saldo, 0. 0); // constructor eigen class oproepen } public Zicht. Rekening(long rekening. Nr, String houder) { this(rekening. Nr, houder, 0. 0); // constructor eigen class oproepen } }

Gebruik van deze constructors public class Bank. Prog { public static void main(String[] args)

Gebruik van deze constructors public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 500. 0, 100. 0); Zicht. Rekening rekening 2=new Zicht. Rekening(11223344556 L, "La Eksterellala", 500. 0); Zicht. Rekening rekening 3=new Zicht. Rekening(11223344556 L, "M. de C. Brisée"); } }

Method overriding Een method uit de base class die U ook in de derived

Method overriding Een method uit de base class die U ook in de derived class uitwerkt n Als U de method uitvoert op een object van de derived class, voert java de versie van de derived class uit: "eigen methode eerst" n

Method overriding-voorbeeld public class Zicht. Rekening extends Rekening { … public void set. Saldo(double

Method overriding-voorbeeld public class Zicht. Rekening extends Rekening { … public void set. Saldo(double saldo) { if (saldo < max. Krediet) throw new Illegal. Argument. Exception("saldo < maxkrediet"); super. set. Saldo(saldo); //method uitvoeren van Rekening } }

Method overriding- toepassing public class Bank. Prog { public static void main(String[] args) {

Method overriding- toepassing public class Bank. Prog { public static void main(String[] args) { Rekening grote. Rekening=new Rekening(11223344556 L, "Eddy Wallyvis"); Zicht. Rekening kleine. Rekening=new Zicht. Rekening(11223344556 L, "La Eksterellala"); grote. Rekening. set. Saldo(-500. 0); kleine. Rekening. set. Saldo(-500. 0); } } Exception in thread "main" Java. lang. Illegal. Argument. Exception: saldo < max. Krediet at Zicht. Rekening. set. Saldo(Zicht. Rekening. java: 31) at Bank. Prog. main(Bank. Prog. java: 10)

Base class reference variabele verbinden met derived object public class Bank. Prog { public

Base class reference variabele verbinden met derived object public class Bank. Prog { public static void main(String[] args) { Rekening een. Rekening=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis"); een. Rekening. set. Max. Krediet(-100. 0); //is geen method van class // Rekening (class van de reference variabele!!! } } cannot resolve symbol: method set. Max. Krediet (double) location: class Rekening een. Rekening. set. Max. Krediet(-100. 0);

Base class reference variabele verbinden met derived object n Tweede poging public class Bank.

Base class reference variabele verbinden met derived object n Tweede poging public class Bank. Prog { public static void main(String[] args) { Rekening een. Rekening=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis"); een. Rekening. set. Saldo(100. 0); } }

Derived class reference variabele verbinden met base class object public class Bank. Prog {

Derived class reference variabele verbinden met base class object public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening een. Rekening=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 0. 0, -5. 0); Rekening tussen. Rekening=een. Rekening; een. Rekening=(Zicht. Rekening) tussen. Rekening; System. out. println(een. Rekening. get. Max. Krediet()); } } Resultaat: -5. 0

Method afhalen public class Zicht. Rekening extends Rekening { … public void afhalen(final double

Method afhalen public class Zicht. Rekening extends Rekening { … public void afhalen(final double bedrag) { if (bedrag < 0. 0) throw new Illegal. Argument. Exception("bedrag negatief"); set. Saldo(get. Saldo() – bedrag); } } Opmerking: saldo is private in base class, ook niet bereikbaar in derived class, maar get. Saldo() is public

Method afhalen-toepassing public class Bankprog { public static void main(String[] args) { Zichtrekening een.

Method afhalen-toepassing public class Bankprog { public static void main(String[] args) { Zichtrekening een. Rekening=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0, -5. 0); een. Rekening. afhalen(1. 0); System. out. println(een. Rekening. get. Saldo()); } } Resultaat: 9. 0

Instanceof public class Zicht. Rekening extends Rekening { … public void overschrijven(final Rekening naar.

Instanceof public class Zicht. Rekening extends Rekening { … public void overschrijven(final Rekening naar. Rekening, final double bedrag) { if (! (naar. Rekening instanceof Rekening)) throw new Illegal. Argument. Exception(" naar. Rekening geen Rekening"); set. Saldo(get. Saldo() – bedrag); naar. Rekening. storten(bedrag); } }

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0); Zicht. Rekening rekening 2=new Zicht. Rekening(65544332211 L, "Aspergio", 20. 0); rekening 1. overschrijven(rekening 2, 1. 0); System. out. println(rekening 1. get. Saldo()); System. out. println(rekening 2. get. Saldo()); } } Resultaat: 9. 0 21. 0

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0); Rekening rekening 2=new Rekening(65544332211 L, "Aspergio", 20. 0); rekening 1. overschrijven(rekening 2, 1. 0); System. out. println(rekening 1. get. Saldo()); System. out. println(rekening 2. get. Saldo()); } } Resultaat: 9. 0 21. 0

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening

Instanceof-gebruik public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0); rekening 1. overschrijven(null, 1. 0); System. out. println(rekening 1. get. Saldo()); System. out. println(rekening 2. get. Saldo()); } } Exception in thread "main" java. lang. Illegal. Argument. Exception: naar. Rekening geen Rekening at Zicht. Rekening. overschrijven(Zicht. Rekening. java: 43) at Bank. Prog. main(Bank. Prog. java: 9)

Class Spaar. Rekening n n n Extra properties: aangroei. Intrest Gewijzigde method: set. Saldo

Class Spaar. Rekening n n n Extra properties: aangroei. Intrest Gewijzigde method: set. Saldo Static variabelen van een class bestaan maar één keer voor alle objecten van die class (de objecten delen de static variabele) Static methods kunnen enkel static variabelen gebruiken U kan static methods uitvoeren op n objecten van de class zelf

Static variabelen en methods public class Spaar. Rekening extends Rekening { private static double

Static variabelen en methods public class Spaar. Rekening extends Rekening { private static double aangroei. Intrest; public static void set. Aangroei. Intrest(final double aangroei. Intrest) { if (aangroei. Intrest < 0. 0 ) throw new Illegal. Argument. Exception("intrest negatief"); Spaar. Rekening. aangroe. Intrest=aangroe. Intrest; } public static double get. Aangroe. Intrest() { return aangroei. Intrest; } }

Static variabelen en methods public class Bank. Prog { public static void main(String[] args)

Static variabelen en methods public class Bank. Prog { public static void main(String[] args) { Spaar. Rekening. set. Aangroei. Intrest(2. 0); //op alle objecten!!! Spaar. Rekening een. Rekening; een. Rekening=new Spaar. Rekening(); Spaar. Rekening tweede. Rekening; tweede. Rekening=new Spaar. Rekening(); een. Rekening. set. Aangroei. Intrest(3. 0); //nieuw voor alle objecten System. out. println(Spaar. Rekening. get. Aangroei. Intrest()); System. out. println(een. Rekening. get. Aangroei. Intrest()); } }

Protected variabelen en methods n Protected: bereikbaar door methods van de class zelf en

Protected variabelen en methods n Protected: bereikbaar door methods van de class zelf en derived classes, niet door de buitenwereld public class Spaar. Rekening extends Rekening { … public void set. Saldo(double saldo) { if (saldo < 0. 0) throw Illegal. Argument. Exception("saldo negatief"); this. saldo=saldo; // verwijzing naar de protected variabele uit //Rekening } }

Class Huwelijks. Rekening n Gewijzigde methods: set. Saldo n storten (met maximum) public class

Class Huwelijks. Rekening n Gewijzigde methods: set. Saldo n storten (met maximum) public class Huwelijks. Rekening extends Rekening { … public void set. Saldo(double saldo) { if (saldo < 0. 0) throw Illegal. Argument. Exception("saldo negatief"); this. saldo=saldo; // verwijzing naar de protected variabele uit //Rekening } } n

Class Huwelijks. Rekening - storten public class Huwelijks. Rekening extends Rekening { … public

Class Huwelijks. Rekening - storten public class Huwelijks. Rekening extends Rekening { … public final double MAXSTORTING=1000. 0; public void storten(final double bedrag) { if (bedrag > MAXSTORTING) throw Illegal. Argument. Exception("bedrag te groot"); super. storten(bedrag); } }

Abstract class Een class waarvan U geen object kan maken n Deze class dient

Abstract class Een class waarvan U geen object kan maken n Deze class dient enkel als base class voor andere classes n U kan wel variabelen declareren die als type een abstract class hebben n U kan met zo’n variabele naar een object van een derived class verwijzen public abstract class Rekening { … } n

Abstract class (vervolg) public class Bank. Prog { public static void main(String[] args) {

Abstract class (vervolg) public class Bank. Prog { public static void main(String[] args) { Rekening slechte. Rekening=new Rekening(); } Resultaat: Rekening is abstract; cannot be instantiated

Abstract class (vervolg) public class Bank. Prog { public static void main(String [] args)

Abstract class (vervolg) public class Bank. Prog { public static void main(String [] args) { Rekening rekeningen[]=new Rekening[2]; rekeningen[0]=new Spaar. Rekening(); rekeningen[1]=new Huwelijks. Rekening(); for(int teller=0; teller < rekeningen. length; teller++) { rekeningen[teller]. storten(100. 0); System. out. println(rekeningen[teller]. get. Saldo()); } } }

Abstract method n n n Een method die in de base class geen code

Abstract method n n n Een method die in de base class geen code bevat Derived classes moeten de method overridden en code geven Een class met een abstract method moet een abstract class zijn

Abstract method (vervolg) public abstract class Rekening { … public abstract String soort. Rekening();

Abstract method (vervolg) public abstract class Rekening { … public abstract String soort. Rekening(); } public class Zicht. Rekening(); { … public String soort. Rekening(); {return "Zicht. Rekening"; } } Analoog voor Huwelijks. Rekening en Spaar. Rekening (Polymorfisme)

Abstract method (vervolg) public class Bank. Prog { public static void main(String [] args)

Abstract method (vervolg) public class Bank. Prog { public static void main(String [] args) { Rekening rekeningen[]=new Rekening[2]; rekeningen[0]=new Spaar. Rekening(); rekeningen[1]=new Huwelijks. Rekening(); for(int teller=0; teller < rekeningen. length; teller++) { rekeningen[teller]. storten(100. 0); System. out. println(rekeningen[teller]. soort. Rekening()); } } }

Final class n n n Een class waarvan geen andere class kan erven Opdat

Final class n n n Een class waarvan geen andere class kan erven Opdat Hackers niet zouden erven van uw class zodat ze methods kunnen overriddden met Hackerscode Omdat uw class af is public final class Huwelijks. Rekening extends Rekening { … } public class Verlovings. Rekening extends Huwelijks. Rekening {…} Resultaat: cannot inherit from final Huwelijks. Rekening

Final method n Een method die een derived class niet kan overridden public class

Final method n Een method die een derived class niet kan overridden public class Spaar. Rekening extends Rekening { … public final void set. Saldo(double saldo) { if(saldo<0. 0) throw Illegal. Argument. Exception("saldo negatief"); this. saldo=saldo; }} public class Super. Spaar. Rekening extends Spaar. Rekening { public void set. Saldo(double saldo) { this. saldo=saldo; }} Resultaat: overridden method is final

De class object Object Rekening Zicht. Rekening Spaar. Rekening Huwelijks. Rekening

De class object Object Rekening Zicht. Rekening Spaar. Rekening Huwelijks. Rekening

Enkele methods van Object n String to. String() n n Doel: een String teruggeven

Enkele methods van Object n String to. String() n n Doel: een String teruggeven die de belangrijkste inhoud van het object bevat boolean equals(Object obj) n Doel: het huidig object vergelijken met een ander object

Standaardgedrag to. String() public class Bank. Prog { public static void main(String[] args) {

Standaardgedrag to. String() public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0); Zicht. Rekening rekening 2=new Zicht. Rekening(65544332211 L, "Aspergio", 20. 0); System. out. println(rekening 1. to. String()); System. out. println(rekening 2. to. String()); }

Eigen versie to. String() public class Rekening { … public String to. String() {

Eigen versie to. String() public class Rekening { … public String to. String() { return soort. Rekening() + " nr. " + rekening. Nr; } }

Nieuw gedrag to. String() public class Bank. Prog { public static void main(String[] args)

Nieuw gedrag to. String() public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(11223344556 L, "Eddy Wallyvis", 10. 0); Zicht. Rekening rekening 2=new Zicht. Rekening(65544332211 L, "Aspergio", 20. 0); System. out. println(rekening 1. to. String()); System. out. println(rekening 2. to. String()); System. out. println(rekening 1); }

Standaardgedrag equals(Object obj) public class Bank. Prog { public static void main(String[] args) {

Standaardgedrag equals(Object obj) public class Bank. Prog { public static void main(String[] args) { Zicht. Rekening rekening 1=new Zicht. Rekening(65544332211 L, "Eddy Wallyvis", 10. 0); Zicht. Rekening rekening 2=new Zicht. Rekening(65544332211 L, "Aspergio", 20. 0); Zicht. Rekening rekening 1 bis=rekening 1; System. out. println(rekening 1. equals(rekening 2)); System. out. println(rekening 1. equals(rekening 1 bis)); } Resultaat: false true Schrijf een eigen method equals op basis van rekeningnummer

Interfaces n n n n Een contract methods Bevat enkel declaratie van methods Kan

Interfaces n n n n Een contract methods Bevat enkel declaratie van methods Kan ook constanten bevatten Een class kan de interface implementeren om de methods uit te werken Meerdere classes kunnen één interface implementeren Eén class kan meerdere interfaces implementeren Een interface kan erven van een andere interface Multiple inheritance!!!

Meerdere classes implemeteren een interface n Kost: double bedrag. Kost(), boolean personeels. Kost() n

Meerdere classes implemeteren een interface n Kost: double bedrag. Kost(), boolean personeels. Kost() n Vrachtwagen • • • n Fotokopie. Machine • • • n merk kost. Perkm aantalkm bedrag. Kost=kost. Per. Km * aantal. Km Personeelskost=false merk kost. Per. Blz aantalblz bedragkost=kost. Per. Blz*aantal. Blz personeels. Kost=false Werknemer • • naam wedde bedrag. Kost=wedde personeels. Kost=true

De interface Kost public interface Kost { double bedrag. Kost(); boolean personeels. Kost(); }

De interface Kost public interface Kost { double bedrag. Kost(); boolean personeels. Kost(); }

De class Vrachtwagen public class Vrachtwagen implements Kost { private String merk; private double

De class Vrachtwagen public class Vrachtwagen implements Kost { private String merk; private double int aantal. Km; private double kost. Per. Km; public Vrachtwagen(String merk, double kost. Per. Km, int aantal. Km) { this. merk=merk; this. kost. Per. Km=kost. Per. Km; this. aantal. Km=aantal. Km; } public double bedrag. Kost() { return kost. Per. Km * aantal. Km; } public boolean personeels. Kost() {return false; } public int get. Aantal. Km() {return aantal. Km; } }

Interface variabele(1) n n n Een reference variabele met als type een interface Kost

Interface variabele(1) n n n Een reference variabele met als type een interface Kost een. Kost; Kan enkel refereren naar een object van een class die de interface implementeert een. Kost=new Werknemer("Eddy", 2000. 0); Kan op dat object enkel methods uitvoeren die de interface beschrijft System. out. println(een. Kost. bedrag. Kost()); System. out. println(een. Kost. personeels. Kost()); System. out. println(een. Kost. get. Wedde()); // foutief, // filterende werking

Interface variabele(2) public class Kost. Prog { public static void main(String[] args) { Kost

Interface variabele(2) public class Kost. Prog { public static void main(String[] args) { Kost kosten[]=new Kost[4]; kosten[0]=new Werknemer("Eksterellala", 2000. 0); kosten[1]=new Werknemer("Aspergio", 1500. 0); kosten[2]=new Vrachtwagen("Redford", 0. 35, 25000); kosten[3]=new Fotokopiemachine("Monica", 0. 02, 9000); double mens. Kosten=0. 0, andere. Kosten=0. 0; for (int tel=0; tel<kosten. length; tel++) if (kosten[tel]. personeels. Kost()) mens. Kosten+=kosten[tel]. bedrag. Kost(); else andere. Kosten+=kosten[tel]. bedrag. Kost(); ; System. out. println("Mens kosten: " +menskosten); System. out. println("Andere kosten: "+andere. Kosten); } }

Een class implementeert meerdere interfaces n n Kost: double bedrag. Kost(); boolean personeels. Kost;

Een class implementeert meerdere interfaces n n Kost: double bedrag. Kost(); boolean personeels. Kost; Afschrijving: int termijn(); double jaarlijks. Bedrag(); n Vrachtwagen • • • merk kost. Per. Km aantal. Km aankoop. Prijs voorziene. Levensduur bedrag. Kost=kost. Per. Km * aantal. Km Kost personeels. Kost=false Kost termijn=voorziene. Levensduur Afschrijving jaarlijks. Bedrag=aankoop. Prijs/voorziene. Levensduur Afschrijving

GUI n n AWT: abstract windowing toolkit Swing n n Meer modern Javabeans zijn

GUI n n AWT: abstract windowing toolkit Swing n n Meer modern Javabeans zijn zelfgemaakte swingcomponenten

Structuur van Swing javax. swing Class Jbutton java. lang. Object java. awt. Component (set.

Structuur van Swing javax. swing Class Jbutton java. lang. Object java. awt. Component (set. Enabled, get. Bounds) java. awt. Container (add(Component), set. Layout, invalidate) javax. swing. Jcomponent (set. Font, set. Foreground, set. Maximum. Size, set. Minimum. Size) javax. swing. Abstract. Button (add. Action. Listener, set. Enabled, set. Icon, set. Text) javax. swing. Jbutton (is. Default. Button)

Opbouw van de GUI n n n Border. Layout (kent de gebieden NORTH, WEST,

Opbouw van de GUI n n n Border. Layout (kent de gebieden NORTH, WEST, SOUTH, EAST, CENTER) Grid. Layout Flow. Layout Box. Layout Grid. Bag. Layout Card. Layout

Swing componenten n n n JPanel JScroll. Pane JSplit. Pane JTabbed. Pane JTool. Bar

Swing componenten n n n JPanel JScroll. Pane JSplit. Pane JTabbed. Pane JTool. Bar JCombo. Box JList JSlider JButton, JCheck. Box, JRadio. Button JMenu. Bar, Jmenu, JMenu. Item, JCheck. Box. Menu. Item, JRadio Button. Menu. Item, JPopup. Menu Jlist, Jlabel, JProgress. Bar Tooltips JColor. Chooser, JFile. Chooser, JInternal. Frame, JDesktop. Fram e, Jtable, JText. Area, JEditor. Pane, JText. Pane, JTree

Events Als er een button wordt ingedrukt spreken we van een Event n Het

Events Als er een button wordt ingedrukt spreken we van een Event n Het button noemen we het subject n Een observer is een class waarbinnen zich een method bevindt die wordt uitgevoerd bij optreden van het event n De link tussen een subject en een observer is een interface n Als een observer meerdere objecten observeert die dezelfde events opsturen zal de Observer hiervoor "medewerkers" objecten inschakelen n Deze medewerkers moeten meestal toegang hebben tot de private data van de observator, hierdoor zullen deze objecten dan objecten zijn van inner classes

Events en inner classes public class Programma 1 extends javax. swing. Jframe { class

Events en inner classes public class Programma 1 extends javax. swing. Jframe { class Er. Is. Iets. Gebeurt implements java. awt. event. Action. Listener //inner class die de interface Action. Listener implementeert { public void action. Performed(java. awt. event. Action. Event e) { javax. swing. JOption. Pane. show. Message(null, "er is iets gebeurt"); } } … public Programma 1() { … Er. Is. Iets. Gebeurt eris. Iets. Gebeurt=new Er. Is. Iets. Gebeurt(); // creatie van een object van de // inner class j. Button 1. add. Action. Listener(eris. Iets. Gebeurt); // registreer het object van de inner class j. Button 2. add. Action. Listener(eris. Iets. Gebeurt); // als observator, listener bij de 4 buttons of j. Button 3. add. Action. Listener(eris. Iets. Gebeurt); // subjects j. Button 4. add. Action. Listener(eris. Iets. Gebeurt); … }

Inner classes n n Kunnen gedefinieerd zijn binnen een andere class, binnen een method

Inner classes n n Kunnen gedefinieerd zijn binnen een andere class, binnen een method van een class of zelfs lokaal blok Inner classes kunnen alleen gebruikt worden in de scoop waarin ze gedefinieerd zijn Inner classes hebben toegang tot de data die toegankelijk is op de plaats waar ze gedefinieerd zijn Inner classes hebben geen referentie zoals super of this naar de outer class

Inner classes n In de class Er. Is. Iets. Gebeurt wordt de method show.

Inner classes n In de class Er. Is. Iets. Gebeurt wordt de method show. Message. Dialog opgeroepen. Deze aanvaardt als eerste parameter een referentie naar het parent window of Jframe. Dit kan niet in een inner class. Oplossingen: Gebruik null, niet de meest juiste oplossing n Geef de inner class een datamember javax. swing. Jframe outer; initialiseer deze in de constructor van Er. Is. Iets. Gebeurt(Jframe f) { outer=f; } Creëer het object eris. Iets. Gebeurt als volgt: Er. Is. Iets. Gebeurt eris. Ietsgebeurt=new Er. Is. Iets. Gebeurt(this); n Roep in de method action. Performed een private method op van JFrame public void action. Performed(java. awt. event. Action. Event e) {klik (e); } waarbij klik een method is van de eigen class die afgeleid is van Jframe private void klik(java. awt. event. Action. Event e) {javax. swing. JOption. Pane. show. Message. Dialog(this, "er is iets gebeurt"); } n

Anonieme inner classes(1) n n Het gebeurt zelden dat meerdere buttons dezelfde actie tot

Anonieme inner classes(1) n n Het gebeurt zelden dat meerdere buttons dezelfde actie tot gevolg hebben. Dus wordt de referentie eris. Iets. Gebeurt maar op één plaats gebruikt. We kunnen de referentie dan ook weglaten j. Button 1. add. Action. Listener(new Er. Is. Iets. Gebeurt(this)); Maar de class Er. Is. Iets. Gebeurt wordt ook maar op één plaats gebruikt. We zouden dan ook de naam kunnen weglaten, dus ook het woord class. Maar dan heeft implements geen zin meer Waar moet die class dan komen? Op de plaats waar het object moet worden gecreëerd

Anonieme inner classes(2) j. Button 1. add. Action. Listener(new Er. Is. Iets. Gebeurt(this)); wordt

Anonieme inner classes(2) j. Button 1. add. Action. Listener(new Er. Is. Iets. Gebeurt(this)); wordt nu: j. Button 1. add. Action. Listener(new java. awt. event. Action. Listener() { public void action. Performed(java. awt. event. Action. Event e) { klik(e); //private method van de ‘outer class’ } } ); n Merk op: in de nieuwe constructie is "this" verdwenen op de eerste lijn en wordt in action. Performed de methode klik() van de outer class opgeroepen. De parameter "this" zou worden doorgegeven aan de constructor, maar wat is de naam van constructor van een anonieme class? Anonieme classes kunnen geen expliciete constructor hebben. n

Event adapters n n n Sommige interfaces definiëren meerdere methods; terwijl we maar in

Event adapters n n n Sommige interfaces definiëren meerdere methods; terwijl we maar in één method geïnteresseerd zijn moeten we ze allemaal implementeren Hiervoor zijn in Java Adapter classes voorzien, deze bevatten voor elke method in de interface een "dummy" lege implementatie We leiden dan een class af van de Adapter en overridden alleen de method die ons interesseert.

Applets n n Een applet is een java programma dat geladen wordt in de

Applets n n Een applet is een java programma dat geladen wordt in de browser vanuit de HTML code Een applet kan een animatie zijn dienst doet als schermversiering maar het kan een complexe medische toepassing zijn met 3 D faciliteiten

Applets en beveiliging n n n n Applets mogen andere programma’s starten Krijgen geen

Applets en beveiliging n n n n Applets mogen andere programma’s starten Krijgen geen toegang tot het filesysteem Mogen geen native methods oproepen Mogen geen andere socket openen dan naar de host vanwaar ze geladen zijn System properties worden afgeschermd Windows en dialog gecreëerd door een applet zijn voorzien van een footer met de waarschuwing "Warning applet window" Applets runnen in een beveiligde omgeving, de zandbak genoemd

Applet methods n n n init(): de applet initisialiseert zichzelf na het laden door

Applet methods n n n init(): de applet initisialiseert zichzelf na het laden door de browser start(): na de initisalisatie of als de gebruiker terug op de pagina komt, of als de applet onzichtbaar wordt paint(): deze method laat de applet toe zichzelf te tekenen op vraag van de browser stop(): wordt uitgevoerd als de gebruiker de pagina verlaat of de applet onzichtbaar wordt destroy(): deze method kuist op voor deze ontladen wordt, bv. Sluiten van files, sockets of database connecties

Hallo Aspergio applet(1) import java. awt. *; import java. applet. *; public class Hello.

Hallo Aspergio applet(1) import java. awt. *; import java. applet. *; public class Hello. Tallin extends Applet { public void paint(Graphics g) //g is de grafische omgeving // alle tekenactiviteiten vinden plaats in paint { g. draw. String("Goodevening Tallin", 10); } }

Hallo Aspergio applet(2) De applet heeft een HTML bestand nodig vanwaaruit het opgeroepen wordt

Hallo Aspergio applet(2) De applet heeft een HTML bestand nodig vanwaaruit het opgeroepen wordt <html> <head><title>Aspergio’s pagina</title><head> <body> <applet code=Hello. Tallin. class width=100 height=100></applet> </body> </html> n

Hallo Aspergio browser n n n Plaats de applet class file en de html

Hallo Aspergio browser n n n Plaats de applet class file en de html file in dezelfde directory Zet de instellingen van IE voor het verversen van de inhoud van een pagina op "Bij elk bezoek" Extra->Internet Opties->Instellingen Laadt de html file

Nog enkele applet methods n n get. Document. Base(): returnt een URL-object dat de

Nog enkele applet methods n n get. Document. Base(): returnt een URL-object dat de url van de huidige pagina bevat get. Code. Base(): returnt een url object dat de url vanwaar de applet is geladen bevat get. Image(URL base, String target) en get. Audio. Clip(URL base, String target): laden resources, dit kan alleen van de host vanwaar de applet is geladen get. Applet. Context(), show. Document(URL, target): laadt een html pagina over de huidige pagina, of een bepaald frame. Hiermee kan een applet tot menu omgevormd worden

Networking n Communicatie gaat van n n Een toestel, IP nummer Een applicatie, port

Networking n Communicatie gaat van n n Een toestel, IP nummer Een applicatie, port nummer Naar n n n Een toestel, IP nummer Een applicatie, port nummer Elk port nummer komt overeen met een service

Networking, adres info import java. net. *; public class Get. Info { public static

Networking, adres info import java. net. *; public class Get. Info { public static void main(String[] args) { Inet. Address address=null; try { address=Inet. Address. get. By. Name("BIB 2"); } catch(Unknown. Host. Exception e) { e. print. Stack. Trace(); System. exit(1); } System. out. println("Host name: " + address. get. Host. Name()); System. out. println("Host address: " + address. get. Host. Address()); System. exit(0); } }

Sockets n n n n Een client 172. 16. 20. 1 opent een socket

Sockets n n n n Een client 172. 16. 20. 1 opent een socket met poort 1050 De client doet een aanvraag om een http verbinding op te zetten met de server 172. 16. 0. 1 op poort 80 Een aanvraag wordt verstuurd van 172. 16. 20. 1: 1050 naar 172. 16. 0. 1: 80 De server creëert een nieuwe socket om te antwoorden (met bv. Poortnummer 7689) De server en client communiceren via deze sockets De port nummers van waaruit een verbinding wordt opgezet zijn meestal groter dan 1024, omdat deze niet gereserveerd zijn Een lijst met gereserveerde nummers vindt U op: http: //www. iana. org/assignments/port-numbers

Daytime Server import java. net. *; import java. io. *; import java. util. *;

Daytime Server import java. net. *; import java. io. *; import java. util. *; public class Daytime. Server {public static void main(String[] args) {int port=13; Server. Socket my. Server. Socket=null; try { my. Server. Socket= new Server. Socket(port); } catch (IOException e) { System. out. println("Fout bij creatie socket: "+e); System. exit(1); } System. out. println("…started"); while (true) { try { Socket my. Socket=my. Server. Socket. accept(); Print. Writer my. Writer=new Print. Writer(my. Socket. get. Output. Stream()); Calendar my. Calendar=Calendar. get. Instance(); Date my. Date=my. Calendar. get. Time(); my. Writer. println(my. Date. to. String()); my. Writer. flush(); my. Socket. close(); } catch (IOException e) { System. out. println("fout tijdens run : "+ e); System. exit(1); } } } }

Daytime Client import java. io. *; import java. net. *; public class Daytime. Client

Daytime Client import java. io. *; import java. net. *; public class Daytime. Client { public static final int DAYTIMEPORT=13; public static void main(String[] args) { if (args. length != 1) { System. err. println("Gebruik: java Daytime. Client address"); System. exit(1); } Inet. Address address=null; try{ address=Inet. Address. get. By. Name(args[0]); } catch(Unknown. Host. Exception e) {e. print. Stack. Trace(); System. exit(2); } Socket sock=null; try{ sock=new Socket(address, DAYTIMEPORT); } catch(IOException e) {e. print. Stack. Trace(); System. exit(3); } Input. Stream in=null; try{ in=sock. get. Input. Stream(); } catch(IOException e) {e. print. Stack. Trace(); System. exit(5); } Buffered. Reader reader=new Buffered. Reader(new Input. Stream. Reader(in)); String line=null; try{line=reader. read. Line(); } catch(IOException e) {e. print. Stack. Trace(); System. exit(6); } System. out. println(line); System. exit(0); }}