Oefeningen cursus Object Oriënted Programming

advertisement
Gino Scheppers
Syntra West
Oefeningen cursus Object Oriënted Programming
Default Project properties
Vooraleer de oefeningen te starten gelieve onderstaande instellingen te verrichten.
Project  Default Project Properties
Een project maakt men aan met de project wizard.
In alle gevallen kan men reeds op Finish klikken na het invullen van de eerste stap.
File  Project
24/07/2017
1
Gino Scheppers
Syntra West
Klik op Finish
Oefeningen op de basisconcepten
Oef1
Maak een nieuwe klasse aan met de naam ‘MijnEersteClass’. Vlag alle keuzemogelijkheden af.
24/07/2017
2
Gino Scheppers
Syntra West
package oef1;
class MijnEersteClass {
}
De package heeft aan in welke bibliotheek de klasse terecht zal komen.
Compileer de klasse.
Oef 2
Declareer twee data-elementen.
1. omzet als integer
2. product als string
package oef1;
class MijnEersteClass {
int omzet;
String product;
}
Oef 3
Maak een opstart-klasse:
1. met de naam Opstart
2. in de package Oef1
3. vink de keuzemogelijkheid ‘Generate Main method’ aan
Resultaat :
package oef1;
24/07/2017
3
Gino Scheppers
Syntra West
class Opstart {
public static void main(String[] args) {
}
}
Oef 4
1.
2.
3.
Declareer de variabel mijnEersteClass als klasse MijnEersteClass.
Maak een instantie aan van de klasse MijnEersteClass en plaats de referentie in de variabel
mijnEersteClass
Run het programma (Run  Run “Opstart.java” using defaults)
Oef 5
Probeer de referentie van het gecreëerde object te weten te komen met het statement.
System.out.println(mijnEersteClass);
Oef 6
Beantwoord volgende vragen :
1. Zijn de variabelen van oef2 ingekapseld ?
2. Maak de class public.
3. Maak de variabelen public en probeer na creatie van het object de inhoud van de variabelen te wijzigen,
lukt dit ?
4. Maak de variabelen private.
5. Lukt het nu nog om de variabelen te wijzigen ?
Oef 7
1.
2.
3.
4.
Maak een project client.
Maak een public klasse Client (package clientenadministratie)
Specifieer twee data elementen (=String) naam en voornaam.
Kapsel deze in en schrijf de nodige getters en setters.
Tip : gebruik de bean-generator om de getters en setters aan te maken.
5. Vervang de twee getters door één getVolledigeNaam
Oef 8
1.
2.
3.
4.
5.
Maak een default constructor voor de klasse client
Initialiseer de private variabelen met blanco strings
Maak een tweede constructor met twee String parameters en initialiseer de data met de parameters
Maak een derde constructor waarbij enkel de naam wordt geïnitialiseerd. Roep als eerste statement de
default constructor op.
Schrijf een destructor, en plaats alle members op null.
Oef 9
Maak een klasse ValueTest met een methode die drie maal het ontvangen getal zal vermenigvuldigen. De
parameter is een integer. (elementair datatype)
class ValueTest {
public void maalDrie(int getal){
getal=getal*3;
24/07/2017
4
Gino Scheppers
Syntra West
}
}
Bekijk de inhoud van een variabel getaltest met een initiële waarde 5, na de toepassing van de methode
maalDrie.
class Opstart {
public static void main(String[] args) {
int getaltest=5;
System.out.println(getaltest);
ValueTest valueTest=new ValueTest();
valueTest.maalDrie(getaltest);
System.out.println(getaltest);
}
}
Oef 10
Maak een klasse ReferenceTest met een methode die in staat is om alle letters om te keren, als parameter
ontvangen we een StringBuffer object.
class ReferenceTest {
public void keerAlleLettersOm(StringBuffer tekst){
tekst.reverse();
}
Bekijk nu de inhoud voor en na de behandeling met de methode keerAlleLettersOm.
class Opstart {
public static void main(String[] args) {
ReferenceTest referenceTest=new ReferenceTest();
StringBuffer naam=new StringBuffer("Scheppers");
System.out.println(naam);
referenceTest.keerAlleLettersOm(naam);
System.out.println(naam);
}
Wat is het resultaat ?
Oef 11
Maak een bijkomende methode die in staat is om alle letters om te zetten naar hoofdletters, maar als parameter
ontvang je nu een String
public void naarHoofdletters(String tekst){
tekst.toUpperCase();
}
Doe de volgende test :
String voornaam="Gino";
System.out.println(voornaam);
referenceTest.naarHoofdletters(voornaam);
System.out.println(voornaam);
Wat is het resultaat ? Wat is hier de reden van ?
24/07/2017
5
Gino Scheppers
Syntra West
Oef 12
1.
2.
3.
Open project prog5_4. De class Prog5_4 ontbreekt !
Maak deze class met een main-methode aan, copiëer hiervoor het nodige uit Prog5_3.
Merk op dat beide klassen niet public staan. Een public class dient in een afzonderlijk bestand te staan.
Oef 13
1.
2.
Open project prog5_5. Run het project.
Omdat we regelmatig de inhoud van de stack wensen af te drukken verplaatsen we onderstaande code,
naar een methode showStack in de class Stack. Wat moeten we hier nog aan wijzigen ?
while (!s1.empty())
{ System.out.print(s1.pop() + " ");
}
Wijzig het prog5_5 zodat nu gebruik wordt gemaak van methode showStack
Oef 14
1.
2.
3.
4.
5.
Maak een project Oef14 in de package oef14.
Maak een class Programma met een main-methode. Zoek in de Java-bibliotheek naar een class Stack.
Gebruik deze in de main, en test de push en pop methode hiervan uit.
Wat gebeurt er als na een pop geen elementen mee aanwezig zijn op de stapel.
Verhelp dit met een while (! stack.isEmpty())- routine
Hoe zet je een elementair datatype zoals een integer op de stack, probeer het eens !
Oef 15
1.
2.
3.
4.
5.
6.
7.
In een afgeleide klasse wordt in de constructor steeds de constructor van de basisklasse opgeroepen.
Maak een klasse met naam BasisKlasse
Schrijf in de constructor de tekst “Constructie van basisklasse”
Maak een afgeleide klasse en schrijf in de constructor “Constructie afgeleide klasse”
Opgelet: het oproepen van de constructor van de super-klassen gebeurt in Java impliciet. In andere
OOP-talen moet dit soms expliciet aangegeven worden.
Wens je de constructor in Java toch expliciet aan te roepen, dan kan je dit met het keyword ‘super()’,
deze dient dan als eerste statement in de constructor voor te komen.
Probeer het eens uit !
Oef 16
1.
2.
Maak een klasse EigenStack. Deze klasse wordt afgeleid van de Stack-class (java.util.*)
Override de methode pop() met onderstaande code. Gebruik hiervoor de wizard.
if (! empty()) {
return super.pop();
}
return "stack leeg";
}
Probeer het eens uit in test-class
Oef 17
1.
2.
Maak een volledige Java-applicatie
Klik op Java  New…
24/07/2017
6
Gino Scheppers
3.
4.
5.
6.
7.
8.
9.
10.
Syntra West
Selecteer Application
Geef als naam van het project Oef17 en klik op finish
De opstart applicatie komt in een aparte class, geef als naam Application
Klik op Next
Geef als class name FrameMijnEersteApplicatie
Klik alle opties aan
Klik op Finish
Bekijk de class FrameMijnEersteApplicatie, wat is overgeërfd, wat is genest, welke zijn de methoden ?
Oef 18
1.
2.
3.
4.
5.
6.
Maak een class Client met als properties naam en voornaam
Schrijf een default constructor en een constructor die naam en voornaam ontvangt
Schrijf de getters & setters
Geef expliciet het bewijs dat je alles overerft van ‘Object’
De een override van de toString method en druk voornaam en naam samen af (gebruik de override
wizard)
Lever het bewijs dat System.out.println steeds de toSting-methode gebruikt
Oef 19
1.
2.
3.
4.
5.
6.
Haal Oef18 op en maak een afgeleide PrivateBankingClient van de klasse Client
Schrijf een default constructor en een constructor die naam en voornaam ontvangt
Maak een ingekapselde variabel saldoRekening
In de constructors initialiseer je deze met 1.000.000 €
Override de getVoornaam functie en in de return laat je deze voorafgaan met Geachte
Test deze klasse uit in de test klasse
Oef 20
1.
2.
3.
4.
Werk verder in Oef 19 en probeer onderstaande uit in de Test-klasse
Maak een impliciete typecast van een PrivateBankingClient in een variabel client die voordien als type
Client werd gedefinieerd.
Ga een stap verder en probeer een PrivateBankingClient te typecasten naar een Object
Declareer en instantieer een Client en doe nu een expliciete typecast naar een PrivateBankingClient
Oef 21
1.
2.
In de Test-klasse van Oef19 maak je een array van 3 Clienten
Clienten arrayClienten=new Clienten[3]
Plaats twee gewone en één PB clienten in de array
Client arrayclient[]=new Client[3];
arrayclient[0]=new Client("scheppers","Gino");
arrayclient[1]=new PrivateBankingClient("PB","Client");
arrayclient[2]=new Client("scheppers","Gino");
for (int i=0;i<arrayclient.length;i++ ){
System.out.println(arrayclient[i]);
}
3.
Druk in een lus de namen van de clienten af
for (int i=0;i<arrayclient.length;i++ ){
System.out.println(arrayclient[i]);
}
4.
Waar vind je het principe van polymorfisme terug?
Oef 22
Maak een klasse Figuur.
24/07/2017
7
Gino Scheppers
Syntra West
Maak een abstracte-methode tekenFiguur.
Probeer in een Test-klasse een instantie aan te maken van de klasse Figuur, lukt dit ?
Maak een klasse Lijn en erf hiervoor van Figuur, laat de stub-code van de abstracte methode genereren.
Probeer nu een instantie aan te maken van de klasse Lijn.
Oef 23
KB en Cera-fusioneren in de klasse-Client en PB-Client bestaat geen fusie-methode, dit is echter een tijdelijk
gegeven, we wensen het fusie-algoritme éénmalig afdwingbaar te maken via een interface.
1. Maak een interface Fusie en compileer deze.
2. Schrijf de stub-methode fusioneer
3. Maak een klasse FusieClient, (deze erft van Client en heeft als interface Fusie (gebruik de wizard !))
4. In de fusioneer-methode schrijf je System.out.println(“Fusie van Client”)
5. Maak een klasse FusiePBClient (deze erft van een PrivateBankingClient en heeft als interface Fusie)
6. In de fusioneer-methode schrijf je System.out.println(“Fusie van Private Banking Client”)
7. Schrijf onderstaande code en bestudeer het resulaat :
Fusie fusieArray[]=new Fusie[3];
fusieArray[0]=new FusieClient("scheppers","Gino");
fusieArray[1]=new FusiePrivateBankingClient("PB","Client");
fusieArray[2]=new FusieClient("scheppers","Gino");
for (int i=0;i<fusieArray.length;i++ ){
fusieArray[i].fusioneer();
}
24/07/2017
8
Download