• • • • • • • • • • • • • • •

Klassen en objecten Zelf klassen maken Analyse en ontwerp Collecties Operatoren Keuzes Herhalingen Statische variabelen – methoden – main functie algoritmen Polymorfie en overerving Gebruikersinterface Polymorfisme met interfaces Exception afhandeling Afbeeldingen en animaties Streams

API

Application programming interface Verzameling definities Vormen scheiding tussen lagen van abstractie Voordeel : applicaties kunnen werken op hoog niveau van abstractie • Verbergt voor gebruiker onbelangrijke details • Vb tekenprogramma moet niets afweten hoe printer aangestuurd wordt, roept daarvoor een stuk software in printer – api op. • Is niet gelijk aan bibliotheek : api’s geven toegang tot bibliotheek. • • • •

API

• Vanuit BlueJ

• Rechtstreeks via website : http://java.sun.com /j2se/1.5.0/docs/api/ • Lokaal downloaden : http://java.sun.com/j2se/1.5.0/docs/index.htm l

•Api (lokaal)

• packages

Statische variabelen

• Member variabelen
– Elke object heeft eigen member variabele met eigen waarde. – Soms heeft elk object een kenmerk die voor elk object gelijk is. – Soms nuttig attributen en methoden associeren met verzameling van objecten van zelfde type dus met de klasse – Vb bijhouden hoeveel leerlingen (moet dit bij elk leerling object worden bijgehouden?) – Vb aantal leerlingen. (zal dezelfde zijn bij leerling 1 als bij leerling 2

• Statische attributen en methoden

Member variabelen

public class leerling { private String naam, voornaam, klas; private int aantalCursisten; public leerling(String naam, String voornaam, String klas) { this.naam = naam; this.voornaam = voornaam; this.klas = klas; //bij iedere nieuwe cursist verhogen wij de waarde this.aantalCursisten++;

}

public int getAantalCursisten() { return aantalCursisten; } }

aantalCursisten = membervariabele

Statische variabelen

• •

Bij aanmaak nieuw object – verhogen waarde aantal cursisten this.aantalCursisten++; Dus 2 objecten van klasse cursisten : normaal aantalCursisten = 2

Werkelijk resultaat

logisch : aanmaak object -> verhoging van eigen lidvariabele aantalCuristen = afhankelijk van object van klasse

Statische variabelen

• • • • •

Oplossing : statische variabele Bestaan : onafhankelijk van objecten Aanmaak bij eerste maal klasse in geheugen wordt geladen. Waarde is dezelfde voor alle objecten van de klasse Syntax :

static int aantalCursisten;

Statische variabelen

public class leerling { private String naam, voornaam, klas; static int aantalCursisten; public leerling(String naam, String voornaam, String klas) { // initialise instance variables this.naam = naam; this.voornaam = voornaam; this.klas = klas; } aantalCursisten++;

public int getAantalCursisten() { return aantalCursisten; } }

Statische variabelen

Statische variabele aantalCursisten is voor elk object hetzelfde., Men heeft geen object nodig om deze variabele aan te spreken. (zie volgende dia)

Statische variabelen

• • • •

Statische variabelen bestaan onafhankelijk van objecten van een klasse Zijn dus bruikbaar vanaf het begin van het programma. Men hoeft niet eerst een object aan te maken. Men spreekt ze aan via de klasse.
public class lijst { leerling nieuw; public lijst() { String voornaam = "pieter"; String naam = "Desmet"; String klas = "4ER"; nieuw = new leerling(voornaam, naam, klas); } public int getAantalCursisten() { return leerling.aantalCursisten; } }

Klasse lijst die gebruik zal maken van klasse leerling

aantalCursisten = static : kan aangeroepen worden via de klasse i.p.v object

Statische variabelen

aantalCursisten komt niet voor in data van leerling

Oefenbundel : 7-1

Statische methoden

• • • •

Zijn eigendom van de klasse Er hoeft geen object aangemaakt te worden om deze methoden aan te roepen. Zijn bedoeld ter ondersteuning van de klasse. Vb getAantalCursisten : zal niet echt nodig zijn om vanuit een object deze informatie te kennen.
public static int getAantalCursisten() { return aantalCursisten; }

Aanroep zonder leerling object

public class lijst { private int aantalCursisten; //data public lijst() //constructor { this.aantalCursisten = leerling.getAantalCursisten(); } }

Statische methoden

• Nooit afgevraagd waarom je geen object moet aanmaken van de klasse System om de methode out te gebruiken in bijvoorbeeld System.out.println()??? • Nooit afgevraagd waarom je geen object van de klasse Math hebt aangemaakt om de methode sqrt te gebruiken???

Statische methoden

• Wanneer instantie methoden of statische methoden? • Regel: – Methoden die object bewerken of object beïnvloeden zijn gedeclareerd als instantie methoden – Methoden die algemene utility’s leveren, maar geen directe invloed hebben op een instantie van die klassen kunnen beter als klassemethoden of statische methoden gedefinieerd worden.

Gedaanten van Java

• Java programma’s kunnen diverse vormen aannemen:
– – – – – – – –

• Tot nu gebruik van BlueJ om :

Applets (programmeren 1) Servlets (programmeren 3) Beans (programmeren 2) Zelfstandige programma’s,… (programmeren 1) Klassen aan te maken Objecten aan te maken Berichten te versturen Goed om te beginnen, in praktijk onhaalbaar

Zelfstandige programma’s

• Java toepassing bestaat uit:

• Java toepassing kan uitgevoerd worden in:

– 1 klasse – Meerdere klassen – Tot nu (max 2 klassen denk aan Team, Programmeur)

• Java toepassing laten werken:

– Console window – GUI (grafische user interfaces : met vensters en controls) – Aangeven welke klasse als vertrekpunt heeft – In deze klasse een specifieke methode opgeven nl:

public static void main(String args[]){ ….. }

Zelfstandige programma’s

public static void main(String args[]){
} …..

public : moet van buitenaf kunnen benaderd worden static : is klassemethode. Wordt als eerste methode aangeroepen in programma, dus er mag geen object voor nodig zijn. void: methode geeft geen resultaat terug main: naam van de methode waar VM naar zoekt bij opstarten van toepassing (String args[]: wordt gebruikt bij opdrachtregels zie later

Zelfstandige programma’s

• main wordt gebruikt om:

• Eenmaal beginobject aangemaakt, nemen andere methoden van alle andere klasse alles over.

– Programma te laten starten – Het beginobject aan te maken

main functie

• •

Open de broncode van de klasse forfait Typ volgende code als laatste methode binnen je klasse

public static void main(String args[]) { forfait berekening1 = new forfait(500000); berekening1.berekenForfait(); berekening1.print(); }

main functie

public static void main(String args[]) { forfait berekening1 = new forfait(500000); berekening1.berekenForfait(); berekening1.print(); }

Aanmaken nieuw object van onze klasse forfait nl berekening1 Aanroepen van de juiste methodes om het resultaat te bekomen

main functie

public static void main(String args[]) { forfait berekening1 = new forfait(500000); berekening1.berekenForfait(); berekening1.print(); }

Voorbeeld

Bekijk voorbeeld in map programmacode:
Rechthoek.java

•rechthoek

Oefenbundel : 7-2