Professional Documents
Culture Documents
Samenvatting Programmeren I
Samenvatting Programmeren I
Samenvatting programmeren I
Inhoud
Inhoud
Basis
Types
Wiskundige Expressies
Begin van een Java-klasse
Mutatormethoden (void) en accessormethoden (get)
Interessante tekens
Parameters
Velden
Tekst dat Java niet mag lezen
Klasse String
Programma laten werken zonder BlueJ
pakketten
Functies van Java en BlueJ
Als-dan vergelijking
Printen
Lussen
Documentatie en interessante methoden
Random
Lijsten, tabellen en andere opslagmogelijkheden
Gooien en opvangen van fouten (Exceptions)
Programmeren met stijl (enkele tips)
Overerving
Basis
Dynamische en statsiche types
Abstracte klassen en interfaces
1
2
2
2
3
4
4
4
4
4
4
5
5
5
5
5
6
6
6
7
8
9
10
10
10
11
12
13
Janos Braem
Basis
Types
Alles is van het type Object. Als je bijvoorbeeld een tabel maakt van het type Object kan je daar alles
in steken.
Een geheel getal int
Een reel getal double
1 teken char
aanduiding q (niet q, dat is een string)
waar/niet waar boolean (true false in Java).
Een booleaanse waarde wordt vaak een vlag genoemd bij methoden waarbij een boolean
teruggegeven moet worden. Bv: bij de methode isRed kan je een vlag maken boolean isRed.
Tijdens je methode vul je die booleaanse waarde en deze kan dan op het einde teruggegeven
worden.
Deze 4 primitieve types horen bij de klassen: Double, Integer, Character, Boolean (je kan deze klassen
dan gebruiken bij een ArrayList en een HashMap).
Dit zijn twee interessante methoden die van een string een int of een double maken.
Double.parseDouble
Integer.parseInt
Verder zijn er nog enkele opmerking i.v.m. het type char. Al de waarden in het type char zijn
alfabetisch geordend. Zo kun je ook chars met elkaar vergelijken. Om bv te weten of een char een
hoofdletter is kan je het volgende doen: return ch >= A && ch <= Z;
Zo kan je ook twee getallen van elkaar aftrekken. Zo wordt D-A 3 en weet je dus dat deze twee
letters 3 plaatsen van elkaar afwijken. Verder kan je ook een getal omzetten in een hoofdletter:
if (ch >= a && ch <= z)
ch += A - a;
return ch;
Er treedt wel een probleem op wanneer je een int en een char met elkaar wil optellen. Je moet dan
een cast gebruiken.
if (ch >= a && ch <= z)
return (char)(ch + A - a);
else
return ch;
Wiskundige expressies
+ optellen
- aftrekken
i++ is hetzelfde als i= i+1
i-- is hetzelfde als i= i-1
i += m is hetzelfde als i = i+m
* - vermenigvuldigen
/ - delen (deling van twee gehele getallen is een geheel getal, analoog rationale getallen)
% - modulus of rest-na-delen
Rekenregels: modulus, vermenigvuldigen en delen eerder dan optellen en aftrekken
== - is gelijk aan (bij String gebruik de methode equals!)
!= - is niet gelijk aan
< - kleiner dan (analoog voor groter dan)
<= kleiner of gelijk aan (analoog voor groter of gelijk aan)
Absolute waarde Math.abs(x)
Correct wiskundig afronden (java rond steeds naar beneden af) Math.round(x)
Janos Braem
Janos Braem
Interessante tekens
= steekt hetgeen dat na dit teken staat in het geen dat ervoor staat
. voert de methode die erna staat uit op hetgeen ervoor staat
Merk op! Als de methode in de klasse zelf voorkomt moet je ze niet op een object toepassen met . .
return geeft iets terug
; moet na elke zin die je typt in java, behalve voorwaarden bij lussen of een als-dan vergelijking en
ook niet na het declareren van een nieuwe methode, klasse of object.
this.iets met this kan je vanuit de ene constructor een andere constructor van dezelfde klasse
oproepen, this verwijst ook naar het object zelf
! dit maakt van hetgeen erachter staat het omgekeerde (bv. true wordt dus false)
(Type) Dit is een cast. Dit moet je voor iets zeggen en dan zeg je aan de compiler dat hetgeen dat
hierna staat van het type tussen de haakjes is.
Parameters
De parameters moeten steeds tussen haakjes staan en later nog gebruikt worden. Je maakt een
parameter door eerst het type te schrijven en daarna de naam van de desbetreffende parameter.
Velden
Er worden telkens nieuwe velden gedeclareerd in het begin. Het programma moet vooraf weten wat
hij allemaal zal moeten gebruiken, maar hij moet het maar gebruiken (en initialiseren) in de methode
zelf. Stel dat je in het begin hebt geschreven: private Schaakbord schaakbord. Dan moet je de eerste
keer dat je dit schaakbord nodig hebt nog schrijven: schaakbord = new Schaakbord (dit kan je ook al
doen als je een object van de klasse aanmaakt).
Klasse String
Deze klasse is geen primitieve klasse, maar toch moet je de klasse niet bovenaan het programma
importeren. Strings worden voorgesteld als q (niet q, anders heb je een char). Enkele belangrijke
dingen over Strings:
1. Als je wilt weten of twee strings gelijk zijn moet je de methode .equals() gebruiken en niet
==. Bv. Stel je wilt weten of String s1 gelijk is aan String s2 dan doe je het volgende:
s1.equals(s2).
2. Als je de lengte van een string wil weten, gebruik je de methode: .length()
3. Als je een String wilt splitsen gebruik je de volgende methode: .substring(beginpositie,
eindpositie), waarbij je de eindpositie niet per s hoeft te zeggen.
Janos Braem
Pakketten
Dit is een mechanisme die gelijkaardige klassen in een groep schikt. Alle klassen en pakketten zijn
gebundeld in het pakket java. Elke subpakket heeft zo een aparte naam. Stel dat we onder java een
klasse K hebben uit het pakket p dan wordt de officile naam van die klasse: java.p.K. Bij Random is
dat bijvoorbeeld: java.util.Random. Dus in principe moet je altijd de officile naam gebruiken. Maar
om het schrijven te versimpelen zijn er enkele regels ingevoerd:
Je kan een klasse importen. Die doe je bovenaan door te schrijven import java.p.K. Vanaf nu
moet je dus in de rest van je klasse nooit meer de officile naam van K gebruiken maar kan je
gewoon K gebruiken.
Klassen uit hetzelfde pakket waar je in bezig bent moet je niet meer importen en officiel
benoemen.
Om een bestand in het package te plaatsen moet je het enerzijds in de juiste map zetten maar ook
bovenaan schrijven: package java.p bijvoorbeeld.
Printen
Printen op een nieuwe regel System.out.println( te printen tekst )
Printen ernaast System.out.print( te printen tekst )
Janos Braem
Lussen
While-lus
while (voorwaarde) {doe iets; doe iets; doe iets;} zolang aan de voorwaarde voldaan is, doet hij iets
Merk op! Als je in je voorwaarde bij de while lus een dubbele conditie plaats, moet je eens
zeer goed bijlage 1 lezen.
for-each-lus
for (Type naam: collectie) {doe iets;} voor elk element (=naam) van het Type uit de collectie, doe
iets
Merk op! Bij een for-each-lus, mag je NOOIT je lijst veranderen waarmee je aan het werken
bent.
Merk op! Als je dit schrijft, zal je niet elk element in de tabel in 5 veranderen:
double [] tab = new double [20];
for (double d : tab) {d=5}.
Java gaat 5 in de variabele d steken, maar niet in de tabel zelf.
Het geen je hierboven schrijft is eigenlijk dit:
For (int i = 0; i<tabel.length ; i++){double d = tab[i]; d=5;} (dit klopt dus niet!)
for-lus
for(initialiseren; voorwaarde; eindhandeling){doe iets} je initialiseert een waarde, als daarna aan
de voorwaarde voldoen is doe hij hetgeen binnen de accolades. Daarna controleert java terug de
voorwaarde. Vanaf het moment dat er niet aan de voorwaarde voldaan is wordt de eindhandeling
uitgevoerd.
Random
Random is een bepaalde klasse die een bepaald willekeurig getal kan weergeven. Om de methode te
gebruiken schrijf je helemaal bovenaan je programma: import java.util.random. Een nieuw object van
de klasse random wordt op de volgende manier aangemaakt: private Random
Janos Braem
Janos Braem
Janos Braem
Janos Braem
Overerving
Basis
Als je van verschillende klassen enkele methoden en velden gemeenschappelijk hebt is de basis voor
overerving gelegd. Overerving zorgt namelijk voor een betere structuur in je programma. Het
programma wordt dan ook veel gebruiksvriendelijker en overzichterlijker. Hoe ga je te werk?
De superklasse is de gemeenschappelijke klasse die verschillende subklassen heeft. Die superklasse
heeft een aantal methoden en velden, alle subklassen hebben die dan ook. Alleen kan je aan elke
subklasse bijkomende individuele eigenschappen geven. Stel dat je bijvoorbeeld een klasse slangen
hebt, dan kan je instellen dat die geen poten en schubben hebben, verder kan je dan met
verschillende subklassen verschillende soorten slangen gaan definiren met elk hun eigen
eigenschappen.
Een subklasse begint met: public class subklasseNaam extends superklasseNaam.
Bij de initialisatie ga je dan alle parameters die je nodig hebt om een object van de superklasse aan te
maken naast elkaar zitten onder de vorm: super(para1, para2). Verder verloopt alles hetzelfde.
Enkele regels:
1. Een subklasse heeft alle methoden van de superklasse (deze moet je dus niet opnieuw
schrijven).
2. Als je een object nodig hebt van de structuur in een methode buiten de structuur gebruik je
steeds de naam van de superklasse. Als je een tabel wilt maken van slang gebruik je als type
best Slang en niet Ratelslang bijvoorbeeld, zo kunnen alle slangen toegevoegd worden en
niet alleen ratelslangen.
3. In sommige situaties kan je die super niet toepassen. Dan kan je de velden die je nodig hebt
veranderen in protected (enkel zichtbaar voor de klasse zelf en subklassen ervan). Maar het
is misschien beter om met getters en setters te werken.
4. Een object van de superklasse en een object van een subklasse hebben in principe hetzelfde
type. Als het bijvoorbeeld toch niet werkt, kan je het volgende gebruiken: c = (Type) d. Maar
dan moet d wel degelijk van het type zijn dat binnen de haakjes aangegeven staat. Dit laatste
liever niet gebruiken.
5. Elk type heeft een superklasse, namelijk de klasse Object. Vb.: public class naamKlasse is
eigenlijk public class naamKlasse extends Object. (extends Object mag weggelaten worden.)
6. Als we een methode van een superklasse willen gebruiken moeten we het volgende
toepassen: super.naamMethode (parameters).
Opmerking: als een subklasse een lege constructor heeft mag die volledig weggelaten worden.
Janos Braem
11
Janos Braem
Voorwaarde 1 OK
Voorwaarde 1 niet OK
Dan vul je de tabel in en kijk je wat er in de vakjes moet. Dan kan je makkelijker zien welke
voorwaarde je moet gebruiken.
Hier is er ook nog een opmerking te maken ivm programmeren met stijl:
public boolean isPriem (int getal) {
int deler = 2;
while (deler * deler <= getal && getal % deler != 0)
deler ++;
return deler*deler > getal;
}
Is veel beter geprogrammeerd dan:
public boolean isPriem (int getal) {
int deler = 2;
while (deler * deler <= getal && getal % deler != 0)
deler ++;
if (deler*deler > getal)
return true;
else
return false;
}
12
Janos Braem
13
Janos Braem