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

iphone

Twee types van notifications herkennen de meesten onmiddellijk:

Naast deze informatie tonen alle notifications hoelang geleden het bericht toegekomen is.

BlueJ

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:

klassendiagram

Bericht

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.

Mail

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.

IMessage

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.

Opgave

Programmeer de klasse Berichtencentrum.

stereo-installatie

stereo-installatie