====== 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. Abstraktní třída **OMOSetBase** definuje možnost přidávání a odebírání prvků. 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 } abstract class OMOSetBase implements OMOSetView { public abstract void add(int element); //přidá prvek "element" do množiny public abstract void remove(int element); //odebere prvek "element" z množiny } Výše uvedené rozhraní a abstraktní třídu neodevzdávejte, hodnotící systém je již obsahuje. Všechny vaše třídy se musí nacházet v package **cz.cvut.k36.omo.hw.hw02**. 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 public class OMOSet extends OMOSetBase implements OMOSetView { // metody rozhraní OMOSetView a OMOSetBase } // třída reprezentující sjednocení dvou množin: A sjednoceno B public 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 public 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 } public class OMOSetComplement implements OMOSetView { OMOSetComplement(OMOSetView setA, OMOSetView setB) { //... } // metody rozhraní OMOSetView } // třída reprezentující množinu sudých čísel public 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. třídy OMOSet, OMOSetUnion, OMOSetIntersection, OMOSetComplement a OMOSetEven - každou v samostatném .java souboru) zabalte do .zip archivu a odevzdejte do systému Brute. Celý projekt také uložte do svého gitlab repozitáře. Projekt si muzete stahnou zde: {{ :courses:b6b36omo:hw:022018:du2.zip |}}