Académique Documents
Professionnel Documents
Culture Documents
Objet 1 Objet 2
BEGIN
END;
END;
BEGIN
|| surface);
END;
END;
/
Exemple d’appel de méthode
CREATE TABLE solids of solid_typ;
DECLARE
solid solid_typ;
BEGIN -- PL/SQL block for selecting a solid and displaying details
SELECT VALUE(s) INTO solid FROM solids s WHERE s.len = 10;
solid.display();
END;
/
Le parametre SELF
• SELF est souvent le premier parametre passé à
une méthode member.
• Si SELF n’est pas declaré dans une fonction
membre, par défaut , il est en mode IN
• Si SELF n’est pas declaré dans une procedure
membre, par défaut , il est en mode IN OUT
• Le traitement par défaut n’inclu pas NOCOPY
Méthodes de comparaison
• La méthode Map est automatiquement
appelée pour evaluer une comparaison telle
que obj_1 > obj_2 et les comparaison utilisant
les clauses DISTINCT, GROUP BY, UNION, and
ORDER BY
Exemple d’une méthodes MAP
CREATE OR REPLACE TYPE rectangle_typ AS OBJECT (
len NUMBER,
wid NUMBER,
MAP MEMBER FUNCTION area RETURN NUMBER);
/
CREATE OR REPLACE TYPE BODY rectangle_typ AS
MAP MEMBER FUNCTION area RETURN NUMBER IS
BEGIN
RETURN len * wid;
END ;
END;
/
Obj1> Obj2 est équivalent à Obj1.area()> Obj2.area() ,
Exemple d’appel
DECLARE
po rectangle_typ;
BEGIN
po := NEW rectangle_typ(10,5);
DBMS_OUTPUT.PUT_LINE('AREA:' || po.area());
END;
Méthode ORDER
• Une méthode ORDER permet simplement de
comparer l’objet courant (SELF) avec un objet
passé en parametre . Mais ne peut pas
comparer plusieurs:
• Une méthode ORDER est tres utile dans le cas
où l’algorithme de comparaison n’est pas
approprié à MAP.
• Attention: on peut declarer une methode
MAP ou ORDER mais pas toutes les deux !!
Méthode ORDER: Exemple
DROP TYPE location_typ FORCE;
-- above necessary if you have previously created
-----object
CREATE OR REPLACE TYPE location_typ AS OBJECT (
building_no NUMBER,
city VARCHAR2(40),
ORDER MEMBER FUNCTION match (l location_typ)
RETURN INTEGER );
/
CREATE OR REPLACE TYPE BODY location_typ AS
ORDER MEMBER FUNCTION match (l location_typ) RETURN
INTEGER IS
BEGIN
IF building_no < l.building_no THEN
RETURN -1; -- any negative number will do
ELSIF building_no > l.building_no THEN
RETURN 1; -- any positive number will do
ELSE
RETURN 0;
END IF;
END;
END;
/
Appel de méthode membre
DECLARE
loc location_typ;
secloc location_typ;
a number;
BEGIN
loc :=NEW location_typ(300, 'San Francisco');
secloc :=NEW location_typ(200, 'Redwood Shores');
a := loc.match(secloc);
DBMS_OUTPUT.PUT_LINE('order (1 is greater, -1 is lesser):' ||a); --
prints order:1
END;
Méthodes Statiques
• Les méthodes statiques est appelée par un
type et pas par ses objets. Elle n’ont pas de
paramètre SELF.
• Les méthodes statiques sont déclarées STATIC
FUNCTION ou STATIC PROCEDURE.
• Pour appeler une méthodes statique, on
utilise la syntaxe:
type_name.method();
Méthodes constructeurs
• Une méthodes constructeur est une méthodes
qui permet de créer un nouveau objet et
mettre une valeur dans chacun de ses
attributs.
• On peut utiliser l’opérateur NEW pour appeler
une méthode constructeur mais il n’est pas
requis!
Constructeur défini par le system
• Par défaut, le system offre un constructeur
pour les objets qui ont des attributs
• Exemple:
person_typ (1, 'John Smith', '1-650-555-0135'),
• Le programmeur peu definir un nouveau
constructeur
Appel de constructeurs
CREATE TABLE people_tab OF person_typ;
• Exemple:
DECLARE
myvar student_typ := student_typ(100, 'Sam', '6505556666', 100, 'Math');
Name VARCHAR2(100);
BEGIN
name := (myvar AS person_typ).show ;
--Generalized invocation
END;
/
– Compléter le bloc pour afficher « name »!
Appel généralisé
• Appel généralisé pour une méthodes avec un explicite arguments:
DECLARE
myvar2 student_typ := student_typ(101, 'Sam', '6505556666', 100,
'Math');
name2 VARCHAR2(100);
BEGIN
name2 := person_typ.show((myvar2 AS person_typ));
-- Generalized expression
END;
/
Appel généralisé