De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

JAVA: een platformonafhankelijke taal

Verwante presentaties


Presentatie over: "JAVA: een platformonafhankelijke taal"— Transcript van de presentatie:

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

2 Hoe ? Hello.java Compiler Hello.class (byte code)
Interpreter Interpreter Interpreter Windows Linux MacOs

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

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

5 De java software (1.4.0) www.java.sun.com Ontwikkelaar Gebruiker
Java 2 Standaard Edition SDK Compiler API JVM Java 2 Standaard Edition Docs (apart downloaden) Gebruiker Java 2 Standaard Edition JRE API JVM

6 Een programma schrijven
Teksteditor NotePad TextPad Ontwikkelomgeving Forte ( Jbuilder ( VisualAge for Age (

7 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"); }

8 Primitieve datatypes Gehele getallen Getallen met decimalen
byte: -128 … 127 short: … int: – … long: … Getallen met decimalen float: … precies tot 6 à 7 decimalen double: … precies tot 15 à 16 decimalen Andere types char: één teken in Unicode standaard (2 bytes) boolean: true of false

9 De naam van een variabele
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: naam van een variabele begint met een kleine letter ieder woord na het eerste woord begint met een hoofdletter (bv. aantalSuksPerDoos)

10 Lokale variabelen public class Hello {
public static void main(String[] args) int aantalKinderen; char geslacht; double wedde,weddeVanMijnVrouw; boolean autoVerzekeringBetaald; } // merk op: lokale variabelen hebben geen beginwaarde // de initialisatie kan echter bij de declaratie gebeuren

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

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

13 Typeconversie:van klein naar groot
public class Hello { public static void main(String[] args) long grootGetal,grootstGetal; int kleinGetal,kleinstgetal; kleinGetal=5; grootGetal=kleinGetal; grootstGetal=10L; kleinstGetal=(int)grootstGetal; }

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

15 Rekenkundige bewerkingen
public class Hello { public static void main(String[] args) final double CMINCH; int aantalInch=10; double aantalCm; CMINCH=2.54; aantalCm=CMINCH*aantalInch;/* automatische typeconversie */ System.out.println(aantalCm); }

16 Verkorte bewerkingen Bewerking Betekenis var+=waarde var=var+waarde

17 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

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

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

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

21 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");

22 De ? operator voorwaarde ? resultaatAlsTrue:resultaatAlsFalse
public class Hello { public static void main(String[] args) double temperatuur=5.0; System.out.println(temperatuur <=0.0?"Het vriest":"Het vriest niet"); }

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

24 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

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

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

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

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

29 Een programma met String en+
public class TheVoice { 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); } }

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

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

32 String objecten zijn immutable
public class TheVoice3 { public static void main(String[] args) { String bv="Eddy Wallyvis"; bv="Wendy weet van Wanten"; bv=bv.toUpperCase(); System.out.println(bv.toLowerCase()); }

33 Methodes van String public class Horses2 {
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.lastIndexOf(‘r’)); System.out.println(horse.indexOf("r")); System.out.println(horse.startsWith("Ka")); System.out.println(horse.indexOf(‘C’)); System.out.println(horse.endsWith("res")); System.out.println(horse.toUpperCase()); System.out.println(horse.toLowerCase()); System.out.println(horse.replace(‘ ‘,’_’)); }

34 Conversie tussen Strings en primitieve varaiabelen
Van primitieve variabelen naar Strings: double temperatuur=5.0; String tekst=String.valueOf(getal); Van Strings naar primitieve variabelen String tekst="5.0"; double temperatatuur=Double.parseDouble(tekst); String tekst="7"; int getal=Integer.parseInt(tekst);

35 Lezen van toetsenbord import java.io.*; public class LeesToetsenbord {
public static void main(String[] args) throws IOException {   BufferedReader toetsenbord = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Geef uw naam"); String naam; naam = toetsenbord.readLine(); System.out.println("U bent "+naam); System.out.println("Aantal kinderen:"); String skinderen; skinderen=toetsenbord.readLine(); int kinderen=Integer.parseInt(skinderen); System.out.println("kindergeld :"+kinderen*4000);} }

36 StringBuffer StringBuffer objecten zijn mutable public class StrBr {
public static void main(String[] args) StringBuffer leeg=new StringBuffer(); System.out.println(leeg.length()+":"+leeg.capacity()); // default=16 StringBuffer horse=new StringBuffer("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); }

37 StringBuffer Tekens kunnen gelezen en gewijzigd worden:
Lezen: charAt(positie); Schrijven: setCharAt(positie,teken) public class StrbTekens { public static void main(String[] args) StringBuffer naam=new StringBuffer("germaine_de_coeur_brisee"); for(int teller=0;teller<naam.length();teller++) if (naam.charAt(teller)==‘_’) naam.setCharAt(teller,’ ‘); System.out.println(naam); }

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

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

40 Array initializer 0 1 2 3 4 5 6 7 8 9 10 11 public class ArrInit
{ public static void main(String[] args) {int dagenPerMaand[]={31,28,31,30,31,30,31,31,30,31,30,31};} } 31 28 30

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

42 2D-arrays Wat is het resultaat van volgend programma?
public class TweedArr { public static void main(String[] args) char vierOp1Rij[][]=new char[6][7]; for (int rij=0;rij<vierOP1Rij.length;rij++) for(int kolom=0;kolom<vierOp1Rij[0].length;kolom++) vierOp1Rij[rij][kolom]=‘ ‘; }

43 Objecten, classes 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: Naam van een class begint met een hoofdletter Ieder woord na het eerste woord begint met een hoofdletter

44 Voorbeeldklasse Class Rekening: Subclasses
Properties:rekeningNR,saldo,houder Methods:storten,afhalen Subclasses ZichtRekening Properties:maxKrediet Methods:afhalen,overschrijven SpaarRekening Properties:aangroeiIntrest HuwelijksRekening Methods:storten (met maximum) (overriding) Java kent alleen single inheritance(= een klasse kan maar een base klasse hebben, geen multiple inheritance zoals C++, alhoewel …

45 Een base en afgeleide klassen
Eén publieke class per source file public class Rekening {…} public class ZichtRekening extends Rekening {…} public class SpaarRekening extends Rekening {…} public class HuwelijksRekening extends Rekening {…}

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

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

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

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

50 Property-waarden invullen en ophalen
Public class BankProg { public static void main(String[] args) Rekening groteRekening=new Rekening(); Rekening kleineRekening=new Rekening(); groteRekening.setSaldo( ); kleineRekening.setSaldo(500.0); System.out.println(groteRekening.getSaldo()); System.out.println(kleineRekening.getSaldo()); }

51 De property saldo public class Rekening { private double saldo; …
public void setSaldo(double saldo) this.saldo=saldo; } public double getSaldo() return saldo;

52 Property-waarde invullen en ophalen
Oefeningen

53 Methods in een class Resultaat: Saldo=520 public class Rekening {
public void storten(double bedrag) if (bedrag<0.0) throw new IllegalArgumentException("Bedrag negatief") saldo+=bedrag; } public class BankProg { public static void main(String[] args) Rekening kleineRekening=new Rekening(); kleineRekening.setSaldo(500.0); kleineRekening.storten(20.0); Resultaat: Saldo=520

54 Overloaded methods Een method mag meerdere keren in een class voorkomen als 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 bedragNietEuro, final double koers) storten(bedragNietEuro * koers);

55 Overloaded methods gebruiken
public class BankProg { public static void main(String[] args) { Rekening groteRekening=new Rekening(); groteRekening.setSaldo(500.0); groteRekening.storten(20.0); System.out.println(groteRekening.getSaldo()); groteRekening.storten(10.0,2.0); } Resultaat: 520.0 540.0

56 Constructor 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 groteRekening; groteRekening=new Rekening(…) Mag overloaded worden

57 Constructor-voorbeeld
public class Rekening { public Rekening(final long rekeningNr, String houder, final double saldo) setRekeningNr(rekeningNr); setHouder(houder); setSaldo(saldo); }

58 Constructor-gebruik public class Bankprog {
public static void main(String[] args) Rekening groteRekening=new Rekening( L, "PDM", 500.0); // Resultaat ophalen via getRekeningNr() enz… }

59 Overloaded constructor
public class Rekening { public Rekening(final long rekeningNr, String houder, final double saldo) setRekeningNr(rekeningNr); setHouder(houder); setSaldo(saldo); } public Rekening(final long rekeningNr,final String houder) this(rekeningNr,houder,0.0); // constructor chaining via this // this moet de eerste opdracht van een method zijn

60 Overloaded constructor-gebruik
public class Bankprog { public static void main(String args[]) Rekening groteRekening= new Rekening( L,"Eddy Walvis", 500.0); Rekening kleineRekening= new Rekening( L,"La Eksterellala"); System.out.println(kleineRekening.getRekeningNr()); System.out.println(kleineRekening.getHouder()); System.out.println(kleineRekening.getSaldo()); } Resultaat: La Eksterellala 0.0

61 Default constructor 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 groteRekening= new Rekening(); } //let op dit geeft een foutmelding !!!Daarom …

62 Eigen default constructor
public class Rekening { public Rekening(); setHouder("Onbekend"); }

63 Class ZichtRekening Erft van Rekening Extra properties: maxkrediet
Gewijzigde method: setSaldo Extra methods: afhalen, overschrijven public class ZichtRekening extends Rekening { }

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

65 De property maxKrediet
public class ZichtRekening extends Rekening { private double maxKrediet; public void setMaxKrediet(double maxKrediet) if (maxKrediet>0.0) throw new IllegalArgumentException("maxKrediet positief"); this.maxKrediet=maxKrediet; } public double getMaxKrediet() return maxKrediet;

66 Constructors in de derived class
public class ZichtRekening extends Rekening { public ZichtRekening(long rekeningNr,String houder,double saldo,double maxKrediet) super(rekeningNr,houder,saldo); // constructor base class oproepen setMaxKrediet(maxKrediet); } public ZichtRekening(long rekeningNr,String houder,double saldo) this(rekeningNr,houder,saldo,0.0); // constructor eigen class oproepen public ZichtRekening(long rekeningNr,String houder) this(rekeningNr,houder,0.0); // constructor eigen class oproepen

67 Gebruik van deze constructors
public class BankProg { public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",500.0,-100.0); ZichtRekening rekening2=new ZichtRekening( L,"La Eksterellala",500.0); ZichtRekening rekening3=new ZichtRekening( L,"M. de C. Brisée"); }

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

69 Method overriding-voorbeeld
public class ZichtRekening extends Rekening { public void setSaldo(double saldo) if (saldo < maxKrediet) throw new IllegalArgumentException("saldo < maxkrediet"); super.setSaldo(saldo); //method uitvoeren van Rekening }

70 Method overriding- toepassing
public class BankProg { public static void main(String[] args) Rekening groteRekening=new Rekening( L,"Eddy Wallyvis"); ZichtRekening kleineRekening=new ZichtRekening( L,"La Eksterellala"); groteRekening.setSaldo(-500.0); kleineRekening.setSaldo(-500.0); } Exception in thread "main" Java.lang.IllegalArgumentException: saldo < maxKrediet at ZichtRekening.setSaldo(ZichtRekening.java:31) at BankProg.main(BankProg.java:10)

71 Base class reference variabele verbinden met derived object
public class BankProg { public static void main(String[] args) Rekening eenRekening=new ZichtRekening( L,"Eddy Wallyvis"); eenRekening.setMaxKrediet(-100.0); //is geen method van class // Rekening (class van de reference variabele!!! } cannot resolve symbol symbol: method setMaxKrediet (double) location: class Rekening eenRekening.setMaxKrediet(-100.0);

72 Base class reference variabele verbinden met derived object
Tweede poging public class BankProg { public static void main(String[] args) Rekening eenRekening=new ZichtRekening( L,"Eddy Wallyvis"); eenRekening.setSaldo(100.0); }

73 Derived class reference variabele verbinden met base class object
public class BankProg { public static void main(String[] args) ZichtRekening eenRekening=new ZichtRekening( L,"Eddy Wallyvis",0.0,-5.0); Rekening tussenRekening=eenRekening; eenRekening=(ZichtRekening) tussenRekening; System.out.println(eenRekening.getMaxKrediet()); } Resultaat: -5.0

74 Method afhalen public class ZichtRekening extends Rekening { …
public void afhalen(final double bedrag) if (bedrag < 0.0) throw new IllegalArgumentException("bedrag negatief"); setSaldo(getSaldo() – bedrag); } Opmerking: saldo is private in base class, ook niet bereikbaar in derived class, maar getSaldo() is public

75 Method afhalen-toepassing
public class Bankprog { public static void main(String[] args) Zichtrekening eenRekening=new ZichtRekening( L,"Eddy Wallyvis",10.0,-5.0); eenRekening.afhalen(1.0); System.out.println(eenRekening.getSaldo()); } Resultaat: 9.0

76 Instanceof public class ZichtRekening extends Rekening { …
public void overschrijven(final Rekening naarRekening, final double bedrag) if (! (naarRekening instanceof Rekening)) throw new IllegalArgumentException(" naarRekening geen Rekening"); setSaldo(getSaldo() – bedrag); naarRekening.storten(bedrag); }

77 Instanceof-gebruik public class BankProg {
public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); ZichtRekening rekening2=new ZichtRekening( L,"Aspergio",20.0); rekening1.overschrijven(rekening2,1.0); System.out.println(rekening1.getSaldo()); System.out.println(rekening2.getSaldo()); } Resultaat: 9.0 21.0

78 Instanceof-gebruik public class BankProg {
public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); Rekening rekening2=new Rekening( L,"Aspergio",20.0); rekening1.overschrijven(rekening2,1.0); System.out.println(rekening1.getSaldo()); System.out.println(rekening2.getSaldo()); } Resultaat: 9.0 21.0

79 Instanceof-gebruik public class BankProg {
public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); rekening1.overschrijven(null,1.0); System.out.println(rekening1.getSaldo()); System.out.println(rekening2.getSaldo()); } Exception in thread "main" java.lang.IllegalArgumentException: naarRekening geen Rekening at ZichtRekening.overschrijven(ZichtRekening.java:43) at BankProg.main(BankProg.java:9)

80 Class SpaarRekening Extra properties: aangroeiIntrest
Gewijzigde method: setSaldo 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 objecten van de class de class zelf

81 Static variabelen en methods
public class SpaarRekening extends Rekening { private static double aangroeiIntrest; public static void setAangroeiIntrest(final double aangroeiIntrest) if (aangroeiIntrest < 0.0 ) throw new IllegalArgumentException("intrest negatief"); SpaarRekening.aangroeIntrest=aangroeIntrest; } public static double getAangroeIntrest() return aangroeiIntrest;

82 Static variabelen en methods
public class BankProg { public static void main(String[] args) SpaarRekening.setAangroeiIntrest(2.0); //op alle objecten!!! SpaarRekening eenRekening; eenRekening=new SpaarRekening(); SpaarRekening tweedeRekening; tweedeRekening=new SpaarRekening(); eenRekening.setAangroeiIntrest(3.0); //nieuw voor alle objecten System.out.println(SpaarRekening.getAangroeiIntrest()); System.out.println(eenRekening.getAangroeiIntrest()); }

83 Protected variabelen en methods
Protected: bereikbaar door methods van de class zelf en derived classes, niet door de buitenwereld public class SpaarRekening extends Rekening { public void setSaldo(double saldo) if (saldo < 0.0) throw IllegalArgumentException("saldo negatief"); this.saldo=saldo; // verwijzing naar de protected variabele uit //Rekening }

84 Class HuwelijksRekening
Gewijzigde methods: setSaldo storten (met maximum) public class HuwelijksRekening extends Rekening { public void setSaldo(double saldo) if (saldo < 0.0) throw IllegalArgumentException("saldo negatief"); this.saldo=saldo; // verwijzing naar de protected variabele uit //Rekening }

85 Class HuwelijksRekening - storten
public class HuwelijksRekening extends Rekening { public final double MAXSTORTING=1000.0; public void storten(final double bedrag) if (bedrag > MAXSTORTING) throw IllegalArgumentException("bedrag te groot"); super.storten(bedrag); }

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

87 Abstract class (vervolg)
public class BankProg { public static void main(String[] args) Rekening slechteRekening=new Rekening(); } Resultaat: Rekening is abstract; cannot be instantiated

88 Abstract class (vervolg)
public class BankProg { public static void main(String [] args) Rekening rekeningen[]=new Rekening[2]; rekeningen[0]=new SpaarRekening(); rekeningen[1]=new HuwelijksRekening(); for(int teller=0;teller < rekeningen.length;teller++) rekeningen[teller].storten(100.0); System.out.println(rekeningen[teller].getSaldo()); }

89 Abstract method 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

90 Abstract method (vervolg)
public abstract class Rekening { public abstract String soortRekening(); } public class ZichtRekening(); public String soortRekening(); {return "ZichtRekening";} Analoog voor HuwelijksRekening en SpaarRekening (Polymorfisme)

91 Abstract method (vervolg)
public class BankProg { public static void main(String [] args) Rekening rekeningen[]=new Rekening[2]; rekeningen[0]=new SpaarRekening(); rekeningen[1]=new HuwelijksRekening(); for(int teller=0;teller < rekeningen.length;teller++) rekeningen[teller].storten(100.0); System.out.println(rekeningen[teller].soortRekening()); }

92 Final class 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 HuwelijksRekening extends Rekening { } public class VerlovingsRekening extends HuwelijksRekening {…} Resultaat: cannot inherit from final HuwelijksRekening

93 Final method Een method die een derived class niet kan overridden
public class SpaarRekening extends Rekening { public final void setSaldo(double saldo) if(saldo<0.0) throw IllegalArgumentException("saldo negatief"); this.saldo=saldo; }} public class SuperSpaarRekening extends SpaarRekening { public void setSaldo(double saldo) { this.saldo=saldo;}} Resultaat: overridden method is final

94 ZichtRekening SpaarRekening HuwelijksRekening
De class object Object Rekening ZichtRekening SpaarRekening HuwelijksRekening

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

96 Standaardgedrag toString()
public class BankProg { public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); ZichtRekening rekening2=new ZichtRekening( L,"Aspergio",20.0); System.out.println(rekening1.toString()); System.out.println(rekening2.toString()); }

97 Eigen versie toString()
public class Rekening { public String toString() return soortRekening() + " nr." + rekeningNr; }

98 Nieuw gedrag toString()
public class BankProg { public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); ZichtRekening rekening2=new ZichtRekening( L,"Aspergio",20.0); System.out.println(rekening1.toString()); System.out.println(rekening2.toString()); System.out.println(rekening1); }

99 Standaardgedrag equals(Object obj)
public class BankProg { public static void main(String[] args) ZichtRekening rekening1=new ZichtRekening( L,"Eddy Wallyvis",10.0); ZichtRekening rekening2=new ZichtRekening( L,"Aspergio",20.0); ZichtRekening rekening1bis=rekening1; System.out.println(rekening1.equals(rekening2)); System.out.println(rekening1.equals(rekening1bis)); } Resultaat: false true Schrijf een eigen method equals op basis van rekeningnummer

100 Interfaces Een contract met 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!!!

101 Meerdere classes implemeteren een interface
Kost:double bedragKost(),boolean personeelsKost() Vrachtwagen merk kostPerkm aantalkm bedragKost=kostPerKm * aantalKm Personeelskost=false FotokopieMachine kostPerBlz aantalblz bedragkost=kostPerBlz*aantalBlz personeelsKost=false Werknemer naam wedde bedragKost=wedde personeelsKost=true

102 De interface Kost public interface Kost { double bedragKost();
boolean personeelsKost(); }

103 De class Vrachtwagen public class Vrachtwagen implements Kost {
private String merk; private double int aantalKm; private double kostPerKm; public Vrachtwagen(String merk,double kostPerKm,int aantalKm) this.merk=merk; this.kostPerKm=kostPerKm; this.aantalKm=aantalKm; } public double bedragKost() { return kostPerKm * aantalKm; } public boolean personeelsKost() {return false;} public int getAantalKm() {return aantalKm;}

104 Interface variabele(1)
Een reference variabele met als type een interface Kost eenKost; Kan enkel refereren naar een object van een class die de interface implementeert eenKost=new Werknemer("Eddy",2000.0); Kan op dat object enkel methods uitvoeren die de interface beschrijft System.out.println(eenKost.bedragKost()); System.out.println(eenKost.personeelsKost()); System.out.println(eenKost.getWedde()); // foutief, // filterende werking

105 Interface variabele(2)
public class KostProg { public static void main(String[] args) Kost kosten[]=new Kost[4]; kosten[0]=new Werknemer("Eksterellala",2000.0); kosten[1]=new Werknemer("Aspergio", ); kosten[2]=new Vrachtwagen("Redford",0.35,25000); kosten[3]=new Fotokopiemachine("Monica",0.02,9000); double mensKosten=0.0, andereKosten=0.0; for (int tel=0;tel<kosten.length;tel++) if (kosten[tel].personeelsKost()) mensKosten+=kosten[tel].bedragKost(); else andereKosten+=kosten[tel].bedragKost();; System.out.println("Mens kosten: " +menskosten); System.out.println("Andere kosten: "+andereKosten); }

106 Een class implementeert meerdere interfaces
Kost: double bedragKost();boolean personeelsKost; Afschrijving: int termijn();double jaarlijksBedrag(); Vrachtwagen merk kostPerKm aantalKm aankoopPrijs voorzieneLevensduur bedragKost=kostPerKm * aantalKm Kost personeelsKost=false Kost termijn=voorzieneLevensduur Afschrijving jaarlijksBedrag=aankoopPrijs/voorzieneLevensduur Afschrijving

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

108 Structuur van Swing javax.swing Class Jbutton java.lang.Object
java.awt.Component (setEnabled, getBounds) java.awt.Container (add(Component),setLayout,invalidate) javax.swing.Jcomponent (setFont,setForeground,setMaximumSize,setMinimumSize) javax.swing.AbstractButton (addActionListener,setEnabled,setIcon,setText) javax.swing.Jbutton (isDefaultButton)

109 Opbouw van de GUI BorderLayout (kent de gebieden NORTH,WEST,SOUTH,EAST,CENTER) GridLayout FlowLayout BoxLayout GridBagBagLayout CardLayout

110 Swing componenten JPanel JScrollPane JSplitPane JTabbedPane JToolBar
JComboBox JList JSlider JButton,JCheckBox,JRadioButton JMenuBar,Jmenu,JMenuItem,JCheckBoxMenuItem,JRadioButtonMenuItem,JPopupMenu Jlist,Jlabel,JProgressBar Tooltips JColorChooser,JFileChooser,JInternalFrame,JDesktopFrame,Jtable,JTextArea,JEditorPane,JTextPane,JTree

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

112 Events en inner classes
public class Programma1 extends javax.swing.Jframe { class ErIsIetsGebeurt implements java.awt.event.ActionListener //inner class die de interface ActionListener implementeert public void actionPerformed(java.awt.event.ActionEvent e) javax.swing.JOptionPane.showMessage(null,"er is iets gebeurt"); } public Programma1() ErIsIetsGebeurt erisIetsGebeurt=new ErIsIetsGebeurt(); // creatie van een object van de // inner class jButton1.addActionListener(erisIetsGebeurt); // registreer het object van de inner class jButton2.addActionListener(erisIetsGebeurt); // als observator, listener bij de 4 buttons of jButton3.addActionListener(erisIetsGebeurt); // subjects jButton4.addActionListener(erisIetsGebeurt);

113 Inner classes 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

114 Inner classes In de class ErIsIetsGebeurt wordt de method showMessageDialog 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 Geef de inner class een datamember javax.swing.Jframe outer; initialiseer deze in de constructor van ErIsIetsGebeurt(Jframe f) { outer=f;} Creëer het object erisIetsGebeurt als volgt: ErIsIetsGebeurt erisIetsgebeurt=new ErIsIetsGebeurt(this); Roep in de method actionPerformed een private method op van JFrame public void actionPerformed(java.awt.event.ActionEvent e) {klik (e);} waarbij klik een method is van de eigen class die afgeleid is van Jframe private void klik(java.awt.event.ActionEvent e) {javax.swing.JOptionPane.showMessageDialog(this,"er is iets gebeurt");} this is nu een referentie naar het JFrame

115 Anonieme inner classes(1)
Het gebeurt zelden dat meerdere buttons dezelfde actie tot gevolg hebben. Dus wordt de referentie erisIetsGebeurt maar op één plaats gebruikt. We kunnen de referentie dan ook weglaten jButton1.addActionListener(new ErIsIetsGebeurt(this)); Maar de class ErIsIetsGebeurt 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

116 Anonieme inner classes(2)
jButton1.addActionListener(new ErIsIetsGebeurt(this)); wordt nu: jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) klik(e); //private method van de ‘outer class’ } } ); Merk op: in de nieuwe constructie is "this" verdwenen op de eerste lijn en wordt in actionPerformed 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.

117 Event adapters 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.

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

119 Applets en beveiliging
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

120 Applet methods 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

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

122 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=HelloTallin.class width=100 height=100></applet> </body> </html>

123 Hallo Aspergio browser
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

124 Nog enkele applet methods
getDocumentBase():returnt een URL-object dat de url van de huidige pagina bevat getCodeBase():returnt een url object dat de url vanwaar de applet is geladen bevat getImage(URL base,String target) en getAudioClip(URL base,String target):laden resources, dit kan alleen van de host vanwaar de applet is geladen getAppletContext(), showDocument(URL,target):laadt een html pagina over de huidige pagina, of een bepaald frame. Hiermee kan een applet tot menu omgevormd worden

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

126 Networking, adres info import java.net.*; public class GetInetInfo {
public static void main(String[] args) InetAddress address=null; try address=InetAddress.getByName("BIB2"); } catch(UnknownHostException e) e.printStackTrace(); System.exit(1); System.out.println("Host name:" + address.getHostName()); System.out.println("Host address:" + address.getHostAddress()); System.exit(0);

127 Sockets Een client 172.16.20.1 opent een socket met poort 1050
De client doet een een aanvraag om een http verbinding op te zetten met de server op poort 80 Een aanvraag wordt verstuurd van :1050 naar :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:

128 Daytime Server import java.io.*; import java.util.*;
import java.net.*; import java.io.*; import java.util.*; public class DaytimeServer {public static void main(String[] args) {int port=13; ServerSocket myServerSocket=null; try { myServerSocket= new ServerSocket(port);} catch (IOException e) { System.out.println("Fout bij creatie socket:"+e);System.exit(1);} System.out.println("…started"); while (true) { try { Socket mySocket=myServerSocket.accept(); PrintWriter myWriter=new PrintWriter(mySocket.getOutputStream()); Calendar myCalendar=Calendar.getInstance(); Date myDate=myCalendar.getTime(); myWriter.println(myDate.toString());myWriter.flush();mySocket.close(); } catch (IOException e) { System.out.println("fout tijdens run : "+ e); System.exit(1); } } } }

129 Daytime Client import java.io.*;import java.net.*;
public class DaytimeClient { public static final int DAYTIMEPORT=13; public static void main(String[] args) { if (args.length != 1) { System.err.println("Gebruik: java DaytimeClient address"); System.exit(1);} InetAddress address=null; try{ address=InetAddress.getByName(args[0]);} catch(UnknownHostException e) {e.printStackTrace();System.exit(2);} Socket sock=null; try{ sock=new Socket(address,DAYTIMEPORT);} catch(IOException e) {e.printStackTrace();System.exit(3);} InputStream in=null; try{ in=sock.getInputStream();} catch(IOException e) {e.printStackTrace();System.exit(5);} BufferedReader reader=new BufferedReader(new InputStreamReader(in)); String line=null; try{line=reader.readLine();} catch(IOException e) {e.printStackTrace();System.exit(6);} System.out.println(line); System.exit(0);}}


Download ppt "JAVA: een platformonafhankelijke taal"

Verwante presentaties


Ads door Google