Deze opgave is het eerste deel van de Klassement-opgave.
In deze opgave zal je, gespreid over 2 deelopgaves, een programma maken waarin je de punten van ploegen kan bijhouden om zo een winnaar te bepalen. Het eerste deel van deze opgave bestaat erin een klasse Team
te implementeren, die een ploeg voorstelt. Hierna, in het tweede deel van deze opgave, zal je deze klasse gebruiken om wedstrijden te spelen tussen verschillende ploegen.
Maak een Java-klasse Team
. Deze klasse stelt een ploeg voor en bestaat uit volgende instantievariabelen, constructor en methoden:
Een object van de Team
-klasse moet minstens volgende instantievariabelen bevatten, het is toegelaten om er extra aan te maken indien je dit nodig vindt.
String
(deze String
is de naam van de persoon)De constructor van de Team
-klasse moet volgende signatuur hebben:
Team(String name, int size);
Argumenten:
De naam, de leden en het aantal punten van de ploeg moeten kunnen worden opgevraagd via een accessor, volgende methoden worden dus verwacht:
// De leden van de ploeg opvragen
String[] getMembers();
// De naam van de ploeg opvragen
String getName();
// Het aantal punten van de ploeg opvragen
int getPoints();
De naam van de ploeg moet ook kunnen aangepast worden. Bijkomend moet je de punten van de ploeg kunnen verhogen of verlagen, dit doe je door volgende methodes te implementeren:
// Verhoog het aantal punten van de ploeg met "amount" (als dit een negatief getal is worden de punten verlaagd)
void addPoints(int amount);
// De naam van de ploeg veranderen in newName
void setName(String newName);
Naast bovenstaande methodes, dien je ook nog onderstaande methodes te implementeren.
// Voegt een lid toe met naam "name"
void addMember(String name);
// Geeft true terug als "name" een lid is van deze ploeg
boolean containsMember(String name);
// Geeft true terug als alle beschikbare plaatsen in dit team volzet zijn met mensen.
boolean isFull();
// Verwijdert het lid "name" uit deze ploeg.
void removeMember(String name);
Het is belangrijk dat je definieert wanneer twee ploegen aan elkaar gelijk zijn. Dit doe je door een equals()
-methode te implementeren. We stellen dat twee ploegen A en B aan elkaar gelijk zijn, als en slechts als voldaan is aan onderstaande voorwaarden (allemaal):
Belangrijk: Zoals je kan zien in onderstaande code, gebruiken we equals(Object other)
en niet equals(Team other)
als signatuur voor de equals()
-methode. Dit is conform de Java-standaard. Het argument heeft als type de Object
-klasse. Elke klasse die je in Java definieert, is in feite een uitbreiding van deze Object
klasse. Door de equals()
-methode op deze manier te schrijven, is het mogelijk om met dezelfde equals()
-methode, van eender welke instantie van eender welke andere klasse te controleren of ze gelijk is aan deze instantie van de Team
klasse. Er zullen dus geen compilatiefouten opduiken wanneer bijvoorbeeld een Team
met een Student
zou worden vergeleken, indien dit het gewenste gedrag zou zijn. Dit principe staat bekend als overerving. Hierover volgt later meer.
Aangezien het argument een instantie van het type Object
is, moeten we dit argument via type-casting eerst omzetten naar een instantie van de Team
-klasse. Het zou echter kunnen dat het meegegeven argument niet kan omgezet worden naar een instantie van de Team
-klasse, dus vooraleer we aan type-casting kunnen doen, moeten we eerst controleen of dit wel degelijk mogelijk is. Dit kunnen we doen door middel van het instanceof
keyword. Onderstaande code bevat een incomplete implementatie van de equals()-methode
. De type-cast is reeds voor jou gedaan, aan jou om de rest van die methode te implementeren.
// Geeft true terug als deze ploeg gelijk is aan otherTeam.
boolean equals(Object other) {
if (other instanceof Team) {
// other is wel degelijk een instantie van de Team-klasse, typecasting is toegestaan.
Team otherTeam = (Team) other;
// TODO: controleer of otherTeam gelijk is aan deze ploeg
// via bovenstaande specificatie
return true_of_false;
} else {
// other is geen instantie van de Team-klasse, typecasting is niet toegestaan.
// Aangezien other geen instantie van de Team-klasse is, kan other ook nooit
// gelijk zijn aan deze ploeg. De methode geeft false terug.
return false;
}
}
equals()
-methode vanuit gaan dat, indien 2 teams met dezelfde leden met elkaar worden vergeleken, deze leden in dezelfde volgorde zijn toegevoegd aan beide teams.null
, heb je een methode opgeroepen op een object dat null
was. Dit kan gebeuren als je bijvoorbeeld, equals()
oproept op een element in een array dat nog niet is ingevuld.Hierbij nog wat uitleg over de Dodona-testen voor deze oefening:
getName()
-methode correct werkt.getPoints()
-methode correct werkt.setName()
-methode correct werkt.addPoints()
-methode correct werkt.addMember()
en containsMember
-methoden correct werken.getMembers()
-methode correct werkt.removeMember()
-methode correct werkt.isFull()
-methode correct werkt, door enkel leden toe te voegen.isFull()
-methode correct werkt, door leden toe te voegen en te verwijderen.equals()
methode correct werkt.