Documente Academic
Documente Profesional
Documente Cultură
obiectuale a PL/SQL
Principalele concepte
Conceptul de baza obiect - descrie obiecte din lumea reala
Principalele concepte
POO presupune abilitatea de a face obiectele sa interacioneze
ntre ele
Interaciunea se realizeaz prin mesaje
Un mesaj transmis unui obiect este compus din 3 elemente:
- Numele obiectului care conine metoda
- Numele metodei
- Valori pentru toi parametrii de intrare ai metodei
Principalele concepte
O clas (tip de obiecte) schema dup care este creat un obiect
Principalele concepte
In POO trebuie respectat urmtoarea ordine
1. Crearea claselor (tipurilor)
- Precizarea denumirii atributelor, a tipului de date suportat,etc
- Precizarea signaturii metodelor componente, a corpului lor,etc
2. Crearea obiectelor
Principalele concepte
Caracteristicile fundamentale ale obiectelor, care sunt regsite
i n PL/SQL sunt:
1. ncapsularea: descrierea obiectelor se face astfel nct nu se
poate avea acces din afara obiectului la datele sale;
2. Polimorfismul (evideniat prin suprancrcare): diferite obiecte
pot rspunde diferit la aceleai mesaje;
- Se refer la metode cu acelai nume i cu parametri de
intrare/ieire diferiti
- Compilatorul alege varianta corect de metod n funcie de
param. de intrare furnizai
- O metod poate executa aciuni diferite n funcie de param.
furnizai
Principalele concepte
3. Motenirea: capacitatea unui obiect de a-i deriva datele
Principalele concepte
Structura unui tip de obiecte Oracle este asemntoare cu
Principalele concepte
2. Corpul tipului de obiecte (object type body):
- implementeaz specificaiile i definete explicit
metodele;
- se pot realiza orice modificri n corpul tipului de obiecte,
fr s fie necesar modificarea specificaiilor i fr a
afecta programele de aplicaii;
- corpul tipului de obiecte este opional, fiind necesar
numai n cazul n care au fost declarate diverse metode n
specificaii.
Principalele concepte
Restricii:
n cadrul seciunii de definire a specificaiilor, toate atributele
trebuie declarate naintea metodelor;
dac n cadrul seciunii de definire a specificaiilor sunt
declarate numai atribute, corpul tipului de obiecte nu mai
este necesar;
nu pot fi definite atribute ale obiectelor n corpul tipului de
obiecte;
toate declaraiile din zona de specificaii sunt publice;
n cadrul sectiunii de definire a specificatiilor NU pot fi
definite constante, exceptii, cursori.
de reguli:
obiectelor
- se declar n partea de specificaii a tipului de obiecte prin
cuvntul cheie MEMBER.
Definirea unei metode se realizeaz n dou etape:
- declararea (n partea de specificaii a tipului de obiecte),
- definirea extins a corpului acesteia (n corpul tipului de
obiecte)
comanda DROP:
DROP TYPE tip_obiect [ FORCE ];
Clauza FORCE indic tegerea tipului de obiecte, chiar
Exemplificri practice
Un prim exemplu evideniaz modul n care se pot crea tipuri
simple de obiecte.
Astfel, tipul obj_adresa are drept atribute principalele
componente ale unei adrese: strada, numar, cod postal, oras,
id_tara. (tip varchar2,char)
Metoda coninut, definit n zona de specificaii i detaliat n
corpul tipului de obiecte, are rolul de a recompune adresa
complet pe baza atributelor: (function adresa_completa)
(
strada VARCHAR2(30),
numar VARCHAR2(5),
cod_postal VARCHAR2(6),
oras VARCHAR2(20),
id_tara CHAR(2),
MEMBER FUNCTION adresa_completa RETURN VARCHAR2
);
/
SHOW ERRORS;
Constructori
Fiecare tip de obiecte are o metod constructor, folosit
Exerciiu
SET SERVEROUTPUT ON
DECLARE
cons_1 obj_adresa;
BEGIN
cons_1:=obj_adresa('Bd.Unirii', '105', '012531',
'Bucuresti', 'RO');
DBMS_OUTPUT.PUT_LINE(cons_1.strada || ' ' ||
cons_1.numar);
END;
/
Constructori
Se pot defini metode constructor proprii, prin suprancrcarea
Constructori
Restricii la suprancrcarea metodelor:
pot fi suprancrcate numai metodele de acelai tip (proceduri
sau funcii);
nu se pot suprancrca dou metode dac parametrii formali
difer numai prin numrul sau prin tipul lor;
nu se pot suprancrca dou funcii membru ce difer numai
prin tipul returnat.
Parametrul SELF
Metodele de tip MEMBER accepta un parametru implicit
Exercitiu
Completati specificatia si corpul tipului de obiecte
(...............,
CONSTRUCTOR FUNCTION obj_adresa (p_strada VARCHAR2, p_numar
VARCHAR2, p_codp VARCHAR2, p_oras VARCHAR2) RETURN SELF AS
RESULT
);
CREATE OR REPLACE TYPE BODY obj_adresa AS
CONSTRUCTOR FUNCTION obj_adresa (p_strada VARCHAR2, p_numar
VARCHAR2, p_codp VARCHAR2, p_oras VARCHAR2) RETURN SELF AS
RESULT
IS
BEGIN
SELF.strada:=p_strada;
SELF.numar:=p_numar;
SELF.cod_postal:=p_codp;
SELF.oras:=p_oras;
SELF.id_tara:='RO';
RETURN;
END;
.............
END;
Exercitiu
Exemplificati modul de utilizare al celor doua metode
Modul de funcionare a celor dou metode constructor, cea implicit, respectiv cea
definit de utilizator prin suprancrcare, este evideniat n blocul PL/SQL de mai jos,
care le apeleaz:
DECLARE
cons_1 obj_adresa;
cons_2 obj_adresa;
BEGIN
cons_1:=obj_adresa('Str.Lunga', '10', '012531', 'Brasov', 'RO');
DBMS_OUTPUT.PUT_LINE(cons_1.strada || ' ' || cons_1.numar|| ' ' ||
cons_1.cod_postal|| ' ' || cons_1.oras|| ' ' || cons_1.id_tara);
cons_2:=obj_adresa('Bd.Unirii', '105', '012531', 'Bucuresti');
DBMS_OUTPUT.PUT_LINE(cons_2.strada || ' ' || cons_2.numar|| ' ' ||
cons_2.cod_postal|| ' ' || cons_2.oras|| ' ' || cons_2.id_tara);
END;
Execuia blocului anterior duce la afiarea celor dou instanieri ale tipului de obiecte creat
Str.Lunga 10 012531 Brasov RO
Bd.Unirii 105 012531 Bucuresti RO
Obiecte neiniializate
Pn n momentul iniializrii unui obiect prin apelul constructorului, obiectul n sine