Wie een smartphone of tablet heeft, kent het wel: een overzicht van je gemiste berichten in de vorm van notifications. Het geeft je in een oogopslag een samenvatting van de gemiste berichten tijdens de les wiskunde of Frans. In iOS of iPadOS van Apple heet dit overzicht het berichtencentrum. In onderstaande afbeelding zie je een berichtencentrum met heel wat verschillende types van berichten
Twee types van notifications herkennen de meesten onmiddellijk:
Naast deze informatie tonen alle notifications hoelang geleden het bericht toegekomen is.
In deze oefening programmeren we de klasse Berichtencentrum
, een klasse die objecten van het type Mail
en IMessage
verzamelt in een ArrayList
. Je maakt in BlueJ het project Berichtencentrum met volgende klassen:
Bericht
: de code van Bericht
kan je hier1 downloaden.Mail
: de code van Mail
kan je hier2 downloaden.IMessage
: de code van IMessage
kan je hier3 downloaden.Berichtencentrum
: kopieer alvast de boilerplate-code uit de indiensectie op deze pagina naar jouw project.Bestuderen we eerst even de klassendefinitie van Bericht
:
public abstract class Bericht {
private String afzender;
private int timestamp;
protected String bericht;
public Bericht(String afzender, String bericht){
this.afzender = afzender;
this.bericht = bericht;
timestamp = 0;
}
public String getAfzender(){
return afzender;
}
public void setTimestamp(int timestamp){
this.timestamp = timestamp;
}
public int getTimestamp(){
return timestamp;
}
public String leeftijd(){
//...
}
public abstract void print();
}
De klasse Bericht
is een abstracte klasse met 1 abstracte methode: print()
. De subklassen Mail
en IMessage
implementeren, op een eerder complexe wijze, de methode print()
.
Elk bericht heeft een afzender en timestamp. De waarde van het veld timestamp
kan je steeds opvragen
of wijzigen. De waarde van het veld afzender
kan je opvragen. Het veld bericht
houdt het
eigenlijke bericht bij.
Op basis van de timestamp wordt de leeftijd van het bericht bepaald. De methode leeftijd()
geeft
bijvoorbeeld 3 uren geleden terug.
De klasse Mail
is een uitbreiding van de klasse Bericht
en heeft een extra veld: onderwerp
. De implementatie
van de methode print()
hoef je niet te begrijpen. Test deze methode wel op voorhand.
De klasse IMessage
is een uitbreiding van de klasse Bericht
. Geen extra velden of methoden. Wel opnieuw
een complexe implementatie van de methode print()
. De moeite om eens te testen.
Programmeer de klasse Berichtencentrum
.
Het enige veld verzamelt objecten van het type IMessage
en Mail
in een
ArrayList
.
In de constructor initialiseer je het enige veld.
void toevoegen(...)
Voeg een nieuw object van het type IMessage
of Mail
toe aan het berichtencentrum.
... opvragen(int)
Geeft het object van het type IMessage
of Mail
op de gegeven index terug. Controleer of de index
geldig is!.
void print()
Toont het berichtencentrum in het Terminalvenster van BlueJ.
int aantalVan(String)
Geeft het aantal objecten van het typeIMessage
of Mail
terug waarbij de afzender de gegeven tekst
bevat. Gebruik de methode boolean contains(String)
van de klasse String
. Zorg dat deze methode niet
hoofdlettergevoelig is.
void meestRecente()
Toont het meest recente bericht van het berichtencentrum in het Terminalvenster van BlueJ.