Objektová implementace datové struktury

Napište objektovou implementaci nějaké pokročilejší datové struktury, kterou jste brali na přednášce.

Struktura bude reprezentovaná jedním objektem a bude podporovat všechny potřebné operace pro práci s daty. Všechny veřejné metody budou zaručovat, že při jejich volání se struktura bude nacházet v konzistentním stavu (např. pokud chci smazat prvek z prázdné struktury, tak program nespadne a podobně). Používejte správně modifikátory přístupu (tzn. public, private) a držte se pravidel objektového programování.

Například objektová implementace binárního vyhledávacího stromu by měla nabízet minimálně tyto veřejné metody: Použití v programu by pak mohlo vypat následovně:
type BVS = ...
var strom1, strom2 : BVS;

begin
strom1 = new(BVS);	//vytvoří nový prázdný strom;
strom1.pridej(25);
strom1.pridej(45);
strom1.obsahujeNecoZIntervalu(0, 30);	//vrati TRUE
strom1.vypisOdNejmensiho;
strom2 = new(BVS);
strom2.pridej(25);
strom1.maNeprazdnyPrunik(strom2);	//vrati TRUE
// atd.
end;

Za úlohu můžete získat 25 bodů