====== Druhý domácí úkol ======
Tento domácí úkol ukazuje rozdíl mezi tzv. mělkou kopií (shallow copy) a hlubokou kopií (deep copy) [[https://en.wikipedia.org/wiki/Object_copying]]
Interface ''OMOSetView'' definuje rozhraní umožňující přístup k prvkům množiny celých čísel:
interface OMOSetView {
boolean contains(int element); // testuje na přítomnost prvku v množině
int[] toArray(); //vrátí kopii prvků množiny v poli (na pořadí prvků nezáleží)
OMOSetView copy(); //vrátí kopii množiny
}
Množina vrácená metodou ''copy()'' volané na instanci "a" nebude v případě následné změny (přidání/odebrání prvků) "a" změněna. Dopište kód následujících tříd:
// třída reprezentující obecnou množinu, definuje metody add/remove pro přidávání/odebírání prvků
class OMOSet implements OMOSetView {
public void add(int element) {
//přidá prvek "element" do množiny
}
public void remove(int element) {
//odebere prvek "element" z množiny
}
// metody rozhraní OMOSetView
}
// třída reprezentující sjednocení dvou množin: A sjednoceno B
class OMOSetUnion implements OMOSetView {
OMOSetUnion(OMOSetView setA, OMOSetView setB) {
//...
}
// metody rozhraní OMOSetView
}
// třída reprezentující průnik dvou množin: A průnik B
class OMOSetIntersection implements OMOSetView {
OMOSetIntersection(OMOSetView setA, OMOSetView setB) {
//...
}
// metody rozhraní OMOSetView
}
// třída reprezentující A\B: doplněk množiny B vzhledem k množině A: A\B = { x | x∈A ∧ x∉B }
class OMOSetComplement implements OMOSetView {
OMOSetComplement(OMOSetView setA, OMOSetView setB) {
//...
}
// metody rozhraní OMOSetView
}
// třída reprezentující množinu sudých čísel
class OMOSetEven implements OMOSetView {
OMOSetEven(OMOSetView setA) {
//...
}
// metody rozhraní OMOSetView
}
Instance tříd ''OMOSetUnion'', ''OMOSetIntersection'' , ''OMOSetComplement'' a ''OMOSetEven'' si udržují pouze reference na instance dílčích tříd //A// a //B// (tj. neukládají si kopie jejich prvků). Pokud tedy vytvoříme například sjednocení dvou množin //A// a //B// a následovně odeberem prvek z množiny //A//, projeví se to i na výsledku sjednocení.
Odevzdávaný kód (tzn. rozhraní ''OMOSetView'', třídy ''OMOSet'', ''OMOSetUnion'', ''OMOSetIntersection'', ''OMOSetComplement'' a ''OMOSetEven'') uložte do svého repozitáře do souboru ''homeworks/Homework2.java''.
/* Termín odevzdání je 31.10. 2016.*/
~~DISCUSSION:off~~