Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE TYPE persoana AS OBJECT
- (
- nume VARCHAR2(10),
- varsta INTEGER,
- CONSTRUCTOR FUNCTION persoana RETURN SELF AS RESULT,
- MEMBER PROCEDURE show
- ) NOT FINAL;
- CREATE OR REPLACE TYPE BODY persoana AS
- CONSTRUCTOR FUNCTION persoana RETURN self AS result IS
- BEGIN
- nume := 'none';
- varsta := 0;
- RETURN;
- END;
- MEMBER PROCEDURE show IS
- BEGIN
- DBMS_OUTPUT.put_line(nume || ' ' || varsta);
- END;
- END;
- CREATE OR REPLACE TYPE student UNDER persoana
- (
- nota INTEGER,
- CONSTRUCTOR FUNCTION student(n INTEGER) RETURN SELF AS RESULT,
- OVERRIDING MEMBER PROCEDURE show
- );
- CREATE OR REPLACE TYPE BODY student AS
- CONSTRUCTOR FUNCTION student(n INTEGER) RETURN SELF AS RESULT IS
- BEGIN
- nume := 'none';
- varsta := 0;
- nota := n;
- RETURN;
- END;
- OVERRIDING MEMBER PROCEDURE show IS
- BEGIN
- (SELF AS persoana).show();
- DBMS_OUTPUT.put_line(nota);
- END show;
- END;
- CREATE OR REPLACE TYPE profesor UNDER persoana
- (
- curs VARCHAR2(10),
- CONSTRUCTOR FUNCTION profesor(cursul VARCHAR2) RETURN SELF AS RESULT,
- OVERRIDING MEMBER PROCEDURE show
- );
- CREATE OR REPLACE TYPE BODY profesor AS
- CONSTRUCTOR FUNCTION profesor(cursul VARCHAR2) RETURN SELF AS RESULT IS
- BEGIN
- nume := 'none';
- varsta := 0;
- curs := cursul;
- RETURN;
- END;
- OVERRIDING MEMBER PROCEDURE show IS
- BEGIN
- (SELF AS persoana).show();
- DBMS_OUTPUT.put_line(curs);
- END show;
- END;
- DECLARE
- p1 persoana;
- p2 persoana;
- s1 student;
- s2 student;
- ps persoana;
- pr1 profesor;
- pr2 profesor;
- pr persoana;
- BEGIN
- p1 := NEW persoana('Ion', 40);
- p2 := NEW persoana;
- p1.show();
- p2.show();
- s1 := NEW student('Vasile', 23, 9);
- s2 := NEW student(8);
- s1.show();
- s2.show();
- pr1 := NEW profesor('Prof 1', 23, 'BDOO');
- pr2 := NEW profesor('ECBD');
- pr1.show();
- pr2.show();
- ps := NEW student('Andrei', 24, 10);
- ps.show();
- pr := NEW profesor('Prof 2', 23,'LFT');
- pr.show();
- END;
- SET serveroutput ON;
- ----3------
- CREATE OR REPLACE TYPE calculator AS OBJECT
- (
- frecventa_cpu FLOAT,
- ram FLOAT,
- hdd INTEGER,
- CONSTRUCTOR FUNCTION calculator RETURN SELF AS RESULT,
- MEMBER PROCEDURE show
- ) NOT FINAL;
- /
- CREATE OR REPLACE TYPE BODY calculator AS
- CONSTRUCTOR FUNCTION calculator RETURN self AS result IS
- BEGIN
- ram := 4;
- frecventa_cpu := 1.6;
- hdd :=500;
- RETURN;
- END;
- MEMBER PROCEDURE show IS
- BEGIN
- DBMS_OUTPUT.put_line('frecventa cpu ' ||frecventa_cpu || 'GHz; RAM ' || ram ||'GB HDD ' || hdd ||'GB');
- END;
- END;
- /
- CREATE OR REPLACE TYPE laptop UNDER calculator
- (
- durata_baterie FLOAT,
- CONSTRUCTOR FUNCTION laptop(n FLOAT) RETURN SELF AS RESULT,
- OVERRIDING MEMBER PROCEDURE show
- );
- CREATE OR REPLACE TYPE BODY laptop AS
- CONSTRUCTOR FUNCTION laptop(n FLOAT) RETURN SELF AS RESULT IS
- BEGIN
- ram := 4;
- frecventa_cpu := 1.6;
- hdd :=500;
- durata_baterie := n;
- RETURN;
- END;
- OVERRIDING MEMBER PROCEDURE show IS
- BEGIN
- (SELF AS calculator).show();
- DBMS_OUTPUT.put_line('durata baterie ' || durata_baterie ||'h ');
- END show;
- END;
- CREATE OR REPLACE TYPE desktop UNDER calculator
- (
- tip_carcasa VARCHAR2(10),
- CONSTRUCTOR FUNCTION desktop(carcasa VARCHAR2) RETURN SELF AS RESULT,
- OVERRIDING MEMBER PROCEDURE show
- );
- CREATE OR REPLACE TYPE BODY desktop AS
- CONSTRUCTOR FUNCTION desktop(carcasa VARCHAR2) RETURN SELF AS RESULT IS
- BEGIN
- ram := 4;
- frecventa_cpu := 1.6;
- hdd :=500;
- tip_carcasa := carcasa;
- RETURN;
- END;
- OVERRIDING MEMBER PROCEDURE show IS
- BEGIN
- (SELF AS calculator).show();
- DBMS_OUTPUT.put_line('tip carcasa ' || tip_carcasa);
- END show;
- END;
- CREATE TYPE v_calc AS VARRAY(6) OF calculator;
- DECLARE
- pc v_calc;
- c1 calculator;
- c2 calculator;
- d1 desktop;
- d2 desktop;
- l1 laptop;
- l2 laptop;
- i int;
- BEGIN
- c1 := NEW calculator();
- c2 := NEW calculator(1.8,0.5,80);
- d1 := NEW desktop(1.8,0.5,80,'Middle');
- d2 := NEW desktop('Mini');
- l1 := NEW laptop(10);
- l2 := NEW laptop(1.8,0.5,80,4);
- pc := v_calc(c1,c2,d1,d2,l1,l2);
- c1.show();
- FOR i IN 1 .. pc.COUNT
- LOOP
- pc(i).show();
- END LOOP;
- END;
Advertisement
Add Comment
Please, Sign In to add comment