FondsAnalyse Deel2

Deel 2: Klasse FondsAnalyse
Voeg de volgende instantievariabele en constructor toe:
- één instantievariabelen die verschillende fondsen bijhoudt in een collectie aan de hand van hun ISIN code. De ISIN code is de sleutel om de bijhorende Fonds object op te kunnen vragen. Er is geen bovengrens voor het aantal fondsen die bijgehouden kunnen worden en het moet mogelijk zijn om dynamisch nog extra fondsen toe te voegen aan de instantievariabele of ze te verwijderen (hiervoor hoef je echter geen extra methodes te voorzien). Zorg ervoor dat er geen dubbels in de collectie kunnen zitten. De objecten in de collectie zijn niet opgeslagen in een bepaalde volgorde.
(naam instantievariabele = fondsen)
(0,5 punt)
- een constructor met als parameter een File object die de methode leesFondsen hiermee oproept. Nadien geeft de methode een boodschap weer in de console van de vorm: “[het aantal ingeladen fondsen] fondsen ingeladen!”. De placeholder wordt vervangen door het aantal fondsen die ingeladen zijn door de leesFondsen-methode.
(0,5 punt)
Voeg de volgende methodes toe:
- Een methode leesFondsen met als parameter een File object. Dit File object verwijst naar een binair bestand waarin de instantievariabele fondsen is opgeslagen. De methode laadt de inhoud van de variabele in en retourneert hoeveel fondsen er werden ingeladen. Indien er iets fout loopt bij het inlezen wordt volgende boodschap uitgeprint in de console: “Het bestand kan niet ingelezen worden!”. Het binaire bestand
fondsen.bin
bevat data over 20 fondsen en kan je dus gebruiken om je methode te testen (maar de methode moet uiteraard ook werken voor bestanden met meer of minder fondsen!).
(1 punt)
- Een methode schrijfFondsen met als parameter een File object dat verwijst naar het bestand naar waar je de instantievariabele fondsen wenst weg te schrijven. De methode schrijft de fondsen weg naar het gegeven bestand. Indien er iets fout loopt bij het uitschrijven, wordt de gegooide exception doorgegooid door de methode.
(1 punt)
- Een methode printFondsenOverzicht met als parameter een TimeStamp object. Deze methode zal de waarde van de opgeslagen fondsen weergeven voor de opgegeven timestamp. De fondsen worden in gesorteerde volgorde weergegeven. Voor elk fonds wordt een regel van de volgende vorm uitgeprint:
[naam van fonds]: [waarde van fonds op gegeven timestamp] [munteenheid van fonds] op [gegeven timestamp]
. Indien er voor een fonds geen snapwaarde voor de gegeven timestamp beschikbaar is (rechtstreeks of geïnterpoleerd), zal er voor dat fonds (in de plaats van voorgaande regel) een regel van de volgende vorm uitgeprint worden: [naam van fonds]: geen data beschikbaar
.
Hieronder een voorbeeld voor 5 fondsen op 14/03/2017:
Vanguard Intermediate-Term Bond ETF: geen data beschikbaar
Amundi Short-Term Inflation-Protected Securities ETF: 132.504 EUR op 14/03/2017
Vanguard Mega Cap ETF: 28.8725 EUR op 14/03/2017
Amundi Total Bond Market ETF: 148.4663157894737 EUR op 14/03/2017
Lyxor Growth ETF: 21.623 EUR op 14/03/2017
(1 punt)
Hierbij nog wat uitleg over de Dodona-testen voor deze oefening:
- test00objectConcept: test of de ingediende klasse de verwachte de klasse definitie heeft (interface/abstracte klasse/klasse/enum/…).
- test01inheritance: test of de ingediende klasse de verwachte superklasse heeft en de verwachte interfaces implementeert.
- test02variables_presence: test of de ingediende klasse de verwachte instantievariabelen en statische variabelen definieert.
- test03variables_staticInitialValue: test of de statische variabelen van de klasse geinitialiseerd worden met de verwachte waarde (indien van toepassing).
- test04constructorPresence: test of de ingediende klasse de verwachte constructor(en) definieert (= test geen effect!) (indien van toepassing).
- test05constructor: test of de constructor het gewenste effect heeft (indien van toepassing).
- test06constructor_zonderExceptions: test of de ingediende klasse de verwachte constructor definieert en of deze het verwachte effect heeft. Er worden geen scenario’s getest waarin exceptions verwacht worden.
- test07constructor_zonderConsole: test of de ingediende klasse de verwachte constructor definieert en of deze het verwachte effect heeft. Er wordt niet getest op de gevraagde boodschap in de console, enkel het effect van de constructor.
- test08methodsPresent: test of de verwachte methodes aanwezig zijn in de ingediende klasse en of de methode definities overeenkomen met de verwachte definities (= test geen effect!).
- test09accessorsMutators: test of de ingediende klasse de al dan niet verwachte accessor- en mutatormethodes definieert en of deze het verwachte effect hebben.
- test10leesFondsen: test de leesFondsen-methode. Indien de test succesvol is, scoor je de maximale punten voor deze methode.
- test11leesFondsen_enkelExceptions: test de leesFondsen-methode. Er worden enkel scenario’s getest waarin exceptions verwacht worden.
- test12leesFondsen_enkelExceptions_zonderClassNotFoundException: test de leesFondsen-methode. Er worden enkel scenario’s getest waarin exceptions verwacht worden, maar geen scenario’s waarin een ClassNotFoundException gegooid zou worden.
- test13leesFondsen_zonderExceptions: test de leesFondsen-methode. Er worden geen scenario’s getest waarin exceptions verwacht worden.
- test14leesFondsen_zonderExceptions_zonderReturn: test de leesFondsen-methode. Er worden geen scenario’s getest waarin exceptions verwacht worden en er wordt niet naar de return waarde gekeken.
- test15schrijfFondsen: test de schrijfFondsen-methode. Indien de test succesvol is, scoor je de maximale punten voor deze methode.
- test16schrijfFondsen_zonderClose: test de schrijfFondsen-methode. Er worden ook oplossingen aanvaard die de output stream niet correct afsluiten.
- test17schrijfFondsen_zonderExceptions: test de schrijfFondsen-methode. Er worden geen scenario’s getest waarin exceptions verwacht worden.
- test18schrijfFondsen_zonderClose_zonderExceptions: test de schrijfFondsen-methode. Er worden geen scenario’s getest waarin exceptions verwacht worden en er worden ook oplossingen aanvaard die de output stream niet correct afsluiten.
- test19printFondsenOverzicht: test de printFondsenOverzicht-methode. Indien de test succesvol is, scoor je de maximale punten voor deze methode.
- test20printFondsenOverzicht_returnIpvSysout: test de printFondsenOverzicht-methode maar er worden ook oplossingen aanvaard die de gevraagde tekst teruggeven als String ipv naar de console uitprinten.
Let op:
- Bij de beoordeling van het examen wordt niet enkel naar de resultaten van de tests gezien. Het is niet omdat een bepaalde test niet succesvol is, dat er automatisch punten afgetrokken worden. Bij het verbeteren wordt rekening gehouden met de resultaten van de testen, maar de beoordeling is nog altijd de code zelf (niet enkel het resultaat).
- Indien er niets over punten bij een test staat, zijn de resultaten louter indicatief. De resultaten van deze testen worden bij de beoordeling meegenomen, maar staan dus niet rechtstreeks voor een bepaald aantal punten.