Groeidocument Hoofdstuk 9

advertisement
Groeidocument
Week 1
Hoofdstuk 9
Fer van Rijswijk
Yvonne van Dorst
VTI 1 A.2
Inhoudsopgave
Vragen 9.6
1. Wat is een klasse?
Een klasse is een specificatie bij het maken van objecten, hierin staan alle
attributen en methoden.
2. Wat zijn de leden van een klasse?
Attributen en de methoden.
3. Wat is een constructor?
Een soort methode die helpt bij het maken van een object.
4. Waar dient een methode voor?
Een methode voert in het algemeen handelingen uit op of met behulp de
attributen van het object.
5. Wat is de referentie this? Wanneer gebruik je die?
Een referentie naar het huidige object. Je moet die gebruiken als een attribuut
dezelfde naam heeft als het argument van een methode.
6. In voorbeeld 9.3 is drie keer de referentie this gebruikt in de constructor.
Mag je this daar weglaten? In hetzelfde voorbeeld is this ook drie keer
gebruikt in de methode toString(). Mag je in dit geval this weglaten?
In de constructor mag je this niet weglaten omdat de argumenten dezelfde namen
hebben als de attributen. In de methode toString() mag je this wel weglaten omdat
daar geen naamsverwarring kan ontstaan
7. Maak het ontwerp voor een klasse Datum, met int dag, maand en jaar als
attributen. Welke methoden lijken handig voor zo'n klasse?
Datum
int dag
int maand
int jaar
Datum()
Datum( int dag, int maand, int jaar )
void toon()
int getDag()
int getMaand()
int getJaar()
void setDag( int dag )
void setMaand( int maand )
void setJaar( int jaar )
8. Maak het ontwerp voor een klasse Persoon, met voor- en achternaam en
geboortedatum als attributen. Welke methoden wil je de klasse geven?
Persoon
String achternaam
String voornaam
Datum geboortedatum
Persoon( String achternaam, String voornaam, Datum gebdat )
void toon()
String getAchternaam()
String getVoornaam()
int getJaar()
void setDag( int dag )
void setMaand( int maand )
void setJaar( int jaar )
9. Gegeven is de klasse Test met twee methoden:
class Test
{
...
void eersteMethode()
{
...
}
void tweedeMethode()
{
...
}
}
Op welke twee manieren kun je in eersteMethode() de tweede methode
aanroepen? In een applet-klasse maak je een instantie van Test met de
naam test. Hoe kun je dan in de applet-klasse de tweede methode
aanroepen?
Met
tweedeMethode();
of met
this.tweedeMethode();
10. Wat is een access-modifier?
De woorden of een van de woorden: public, private of protected.
Vragen 9.7
1. Tijdstip
Schrijf de specificatie voor een klasse Tijdstip met daarin drie attributen van het type
int voor de uren, de minuten en de seconden. Geef de klasse een constructor met
drie argumenten voor het initialiseren van drie attributen. Geef de klasse twee
methoden: volgendUur(), warmee je het tijdstip een uur verder zet (ga uit van een 24uurs klok), en een methode toString(), zodat je een bepaald tijdstip op het scherm
kunt laten zien. Zorg ervoor dat de tijdstippen op een nette manier op het scherm
komen, bijvoorbeeld: 15:05:03 of 14:00:59. Je moet zelf voor het juiste aantal nullen
in de uitvoer zorgen. Het is het handigst als je daar een aparte methode voor maakt
die door toString() wordt aangeroepen. Geef de klasse ook methoden
volgendeMinuut() en volgendeSeconde(). Maak ten slotte een applet met drie
knoppen waarmee je het volgende uur, de volgende minuut of de colgende seconde
kunt instellen.
Code:
package h9_1;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Tijdstip extends Applet {
private tijd klok;
Button Bseconde;
Button Bminuut;
Button Buur;
public void init() {
klok = new tijd();
Bseconde = new Button("seconde");
Bseconde.addActionListener(new BsecondeKnopHandler());
Bminuut = new Button("minuut");
Bminuut.addActionListener(new BminuutKnopHandler());
Buur = new Button("uur");
Buur.addActionListener(new BuurKnopHandler());
add(Buur);
add(Bminuut);
add(Bseconde);
}
public void paint(Graphics g) {
klok.teken( g );
}
class BuurKnopHandler
implements ActionListener {
public void actionPerformed(ActionEvent e) {
klok.plusUur();
repaint();
}
}
class BminuutKnopHandler
implements ActionListener {
public void actionPerformed(ActionEvent e) {
klok.plusMinuut();
repaint();
}
}
class BsecondeKnopHandler
implements ActionListener {
public void actionPerformed(ActionEvent e) {
klok.plusSeconde();
repaint();
}
}
}
class tijd {
private int uur;
private int minuut;
private int seconde;
public tijd() {
this.uur = uur;
this.minuut = minuut;
this.seconde = seconde;
}
public void plusUur() {
if (uur < 23) {
uur += 1;
}
else
uur = 0;
}
public void plusMinuut() {
if (minuut < 59) {
minuut += 1;
}
else {
if (uur < 23) {
uur += 1;
minuut = 0;
}
else
uur = 0;
}
}
public void plusSeconde() {
if (seconde < 59) {
seconde += 1;
}
else {
if (minuut < 59) {
minuut += 1;
seconde = 0;
}
else {
if (uur < 23) {
uur += 1;
seconde = 0;
minuut = 0;
}
else {
uur = 0;
seconde = 0;
minuut = 0;
}
}
}
}
public void teken(Graphics g) {
if (uur < 10) {
if (minuut < 10) {
if (seconde < 10) {
g.drawString("0" + uur + ":0" + minuut + ":0" + seconde, 200, 100);
}
else{
g.drawString("0" + uur + ":0" + minuut + ":" + seconde, 200, 100);
}
}
else if( seconde < 10 ){
g.drawString("0" + uur + ":" + minuut + ":0" + seconde, 200, 100);
}
else{
g.drawString("0" + uur + ":" + minuut + ":" + seconde, 200, 100);
}
}
else if( minuut < 10){
if( seconde < 10){
g.drawString("" + uur + ":0" + minuut + ":0" + seconde, 200, 100);
}
else{
g.drawString("" + uur + ":0" + minuut + ":" + seconde, 200, 100);
}
}
else if( seconde < 10){
g.drawString( "" + uur + ":" + minuut + ":0" + seconde, 200, 100);
}
else{
g.drawString( "" + uur + ":" + minuut + ":" + seconde, 200, 100);
}
}
}
Screenshots:
2. Cirkel
Cirkel. Maak een klasse cirkel met als attributen de x- en y-cöordinaat van het
middelpunt en de straal van de cirkel. Geef de klasse een constructor met
argumenten die de attributen initialiseren.
Maak ook een methode void teken( Graphics g ) die de cirkel kan tekenen. Maak
daarbij gebruik van de methode drawOval() uit de Java-bibliotheek (zie hoofdstuk 2).
Bedenk dat drawOval() niet uitgaat van het middelpunt en de straal, maar van de
linker bovenhoek en de diameter van de cirkel.
Maak een methode void setMiddelpunt( int x, int y ) waarmee je de cirkel een ander
middelpunt geeft.
En een methode: void setStraal( int straal ) waarmee je de straal een andere waarde
kunt geven. Schrijf een applet met wat knoppen om het een en ander te testen.
Code:
package h9_2;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class cirkel extends Applet {
private test ronde1;
private Button increasex;
private Button decreasex;
private Button increasey;
private Button decreasey;
private Button increasestraal;
private Button decreasestraal;
public void init() {
ronde1 = new test( 25, 25, 25 );
increasex = new Button( "-->" );
increasex.addActionListener( new increasexKnopHandler() );
decreasex = new Button( "<--" );
decreasex.addActionListener( new decreasexKnopHandler() );
increasey = new Button( "^" );
increasey.addActionListener( new increaseyKnopHandler() );
decreasey = new Button( "v" );
decreasey.addActionListener( new decreaseyKnopHandler() );
increasestraal = new Button( "<-->" );
increasestraal.addActionListener( new increasestraalKnopHandler() );
decreasestraal = new Button( ">--<" );
decreasestraal.addActionListener( new decreasestraalKnopHandler() );
add(
add(
add(
add(
add(
add(
increasex );
decreasex );
increasey );
decreasey);
increasestraal );
decreasestraal );
}
public void paint( Graphics g ) {
ronde1.teken( g );
}
class increasexKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.rechts();
repaint();
}
}
class decreasexKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.links();
repaint();
}
}
class increaseyKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.omhoog();
repaint();
}
}
class decreaseyKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.omlaag();
repaint();
}
}
class increasestraalKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.groter();
repaint();
}
}
class decreasestraalKnopHandler implements ActionListener{
public void actionPerformed( ActionEvent e ){
ronde1.kleiner();
repaint();
}
}
}
class test {
private int
private int
private int
private int
x;
y;
straal;
middel;
public test( int x, int y, int straal ){
this.x = x-straal;
this.y = y-straal;
this.straal = straal;
this.middel = straal;
}
public void
x += 5;
}
public void
x -= 5;
}
public void
y -= 5;
}
public void
y += 5;
}
public void
straal +=
y -= 10;
rechts() {
links() {
omhoog() {
omlaag() {
groter() {
5;
x -= 10;
}
public void kleiner() {
straal -= 5;
y += 10;
x += 10;
}
public void teken( Graphics g ){
g.drawOval( x+straal, y+straal, 2*straal, 2*straal );
}
public void setMiddelpunt( int x, int y ){
this.y = y - straal;
this.x = x - straal;
}
}
Screenshots:
Opdracht 3
Spaarrekening. Voeg aan de klasse Spaarrekening van voorbeeld 9.4 een methode
toe om een bedrag van de rekening op te nemen:
void neemOp ( double bedrag )
Geef de klasse een methode
double getSaldo ()
die het saldo van een bepaalde spaarrekening als terugkeerwaarde aflevert. Test
deze methoden (en de klasse) door een applet te maken met een tekstvak waarin je
een bedrag kunt tikken, en twee knoppen; een om te storten en een om op e nemen.
Laat telkens het saldo in een ander tekstvak zien.
Code:
package h9_3;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Applet1 extends Applet {
private SpaarRekening rekening;
Button knop1, knop2;
TextField tekstvak;
public void init (){
setFont ( new Font ("SansSerif", Font.BOLD, 14) );
rekening = new SpaarRekening ("Welmer", 100, 4.5);
knop1 = new Button ("Storten");
knop1.addActionListener (new StortKnopHandler () );
knop2 = new Button ("Opnemen");
knop2.addActionListener (new OpneemKnopHandler () );
tekstvak = new TextField (" ", 20);
add (knop1);
add (knop2);
add (tekstvak);
}
public void paint (Graphics g){
int yPos = 100;
g.drawString (" " + rekening, 20, yPos +=20);
}
class OpneemKnopHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
double invoer;
Double invoerGetal = Double.valueOf ( tekstvak.getText() );
invoer = invoerGetal.doubleValue();
rekening.neemOp ( invoer );
repaint ();
}
}
class StortKnopHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
double invoer;
Double invoerGetal = Double.valueOf ( tekstvak.getText() );
invoer = invoerGetal.doubleValue();
rekening.stort ( invoer );
repaint ();
}
}
}
class SpaarRekening{
private String naam;
private double saldo;
private double percentage;
public SpaarRekening (String naam, double saldo, double percentage){
this.naam = naam;
this.saldo = saldo;
this.percentage = percentage;
}
public String toString (){
String str =
"Saldo van " + naam +
" is " + saldo +
" (" + percentage +" %)";
return str;
}
public void stort ( double bedrag ){
saldo += bedrag;
}
public void neemOp (double bedrag){
saldo -= bedrag;
}
public void schrijfRenteBij (){
double rente = saldo * percentage / 100;
saldo += rente;
}
public double getSaldo (){
return saldo;
}
}
Screenshots:
Opdracht 4
In paragraaf 9.4.5 staat dat elke klasse uit de klassenbibliotheek van Java een
methode toString () heeft, waarmee je informatie over dat object in een string kunt
verkrijgen. Ga na wat het resultaat is als je het bericht toString () verstuurt naar een
instantie van de klasse Button, een TextField en naar de applet zelf.
Code:
package opgave_9_7_4;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class opgave_9_7_4 extends Applet implements ActionListener
{ private String stringTest = "druk op de knop";
private TextField fieldTest;
private Button buttonTest;
private int teller = 1;
public void init()
{ fieldTest = new TextField(10);
buttonTest = new Button("Test");
buttonTest.addActionListener(this);
add(buttonTest);
add(fieldTest);
}
public void actionPerformed(ActionEvent e)
{ if(teller == 1)
{ stringTest = this.toString();
}
if(teller == 2)
{ stringTest = fieldTest.toString();
}
if(teller == 3)
{ stringTest = buttonTest.toString();
}
teller ++;
repaint();
if(teller > 2)
{ teller = 0;
}
}
public void paint(Graphics g)
{ g.drawString(stringTest, 100, 100) ;
}
}
Screenshots:
Opdracht 5
Boom. Maak een klasse voor een boom als in figuur 9.15. Bedenk welke
eigenschappen volgens jou een boom heeft; elk van deze eigenschappen is een
attribuut voor de klasse. Geef de klasse een constructor waarmee je de attributen
initialiseert en een methode public void teken (Graphics g) om een boom te kunnen
tekenen.
Code:
package h9_5;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Applet1 extends Applet {
private Boom boom;
public void init (){
boom = new Boom (100, 250, 80, 20);
}
public void paint (Graphics g){
boom.teken (g);
}
}
class Boom
{
private int
private int
private int
private int
x;
y;
stambreedte;
stamhoogte;
public Boom (int x, int y, int stamhoogte, int stambreedte ){
this.x = x;
this.y = y;
this.stambreedte = stambreedte;
this.stamhoogte = stamhoogte;
}
public void teken (Graphics g){
g.setColor( new Color( 85, 43, 0) );
g.fillRect( x, y-stamhoogte, stambreedte, stamhoogte );
g.setColor( Color.green );
g.fillOval( x-(2*stambreedte), y-((stamhoogte)+(4*stambreedte))+5,
5*stambreedte, 4*stambreedte );
g.setColor( Color.black );
g.drawOval( x-(2*stambreedte), y-((stamhoogte)+(4*stambreedte))+5,
5*stambreedte, 4*stambreedte);
g.setColor( Color.red );
g.fillOval( x-(2*stambreedte)+(1*stambreedte), y((stamhoogte)+(4*stambreedte))+(1*stambreedte), 10, 10 );
g.fillOval( x-(2*stambreedte)+(2*stambreedte), y((stamhoogte)+(4*stambreedte))+(1*stambreedte), 10, 10 );
g.fillOval( x-(2*stambreedte)+(1*stambreedte), y-
((stamhoogte)+(4*stambreedte))+(3*stambreedte), 10, 10 );
g.fillOval( x-(2*stambreedte)+(3*stambreedte), y((stamhoogte)+(4*stambreedte))+(2*stambreedte), 10, 10 );
}
}
Screenshots:
Opdracht 6
Dobbelsteen. Maak een klasse voor een dobbelsteen. Bedenk welke attributen een
dobbelsteen heeft om een bepaalde worp op het scherm te kunnen laten zien. Geef
de klasse een constructor, een methode public void werp () waarmee random het
aantal ogen wordt bepaald, en een methode pubic void teken (Graphics g) om een
dobbelsteen te kunnen tekenen.
Code:
package h9_6;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Applet1 extends Applet {
private Button buttonGooi;
private TextField fieldGetal;
String stringGetal = "Druk op de knop";
Dobbelsteen mijnDobbelsteen;
public void init(){
buttonGooi = new Button( "Gooi" );
buttonGooi.addActionListener(new gooiHandler() );
fieldGetal = new TextField(4);
add(buttonGooi);
add(fieldGetal);
mijnDobbelsteen = new Dobbelsteen();
}
public void paint(Graphics g){
mijnDobbelsteen.teken(g);
}
class gooiHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
mijnDobbelsteen.werp();
fieldGetal.setText("" + mijnDobbelsteen.ogen);
repaint();
}
}
}
class Dobbelsteen{
int ogen;
public Dobbelsteen(){
}
public void werp(){
ogen = (int) ( 6 * Math.random() + 1 );
}
public void teken(Graphics g){
g.setColor(Color.white);
g.fillRoundRect(100, 100, 100, 100, 20, 20);
g.setColor(Color.black);
if (ogen == 6) {
g.fillOval(110,
g.fillOval(110,
g.fillOval(110,
g.fillOval(170,
g.fillOval(170,
g.fillOval(170,
}
if (ogen == 5) {
g.fillOval(110,
g.fillOval(110,
g.fillOval(140,
g.fillOval(170,
g.fillOval(170,
}
if (ogen == 4) {
g.fillOval(110,
g.fillOval(110,
g.fillOval(170,
g.fillOval(170,
}
if (ogen == 3) {
g.fillOval(110,
g.fillOval(140,
g.fillOval(170,
}
if (ogen == 2) {
g.fillOval(110,
g.fillOval(170,
}
if (ogen == 1) {
g.fillOval(140,
}
}
}
Screenshots:
110,
140,
170,
110,
140,
170,
20,
20,
20,
20,
20,
20,
20
20
20
20
20
20
);
);
);
);
);
);
110,
170,
140,
110,
170,
20,
20,
20,
20,
20,
20
20
20
20
20
);
);
);
);
);
110,
170,
110,
170,
20,
20,
20,
20,
20
20
20
20
);
);
);
);
110, 20, 20 );
140, 20, 20 );
170, 20, 20 );
110, 20, 20 );
170, 20, 20 );
140, 20, 20 );
Opdracht: een zeer eenvoudige parkeersysteem
Ontwerp en schrijf een klasse ParkeerSysteem die de volgende methoden bevatten:
- Een constructor ParkeerSysteem (int n), om een parkeersysteem met n
plaatsen aan te maken.
- Een methode inrijden om aan te geven dat één auto naar binnen gaat.
- Een methode inrijden (int n) om aan te geven dat n auto’s naar binnen gaan.
- Een methode uitrijden om aan te geven dat er één auto naar buiten gaat.
- Een methode uitrijden (int n) om aan te geven dat n auto’s naar buiten rijden.
- Een methode isVol om te bepalen of de parkeergarage vol is.
- Een methode aantalBeschikbarePlaatsen die het aantal beschikbare
plaatsen terug geeft.
Bedenk voor zover niet aangegeven zelf de juiste resultaattypen van de methoden
en typen van de parameters, waarbij je de methoden zo algemeen bruikbaar mogelijk
dient te houden.
Schrijf een applet waarin je een instantie van het parkeersysteem kunt uittesten. De
applet moeten 2 buttons bevatten voor het simuleren van in/uit rijden van de garage.
Op het scherm dien je verder weer te geven hoeveel plaatsen er nog beschikbaar
zijn in de garage en ook het resultaat van de methode isVol moet op het scherm
komen te staan.
Code:
Screenshots:
Download