Tentamen Inleiding Programmeren (IN1608WI), 2 februari 2012, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Gesloten boek tentamen, bij dit tentamen mag je geen gebmik maken van het studieboek. Opgave 1(10 + 5 x 3 punten) In Bijlage A is een aantal klassen gegeven die via overerving met elkaar zijn verbonden. a. Geef een klassendiagram waarin de klassen en de relaties uit de bijlage zijn aangegeven. Geef in de klassen de naam en het type van de attributen aan en van elke methode alleen de 1^ regel. b. Als de code van bijlage A wordt gecompileerd, treedt er 1 compileerfout op. Geef aan waar de fout zit en waarom de Java compiler het er niet mee eens is. De code in de bijlage wordt verbeterd. Kijk nu naar de volgende 4 programma fragmenten en bepaal: O
Of er bij het compileren een fout optreedt (en zo ja, welke). Hoe kan je deze oplossen? Geef het volledig verbeterde statement.
•
Zo niet, of er tijdens de uitvoering een fout optreedt (zo ja, welke).
•
Wat na afloop de waarde is die wordt afgedrukt op het scherm, (dit kan indien het programma goed werkt, dus ook als een compilerfout is hersteld)
c. Computer cp = new T a b l e t { " A p p l e i P a d " , 1 6 0 0 ) ; System.out.println(cp.getMerk());
d. Computer cp = new Notebook("Macbook", 2 0 0 0 ) ; Notebook macBook = c p ; System.out.println(macBook.getCapaciteit ( ) ) ;
e. Computer c p l = new N o t e b o o k ( " D e l l L a t i t u d e " , 2 1 0 0 ) ; Computer cp2 = c p l ; System.out.println{cp2.getWerktijd { ) ) ; f . Computer c p l = new N o t e b o o k ( " S o n y V a i o " , U l t r a b o o k cp2 = ( U l t r a b o o k ) c p l ; System.out.println(cp2.getCapaciteit());
1
3000);
Opgave 2 (9 + 18 punten) In bijlage B vindt je de implementatie van de Idassen Boek en Bibliotheek. De klassen worden gebruikt om de gegevens van boeken in een bibliotheek te beheren. Aan de klasse Bibliotheek moet nog een tweetal methoden worden toegevoegd: a.
s c h r i j fNaar(bestand:
String )
p o s t : de inhoud van de B i l i o t h e e k i s naar h e t t e k s t b e s t a n d met de naam bestand geschreven, i n onderstaand formaat: 10 2 011 Java v o o r Dummies 22 2001 C4-+ v o o r g e v o r d e r d e n b,
leesVan(bestand
: String) : Bibliotheek
p r e : h e t t e k s t b e s t a n d met de naam bestand bevat n u l o f meer Boek-items, i n bovenstaand formaat (één p e r regel). p o s t : r e t o u r n e e r t een B i b l i o t h e e k - o b j e e t d a t de gegevens van de Boek-Items u i t d i t bestand bevat
NB De methoden mogen geen Exceptions weipen, hint: maak gebruik van Scanner
Opgave 3 (10 + 6 punten) Hiernaast zie je een eenvoudige GUI, die twee knoppen bevat. Een van de buttons heeft het opschiift "Click Me", de andere button heeft geen opschiift. Als op de Icnop met het opschrift wordt geklikt, veiplaatst dit opschrift zich naar de andere button. Wordt er op de andere button geklikt, dan veiplaatst het opschrift zich weer naar de eerste button.
S}\ Opgave3
In Bijlage C vindt je een deel van de implementatie van de GUI. In de implementatie wordt een klasse MyButton gebruikt, die een subklasse is van JButton. Een object van klasse MyButton is in staat te reageren op een muisklik op een andere MyButton. Hieronder is een deel van de specificatie van klasse MyButton gegeven. MyButton heeft geen attributen, en twee methoden. Van een methode is de specificatie aangegeven, de andere specificatie kun je afleiden uit de inleiding van deze vraag. MyButton u i t b r e i d i n g v a n JBUtton + c o n n e c t ( t h a t : MyButton)
implementeert A c t i o n L i s t e n e r
p o s t : deze MyButton i s een l u i s t e r a a r van MyButton t h a t +actionPerformed(e
: ActionEvent)
post: zie i n l e i d i n g a. Geef een implementatie van klasse MyButton. b. In de code van de GUI in de bijlage moet een kleine uitbreiding worden aangebracht. Geef de uitbreiding voor de code. 2
[Hl
I 7"
Opgave 4 (8+ 3 + 8 + 3 punten). In Bijlage D is de implementatie gegeven van klassen BinNode en BinTree. Met objecten van Idasse BinNode kan een binaire boom van klasse BinTree worden gevormd. De knopen van de binaire boom bevatten gehele getallen. Aan klasse BinTree moeten vier methoden worden toegevoegd. Geef een implementatie van elk van de methoden. a. s i 2 e ( r
: BinNode)
;
int
p o s t : r e t o u r n e e r t h e t a a n t a l knopen van de b i n a i r e boom die r a l s wortel heeft. b. s i z e O
: int
p o s t :' r e t o u r n e e r t h e t a a n t a l knopen van de b i n a i r e boom die root a l s wortel heeft. c. c o u n t ( r
: BinNode, v : i n t ) :
int
p o s t : r e t o u r n e e r t h e t a a n t a l knopen van de b i n a i r e boom met r a l s w o r t e l , a l l e e n de knopen worden g e t e l d w a a r b i j de waarde d i e de knopen b e v a t t e n g e l i j k i s aan v d. c o u n t ( v
: int) :
int
p o s t : r e t o u r n e e r t h e t a a n t a l knopen van de b i n a i r e boom met r o o t a l s w o r t e l , a l l e e n de knopen worden g e t e l d w a a r b i j de waarde d i e de knopen b e v a t t e n g e l i j k i s aan v
3
Bijlage A p u b l i c a b s t r a c t c l a s s Computer! p r i v a t e S t r i n g merk; private i n t verbruik; p u b l i c C o m p u t e r ( S t r i n g mk, merk = mk; verbruik = vb;
i n t vb)!
public s t r i n g getMerkO! r e t u r n merk; public i n t getVerbruik()! return verbruik; public abstract i n t getCapaciteit{);
} }
} p u b l i c c l a s s T a b l e t e x t e n d s Computer! private s t a t i c f i n a l i n t verbruik private i n t capaciteit;
= 60;
p u b l i c T a b l e t ( S t r i n g mk, i n t c p ) ! super(mk, v e r b r u i k ) ; c a p a c i t y = cp;
}
}
public public
i n t getCapaciteit()! String getMerkO!
return capaciteit; r e t u r n "iPad";
) }
p u b l i c c l a s s Notebook e x t e n d s Computer! p r i v a t e s t a t i c f i n a l i n t v e r b r u i k = 30; private i n t capaciteit; p u b l i c N o t e b o o k ( s t r i n g mk, i n t c p ) ! super(mk, v e r b r u i k ) ; c a p a c i t e i t = cp; public public public
i n t getCapaciteit ( ) ! i n t getVerbruik()! i n t getWerktijdO
return capaciteit; return verbruik; return capaciteit/verbruik;
} p u b l i c c l a s s U l t r a b o o k e x t e n d s Notebook! p r i v a t e s t a t i c ^ f i n a l i n t v e r b r u i k = 20; p u b l i c U l t r a b o o k ( S t r i n g mk, super(mk, c p ) ;
} public
i n t cp)!
} c l a s s PC e x t e n d s Computer! private s t a t i c f i n a l i n t verbruik p r i v a t e double p r i j s ; public
= 120;
P C ( S t r i n g mk, d o u b l e ps) super(mk, v e r b r u i k ) p r i j s = ps;
}
p u b l i c double g e t P r i j s ( ) ! r e t u r n
}
4
prijs;
) } }
Bijlage B public
c l a s s Boek{ p r i v a t e i n t nummer; p r i v a t e i n t j aar; private String t i t e l ; p u b l i c B o e k ( i n t n r , i n tj r . setNummer(nr);
String t l ) {
s e t J a a r ( j r) ; setTitel(tl);
} public public public public public public
v o i d setNummer(int n r ) { void setJaar(int j r ) { void s e t T i t e l ( S t r i n g t l ) i n t getNummer(){ i n t getJaarO { String
getTitel(){
nummer 3aar = titel return return return
=nr; jr; tl; nummer; 3 aar; titel;
} public
Bibliotheek{ p r i v a t e B o e k [ ] boeken; private i n t aantal; p r i v a t e s t a t i c f i n a l i n t c a p a c i t e i t = 100; public Bibliotheek O boeken = new Boek [ c a p a c i t e i t ] ; a a n t a l = 0;
} public
}
}
v o i d voegToe(Boek b) al < c a p a c i t e i t ) { if ( boeken [ a a n t a l ] = b; al = aantal + 1;
}
Bijlage C import java.awt.*;import j a v a . a w t . e v e n t ; public
class private private private public
import javax.swing.* .
Opgave3 e x t e n d s JFrame{ M y B u t t o n b u t t o n l = new M y B u t t o n ( ) ; M y B u t t o n b u t t o n 2 = new M y B u t t o n ( ) ; JPanel p a n e l = new J P a n e l ( n e w G r i d L a y o u t ( 1 , 2 ) )
Opgave3{) setTitle("Opgave3"); setDefaultCloseOperation(JFrame.EXIT_0N_CL0SE); setBounds(100,100,200,100) ; Container c = getContentPane(); panel.add(buttonl); panel.add(button2); c.add(panel); / / H i e r moet de a a n v u l l i n g komen setVisible(true); •
}
}
5
•
Bijlage D p u b l i c c l a s s BinNode{ private i n t value; p r i v a t e BinNode l e f t ; p r i v a t e BinNode r i g h t ; public
}
B i n N o d e ( i n t v, BinNode 1 , BinNode r ) setValue(v); setLeft (1); setRight(r);
public void setValue(int v ) { public void setLeft(BinNode 1){ p u b l i c v o i d setRight(BinNode r ) {
value = V; l e f t = 1; right = r; r e t u r n valuedreturn lef t ; return right;
•
public i n t getValue() p u b l i c BinNode g e t L e f t () { p u b l i c BinNode g e t R i g h t ( ) {
p u b l i c class BinTree{ p r i v a t e BinNode r o o t ; public BinTreeO{ root = n u l l ;
} }
6