Klasse Stamboom (6,5 punten)
- Definieer de klasse Stamboom
- Voeg de instantievariabele rootNode toe. Deze instantiavariabele bevat het topelement van je stamboom.
- Definieer de constructor Stamboom zoals beschreven in het bovenstaande klassendiagram. De constructor initialiseert de rootNode instantiavariabelele aan de hand van de opgegeven parameters.
- Definieer een methode zoekNode met als parameters de strings naam en voornaam. De boom kan doorzocht worden door gebruik te maken van een arraylist die functioneert als een eenvoudige rij. De rij wordt geinitialiseert met als enig element de rootNode. Vervolgens wordt steeds het eerste element van de rij afgehaald en wordt nagegaan of dit element overeenstemt met de gezochte node. Indien deze overeenstemt wordt deze stamboomNode geretourneerd. Indien dit niet het geval is worden de kinderen van de stamboomNode dat juist werd gecontroleerd toegevoegd op het einde van de rij. Het zoeken stopt indien de rij geen stamboomNodes meer bevat. Dit wil zeggen dat het element niet is gevonden en de methode zal vervolgens een aangepaste StamboomException gooien.
(2 punten)
- Definieer methode addKind met als parameters naam en voornaam van de ouder en naam, voornaam, geboortedatum en geslacht van het kind. Deze methode zoekt de ouder en voegt aan deze ouder een nieuwe stamboomNode toe door gebruik te maken van de opgegeven parameters. Indien de ouder niet bestaat wordt een aangepaste StamboomException gegooid.
(0,5 punt)
- Definieer de methode addPartner met als parameters de naam en voornaam van de stamboomNode waaraan je een partner wenst toe te voegen en ook de naam, voornaam, geboortedatum en geslacht van de partner. De partner wordt voorgesteld als Persoon, niet als StamboomNode. Indien de stamboomNode niet wordt gevonden wordt een aangepaste foutboodschap gegooid. Indien de stamboomNode reeds een partner heeft eveneens wordt een aangepaste StamboomException gegooid.
(1 punt)
- Definieer de methode getKleinkinderen met als parameters de naam en voornaam van de stamboomNode waarvan je de kleinkinderen wenst te bepalen. De methode retourneert de kinderen als een hashset van stamboomNodes. Indien de stamboomNode niet wordt gevonden wordt een aangepaste StamboomException gegooid.
(1 punt)
- Definieer de statische methode leesStamboom met als parameter een bestandsnaam. Deze methode leest de stamboom via een tekstbestand in en retourneert deze stamboom. Een voorbeeld van een tekstbestand met een stamboom is beschikbaar in het zipbestand. Je mag er vanuit gaan dat geen enkele voornaam of achternaam spaties bevat en dat elk bestand altijd begint met minstens 1 node. Indien het tekstbestand niet wordt gevonden, wordt een aangepaste StamboomException gegooid.
(2 punten)
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).
- test04constructorsPresence: 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).
- test06methodsPresent: test of de verwachte methodes aanwezig zijn in de ingediende klasse en of de methode definities overeenkomen met de verwachte definities (= test geen effect!).
- test07accessorsMutators: test of de ingediende klasse de al dan niet verwachte accessor- en mutatormethodes definieert en of deze het verwachte effect hebben.
- test08zoekNode: test de zoekNode-methode.
- test09zoekNode_enkelRoot: test de zoekNode-methode enkel met scenario’s waarin de rootNode meegegeven wordt als parameter.
- test10zoekNode_enkelExceptions: test de zoekNode-methode enkel met scenario’s waarin een exception verwacht wordt.
- test11zoekNode_zonderExceptions: test de zoekNode-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test12addKind: test de addKind-methode.
- test13addKind_enkelRoot: test de addKind-methode enkel met scenario’s waarin de naam en voornaam van de rootNode meegegeven wordt als parameters voor de ouder.
- test14addKind_enkelExceptions: test de addKind-methode enkel met scenario’s waarin een exception verwacht wordt.
- test15addKind_zonderExceptions: test de addKind-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test16addPartner: test de addPartner-methode.
- test17addPartner_nodeIpvPersoon: test de addPartner-methode enkel voor het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt.
- test18addPartner_enkelExceptions: test de addPartner-methode enkel met scenario’s waarin een exception verwacht wordt.
- test19addPartner_enkelPartnerException: test de addPartner-methode enkel met scenario’s waarin de gegeven node al een partner had.
- test20addPartner_zonderPartnerException: test de addPartner-methode zonder scenario’s waarin de gegeven node al een partner had.
- test21addPartner_zonderPartnerException_nodeIpvPersoon: test de addPartner-methode zonder scenario’s waarin de gegeven node al een partner had en enkel voor het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt.
- test22addPartner_zonderExceptions: test de addPartner-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test23addPartner_zonderExceptions_nodeIpvPersoon: test de addPartner-methode zonder scenario’s waarin exceptions verwacht worden en enkel voor het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt.
- test24addPartner_enkelRoot: test de addPartner-methode enkel met scenario’s waarin de naam en voornaam van de rootNode meegegeven wordt als parameters voor de node.
- test25addPartner_enkelRoot_nodeIpvPersoon: test de addPartner-methode enkel met scenario’s waarin de naam en voornaam van de rootNode meegegeven wordt als parameters voor de node en enkel voor het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt.
- test26getKleinkinderen: test de getKleinkinderen-methode.
- test27getKleinkinderen_getKleinKinderen: test de getKleinkinderen-methode enkel voor het geval dat deze methode niet correct benoemd is.
- test28getKleinkinderen_enkelRoot: test de getKleinkinderen-methode enkel met scenario’s waarin de naam en voornaam van de rootNode meegegeven wordt als parameters voor de ouder.
- test29getKleinkinderen_enkelExceptions: test de getKleinkinderen-methode enkel met scenario’s waarin een exception verwacht wordt.
- test30getKleinkinderen_zonderExceptions: test de getKleinkinderen-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test31leesStamboom: test de leesStamboom-methode.
- test32leesStamboom_nodeIpvPersoon: test de leesStamboom-methode enkel voor het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt..
- test33leesStamboom_enkelExceptions: test de leesStamboom-methode enkel met scenario’s waarin een exception verwacht wordt.
- test34leesStamboom_zonderExceptions: test de leesStamboom-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test35leesStamboom_zonderExceptions_nodeIpvPersoon: test de leesStamboom-methode enkel voor scenario’s waarin geen exceptions verwacht worden en enkel in het foutieve geval waarin de partner foutief als StamboomNode (ipv Persoon) opgeslagen wordt..