Jedenáctý domácí úkol

Naimplementujte třídu Set, reprezentující množinu, a třídy Union a Intersection, reprezentující pohled na sjednocení resp. průnik dvou množin. Všechny tři implementace by měly rozesílat události elementAdded a elementRemoved právě tehdy, když se velikost dané množiny zvětšila nebo změnšila o jednu (tzn. např. Set nerozesílá elementAdded při pokusu o přidání již obsaženého prvku).

interface ObservableSet {
    boolean contains(Integer elem);
    void addSetListener(SetListener sl);
    void removeSetListener(SetListener sl);
}
 
interface SetListener {
    void elementAdded(ObservableSet source, Integer elem);
    void elementRemoved(ObservableSet source, Integer elem);
}
 
class Set implements ObservableSet {
    void add(Integer elem) {}
    void remove(Integer elem) {}
}
 
class Union implements ObservableSet {
    Union(ObservableSet first, ObservableSet second) {}
}
 
class Intersection implements ObservableSet {
    Intersection(ObservableSet first, ObservableSet second) {}
}

Do repozitáře do souboru homeworks/Homework11.java odevzdávejte třídy Set, Union a Intersection a případné další vámi naprogramované třídy. Neodevzdávejte rozhraní ObservableSet a SetListener. Termín odevzdání 1. 6. 1:59 ráno (čas podle serveru s repozitáři).

~~DISCUSSION:closed~~