Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAnneleen Hendrickx Laatst gewijzigd meer dan 9 jaar geleden
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);}}
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.