Search
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:
OMOSetView
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:
copy()
// 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í.
OMOSetUnion
OMOSetIntersection
OMOSetComplement
OMOSetEven
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.
OMOSet
homeworks/Homework2.java
~~DISCUSSION:off~~