Deze opgave is het eerste deel van de Klassement-opgave.

Klassement

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.

Opgave

Maak een Java-klasse Team. Deze klasse stelt een ploeg voor en bestaat uit volgende instantievariabelen, constructor en methoden:

Instantievariabelen

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.

Constructor

De constructor van de Team-klasse moet volgende signatuur hebben:

Team(String name, int size);

Argumenten:

Accessors

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();

Mutators

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);

Extra methodes

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);

Equals

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;
    }
}

Assumpties en tips


Hierbij nog wat uitleg over de Dodona-testen voor deze oefening: