FacebookUitgebreid Deel1
Deel 1: Klasse Account
Download de klasse Post
.
- Voeg een statische en finale variabele serialVersionUID van het type long toe met waarde
19
.
Let op: deze en alle hieronder beschreven variabele staan niet in het klassediagram. Je gaat dus zelf moeten bedenken wat de types van deze variabelen moet zijn. Zo zal het ook op het examen zijn.
- Voeg een instantievariabele firstName toe die een tekst kan bijhouden.
- Voeg een instantievariabele lastName toe die een tekst kan bijhouden.
- Voeg een instantievariabele gender toe die een tekst kan bijhouden.
- Voeg een instantievariabele email toe die een tekst kan bijhouden.
- Voeg een instantievariabele login toe die een tekst kan bijhouden.
- Voeg een instantievariabele password toe die een tekst kan bijhouden.
- Voeg een instantievariabele friends toe die het mogelijk maakt een collectie bevriende Account objecten bij te houden voor elke account. Er is geen bovengrens voor het aantal bevriende accounts die bijgehouden kunnen worden en het moet mogelijk zijn om dynamisch nog extra bevriende accounts 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 met een bepaalde volgorde.
- Voeg een instantievariabele wall toe die een collectie van Post objecten bijhoud voor elke account. Er is geen bovengrens voor het aantal posts die bijgehouden kunnen worden en het moet mogelijk zijn om dynamisch nog extra posts 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.
- Voeg een instantievariabele likes toe die het mogelijk maakt een collectie id’s bij te houden voor elke account. Deze id’s verwijzen naar id’s van Post objecten. Er is geen bovengrens voor het aantal id’s die bijgehouden kunnen worden en het moet mogelijk zijn om dynamisch nog extra id’s 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.
- Maak een constructor voor deze klasse met de parameters zoals in bovenstaand klassendiagram. De drie collectie instantievariabelen worden dus niet meegegeven als parameter, maar wel geïnstantieerd als lege collecties (dus niet null!!!) in de constructor.
- Voeg accessor- en mutatormethodes toe voor de zes instantievariabelen die al in de klasse zaten en enkel accessormethodes voor de drie collectie instantievariabelen die je net hebt toegevoegd.
- Overschrijf de methode toString (van Object) die geen parameters heeft. De methode geeft de voornaam, achternaam en een vermelding van het aantal vrienden terug zoals in de volgende drie voorbeelden:
Eden Hazard (10 vrienden)
Moussa Dembele (19 vrienden)
Jan Vertonghen (5 vrienden)
- Voeg een methode getCSV toe die geen parameters heeft. De methode geeft een eenvoudige CSV voorstelling van de Account terug van de vorm
firstName;lastName;gender;email;login;password
, zoals in de volgende drie voorbeelden:
Eden;Hazard;Male;Eden.Hazard@gmail.com;eden10;chelsea
Moussa;Dembele;Male;Moussa.Dembele@gmail.com;moussa19;spurs
Jan;Vertonghen;Male;Jan.Vertonghen@gmail.com;jan5;chelsea
- Overschrijf de methode hashCode (van Object) die geen parameters heeft. De methode geeft een geheel getal terug dat gebruikt zal worden voor hash-structuren te maken. Het verwachte gedrag van dit soort methode is dat de hash code gelijk zal zijn voor objecten die gelijk zijn en ongelijk voor objecten die ongelijk zijn. De methode maakt enkel gebruik van de volgende instantievariabelen: ‘firstName’, ‘lastName’, ‘gender’, ‘email’, ‘login’ en ‘password’.
- Overschrijf de methode equals (van Object) die een Object object als parameter heeft. De methode geeft ‘true’ terug
indien de meegegeven parameter niet ‘null’ is, een object van de klasse Account is, de velden ‘firstName’, ‘lastName’, ‘gender’, ‘email’, ‘login’, ‘password’ en ‘likes’ van beide objecten dezelfde waarde hebben is, de collectie van vrienden (=‘friends’) van beide objecten vrienden met dezelfde login bevatten én de collectie van posts (=‘wall’) van beide objecten posts met dezelfde postID bevatten. Let op de laatste twee voorwaarden. Vergelijk, bijvoorbeeld, de vrienden niet met de equals-methode van Account, aangezien dit een eindeloze lus zou veroorzaken (=StackOverflowError). Vergelijk ze in plaats daarvan specifiek aan de hand van de gevraagde velden.
TIP: Maak hulpmethodes om de ‘friends’ en ‘wall’ variabelen te testen.
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).
- test04constructor: test of de constructor het gewenste effect heeft (indien van toepassing).
- test05methodsPresent: test of de verwachte methodes aanwezig zijn in de ingediende klasse en of de methode definities overeenkomen met de verwachte definities (= test geen effect!).
- test06accessorsMutators: test of de ingediende klasse de al dan niet verwachte accessor- en mutatormethodes definieert en of deze het verwachte effect hebben.
- test07hashCode: test de hashCode-methode.
- test08equals: test de equals-methode.
- test09getCSV: test de getCSV-methode.
- test10toString: test de toString-methode.