Platformonafhankelijk programmeren Aan het werk met Java Platformonafhankelijk programmeren Begeleidend presentatiemateriaal Versie 1.0 23/6/2011 Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 1 Inleiding Programmeren Java als programmeertaal Java als programmeeromgeving Handboek Oefeningen De werkomgeving op school Installatie op je eigen pc Een werkend programma Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits broncode editor MijnProgramma.java programmeur compiler JVM MijnProgramma.class vertaalde machinecode gebruiker Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 1.5 Handboek http://hoger.deboeck.com/titres/ 120802_1/aan-het-werk-met-java.html Aan het werk met Java Lieven Smits
2 Objectgeoriënteerd programmeren Abstractie Klassen en objecten Attributen en gegevenstypes Methodes Constructoren Statische attributen en methodes Primitieve gegevenstypes Referentietypes Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 2.1 Abstractie Aan het werk met Java Lieven Smits
2.3 Attribuut: primitieve types doel geheugen extreme waarden byte geheel getal 1 byte -128; +127 short 2 bytes -32 768; +32 767 int 4 bytes -2 147 483 648; +2 147 483 647 long 8 bytes 9 223 372 036 854 775 808; +9 223 372 036 854 775 807 float vlottende komma +/- 2-128; +/-2127 double +/- 2-1024; +/-21023 char alfabetisch karakter – boolean logische waarde waar of onwaar Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 2.5 Constructoren student1 ? Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 2.5 Constructoren student1 familienaam voornaam ? Aan het werk met Java Lieven Smits
2.6 Statische attributen en methodes code van statische methode code van normale methode code van constructor objectattribuut (niet statisch) neen ja klassenattribuut (statisch) objectmethode (niet statisch) klassenmethode (statisch) constructor op naam constructor via this Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 2.7 Primitief type getal Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 3 Basisconstructies Opdrachten Veranderlijken Toekenningen Bewerkingen Invoer/uitvoer Uitdrukkingen Normaal verloop van een programma Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 3.4 Bewerkingen bewerking gebruik betekenis >> uitdr >> getal verschuif de bits van uitdr zoveel plaatsen naar rechts als getal aangeeft << uitdr << getal verschuif de bits van uitdr zoveel plaatsen naar links als getal aangeeft uitdr >>> getal verschuif de bits van uitdr zoveel plaatsen naar rechts als getal aangeeft; hou geen rekening met het teken & u1 & u2 bereken bit per bit een logische EN tussen de bits van u1 en u2 | u1 | u2 bereken bit per bit een logische (niet-exclusieve) OF tussen de bits van u1 en u2 ^ u1 ^ u2 bereken bit per bit een exclusieve OF tussen de bits van u1 en u2 ~ ~uitdr bereken bit per bit de logische ontkenning (NIET) van de bits van uitdr Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 3.6 Uitdrukking uitdrukking waarde x 1 -x -1 +x x+x 2 x%x x-15 -14 x=3 3 x/2 x/2.0 0.5 x+1 4 x=x+1 “Ja”+“va” Java Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 4 Controlestructuren Voorwaardelijke opdrachten en uitdrukkingen Lusopdrachten Recursieve aanroep van methodes Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 4.1 Voorwaarden Vergelijken van twee uitdrukkingen Logische bewerkingen Algemene vorm Voorwaardelijke uitdrukking Keuzeopdracht Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits Vergelijkingen bewerking betekenis == is gelijk aan != is verschillend van < is strikt kleiner dan > is strikt groter dan <= is kleiner dan of gelijk aan >= is groter dan of gelijk aan Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits Logische bewerkingen bewerking lees betekenis && en is waar als beide leden waar zijn || of is waar als minstens een van beide leden waar is ! niet keert de betekenis van het rechterlid om – waar wordt onwaar, onwaar wordt waar Aan het werk met Java Lieven Smits
Volgorde der bewerkingen groep bewerkingstekens unaire operatoren + - ! vermenigvuldiging * / optelling, concatenatie + - ongelijkheid < > <= >= gelijkheid == != en && of || toekenning = Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 4.2 Lusopdrachten De while-opdracht Genestelde lussen Rijen De for-opdracht De do-opdracht Iteraties en lusopdrachten afbreken; labels De afgekorte for-opdracht (‘for each’) Aan het werk met Java Lieven Smits
voer <reeks1> uit voer <reeks2> uit start <voorwaarde> voldaan? ja neen voer <reeks1> uit voer <reeks2> uit einde Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits start <voorwaarde> voldaan? neen ja <opdrachten> einde Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits int[] score 17 13 20 11 13 score[0] score[1] score[2] score[3] score[4] Aan het werk met Java Lieven Smits
start ja neen einde voer <opdrachten> uit <voorwaarde> voldaan? ja neen einde Aan het werk met Java Lieven Smits
<opdrachten voor> start <opdrachten voor> <voorwaarde> voldaan? neen ja <opdrachten na> einde Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 4.3 Recursie Voorbeeld Definitie Vervanging van een enkelvoudige recursie door een lusopdracht Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 5 Overerving Subtypes Overerving van attributen en methodes Onderdrukken van methodes Abstracte klassen en methodes Interfaces De klasse Object, stamouder van alle anderen Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits Object Legende: extends Bestaande klasse Number Short String MijnKlasse1 Zelfgemaakte klasse MijnKlasse3 MijnKlasse2 Aan het werk met Java Lieven Smits
6 Pakketten, afscherming en groepering Gebruik van pakketten Tekst Invoer/uitvoer Toegang Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.1 Gebruik van pakketten De klassenbibliotheek van de JRE import package Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.2 Werken met tekst String en StringBuffer Methodes van de klasse String Methodes van de klasse StringBuffer Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.3 Invoer/uitvoer Sequentiële en willekeurige toegang Bytes en characters Bestanden Geheugenstromen Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.3 Invoer/uitvoer expressie betekenis abc alleen de streng “abc” a[bc] de letter a gevolgd door de letter b of c [A-Z] een hoofdletter a? de letter a of de lege streng a* een opeenvolging van letters a of de lege streng a+ een opeenvolging van letters a [A-Z] [a-zA-Z]* een hoofdletter, eventueel gevolgd door een willekeurig aantal letters . een willekeurig teken [0-9] [0-9] [0-9]? twee of drie cijfers Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits tekstverwerker tekstbestand database engine gegevensbank Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.4 Toegang Toegangsniveaus van attributen en methodes Toegangsniveaus van klassen en interfaces Inwendige klassen Statische inwendige klassen Gewone inwendige klassen Anonieme klassen Scope, visibility, lifetime, access Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.4 Toegang character stream byte stream invoer Reader InputStream uitvoer Writer OutputStream character stream byte stream invoer BufferedReader BufferedInputStream uitvoer BufferedWriter BufferedOutputStream Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.4 Toegang character stream byte stream gebruik DataOutputStream numerieke gegevens (en eventueel ook tekst) in bestanden opslaan DataInputStream dezelfde bestanden terug lezen ObjectOutputStream objecten (instanties van klassen) in bestanden opslaan ObjectInputStream LineNumberReader LineNumberInputStream regelnummers van een invoerstroom tellen en bijhouden PushbackReader PushbackInputStream eerste letter bekijken vóór de eigenlijke lezing ervan SequenceInputStream verschillende bytestromen achter elkaar plaatsen alsof het slechts één continue invoerstroom betrof Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.4 Toegang character stream byte stream invoer CharArrayReader, StringReader ByteArrayInputStream uitvoer CharArrayWriter, StringWriter ByteArrayOutputStream Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 6.5 Toegangsbeperking niveau sleutelwoord betekenis publiek public toegankelijk voor alle andere klassen beschermd protected toegankelijk voor subtypes van de huidige klasse en voor klassen binnen hetzelfde pakket pakket (geen) toegankelijk voor klassen binnen hetzelfde pakket privé private alleen toegankelijk binnen de huidige klasse Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 7 Kwaliteit Exceptions Commentaar en documentatie Levenscyclus systeemontwikkeling Domeinklassen Architectuur Design patterns Unit testing Asserties Aan het werk met Java Lieven Smits
7.3 De documentatiegenerator Javadoc tag betekenis @author gaat vooraf aan de naam van de auteur van een klasse of een onderdeel @version geeft het versienummer en/of de datum, meestal alleen van een hele klasse @exception signaleert dat een methode een bepaald type exception kan genereren, en wat daarvan de interpretatie is @throws synoniem van @exception @param gevolgd door de naam van een parameter, documenteert de betekenis van een methodeparameter. Nauw verwant hiermee is @return @return legt de teruggeefwaarde van een methode uit @see verwijst naar de documentatie van een andere klasse of een ander klasseonderdeel Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 7.5 Domeinklassen persoon klant bestelling Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 7.5 Domeinklassen Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 7.5 Domeinklassen Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 7.6 Architectuur gui frontend backoffice domein database Aan het werk met Java Lieven Smits
7.7 Moduletest met JUnit methodenaam de test is geslaagd als … assertEquals de twee parameters gelijke inhoud hebben (zelfs als het verschillende objecten zijn) assertNotEquals de twee parameters geen gelijke inhoud hebben assertSame de twee parameters objecten zijn met hetzelfde adres in het geheugen (dus niet alleen dezelfde inhoud) assertNotSame de twee parameters verschillende objecten zijn assertTrue de gegeven logische waarde false is assertFalse de gegeven logische waarde true is assertNull de gegeven objectreferentie null is (niet naar een object verwijst) assertNotNull de gegeven referentie naar een bestaand object verwijst fail nooit geslaagd – gelijkwaardig met assertTrue(false) Aan het werk met Java Lieven Smits
8 Bijzondere technieken Annotaties Abstracte gegevenstypes Generische gegevenstypes Collections Aan het werk met Java Lieven Smits
8.2 Abstract gegevenstype ‘stack’ Object 5 push Object 5 Object 4 Object 4 Object 3 Object 3 Object 2 Object 2 Object 1 Object 1 aanwijzer aanwijzer Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 8.4 Collections Collection Map Set List Queue SortedMap SortedSet Aan het werk met Java Lieven Smits
8.4 Collections: wachtlijn 1 2 3 4 remove() add() element() Aan het werk met Java Lieven Smits 50
Aan het werk met Java Lieven Smits 9 Webtoepassingen Servers, browsers, HTTP en HTML Servlets JSP Sessies Aan het werk met Java Lieven Smits
9.1 Servers, browsers en HTTP verzoek browser webserver antwoord Aan het werk met Java Lieven Smits
9.2 Levenscyclus van een servlet Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 10 Grafische interfaces Swing-componenten Layout management Event handling Menus Graphics Applets MVC Tabellen en bomen Aan het werk met Java Lieven Smits
10.2 Component: coördinaten Horizontaal (x) y x Verticaal (y) Aan het werk met Java Lieven Smits
10.2 Component: overerving java.lang.Object java.awt.Component Legende: java.awt.Container extends Bestaande klasse java.awt.Window Zelfgemaakte klasse java.awt.Frame javax.swing.JFrame MijnVenster Aan het werk met Java Lieven Smits
10.4 Event-driven programming klassieke, lineaire toepassing gebruiker run return open klik toets select klaar sluit gebeurtenis- gestuurde toepassing Aan het werk met Java Lieven Smits
10.7 Model/View/Controller vraag toestand wijzig toestand meld wijziging gebruikershandeling Controller View bepaal/verander samenstelling Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 10.8 Boomstructuur financiën uitgaven inkomsten arbeid kapitaal wonen vervoer kleding diversen verkoop werkgever huur klima gas+elek Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 11 Beans Herbruikbare componenten: rolverdeling Gebruik van een bestaande bean Het bestandsformaat jar Zelf een bean ontwikkelen Properties Events Bound properties Constrained properties BeanInfo Aan het werk met Java Lieven Smits
12 Parallel programmeren Begrippen Timers Animatie Threads Prioriteit en activering Synchronisatie Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits x1 x0 x2 straal x cos(hoek) X y1 straal hoek y0 straal x sin(hoek) y2 Y Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits uitvoerbaar tijd van sleep om of einde van andere reden nieuw inactief geblokkeerd start sleep of andere reden systeembeslissing yield dood actief einde van run Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits uitvoerbaar tijd van sleep om of einde van andere reden nieuw inactief geblokkeerd start sleep of andere reden systeembeslissing yield krijg sleutel dood actief geblokkeerd op object einde van run synchronized Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits uitvoerbaar tijd van sleep om of einde van andere reden nieuw inactief geblokkeerd start sleep of andere reden systeembeslissing yield krijg sleutel dood actief geblokkeerd op object einde van run synchronized wait notify notifyAll wachtkamer Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 13 Databases SQL Java Database Connectivity Gegevens opvragen Gegevens wijzigen Transacties Gevorderde technieken Hibernate Aan het werk met Java Lieven Smits
14 Gedistribueerd programmeren Algemene probleemstelling Webservices Call by value en call by reference Enterprise JavaBeans Spring Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits presentatie zakelijke logica gegevensopslag Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits presentatie opslag zakelijke logica gedistribueerde presentatie presentatie op afstand gedistribueerde logica opslag op afstand gedistribueerde opslag Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits RekenServerImpl implements RekenServer public int bereken( int param) ClientKlasse ... int resultaat = bereken(17); gewone methodeaanroep in server-JVM gewone methodeaanroep in client-JVM RPC-infrastructuur (eventueel met ClientKlasseSkelet) RekenServerStub implements RekenServer public int bereken( int param) netwerkcommunicatie (afgeschermd van programmeur) Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 14.4 EJB – stateful beans client 1 stateful bean: sessie 1 client 2 stateful bean: sessie 2 Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 14.4 EJB – stateless beans pool van stateless beans client 1 client 3 client 2 Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 15 Java op de GSM De beperkingen van Java Micro Edition Installatie van de programmeeromgeving Voorbeeldprogramma Installatie op de GSM Een spel Aan het werk met Java Lieven Smits
15.3 Toestanden van een MIDlet active destroyed paused Aan het werk met Java Lieven Smits
Aan het werk met Java Lieven Smits 15.3 De rekenmachine cijfer cijfer INIT TERM1 TERM2 RESULT cijfer bewerking gelijkteken wis Aan het werk met Java Lieven Smits 75