Object Oriented Ontwerp Yannick Reekmans 2008-2009
1 Toegepaste Informatica, reeks 1A 22 september 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Java (hfstk. 6 blz. 125-164): Arrays & ArrayList; DotComBust game code nakijken • Head First Java (hfstk. 10 blz. 302-306): Working with dates • Head First Java: (hfstk. 7 blz. 165-196): Inheritance an polymorfism
OEFENINGEN 1. In Java 5.0 is een een nieuwe versie voor de “for loop” bijgekomen. Illustreer met een voorbeeld. (Hst 5) In Java 5.0 is er de “enhanced for-loop” bijgekomen. Deze is korter om neer te schrijven en werkt niet meer met het ‘tellen’ van de elementen in de array. Voorbeeldje: String[] namenLijst = {"Tom", "Mieke", "Piet"}; for(String naam : namenLijst) { System.out.println(naam); } Elke naam in de lijst zal om de beurt toegewezen worden aan de variabele naam en dan uitgeprint worden. 2. Leg de verschillen uit tussen een array en een arraylist. Leg uit: een arraylist is een ingekapselde array. In Java 5.0 kan men een geparameteriseerde arraylist gebruiken. Leg uit met een voorbeeld. • Een array krijgt zijn grootte mee op het moment dat het aangemaakt wordt en is achteraf niet meer aan te passen. Een ArrayList wordt dynamisch groter en kleiner als er meer objecten in moeten of er een deel verwijderd wordt. • Iets in een array steken gebeurt door het object een locatie toe te wijzen in de array, dit kan een IndexOutOfBound-exceptie opleveren. Bij een ArrayList hoef je geen positie op te geven, maar als je dat wel doet dan wordt de ArrayList altijd zo groot dat het object op de positie past. • Arrays hebben een speciale syntax (de [] ) die nergens anders voor gebruikt worden. ArrayLists zijn gewone objecten waar je gewone methoden op kan oproepen. 22 september 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
Wrapper?? Een geparameterizeerde ArrayList is een ArrayList waaraan een type is meegegeven, dit type bepaalt welk type van objecten zijn toegelaten in de ArrayList. Voorbeeld: ArrayList
films betekent dat films een lijst van objecten van het type Film is. 3. Geef de betekenis van de Calendar klasse in Java Calendar is an abstract base class for converting between a Date object and a set of integer fields such as YEAR, MONTH, DAY, HOUR, and so on.
22 september 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 29 september 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Java (hfstk. 7 blz. 165-196): Inheritance an polymorfism • Head First Java (hfstk. 14 blz. 447-458): File I/O
OEFENINGEN 4. Beschrijf met een eenvoudig voorbeeld de stappen om een object in te lezen en weg te schrijven van/naar tekstbestand We hebben een tekstbestand met op elke regel de naam van een hond en zijn leeftijd, gescheiden door een +-teken. Object wegschrijven: • Gebruik FileWriter om een tekstbestand te openen, dit is een object van het type File • Hang de FileWriter aan een BufferedWriter voor effici¨entie • Gebruik dit object van BufferedWriter om de namen en leeftijden van de honden te schrijven, als een string en gescheiden door het +-teken en elke regel wordt afgesloten met het newline character “\n” • Als alle honden weggeschreven zijn, sluit dan de writerstream Object inlezen: • Gebruik FileReader om een tekstbestand te openen (object van het type File) • Hang dit object van FileReader aan een BufferedReader voor de effici¨entie • Lees regel per regel in, we hebben steeds een string in het volgende formaat “naam+leeftijd” • Gebruik de split() methode van String om de string te splitsen op het +-teken • Met de twee stukken kan dan steeds terug een Hond aangemaakt worden Hond h1 = new Hond(naam, leeftijd); • Sluit de readerstream
5. Leg het verschil uit tussen een IS-A relatie en een HAS-A relatie (177) Beide zijn een manier om de relatie tussen twee klassen te bepalen. Met de IS-A test kan je bepalen of een klasse de subklasse van een andere klasse moet zijn. Voorbeeld: Hond IS-A 29 september 2008
pg. 1 van 3
KHLeuven, dept. G&T, 1TI
Dier dus Hond is een subklasse van Dier. De HAS-A relatie bepaalt of een klasse een referentie naar een object van een andere klasse moet bevatten. Voorbeeld: Keuken HAS-A Fornuis is waar, dus bevat Keuken een referentie naar een object van het type Fornuis. 6. Leg het gebruik uit van het Java keyword super (180) Met dit keyword kunnen subklassen methoden uit de superklasse oproepen. 7. Wanneer gebruiken we best overerving en wanneer moeten we overerving vermijden? (181) Wel: • Als e´ e´ n klasse een specifieker type is dan een andere klasse. Voorbeeld: Hond is specifieker dan Dier, dus Hond is best een subklasse van Dier. • Als verschillende klassen van een gemeenschappelijke soort hetzelfde gedrag delen, dan kan een gemeenschappelijke superklasse een goede oplossing zijn. Niet: • Om gemeenschappelijke code tussen verschillende, ongerelateerde klassen te kunnen delen. • Als twee klassen niet slagen voor de IS-A test.
8. Leg de betekenis uit van polymorfisme. Om wille van polyphorfisme kan je aan elke referentievariabele van een supertype ook een object van e´ e´ n van zijn subklassen hangen. (Hetzelfde bij parameters van methoden en return types). Als er dan methoden opgeroepen worden op de referentievariabele, dan zal deze de methoden van het juiste subtype uitvoeren. Voorbeeld: Dier dier = new Dog(); 9. Kan je elke klasse extenden? (189) Neen! • Je kan geen innerclass extenden • Als een klasse ’non-public’ is, dan kunnen alleen klassen in hetzelfde package deze klasse extenden • Als een klasse final is, dan kan je die ook niet extenden • Als een klasse enkel private constructors heeft, dan kan je die niet extenden
10. Wat is de betekenis van het Java keyword final? (189) 29 september 2008
pg. 2 van 3
KHLeuven, dept. G&T, 1TI
Als een klasse gemarkeerd is als final dan kan je die niet meer extenden, als een methode gemarkeerd is als final dan wil dat zeggen dat deze methode niet kan overridden worden. 11. Welke regels gelden er bij overerving? (190) • Argumenten en return types van beide methoden moeten hetzelfde zijn. • Een methode kan niet minder toegankelijk worden. Als in de superklasse de methode public is, dan kan die overervende klasse die methode niet private maken.
29 september 2008
pg. 3 van 3
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 06 oktober 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Word document: Inkapselingsprobleem bij overerving • Head First Java (hfstk. 8 blz. 197-234): Interfaces en polymorfisme
OEFENINGEN 12. Omschrijf het inkapselingsprobleem bij overerving. Omschrijf 3 goede oplossingen. Welke oplossingen mijden we best en waarom? We willen in de subklassen toegang tot de instantievariabelen van de superklasse die we om veiligheidsredenen private hebben gemaakt en willen houden. Oplossingen: 1. De methoden die gebruik maken van de private variabelen in de superklasse plaatsen als een publieke methode en die dan in de subklasse oproepen. 2. De benodigde private variabelen via interne methode aanroepen doorgeven als parameters 3. In de superklasse een protected getter maken voor de benodigde private variabelen Te vermijden: • De variabelen protected maken (ipv. private): de subklassen hebben toegang tot de variabelen MAAR ze kunnen die dan ook aanpassen (wat we natuurlijk niet willen) • De variabelen public maken, want dan kan de gebruiker de variabelen aanpassen in zijn programma en zo een hele hoop in de war sturen. 13. Wat is een abstracte klasse? Kan een abstracte klasse instantievariabelen en een constructor bevatten? Een abstracte klasse is een klasse met minstens e´ e´ n abstracte methode in. Dit is een methode zonder body die verplicht uitgewerkt moet worden in de eerste concrete subklasse. Ja, een abstracte klasse kan een constructor en instantievariabelen bevatten. Omdat we een abstracte klasse niet kunnen instanti¨eren, zal de constructor aangeroepen moeten worden vanuit de constructors van de subklassen met de super() aanroep. 14. Leg het verband uit tussen de klasse Object en overerving. (209 ...) Is de klasse Object abstract? Kan je alle methoden van Object overriden? Wat zijn de 2 voornaamste bestaansredenen van de klasse Object? 06 oktober 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
Elke klasse erft automatisch over van de klasse Object, en bezit dus ook al de methoden van deze klasse. De klasse Object is niet abstract en alle methoden die niet final zijn kunnen worden overridden. 15. Waarom is de volgende code fout? Object o = new Knop(); o.teken(); De Javacompiler denkt dat o een instantie van Object is, waardoor je enkel methoden uit de klasse Object kan oproepen op o. Aangezien de methode teken niet tot de klasse Object behoort, kan je die niet oproepen op o. 16. Leg de werking uit van de instanceof operator. (216) De syntax is als volgt: object instanceof klasse Dit geeft true terug als het object een instantie is van de klasse, en false als dit niet zo is.
06 oktober 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 13 oktober 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Java (hfstk. 8 blz. 197-234): Interfaces en polymorfisme • Head First Design patterns (hfstk. 1 blz. 1-34): Welkom bij design patterns - strategy pattern
OEFENINGEN 17. Leg het ontstaan en de evolutie van het klassen diagramma uit voor het dieren simulatie programma, dat ook moet dienen voor een huisdieren winkel applicatie (diagramma op p 226) (meerdere overervingsniveaus, abstracte klassen, interfaces) ... 18. Leg het verschil uit tussen een interface en een abstracte klasse. Een abstracte klasse wordt overge¨erfd terwijl een interface door een klasse ge¨ımplementeerd wordt. Een klasse kan slechts uit e´ e´ n klasse overerven, maar kan vele interfaces implementeren. Een interface is een 100% pure abstracte klasse! Zowel een interface als een abstracte klasse kunnen niet ge¨ınstantieerd worden: bij een interface zijn al de methoden impliciet abstract (dus zonder methodbody), terwijl dat bij een abstracte klassen niet alle methoden abstract moeten zijn. In een abstracte klasse kunnen sommige methoden toch een body hebben. 19. Leg het verband uit tussen interfaces en polymorfisme Interfaces zijn het antwoord van Java op meervoudige overerving en lossen het Deadly Diamond of Death probleem op. Als je een klasse als polymorf type hebt, dan kan je daar enkel objecten uit dezelfde overervingsboom aan toekennen. Terwijl als je een interface als polymorf type gebruikt, dan kan je er eender welk object aan toekennen op voorwaarde dat dit object ergens in zijn overervingsboom deze interface ge¨ımplementeerd heeft. 20. Lees de bullet points op blz. 229 Geen vraag, dus geen antwoord =P 21. Leg het strategy pattern uit aan de hand van het UML schema op blz. 22 (Duck simulation in Design Patterns)
13 oktober 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
De abstracte klasse heeft een klassevariabele van een interfacetype (in dit geval flyBehaviour). Alles in verband met het vlieggedrag van eenden wordt doorverwezen naar deze interface. We kunnen aan elke eend vragen om te vliegen (met de methode performFly()), in deze methode wordt dan de fly-methode van de geassocieerde implementatie van FlyBehaviour opgeroepen. Op die manier kan het vlieggedrag van een eend dynamisch gewijzigd worden. Zo zitten we in Duck toch met een algemene methode performFly() die we niet steeds moeten overriden om de verschillende vlieggedragingen te kunnen gebruiken (want misschien zijn er wel drie eenden met hetzelfde vlieggedrag en slechts eentje met een ander gedrag). We maken die gedragingen in de interface FlyBehaviour, en we kennen dan zo een implementatie toe aan elke eend. 22. Geef het typische klassendiagramma dat hoort bij het strategy pattern Zie Head First Design patterns blz. 22 23. Leg volgend ontwerpprincipe uit: Verkies compositie boven overerving. Als we het strategypattern gebruiken, dan doen we eigenlijk aan compositie. Een eend (zoals in het voorbeeld op blz. 22) ontvangt zijn vlieg- en kwaakgedrag uit een gedragsobject waarmee hij is samengesteld, in plaats van door het gedrag te erven. Op deze manier hebben we veel meer flexibiliteit: we kunnen een familie van algoritmen inkapselen EN het gedrag at runtime veranderen.
13 oktober 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 20 oktober 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Java (hfstk. 16 blz. 529-555): Sorteren objecten • Head First Design patterns (hfstk. 8 blz. 265-301): The template method pattern
OEFENINGEN 24. Hoe kunnen we de Java interfaces Comparable en Comparator gebruiken om op een eenvoudige manier een verzameling van objecten in een collectie object (ArrayList, ...) te sorteren? Illustreer met een voorbeeld. Als we een Collectie object willen sorteren, dan gebruiken we daarvoor de statische methode sort() van de klasse Collections. Dit werkt out of the box enkel als het collectie object een verzameling is van String objecten. Als de ArrayList objecten van een ander type bevat, dan moeten die de interface Comparable implementeren (en dus ook de methode compareTo() overriden). Deze methode neemt een ander object van hetzelfde type als parameter, en in de body worden dan de twee objecten vergeleken. We kunnen met andere woorden zelf bepalen op welke manier we beiden objecten met elkaar vergelijken en hoe we hun sortering bepalen (0=gelijke, 1=huidig object groter dan parameterobject en -1=huidig object kleiner dan parameterobject). Door de interface Comparator te gebruiken, kunnen we een Collections object op verschillende manieren sorteren. We maken een klasse die de interface Comparator implementeert (en we maken dus onze eigen implementatie van de methode compare() die twee verschillende objecten als parameter verwacht). In de methode kunnen we dan onze eigen manier bepalen van het vergelijken (en dus sorteren) van de twee objecten. We kunnen dan een Collection sorteren door Collections.sort(object, Comparatorobject) op te roepen. Zo kunnen we Collections op verschillende punten in onze code op een andere manier sorteren. 25. Leg het template pattern uit aan de hand van de code op blz. 281 (code zelf kunnen reproduceren!!): Wat is een template methode? Waarom is deze methode final? Waarom een abstracte klasse? Wat is een hook methode? De template methode is de methode die het skelet van het algoritme definieert, waarbij een aantal stappen aan de subklassen kunnen overgelaten worden voor de implementatie. Op die manier kan nooit de volgorde van het algoritme aangepast worden, enkel de specifieke implementatie. De templatemethode staat altijd in een abstracte klasse zodat een aantal methoden uit het algoritme al ge¨ımplementeerd kunnen worden in deze klasse, maar een aantal andere methoden ook abstract kunnen gelaten worden voor implementatie in de subklassen. 20 oktober 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
De hook() methode is een (quasi) lege methode die de subklassen de mogelijkheid geeft om op bepaalde punten in de code in te haken en eventueel nog extra dingen uit te voeren op die plaatsen. 26. Leg de code van blz 281 uit aan de hand van het voorbeeld maken van koffie en thee De abstracte klasse bepaalt in de finale template methode de structuur van het algoritme (Water koken, smaakstoffen toevoegen, uitschenken, blabla). Een aantal van die dingen zijn voor koffie en thee zetten gelijk en die worden reeds in de abstracte klasse ge¨ımplementeerd. De verschillen in de methoden worden in verschillende subklassen ge¨ımplementeerd. 27. Vergelijk template en strategy (blz. 288 en blz. 298 - 299) Template definieert de structuur van het algoritme en laat de implementatie grotendeels over aan zijn subklassen, terwijl strategy de algoritmen afschermt en de mogelijkheid biedt om de verschillende algoritmen gemakkelijk te gebruiken. Bij template gaat de algemene code in de superklasse en wordt enkel de verschillende/specifieke code naar de subklassen wordt gebracht, bij template zit er een vaste/duidelijke/transparante structuur in het algoritme. Bij strategy is er niet zo duidelijk welke stappen er in het algoritme uitgevoerd worden, maar ze kunnen dan weer wel at runtime veranderd worden. Template is afhankelijk van zijn subklassen om het volledige algoritme te implementeren, terwijl Strategy de hele code zelf kan uitvoeren (zonder dat er subklassen aan te pas komen). 28. Leg uit: Waar is template method pattern gebruikt in de Word tekst ’Inkapselingsproblemen bij overerving’ op Pafox? In de methode draw() van de voorbeeldalgoritmen.
20 oktober 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 03 november 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Naamloze implementatie van een interface (Word document op PAFOX) • Hoe de klasse TekenVenster gebruiken (Java programma’s in de map Grafisch op PAFOX)
OEFENINGEN 29. Geef een voorbeeld van een naamloze implementatie van een interface. IKnopActie.java is de interface setAction( new IKnopActie(){ int i = 0; public void doSomething(KnopAbstract t) { schrijfStatusLijn("U heeft al " + i++ + " maal geactiet op deze knop"); } } );
03 november 2008
pg. 1 van 1
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 10 november 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Design patterns (hfstk. 5 blz. 165-176): Singleton pattern
OEFENINGEN 30. Leg de betekenis van het singleton pattern uit (blz. 169). Met het Singleton pattern kunnen we ervoor zorgen dat we slechts e´ e´ n unieke instantie van een klasse kunnen maken en we die instantie ook steeds terug kunnen opvragen. Bij Singleton hebben we een publieke klasse met een static klassevariabele om de enige instantie van de klasse te bewaren. Ook is er een private constructor (zodat er niet new Class() kan opgeroepen worden) en een getInstance() methode om e´ e´ nmalig een instantie van de klasse aan te maken en daarna die instantie steeds opnieuw terug te geven. 31. Welke problemen kan de klassieke oplossing van singleton pattern geven in een multithreading omgeving? Oplossing? (blz. 175-176) Je weet nooit op welk punt van de code de virtuele machine overgaat van het uitvoeren van de eerste thread naar de tweede thread. Hierdoor kan de virtuele machine op een bepaalde manier meer dan e´ e´ n object aanmaken, ook al was dat net wat we probeerden te vermijden door het Singleton pattern te gebruiken! We kunnen dit oplossen door de methode getInstance() synchronized te maken (ofwel direct een instantie aanmaken ipv. dat te laten gebeuren door de methode getInstance())
10 november 2008
pg. 1 van 1
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 17 november 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Design patterns (hfstk. 10 blz. 373-413): The state pattern
OEFENINGEN 32. Leg aan de hand van een eenvoudig voorbeeld het state pattern uit. We hebben een kleine machine die een actie uitvoert als er op een knop gedrukt wordt. Als er geld in de machine steekt dan uitput die ”Er zit geld in¨en als er geen geld insteekt dan zegt die ”Eerst geld insteken”. De machine heeft dus twee states (HAS MONEY, NO MONEY), twee methoden (doeActie() en insertGeld()) en drie instantievariabelen (moneystate, nomoneystate en currentstate). We hebben ook een interface Actie met twee concrete implementaties (MoneyActie en NoMoneyActie). Ze hebben allemaal de methode exec(). Bij MoneyActie staat daarin de output van ”Er zit geld in¨en bij NoMoneyActie de output van ”Eerst geld insteken”. Bij de instantiatie van de machine hangen we een object van MoneyActie aan moneystate, van NoMoneyActie aan nomoneystate en stellen we currentstate gelijk aan nomonystate. Bij het drukken op de knop gaat de machine naar de methode doeActie() en die doet dan currentstate.exec() en schrijft ”Eerst geld insteken”. Bij het geld insmijten gaat de machine naar de methode insertGeld() en dan gaat de machine de currentstate veranderen in moneystate. Als we dan op de knop duwen dan geeft currentstate.exec() ”Er zit geld in”weer. 33. Hoe kan je een UML toestandsdiagramma implementeren in Java? Geef 2 manieren (waaronder oplossing met state pattern) en waarom is de oplossing met state pattern beter? Door gebruik te maken van statische finale instantievariabelen die elk een state voorstellen en dan een hoop geneste if-lussen gebruiken om te kijken in welke state we ons bevinden om dan de juiste code uit te voeren. We kunnen natuurlijk ook het State pattern gebruiken, waar we een State interface hebben en elke state voorgesteld wordt door een klasse die deze state interface implementeerd. We houden in een instantievariabele bij in welke state we ons bevinden en wanneer het nodig is in de klasse dan delegeren we de uitvoering gewoon naar de State. De implementatie (en wat er dus effectief gebeurt bij het oproepen van de methode) hangt dus eigenlijk af van in welke State we ons bevinden. De oplossing met State is beter omdat de code veel overzichtelijker is en makkelijker te gebruiken is! 34. Wat is het typische klassenschema voor state pattern + uitleg (blz. 396) Zie maar blz. 396, daar is dat al mooi uitgelegd.
17 november 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
35. Leg uit strategy en state pattern lijken heel veel op mekaar (verklaar overeenkomsten en verschillen) Ze verschillen in intentie: het State pattern zorgt voor het inkapselen van staatsafhankelijk gedrag terwijl Strategy algoritmen inkapselt. Hun klassendiagrammen zijn praktisch gelijk, ze verkiezen beiden Compositie boven Overerving.
17 november 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 24 november 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Design patterns (hfstk. 4 blz. 107-134): The factory pattern • Head First Java (Appendix B blz. 671-673): Enumerations in Java + voorbeeld op PAFOX • Head First Java (hfstk. 14 blz. 429-464): Saving objects: Serialisation
OEFENINGEN 36. Leg uit met een voorbeeld: The simple factory method: Geef schema en voordeel. Leg uit: De factory kan evengoed een static methode zijn. ... 37. Beschrijf het factory method pattern. Geef een voorbeeld en het typische klassenschema. (blz. 132) Bij het Factory pattern wordt er gebruik gemaakt van een (meestal abstracte) Creatorklasse. Dit is een klasse die alle methoden bevat voor het manipuleren van objecten, behalve de creatie van het object zelf (dit is de Factorymethod). Op die manier is de Creatorklasse zich volledig bewust van welke stappen hij doorloopt op het object maar weet hij op voorhand niet op welk type object hij dat gaat uitvoeren. De factorymethode van de subklasse maakt het eigenlijke object aan dat in het algemene algoritme gemanipuleerd wordt. 38. Bespreek het verschil tussen simple factory method en factory method pattern.(blz 133) ... 39. Leg uit: Enumerations in Java Leg uit: Enumerations zijn een manier om parameters (Vb een string parameter) type safe te maken. ... 40. Leg het verschil uit tussen een connection stream en een chain stream. Geef voorbeelden van elk. Een connection stream maakt een connectie met een bron (bestand, socket), maar een chainstream kan dat niet op zichzelf en heeft dus een connection stream nodig. Een connectionstream manipuleert de data op een veel lager (byte) niveau. De chainstream doet dat op hoger niveau (bvb objecten lezen/schrijven) en vertaald dat naar de lagerniveaumethoden.
24 november 2008
pg. 1 van 2
KHLeuven, dept. G&T, 1TI
Connection: FileOutputStream Chain: ObjectOutputStream 41. Beschrijf met een eenvoudig voorbeeld de stappen om een object: geserialized weg te schrijven naar een bestand, te deserializen (restoren uit een bestand), als een tekstbestand weg te schrijven, in te lezen uit een tekstbestand Serialisatie: • Laat de klasse van het object dat je wil serialiseren de interface Serializable implementeren • Zorg ervoor dat alle klassen die door de te serialiseren klasse gereferenced worden ook de klasse Serializable implementeren • Maak een FileOutputStream naar een bestand en ”chain”dit aan een ObjectOutputStream • Gebruik deze laatste om de objecten weg te schrijven (met de methode writeObject()) • Sluit de ObjectOutputStream Deserialisatie: • Maak een FileInputStream naar een bestand met geserialiseerde objecten en ”chain”dit aan een ObjectInputStream • Gebruik dit laatste om de objecten in te lezen • Cast deze objecten naar hun juiste type (want readObject() geeft objecten van het type Object terug) • Sluit de ObjectInputStream De rest staat al eens in een ander documentje... 42. Leg de betekenis uit van: het keyword transient, de interface Serializable, serialVersionUID ...
24 november 2008
pg. 2 van 2
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 01 december 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Design patterns (hfstk. 3 blz. 77-105): The decorator pattern • Head First Design patterns (hfstk. 6 blz. 185-226): The command pattern
OEFENINGEN 43. Geef het typische klassendiagramma dat behoort bij het decorator pattern (blz. 89) en geef uitleg bij elke klasse. Illustreer dit klassendiagramma met een heel eenvoudig voorbeeld. Component is een abstracte klasse (het algemene supertype), ConcreteComponent is het concrete object waar we eventueel nieuw gedrag aan kunnen toevoegen. Decorator is de abstracte superklasse van alle concrete decorators die nieuw gedrag kunnen toevoegen, en die erft over van Component (om meervoudige toevoegingen te kunnen realiseren). ConcreteDecoratorA en ConcreteDecoratorB zijn concrete implementaties van Decorator en deze klassen voegen het nieuwe gedrag toe. Ze hebben een referentie (dus in een instantievariabele) naar Component (HEEFT-EEN of wraps). Zie het handboek voor een voorbeeld ivm. koffie. 44. Geef het tyische klassendiagramma dat behoort bij het command pattern (blz 201) en geef uitleg bij elke klasse. Illustreer dit klassendiagramma met het voorbeeld van de remote control ... 45. Geef zowel voor decorator als command patroon de voordelen (wanneer gebruiken we best deze patronen) ...
01 december 2008
pg. 1 van 1
KHLeuven, dept. G&T, 1TI
1 Toegepaste Informatica, reeks 1A 08 december 2008 Object Oriented Ontwerp Opdracht: Wekelijkse Vragen Student: Y. Reekmans
LEZEN • Head First Java (hfstk. 16 blz. 529-579): Data structures • Powerpoint presentatie “JavaCollecties” op PAFOX
OEFENINGEN 46. Geef een overzicht van de klassen uit de Collection API met hun voornaamste kenmerken (blz 558) Kijk maar gewoon blz. 558 47. Leg het verschil uit tussen reference en object equality; Leg de betekenis uit van de methode hashCode() ... 48. Leg de werking uit van de HashSet en HashMap klassen: Wat is hashing? Verband met de methode hashcode. Hoe objecten opslaan en opvragen. Vergelijking tussen beide klassen (overeenkomsten en verschillen) ... 49. Leg de werking uit van de TreeSet klasse en vergelijk met HashSet klasse ... 50. Veronderstel, binnen een klasse is er een methode: public void takeAnimals(ArrayList animals) Animal is een abstracte klasse, Dog en Cat erven ervan over. Mogen we dan in een testprogramma schrijven: ArrayList dogs = new ArrayList(); dogs.add(new Dog()); takeAnimals(dogs); Motiveer je antwoord en indien niet mogelijk hoe oplossen (blz 569-575) ...
08 december 2008
pg. 1 van 1
KHLeuven, dept. G&T, 1TI
Richtlijnen examen De vragen van het theoriegedeelte van het examen komen uit de lijst van 50 vragen uit vorige werkbladen. Elke vraag heeft evenveel kans om gesteld te worden!!! Studeer de vragen met inzicht. Op het examen krijg je een ”letterlijke”vraag of een afgeleide vraag of een toepassing die inzicht in de vraag test. Lees ook de bulletpoints na achter elk behandeld hoofdstuk uit de 2 handboeken. Hieruit kunnen juist/fout vragen of inzichtsvragen gesteld worden. Behandelde hoofdstukken: Head First Java: 7, 8, 14, 16 en Appendix B (Enumeration) Design patterns: 1, 3, 4, 5, 6, 8 en 10 Puntenverdeling OO-ontwerpen: • Practicum + permanente evaluatie: 30p (Bij eventuele herexamen is een herkansing voor PE mogelijk) • Examen Theorie : 30p (zie hierboven; bij eventuele herexamen komen er opnieuw vragen uit deze lijst) • Examen Schriftelijke oefening op papier: 40p. Deze oefening is ofwel: – Een grote toepassing (in de aard van practicaoefeningen) waarvoor een ontwerp met patronen (UML klassendiagramma) moet bedacht worden en waarna (aan de hand van een standaardoplossing) stukken code moeten geschreven worden. – Kleinere toepassingen (zowel ontwerp als coderen) Het examen is een gesloten boek examen