650 likes | 802 Views
ONTWERPDOELEN (1). JAVA IS: eenvoudig automatische garbage collection klein object georiënteerd betrouwbaar. ONTWERPDOELEN (2). JAVA IS: veilig architectuurneutraal portable goede performance multithreaded. VIRTUELE MACHINE. Java-bytecode Virtuele machine in browser.
E N D
ONTWERPDOELEN (1) • JAVA IS: • eenvoudig • automatische garbage collection • klein • object georiënteerd • betrouwbaar JAVA
ONTWERPDOELEN (2) • JAVA IS: • veilig • architectuurneutraal • portable • goede performance • multithreaded JAVA
VIRTUELE MACHINE • Java-bytecode • Virtuele machine in browser JAVA
VIRTUELE MACHINE Schematisch: Computer die bezocht wordt Java byte-code Java-programma Compilatie Internet Uw computer verificatie Java virtuele machine interpreter Browser omgeving Java byte-code verwerking JAVA
HTML-CODE <HTML> <HEAD> <TITLE> Invoer </TITLE> </HEAD> <BODY> <APPLET CODE= “InvoerApplet.class” WIDTH=426 HEIGHT=266> </APPLET> </BODY> </HTML> JAVA
APPLETS VS. APPLICATIES • Applicaties: • cfr. programma’s in C++ • uitvoeren mits JVM • vb. : Hot Java Browser • Applets: • cliënt • interactiviteit op webpagina’s JAVA
APPLICATIE import java.lang.*; public class Som { public static void main( String[] args) { int x = 2, y = 3, som; som = x * x + y * y; System.out.println("Som = "+ som); try { Thread.currentThread().sleep(5000); } catch (InterruptedException e) {}; } } JAVA
APPLET import java.applet.*; import java.awt.*; public class Applet1 extends Applet { private Font f = new Font(“TimesRoman”,Font.BOLD,36); public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString(“Een bijzonder eenvoudige applet”,20,150); } } JAVA
UITVOERING APPLET JAVA
VISUAL CAFE • componentenpalet (Component Tool Palette) • ontwerpscherm (Form Designer) • projectvenster (Project Window) • broncode-editor (Source Editor) • eigenschappenlijst (Property List) • Applet-viewer JAVA
VOORBEELD 1 import java.awt.*; import java.applet.*; public class WelkomApplet extends Applet { public void init() { setLayout(null); setSize(426,266); bt_Welkom = new java.awt.Button(); bt_Welkom.setLabel("Spreek!"); bt_Welkom.setBounds(72,60,191,61); bt_Welkom.setBackground(new Color(12632256)); add(bt_Welkom); JAVA
VOORBEELD 1(vervolg) lbl_Welkom = new java.awt.Label(" "); lbl_Welkom.setBounds(72,132,190,48); add(lbl_Welkom); SymMouse aSymMouse = new SymMouse(); bt_Welkom.addMouseListener(aSymMouse); } Java.awt.Button bt_Welkom; java.awt.Label lbl_Welkom; JAVA
VOORBEELD 1 (vervolg) class SymMouse extends java.awt.event.MouseAdapter { public void mouseClicked(java.awt.event.MouseEvent event) { Object object = event.getSource(); if (object == bt_Welkom) btWelkom_MouseClick(event); } } void btWelkom_MouseClick(java.awt.event.MouseEvent event) { lbl_Welkom.setText("Welkom bij Visual Café!"); } } JAVA
RESULTAATSCHERM JAVA
INGREDIENTEN VAN EEN APPLET • subklasse van de standaardklasse Applet • moet zich houden aan een aantal veiligheidsristricties • geen main()-methode of ander beginpunt • wordt uitgevoerd door een browser of applet-viewer • moet public gedeclareerd zijn JAVA
LEVENSVERLOOP VAN EEN APPLET • creatie van een instantie d.m.v. de constructor Applet() • de applet wordt geïnitialiseerd door de functie init() • de applet wordt gestart door de functie start() • de methode paint() wordt automatisch uitgevoerd • de applet wordt indien nodig hertekend door repaint() • bij het stopzetten, wordt de functie stop() aangeroepen • het applet-object wordt vernietigd door de functie destroy() JAVA
REGELS VOOR NAMEN IN JAVA (1) • kleine letters, hoofdletters, cijfers, de underscore • en het dollarteken • willekeurige lengte • betekenisvolle namen • nooit beginnen met een cijfer! • namen van klassen beginnen ALTIJD met een hoofdletter JAVA
REGELS VOOR NAMEN IN JAVA (2) • namen van objecten en functies beginnen ALTIJD met • een kleine letter • bestaat een naam van een object of een functie uit meer • dan 1 woord , dan begint het eerste woord met een kleine • letter en het volgende woord met een hoofdletter • vbn. nieuwSaldo, percentageEersteSchijf JAVA
TEKENEN MET JAVA (1) • public class Applet2 extends Applet • { public void init() • { • setBackground( Color.yellow ); • } • public void paint( Graphics g ) • { // een driehoek in het blauw • g.setColor( Color.blue ); • g.drawLine(0,0,100,200); • g.drawLine(100,200,0,200); • g.drawLine(0,200,0,0); JAVA
TEKENEN MET JAVA (2) • //een rechthoek van 100 breed bij 50 hoog op positie (260,10) • g.setColor(Color.green); g.drawRect(260,10,100,50); • // een ellips van 100 bij 50 op positie (260,80) in het wit g.setColor(Color.white); • g.drawOval(260,80,100,50); • // een gevulde rechthoek en ellips in het paars • g.setColor(Color.magenta); • g.fillRect(130,10,100,50); • g.fillOval(130,80,100,50); JAVA
TEKENEN MET JAVA (3) • // een rechthoek met afgeronde hoeken in het rood • g.setColor(Color.red); • g.drawRoundRect(130,150,100,70,40,40); • //ook fillRoundRect(); • // een boog en een taartpunt (= gevulde boog) in het grijs • g.setColor(Color.gray); • g.drawArc(230,200,188,100,15,75); • g.fillArc(260,200,60,40,15,75); • } • } JAVA
EVENTS • Schematisch: Event Event-object Action ActionEvent De methode Event-afhandeling actionPerformed(ActionEvent e) JAVA
EVENTS - VOORBEELD 1 (1) • import java.awt.*; • import java.applet.Applet; • import java.awt.event.*; • public class Schuifbalk extends Applet • implements AdjustmentListener • { private Scrollbar slider; • private int sliderValue = 0; • public void init() • { slider = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,100); • add(slider); • slider.addAdjustmentListener(this); • } JAVA
EVENTS - VOORBEELD 1 (2) public void paint(Graphics g) { g.drawString(“Current value is “ + sliderValue,100,100); } public void adjustmentValueChanged (AdjustmentEvent e) { sliderValue = slider.getValue(); // haalt de momentele waarde van de schuifbalk op repaint(); // paint() wordt terug aangeroepen } } JAVA
EVENTS - VOORBEELD 2 (1) public class Safe extends Applet implements ActionListener { private int guess = 0, combination = 321; private Button btnOne, btnTwo, btnThree, btnAgain; public void init() { btnOne = new Button(“1”); add(btnOne); btnOne.addActionListener(this); btnTwo = new Button(“2”); add(btnTwo); btnTwo.addActionListener(this); btnThree = new Button(“3”); add(btnThree); btnThree.addActionListener(this); btnAgain = new Button(“Try again”); add(btnAgain); btnAgain.addActionListener(this); } JAVA
EVENTS - VOORBEELD 2 (2) public void paint(Graphics g) { if (guess == combination) g.drawString(“Unlocked”,50,50); else g.drawString(“Locked”,50,50); } public void actionPerformed (ActionEvent event) { if (event.getSource() == btnOne) guess = guess*10 + 1; elseif (event.getSource() == btnTwo) guess = guess*10 + 2; else if (event.getSource() == btnThree) guess = guess*10 + 3; else if (event.getSource() == btnAgain) guess = 0; repaint(); } } JAVA
JAR- files • samenvoegen van verschillende files tot 1 JAR-file (1.1) • snelle transportatie over het net (gecompresseerde file) • ARCHIVE-attribuut van de <APPLET>-tag gebruiken: • <APPLET code = "voorbeelden.applet.ColorScribble.class” • ARCHIVE = "Scribbleapplet.jar" width = 400 height = 400> • <PARAM name = "foreground" value = "FF0000"> • <PARAM name = "background" value = "CCFFCC"> </APPLET> • het ARCHIVE-attribuut vervangt het CODE-attribuut niet! JAVA
VARIABELEN (H. 4) • 3 soorten : instantievar., klassevar., lokale variabelen • variabelen, die naar een object verwijzen = REFERENTIES • Voorbeeld: Font f; // = null, als f een member is • f = new Font(“TimesRoman”,Font.BOLD,20); • variabelen van een primitief type (GEEN objecten) • byte boolean 1b • char short 2b • int float 4b • double long 8b JAVA
REFERENTIETYPEN • een toekenningsopdracht = een wijzertoekenning (b2 = b1;) • OPL = een methode toevoegen aan de klasse, die een • diepe kopie maakt (b2 = b1.kopie();) • een vergelijking = een wijzervergelijking ( if (b2 == b1) ...) • OPL1 = de methode equals uit de moederklasse Object • overridden ( if (b1.equals(b2))... ) • OPL2 = een methode uitwerken voor waardevergelijking in • de betreffende klasse ( if (b1.isGelijk(b2)) ... ) JAVA
PRIMITIEVE TYPE : int en Integer (1) • geen controle op de grenzen (cirkel) • dezelfde rekenkundige operatoren als in C++ • Integer = verpakkingsklasse (java.lang) • 1 member, een int, die niet wijzigbaar is (private) • 2 constanten : MAX_VALUE en MIN_VALUE • nuttige functies: • Integer obj = new Integer(3); // of new Integer(“3”); • int i = obj.intValue(); // terug uitpakken • // invoer van een getal: • String s = txtInvoer.getText(); • int j = Integer.parseInt(s); // static functie! JAVA
PRIMITIEVE TYPE : int en Integer (2) // uitvoer van een getal in een tekstvak: txtUitvoer.setText(Integer.toString(j)); // of txtUitvoer.setText(String.valueOf(j)); // uitvoer naar het grafische scherm van j: g.drawString (“Het resultaat is “ + j,10,10); // uitvoer naar het scherm van een object van de klasse Datum: g.drawString(“Vandaag is het “ + vandaag); // mits in de klasse Datum de volgende functie staat: public String toString() { return dag + “/” + maand + “/” + jaar; } JAVA
PRIMITIEVE TYPE : double en Double • een constante van de vorm 3.5 is een double • delen door 0 is toegelaten -> Infinity • geen automatische conversie van een hoger naar een lager type : float f = 10.3; geeft een compilatiefout • OPL = suffix f gebruiken: 10.3f • alle operatoren voor integers kunnen hier ook gebruikt worden • // invoer van een getal: • String s = txtInvoer.getText(); • Double hulp = Double.valueOf(s); // static functie! • double getal = hulp.doubleValue(); • // of • double getal = Double.parseDouble(s); // JDK 1.2!!! JAVA
CONSTANTEN • Karakterconstanten • tussen apostrofs: char ch = ‘A’; • UNICODE - 16 bits: \udddd = Unicode-teken, bevat bijna alle bestaande alfabetten van moderne talen (cultuuronafh.) • escape codes, bv. \u000A = ‘\n’ • Boole-constanten : true en false • String-constanten = OBJECT van de klasse String (geen array) • Numerieke constanten • final int AANTAL = 5; • constanten in een klasse static declareren (vb. Math.PI) JAVA
HERHALINGEN • relationele operatoren: <, <=, >, >=, ==, != • logische operatoren: &&, ||, ! • Alle logische expressies MOETEN true of false opleveren!!! • NIET : if (i) .... ; • while (logische expressie) statement • do statement while (logische expressie); • for (init-expr.;log. expr.;incr. expr.) statement • een break- of een continue-statement in een lus • komma-operator JAVA
BESLISSINGEN • if (logische expressie) statement • if (logische expressie) statement1 else statement2 • switch-statement (VERGEET de break niet na elke case!) • switch (discrete var.) { • case waarde1: statement1 • break; • case waarde2: statement2 • break; • default: statement • break; • } • conditionele expressie : x = 3 * (a > b? a : b ) + 100; JAVA
CONVERSIE • Promotie en casting: • impliciete conversie • int a= 10; • double b = 10.2; • b += a; • expliciete conversie • int i = (int) 3.14; JAVA
SPECIFICATIE VAN EEN KLASSE (eventueel) public (eventueel) final (eventueel) abstract class <naam van de klasse> (eventueel) extends <naam van de moederklasse> (eventueel) implements <lijst van interfaces> { <opsomming van eigenschappen en methoden> } JAVA
ARRAYS - declaratie en initialisatie • Arrays in Java zijn objecten! • Bevat waarden van een elementair type of een object • int[] a; • a= new int[10]; • OF • int a[]; • a= new int[10]; • OF • int[] a = new int [10]; JAVA
ARRAYS - declaratie en initialisatie • Een rij van objecten van de klasse Punt: • Punt [] r; • r = new Punt[10]; • // r is een referentie naar een rij van 10 referenties, die = null • for (int i = 0;i < 10;i++) • r[i] = new Punt(i+1,i+2); JAVA
ARRAYS - declaratie en initialisatie • a en r zijn referenties naar een array met 10 elementen • Default-initialisatie op 0 en op null • De lengte hoeft geen constante te zijn, doch de waarde moet op voorhand gekend zijn: • double[] b; • int n; • //toekennen van een waarde aan n • b = new double[n]; JAVA
ARRAYS - declaratie en initialisatie • length: public attribuut dat de lengte weergeeft • b.length (kan niet meer gewijzigd worden) • Declaratie en initialisatie kan gelijktijdig: • String[] s= {’’ Jan ’’, ’’Stijn ’’, ’’Steven ’’} • Automatische controle op de lengte (vs. C++) JAVA
ARRAYS - voorbeeld - veelhoekapplet public class VeelhoekApplet extends Applet { private Polygon pijl, pijl2; private int[] xRij = { 50, 100, 100, 150, 100, 100, 50, 50 }; private int[] yRij = { 100, 100, 60, 125, 190, 150, 150, 100 }; private final int AANTALPUNTEN = xRij.length; public void init() { pijl = new Polygon( xRij, yRij, AANTALPUNTEN ); for( int i = 0; i < AANTALPUNTEN; i++ ) xRij[ i ] += 150; pijl2 = new Polygon( xRij, yRij, AANTALPUNTEN ); } public void paint( Graphics g ) { g.drawPolygon( pijl ); g.setColor( Color.blue ); g.fillPolygon( pijl2 ); } } JAVA
ARRAYS - referentiekarakter • Referentiekarakter bij toekenning • Stel: int[] a = new int[10], b; • a[1] = 1; • b = a;// a en b wijzen naar dezelfdearray! • b[1] = 10; • a[2] = 20; • Om in b enkel dezelfde waarden te hebben: kopiëren!! • For-lus • Arraycopy-methode van de klasse System JAVA
ARRAYS - referentiekarakter • Opgelet : eerst een creatie met new voor b • Referentiekarakter bij vergelijking • functie equals() uit de moederklasse overridden • zelf een functie ontwerpen JAVA
ARRAY als argument van een methode Uitvoer StaafdiagramApplet: JAVA
ARGUMENTEN VAN EEN METHODE • Algemeen: • Objecten: steeds BY REFERENCE • Primitieve types: steeds BY VALUE • Gevolg: • int i = 5, j = 7; • verwissel (i, j) ; // dit gaat niet! • Oplossing: Eigen wrapperklasse maken JAVA
EIGEN WRAPPERKLASSE (1) • public class IntObj • { • public static void main (String[] args) • { MijnInt i = new MijnInt(5), j = new MijnInt(7) ; • verwissel(i, j) ; • System.out.println("Na verwisseling is : ") ; • System.out.println("i = " + i.x) ; • System.out.println("j = "+ j.x) ; • } • static void verwissel( MijnInt a, MijnInt b) • { int h = a.getX() ; a.setX(b.getX()) ; b.setX(h); } • } JAVA