CREATE OR REPLACE TYPE Complex AS OBJECT ( re REAL, -- partea reala im REAL, -- partea imaginara MEMBER FUNCTION suma (x Complex) RETURN Complex, -- aduna ob.curent cu ob.argument MEMBER FUNCTION diferenta (x Complex) RETURN Complex, -- din ob.curent se scade ob.argument MEMBER FUNCTION produs (x Complex) RETURN Complex, -- inmulteste ob.curent cu ob.argument MEMBER FUNCTION cit (x Complex) RETURN Complex, -- ob.curent se imparte cu ob.argument MEMBER FUNCTION tochar RETURN Char, -- conversie la un sir de caractere MEMBER FUNCTION modul RETURN Real -- nu exista un constructor explicit implementat ); / CREATE OR REPLACE TYPE BODY Complex AS MEMBER FUNCTION suma (x Complex) RETURN Complex IS BEGIN RETURN Complex(re + x.re, im + x.im); -- Complex este constructorul implicit END; MEMBER FUNCTION diferenta (x Complex) RETURN Complex IS BEGIN RETURN Complex(re - x.re, im - x.im); -- se foloseste constructorul implicit END; MEMBER FUNCTION produs (x Complex) RETURN Complex IS BEGIN RETURN Complex(re * x.re - im * x.im, re * x.im + im * x.re); -- se foloseste constructorul implicit END; MEMBER FUNCTION cit (x Complex) RETURN Complex IS r REAL := x.re**2 + x.im**2; BEGIN RETURN Complex((re * x.re + im * x.im) / r, (im * x.re - re * x.im) / r); -- se foloseste constructorul implicit END; MEMBER FUNCTION tochar RETURN Char IS BEGIN RETURN to_char(re) || '+' || to_char(im) || '*i'; END; MEMBER FUNCTION modul RETURN Real IS BEGIN RETURN Sqrt(re*re+im*im); END; END;