Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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.
courses/b6b36omo/hw/022018/start.txt · Last modified: 2018/10/16 00:46 by balikm1