3 modele objet

Upload: ziedk

Post on 15-Oct-2015

31 views

Category:

Documents


0 download

TRANSCRIPT

  • Page 1

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 1

    Modle pour les Donnes non NormalisesPassage la technologie objet de Oracle

    2014-03-14

    Andr Gamache, professeur associDpartement d'informatique et de gnie logicielFacult des sciences et de gnieUniversit Laval. Qubec, Qc, Canada, G1K 7P4

    Courriel: [email protected]

    Modle Objet (Oracle)

    Modle Objet Module 3 page 2

    Modle objet-relationnel (OR = relationnel + objet)Le modle gr par Oracle est dit Objet-Relationnel parce qu'il peut faire cohabiter les modlesrelationnel et objet . Il est hybride !! Seule la partie exclusivement objet sera utilise.Avantages:- Gre les nombreuses bases relationnelles dj en service (le data legacy );- Conserve les notions de tables comme containeur dobjets.- Permet l'encapsulation des donnes : implmentation de linterface (des mthodes)- Implmente les mcanismes associs l'objet : hritage, redfinition et surcharge.

    Normalise les accs scuriss la BD via les mthodes.- Capitalise sur les acquis (applications) permettant une migration volutive du SGBD

    relationnel vers lobjet.Bmols et limites:- Objet est plus complexe dcoulant de structures disponibles dans les applications (langages

    de dveloppement): usage doutils de mapping des objets (JPublisher, )- N'implmente pas l'hritage multiple. Idem pour Java sauf pour C++. Est-ce vraiment un

    inconvnient?? - N'est pas 100% conforme la norme ODMG: ex. les structures densemble limites 2

    niveaux . Utilise la notion explicite de REF qui est en quelque sorte un pointeur logique lequel devrait tre normalement tre transparent au traitement.

  • Page 2

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 3

    Objet et Attribut

    Dans lunivers des bases de donnes objets, il y a seulement quelques concepts cls: Lobjet a un nom et est concrtis par la cration dune structure (dornavant appele classe

    ou type dbjet). Un objet est donc limage dune classe et cette dernire est munie dune interface. En Oracle : la classe est synonyme du type dun objet de table

    Lattribut (proprit) a un nom et est utilis pour reprsenter un aspect de lobjet rel permettant ainsi des traitements subsquents.

    Le type: Lattribut et lobjet auront un type ( i.e. une structure de donnes) de manire pouvoir stocker un dobjet et en permettre des traitements subsquents. Les objets sont regroups dans un containeur dobjets. En OR, cest la table. Dans dautres systmes objets, cela peut tre une liste ou un set.

    Les mthodes sont associes aux classes pour manipuler correctement les objets. Elles sont partages entre les applications et peuvent tre certifies pour le maintien de la cohrence et de lefficacit. Elles ne sont pas physiquement stockes avec les structures dobjets mais elles y sont fortement relies via le dictionnaire de donnes.

    Modle Objet Module 3 page 4

    Hirarchie des types dobjets (Oracle)

    TYPE

    User-Defined Build-In

    Scalar Collection RelationshipCHAR(N), NCHAR(N)CHAR VARYING(N)NCHAR VARYING(N)RAW(N)NUMBER DECIMALINTEGER SMALLINTFLOAT REALDOUBLE PRECISIONDATEBLOB CLOB NCLOB BFILE

    VARRAYNESTED TABLESet()Bag()List()

    REF

    Reference: JP Perez Object Database using Oracle

    tuple [ ]

  • Page 3

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 5

    Types atomiques, complexes et dusager

    1. Atomique ou de base : int, number, string, varchar(), varchar2(), Date, ... (15 types en R).

    2. Complexe : structure de tuple (1 seul objet), densemble, liste, bag, ... identifie par un nom

    Ex.: tuple := [A1:t1, A2:t2,] o A1 est un attribut et t1 un type primitif (ou dusager).3. Type dfini par lusager:Exemple : Sans faire rfrence un SGBD objet particulier, le type pour un objet :employ estdfini comme un tuple:

    employe_t := [mat: int , nom: varchar2(50) , adresse : varchar2(50)] structure de tupleConvention dcriture pour le typeLe type dun objet a par convention, le mme nom que celui de lobjet suffix par _t etdbutant par une lettre minuscule. Cest une convention dcriture et non une syntaxe du DDL duSGBD objet.

    Modle Objet Module 3 page 6

    Oracle: Classe externe et Classe interne

    Le lien simple est implment par imbrication dans la classe externe.

    Personne: personne_t

    no intnom varchar2(40)

    mat intnom varchar(40) adresse

    Une classe externe ou interne a un type gnralement dfini par lusagerEx. Personne : personne_t

    N.B. Dans le Mnav: un lien simple interne vers une classe interne est instantie par un seul objet interne.

    : adresse_t

  • Page 4

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 7

    Classe interne et type Usager

    Dfinition du type dune classe interne (formul via la notation dun tuple)Exemple : lattribut adresse rfre une classe interne de lobjet :personne crit sans rfrence un SGBD particulier.

    adresse_t := [ no: int, nom : varchar2(50)] i.e. (formulation linaire)adresse_t := tuple( no: int, nom : varchar2(50))

    Un type dj dfini pour une classe interne peut tre aussi utilis dans la dfinition du type duneautre classe Externe Employe:

    personne_t := [mat int, nom varchar2(40), adresse adresse_t] En Oracle objet le type dune classe interne est cr ainsi:(cration dun type via lapplication SQLPlus):

    Create type adresse_t as Object (no int, nom varchar(50)) /Create type personne_t as Object (mat int, nom varchar2(50), adresse adresse_t) /

    *** Pas de shadowing: un type est dfini quavec des types dj crs ou prdfinis.

    Modle Objet Module 3 page 8

    Partage des types entre les classes dobjetsIMPORTANT : un type peut-tre partag entre plusieurs classes dobjets crant ainsi une dpendance dont ilfaudra tenir compte par la suite lors de la suppression ou la modification du type existant. Le dictionnaire duSGBD signale cette dpendance.

    Supprimer un type partag est possible si la suppression se rpercute aussi surles autres types dpendants:

    Alter type adresse_t DROP codePostal varchar2(20) CASCADE ; Drop type adresse_t FORCE ; -- pour supprimer malgr la dpendance.

    Alter type adresse_t ADD codePostal varchar2(20) CASCADE ;

    Partage dun type entre plusieurs schmas (BDO):Possible que si le compte-propritaire Louise accorde le privilge EXECUTE auxautres:

    Grant EXECUTE ANY TYPE ON TO Pierre; -- permission donne par Louise-- Pierre peut maintenant utiliser les types de Louise en le prfixant : Louise.employe_t

    Grant insert , update, . To Pierre;Revoke insert, update , to Pierre;

  • Page 5

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 9

    Partage dun type entre utilisateurs-DBA

    Alors Pierre veut crer un type gerant_t en utilisant le type cr par Louise :

    Create type gerant_t as Object ( noGerant int, personne Louise.employe_t )

    /Describe Louise.employe_t;

    Pour crer des types, Pierre doit avoir le privilge:Grant create type to Pierre; -- accord par le DBAou avoir les privilges du DBA.

    N.B. Dans un cours vous avez normalement que le premier privilge .

    Compte de Louise

    Modle Objet Module 3 page 10

    Validation des types

    Lors de la cration ou de la modification dun type, le systme doit vrifier que cette modification ne fait pas une action qui invalide les autres types ou autres entits de la base:

    ALTER TYPE Personne DROP ATTRIBUTE (adresse) CASCADE; Exemple : un type est modifi en supprimant un attribut CASCADE: Le systme doit vrifier que cette suppression ne se rpercute pas

    sur un autre type utilis par un attribut est index ou utilis par ex. pour le partitionnement ou le clustering des tables,

    *** Si le test passe alors le type est modifi, sinon refus du systme.

    INVALIDATE: le test est supprim et les changements sont imposs quitte ce que le clustering par exemple soit rendu inoprant. Pour le redevenir, il faudra rinstaller le type initialement supprim!

  • Page 6

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 11

    Partage en cascade des types

    Le partage dun type utilisant un autre type dj dfini se reprsente difficilement dansle Mnav. Avec le modle graphique Mnav. Il y a alors dpendance du type etudiant_tsur adr_t

    Create or Replace type adr_t as Object ( noRue int, rue varchar2(50), ville varchar(50), cPostal varchar(6))

    /Create type etudiant_t as Object (matE int, adr adr_t) /Create type professeur_t as Object (matP int, assistant etudiant_t) /

    Create Table Professeur of professeur_t ;

    Le partage dun type est pris en compte dans son volution : CASCADE et INVALIDATE

    Alter type etudiant_t ADD tel varchar(8) CASCADE ;

    Modle Objet Module 3 page 12

    Collection en Oracle (set)

    Les objets dune classe interne sont appels objets-colonnes dans la terminologieOracle.

    Lattribut lesJoueurs est un ensemble dont chaque lment est un objet-colonne (OC). Autrestypes densemble : list(), bag() mais non disponibles en Oracle:

    employe_t := [mat : int , nom: string, lesAdresses : list(adresse_t)] (non Oracle)

    Lattribut densemble lesAdresses peut-tre ordonn ou pas par la nature du typechoisi. Chaque adresse est un objet de cet ensemble lesAdresses:

    avec adresse_t := [no int, rue varchar(50), ville varchar(50)]N.B. Un type est dfini en utilisant que des types dj dfinis.

    (Formulation linaire)

  • Page 7

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 13

    Avec Oracle, la dclaration de lensemble ordonn lesAdresses est la suivante:

    Create employe_t as Object (mat int, nom varchar2(30), lesAdresses lesAdresses_t) /Create type lesAdresses_t as VARRAY(2) of adresse_t --ens. ordonn/

    Create type adresse_t as Object (no int, rue varchar2(50), ville varchar2(50)) /Attention: La dfinition des types est faite dans lordre inverse puisque le shadowing nest pas autoris.

    mat : intnom : stringlesAdresses

    Employe: employe_t

    Mnav avec une structure interne implmente avec le VARRAY()

    Structure interne rfrepar un lien interne multiple. Donc son type sera varray ou set avec des lment que sont les valeurs ou les objets adresse.

    Modle Objet Module 3 page 14

    Les attributs de Varray ( 10) Le type Varray a quelques pseudo-mthodes prdfinies et associs dans le traitement avecPL/SQL. Dans ce langage, le varray cr en PL/SQL a des attributs et non des pseudosmthdodes. Ce dernier a les structures ncessaires pour implanter un varray, mais pas SQL. Ce type sutilise avec des valeurs stables et peu nombreuses.

    Count : le nombre actuel dlments dans lensemble dont la structure est VARRAY : Declare lesAdresses lesAdresses_t ;Ex: nb := lesAdresses.count

    Limit : nombre maximal dlments dans lensemble ordonn.+ autres mthodes spcialises venir

    NB Impossible de supprimer uniquement une valeur ou un objet rang dans un varray.

    La struct PL/SQL varray est dfinie et dots dattributs en PL/SQL

  • Page 8

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 15

    Constructeur dobjet (rappel de convention dcriture)

    Tout objet typ sera construit par un constructeur (implicite ou explicite) dont le nom est form avec le nom du type suffix par _t. Cette convention dcriturepermet de distinguer plus facilement le nom dun type de celui dune table-objet.Nous verrons plus loin quil existe plusieurs constructeurs dobjets.Linformation sur cette convention sera transmise au SGBD lors de la cration du type.

    Chaque objet est construit et insr dans une table-objet. Il acquiert de ce fait un oid unique et non rutilisable (persistance) par un autre objet. La table est son extension/containeur (ou container). Pour le moment, considrons cet oid comme une sorte de rfrence unique et persistante chaque objet. Une dfinition plus prcise et complte sera vue plus loin la composition de la REF.

    Modle Objet Module 3 page 16

    Linsertion dun objet avec 2 objets de la classe interne se fera en construisant lobjet insrer et en lajoutant dans la base par la clause DML Insert.

    Insert into Employe values (employe_t (150, Robert, lesAdresses_t( adresse_t (5, St-Louis, Qubec),

    adresse_t(8, desPins, Sorel)))); - ajout de lobjet Employe avec ses adresses

    Insertion suivante sera rejette car il dpasse la capacit du Varray:Insert into Employe values (employe_t (225, Lucie,

    lesAdresses_t (adresse_t (23, Concorde, Qubec), adresse_t (42, desSaules, Qubec),adresse_t (99, des Pins, Qubec) )) );

    Linsertion dune 3 me adresse gnre une erreur moins dtendre au pralable le varray , ce que le PL/SQL peut faire.

    Insertion des objets avec un ensemble Varray

    Construction de la classe interne

    mat : intnom : stringlesAdresses

    Employe: employe_t

  • Page 9

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 17

    Diffrences entre le VARRAY et le Set (NESTED TABLE)

    VARRAY (set) NESTED TABLEEnsemble tri Ensemble non tri

    Objets indics (0rig. 1) Objets non indics (accs direct)Nombre limit dobjets Nombre illimit dobjets

    Pas de SELECT sur les attributs de lobjet-colonne du varray

    SELECT possible sur les attributs des objets-colonnes

    Accessible avec PL/SQL (non accessible avec SQL)

    Accessible avec SQL et PL/SQL

    Objets du mme type Objets sont tous du mme type ou dun sous-type du type dclar

    Ces deux types sont du genre ensemble et peuvent avoir comme lments des rfrences, des valeurs ou des objet-colonnes. (i.e. sans oid)

    Linsertion, mise jour, suppression et autres oprations avec ces types complexes exigent lemploi de mthodes qui seront tudies dans un chapitre ultrieur.

    Modle Objet Module 3 page 18

    Supplment sur les varrays (Contenu diffrer au besoin)

    Les lments stocks dans un varray sont aussi des objets (du genre objet-colonne) Linsertion se fait par DML et la recherche avec SQL nest pas permise avec un critre form par un attribut de lOC. Il faut donc parcourir le varray avec une application, par exemple dveloppe en PL/SQL en utilisant les mthodes prdfinies et associes au VARRAY.

    Ce type (structure) est utile pour stocker un petit nombre dobjets de mme type qui doivent tre ordonns exigeant un espace relativement important de stockage. Pas de suppression possible sinon via une lecture complte du varrayavec PL/SQL et la suppression effectue via une structure de PL/SQL!

  • Page 10

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 19

    Utilisation par appel de mthode prdfinie

    Les mthodes (fonctions) qui sont prdfinies avec le type du varraysont appeles ainsi:

    var_objet.nom_mthode

    v_nb := v_liste_locaux. COUNT -- fonction qui retourne dans v_nb, le nb de locaux dans la liste. v_nb est dclare une variable entire.

    Modle Objet Module 3 page 20

    Quelques mthodes (fonctions) associes Varray()Mthode Description

    Exists (x) Retourne TRUE sil existe une valeur au rang x du VarrayCount Retourne le nombre dobjets stocks dans lensembleLimit Retourne la taille max du varrayFirst / Last Retourne le 1er et le dernier lment de la collectionExtendExtend(m)Extend (x, i)

    Ajoute un lment vide au varrayAjoute m lments videsAjoute x copies de llment en position i

    Delete Delere (i)Delete (i,j)

    Supprime tous les objets du varraySupprime lobjet de position i dans le VarraySupprime les objets de rang 1 j du Varray

    Declarev_tableauGroupe groupes_t -- var. objet de type varray dj dfinie dans le DDlimite int ;Beginlimite := v_tableauGroupe.LIMIT;DBMS_OUTPUT.PUT_LINE (To_Char(limite));End;

  • Page 11

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 21

    Reprsentation graphique du Varray

    noA : intlesEnfants

    nasE intnomE: varcharageE : intnasE intnomE: varcharageE : int

    Assurance:assurance_tLe varray est un ensemble ordonn dont chaque lment a un rang i.Cet ensemble ordonn est en quelque sorte une classe interne de type varray.Les attributs du varray peuvent tre vus comme des mthodes prdfinies tout varray.La 3e entre du varray sera value par un objet null.

    Modle Objet Module 3 page 22

    Cration et utilisation du Varray() avec PL/SQL

    Impossible de mettre jour le varray avec le Update. Il faut le faire avec PL/SQL

    Create type enfant_t as Object (nasE int, nomE varchar(50) , ageE int)/Create type lesEnfants_t AS VARRAY(3) of enfant_t/Create type assurance_t as Object (noA int, lesEnfants lesEnfants_t)/Create table Assurance of assurance_t;Un type peut avoir plusieurs attributs de typeVarray :

    Create type assuranceInternationale_t as Object (noA int, lesEnfantsCa lesEnfants_t, lesEnfantsUSA lesEnfants_t)

    /

  • Page 12

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 23

    Vision tabulaire avec 2 attributs densemble ordonn

    Cration du containeur dobjets:Create table Assuranceinternationale of assuranceInternationale_t;

    noA: Les EnfantsCA lesEnfantsUSA

    nasE nomE ageE nasE nomE AgeE102 1001 Paul 22 2003 Jane 34

    2004 Peter 25

    103 1002 Lise 25 null null nullVarray(3) (objets-colonnes sans oid)

    Objet de la tableavec un oid

    Modle Objet Module 3 page 24

    Ajout des objets dans le varray

    Revenons Assurance:Ajout dune Assurance couvrant 2 enfant:Insert into Assurance values (assurance_t(102, lesEnfants_t(

    enfant_t(2,'Louise', 22),enfant_t(3,'Jacques',25),enfant_t (null, null, null )

    ) );NB Lajout dun autre objet-colonne (sur 3 possibles) ne peut pas se faire directement. Il faut lire lobjet de table qui le contient , en faire la mise jour en RAM par lapplicatif et ensuite faire un UPDATE de la table qui le contient. Un inconvnient qui limite lintrt du varray!

    Aucune lecture possible dun seul attribut du varray avec SQL:Select a.lesEnfants.ageFrom Assurance a

    *** identificateur inconnu ****

  • Page 13

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 25

    Lecture SQL du varray sans critre de slection

    La lecture des objets est possible avec SQL mais pas leur mise jour, ni leur suppression

    Select a.lesEnfants From Assurance a ;LESENFANTS (NASE, NOME, AGEE)LESENFANTS_T(ENFANT_T(2, 'Louise', 22))LESENFANTS_T(ENFANT_T(3, Jacques', 25))

    Modle Objet Module 3 page 26

    Vision tabulaire utilisant un varray 2 places

    Create type assurance_t as Object (noA int, lesEnfants lesEnfants_t)

    Insert into Assurance values (assurance_t(102, lesEnfants_t(enfant_t(2,'Louise', 22),enfant_t(3,'Jacques',25));

    noA: Les Enfants : lesEnfants_tnasE nomE ageE

    101 1 Paul 20null null

    102 2 Louise 223 Jacques 25

    Assurance:

  • Page 14

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 27

    Lecture des objets-colonnes dans un tableau-- Applicatif PL/SQL pour afficher le nombre des enfants assurs par la police dassurance 102

    Declare v_tableauE lesEnfants_t ; -- var. varray 2 placesBegin

    Select a.lesEnfants into v_tableauEFrom Assurance a Where a.noA = 102;

    For i IN 1..v_tableauE.COUNT LoopIF v_tableauE.EXISTS(i) ThenDBMS_OUTPUT.PUT_LINE (v_tableauE(i).nasE|| v_tableauE(i).nomE); End IF;

    End Loop; End;/

    2 Louise3 JacquesProcdure PL/SQL termine avec succs.

    Modle Objet Module 3 page 28

    Recherche dun objet particulier dans un varray

    -- Applicatif PL/SQL pour traiter lassurance 101(SET SERVEROUTPUT ON)

    Declarev_tableauE lesEnfants_t ;BeginSelect a.lesEnfants into v_tableauE From Assurance a Where a.noA =101;DBMS_OUTPUT.PUT_LINE (v_tableauE(1).nasE ||' ' || v_tableauE(1).nomE) ;End;/Rponse:

    1 PaulProcdure PL/SQL termine avec succs.

    Cette procdure pourrait tre intgre dans une mthode plus gnrale de recherche et de mise jour.

  • Page 15

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 29

    Lecture de tous les objets (OC) dun VARRAY peu importe lobjet hteDeclarev_tableauE lesEnfants_t ; -- var locale de type varray v_nbPoAs int;Beginselect count(*) into v_nbPoAs from Assurance;For J IN 101..v_nbPoAs + 100 LoopBegin

    Select a.lesEnfants into v_tableauE From Assurance a where a.noA= J ;For i IN 1..v_tableauE.COUNT LoopIF v_tableauE.EXISTS(i) ThenDBMS_OUTPUT.PUT_LINE (v_tableauE(i).nomE || || v_tableauE(i).ageE);End IF;

    End Loop;End;End Loop;End;/

    Paul 20Louise 22Jacques 25

    Procdure PL/SQL termine avec succs.

    Modle Objet Module 3 page 30

    Modification de lattribut dun objet (OC) (ageE)Exemple: Jacques titulaire de lassurance 102, a 26 ans plutt que 25.Pour modifier un objet ayant un attribut de type varray, il faut lire lobjet OC, le mettre jour avec lapplicatif PL/SQL et linsrer nouveau dans la base-objet.

    Declare v_tableauAssur assurance_t; -- type de la var. Idem celui des objets de la tablev_lesEnfants lesEnfants_t; -- variable de type varray BeginSelect a.lesEnfants into v_lesEnfants From Assurance a

    Where a.noA = 102; -- 1 seul objet OC doit tre luv_lesEnfants(2).ageE := 26; -- mise jour de la 2e entre du varray ne RAM Update Assurance a SET a.lesEnfants = v_lesEnfants Where a.noA = 102;End;/sqlplus: select lesEnfants from Assurance;

    LESENFANTS(NASE, NOME, AGEE)LESENFANTS_T(ENFANT_T(1, 'Paul', 20))LESENFANTS_T(ENFANT_T(2, 'Louise', 22), ENFANT_T(3, 'Jacques', 26))

  • Page 16

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 31

    Affichage de la structure dun type

    sqlplus: Describe assuranceInternationale_t;Nom NULL ? Type----------------------------------------- -------- -----------------------NOA NUMBER(38)LESENFANTS LESENFANTS_TNASE NUMBER(38)NOME VARCHAR2(50)AGEE NUMBER(38)

    LESENFANTSUSA LESENFANTS_TNASE NUMBER(38)NOME VARCHAR2(50)AGEE NUMBER(38)

    Modle Objet Module 3 page 32

    Nature du type REF pour un attribut

    Un attribut peut avoir un type REF ce qui signifie quil est valu avec une rfrence ciblant un autre objet. La REF permet dassocier les objets de classes diffrentes dans une mme hirarchie de classes (polymorphisme du Ref).Le REF permet dimplanter le lien externe du Mnav.La valeur de type REF est construite par le systme en incluant loid et quelques autres mtadonnes de la table-objet . Index: mcanisme daccsAvec une rfrence, un objet est obtenu via la consultation par le noyau du SGBD de lindex cr (automatiquement) sur les oid de chaque containeur (table-objet) et maintenu par le SGBD. N.B. dans la technologie relationnelle:Le ROWID joue un rle similaire au OID dans Oracle-Objet mais il nest pas un vrai oid ne serait-ce par le fait quil est visible, rutilisable et manipulable directement. (mais non modifiable directement).

  • Page 17

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 33

    Type REF

    Une valeur de type REF rfre seulement un seul type objet (OT) via l'oid de l'objet cibl. Lobjet-colonne na pas de oid donc ne pas tre rfrenc par indexation de son oid! Sa persistance et son accs passent par ceux de lobjet hte!Dans ce cours et par convention volontairement abusive : La valeur Ref sera considre idem l'oid du moins en ce qui a trait son rle.

    Le rle dvolu au type REF est d'amliorer la fonction de navigation avec le langage de requte SQL. Par exemple, acclrer les jointures.

    Le oid (son identit) est de prfrence (ou devrait tre) non visible et obligatoirement non modifiable par programmation; (variable selon les implmentations)

    Modle Objet Module 3 page 34

    Rfrence un autre objet par loid obtenue par la fonction REF()

    Create type service_t as object (nomS varchar(50)) /Create table Service of service_t; Insert into Service values(service_t(''analyse''));

    Create Type employe_t AS Object (nomE varchar2(50), refService REF service_t ) / Create Table Employe OF employe_t;

    INSERT Into Employe values ( employe_t ('Jacques', NULL)); Insert Into Employe values(employe_t (Louise', (select REF(s) FROM Service s WHERE s.nomS = ''analyse'')); ;

    Select e.* From Employe e Where e.nomE = 'Louise'';

    Louise 0000220208424E801067C2EABBE040578CE70A0707424E801067C1EABBE040578CE70A0707

    nomE*: varcharrefService

    Employe: employe_tnomS*: varcharService: service_t

  • Page 18

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 35

    REF et lassociation UML

    Lattribut de type REF est utilis pour implmenter lassociation de la classe UML.

    Cl trangre et cl primaire dune table-objet:

    - La cl primaire en objet nest pas essentielle pour concrtiser lunicit de lobjet car loid distingue tout objet. Elle est cependant utile pour la recherche dun objet particulier puisque loid est non accessible ou inconnu pour la recherche.

    - La cl spcifie est une contrainte dentit (toutes les valeurs sont donc distinctes)

    La cl trangre est implmente via le lien de rfrence: REFERENCES qui peut tre aussi dfini en objet.

    Modle Objet Module 3 page 36

    Classe et table-objet

    Classe: a un type dont les instances auront un oid (logique).

    Ex: La classe Employe aura le type de ses objets soit employe_t3 sortes de tables

    1- **Table-objet dont les lments sont des objets pouvant contenir dautres objets dits objets-colonnes. 2- table-objet-relationnel dont les tuples peuvent contenir des objets et des tuples en cohabitation avec un SGBD OR3- Table relationnelle dont les tuples ne sont pas des objets mais pouvant aussi avoir des objets-colonnes de type objet. (Ignore dans ce cours)Une table-objet est physiquement place dans un TableSpace (TS)

  • Page 19

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 37

    Containeur dobjets : table OR

    Les objets sont stocks dans des containeurs (ou container) que sont les tables-objetsde la technologie objet-relationnelle de Oracle:

    Containeur Table OR (environnement Oracle)

    Une table-objet est associe une classe i.e. un type gnralement complexe qui faonne lesobjets du conteneur.

    Rappel de la convention dcriture:Le nom d'une table dbute par une lettre majuscule et son type gnralementcomplexe est compos de son nom dbutant par une lettre minuscule et suffix par _t

    Exemple: La classe externe Employe a un type employe_t:employe_t := (nom: string, age :int, salaire: real)

    Modle Objet

    Comment sont stocks les objets sur disque?

    38

  • Page 20

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 39

    TableSpace: page et objet

    Plus il y a dobjets dans une page, plus rapide est la recherche des dits objets.Le tableSpace est lunit de gestion de lespace physique:

    base objets fichier(s) pagins fichiers OS

    Tablespace x + 1

    9 objets/page6 objets/page

    4 objets/page

    Tablespace x

    page

    objet 9 objets/page6 objets/page

    4 objets/page

    Modle Objet Module 3 page 40

    Rappel sur les tableSpaces de Oracle (TS)tables, index, fichier(s) physique(s) pagin(s) pages de 4Ko, 8Ko, 16Kotablespace(s)

    fichier(s) pagin(s)

    A la cration, la base a quelques tableSpaces : System, Temp, User, Dautres sont crs au besoin et nommes par le DBA:Ex: Create tablespace ts_employeActuels datafile '/dbf1/ts_sth.dbf' size 32m autoextend on next 32m maxsize 2048m extent management local;

    System: pour le traitement, Temp : pour les tris, User: pour tables utilisateursSi la cration dune table:

    Aucune mention du TS : le tableSpace User par dfautAvec mention dun TS: les objets sont crs dans celui-ci

    Create table T1 of type T1_t (a int, b int, c varchar(50)) (tableSpace User);Alter table T1 Move tableSpace espace_de table_T1;Create table Inscription of inscription_t (TableSpace TS_Registraire) ;

    (table cre dans le tableSpace TS_Registraire)

  • Page 21

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 41

    Ensemble imbriqu dans une classe (classe interne) Un attribut ensembliste est spcifi avec Oracle comme (non pas comme un set) mais comme une Nested Table stocke par dfaut dans le mme tableSpace que celui de la table hte.

    Placement dun containeur dans un tableSpace:

    CREATE TABLE Etudiant of etudiant_t NESTED TABLE lesCours STORE AS Table_lesCours(TABLESPACE TS_Registraire2013);

    (La table-objet Etudiant et la collection imbrique lesCours sont crs dans le TS Registraire2013)

    Une nested table bien que stocke comme une table physique spare, cohabite par dfautavec sa table mre dans le mme tablespace.

    Plus de dtails venir sur la table imbrique

    Etudiant: matricule: varcher() nom: varchar() lesCours : lesCours_t

    Modle Objet Module 3 page 42

    Gestion des tables physiques au regard des TS

    Dplacement dune TS vers une autre TS:

    ALTER TABLE Etudiant MOVE TABLESPACE Registraire A2013

    Dplacement dune collection imbrique (sous-table) vers une autre TS:

    Ce dplacement est possible car lensemble imbriqu est physiquement spar de la table-objet.

    Il faut utiliser le nom de la nested table assign par la clause STORE AS:ALTER TABLE Table_Les Cours MOVE TABLESPACE Cours2013;

  • Page 22

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 43

    Signature associe aux types de classes (externes et internes)

    Linterface est spcifie intgralement et solidairement ( important) dans le type

    Un type peut avoir des procdures (mthodes) pour manipuler les donnesdu type. Les types (avec leurs mthodes) peuvent tre partags entre plusieursclasses.Solidairement: chaque ajout ou suppression dune mthode, toute linterface doittre recre pour quelle soit modifie!

    Chaque mthode a une signature dfinie dans le type.

    Signature := nom de la mthode et les paramtres typs, incluant celui de retour

    Exemple:Calcul de la marge sur un produit: (une fonction est utilise)marge (cout: real, facteur: int, lieu varchar) : real (syntaxe thorique)

    Modle Objet Module 3 page 44

    Dpendance entre les types

    En objet les types complexes sont extensibles:Create type adresse_t as Object (no int, rue varchar2(50)) --sans signatures/Create type coordonnees_ t as Object ( no int , adr1 adresse_t) /Create type localisation_t as Object ( coordGPS int, region coordonnees_t) /dpendance: localisation_t - coordonnees_t adr_t Voir Describe localisation_t -- pour obtenir une description avec les types imbriqus.. Imbrication des types et des tables: (Oracle 8, limite 1, illimite avec les versions rcentes: 11g et +.

  • Page 23

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 45

    Actions combines sur le type et leurs effets sur les objets stocks2 ajouts et 1 suppression:

    ALTER TYPE t1_t ADD ATTRIBUTE attr1 NUMBER, DROP ATTRIBUTE attr2, ADD ATTRIBUTE attr4 NUMBER,MODIFY ATTRIBUTE attr5 char(6) CASCADE option ;

    Un attribut ne peut-tre modifi quune seule fois dans un mme ALTER TYPE Un attribut hrit ne peut pas tre supprim sauf dans sa classe source.Options:INCLUDING TABLE DATA : conversion des objets dj cres. (le dfaut)NOT INCLUDING TABLE DATA : La colonne de lattribut de lobjet est marque UNUSED. Idem pour les donnes de la table ou celles stockes lextrieur.Suppression des colonnes dont le type a t modifi:ALTER TABLE DROP UNUSED COLUMNS : pour supprimer les attributs marqus unused.

    Modle Objet Module 3 page 46

    Oprations avec les types: cration, suppression,

    Cration d'un type:Create or Replace type .. as Object () /Aucun type dfinir avec les types primitifs : Boolean, rowid, Long, Long Raw,

    Description d'un type : Directive Describe fournit les attributs et leur typeDesc [ribe] personne_t ;

    Suppression d'un type:Drop type personne_t [FORCE| VALIDATE];

    Synonyme du type : Create Synonym inventaire_t FOR stock_t;

  • Page 24

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 47

    Rappel: objet de table (OT) et objet colonne (OC)

    Oracle gre (absent avec les autres systmes) 2 types dobjets : Objet de table : objet typ limage du containeur et ayant un oid

    Objet-colonne (sans oid): un objet dune classe interne correspond un objet-colonne logiquement

    incorpor dans un objet de table. Ex. adresse adresse_t

    Un attribut de type ensemble regroupe des objets-colonnes. Si ltudiant a plusieurs adresses : lattribut lesAdresses est de type ensemble dont les lments sont des objets-colonnes.

    Ex: Create type etudiant_t as object ( mat int, nom varchar(50), adresse adresse_t);Une instance du type etudiant_t donne un objet contenant une instance de lobjet-colonne adresse_t.

    Modle Objet Module 3 page 48

    Dfinition du type ensemble dans le systme O2

    Intuitivement et avec le systme objet O2 : (autorisant le shadowing)

    Create class Etudiant as object ( mat int, nom varchar(50), lesAdresses Set of (adresse_t));

    O adresse_t est un type crer.

    Comparaison avec Oracle:

    Create type etudiant_t as object ( mat int, nom varchar(50), lesAdresses lesAdresses_t);

    o lesAdresses_t est un type densemble qui sera rendu par une table imbrique spcifie parune syntaxe deTable Of (syntaxe venir)

  • Page 25

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 49

    Description du type et ses types composants

    SET describe depth 2 -- commande Sqlplus pour contrler le niveau de lecture de la structure

    Describe employe_tNOM Null typeMAT NUMBER(32)NOM VARCHAR2(40)ADRESSE ADRESSE_T

    NO NUMBER(38)RUE VARCHAR2(40)VILLE VARCHAR2(40)

    Modle Objet Module 3 page 50

    Objet persistant (objet non persistant)Objet persistant := une paire (oid, valeur ou objet typ)oid est l'identifiant unique d'un objet (Object Identifier); Le oid est gnr par le systme (auto) ou gnr selon des contraintesformules par le DBA.Loid ne change pas durant le cycle de vie d'un objet. Il est aussi inscritdans la structure de lobjet. Loid limite donc le nombre total dobjets dans la base.

    Valeur typeoid Interfaces

    Objet non persistant na pas de oid; cest alors un objet transitoire.

    Un objet cr par le NEW de PL/SQL est transitoire et devient persistant seulement lorsqueinsr dans un containeur i.e. dans une table ou dans un autre objet persistant.

    N.B. Loid est affich uniquement avec lapplication SQLPlus.

    Objet persistant

    InterfacesValeur type

  • Page 26

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 51

    Objet transitoire sans oid

    Create type moteur_t as object(no varchar(10), puiss int, poids int)/Create table Moteur of moteur_t;

    Declare --applicatifv_moteur moteur_t; -- type dun objet Beginv_moteur := NEW moteur_t('FG45S', 300, 1); -- oid absent,donc non persistantInsert into Moteur values(v_moteur); -- objet rendu persistant avec un oid v_moteur := NEW moteur_t('FG38', 100, 1); -- disparition de lobjet avec la fin de la procdureEnd;/2 objets crs dont un seul, le premier rendu permanent (et stock) avec son oid.

    Modle Objet Module 3 page 52

    Oid rang comme un attribut cach

    O est stock loid dun objet?Il est stock comme un attribut cach de lobjet dont le nom est SYS_NC_OID$. Cest gnralement une valeur binaire de 16 octets (32 hex).

    Exemple avec SqlPlus:

    Select SYS_NC_OID$From Moteur mWhere m.puiss < 500;

    SYS_NC_OID$ . 0627D6A9CEC34BEAB03D7F9D9B6F0D3B ( 32 hex 16 octets)

    Impossible cependant de le manipuler et de lImprimer avec une variable objet!

  • Page 27

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 53

    Mutation des oid : oid logique (ref) et physique Loid est augment pour devenir le oid-L au sens quil ne correspond pas une adressephysique de la RAM, ni sur disque. Nous lidentifierons comme oid-L (logique).Loid-L est transform par le noyau du SGBD pour y associer loid-P ds la 1re lecture de lobjet (swizzling) et son placement dans la RAM du serveur.La table de correspondance entre loid-L (persistent) et loid physique (variable) est gredans la cache du noyau du SGBD (pour un serveur de pages ou un serveur dobjets).Oid-L: oid + no de fichier, no page et un dplacement dans la page + oid type classe. Une table est construite avec les oid-L.

    Oid-L: oid vol page Offset oid type classe

    Oid-P

    3A6F... 5 234 324 3FB2 FE245Oid-P Donnes de lobjet FE245 donnes de lobjet

    Loid-L est une REF qui a une taille plus importante que celle du oid-P.Loid-P doit demeurer inchang aussi longtemps que lobjet nest pas rapatri de la cache vers le disque. Ce qui signifie que les pages dobjets dans la RAM sont cloues (pinned pages)!

    Dans la RAM:

    REF

    Modle Objet Module 3 page 54

    Oid physique et swizzling (mutation)Tous les objets transfrs en RAM (du serveur) ont leur oid-L muts (swizzled) immdiatement.La structure dun objet sur disque est diffrente de celle en RAM afin de tenir compte des structures physiques particulires de chaque langage et de chaque machine (machine dependant object structure)Lorsquun objet est r-crit sur disque, la d-mutation nest pas ncessaire car le oid-L esttoujours intact dans lobjet.

    CAS SPCIAL: Partage du mme type dans 2 bases distinctes (sur une mme machine)Chaque type est aussi un objet qui a son propre oid. Pour le partager entre 2 bases, il faut recrer le type avec le mme oid dans les 2 bases:Gnration dun oid pour le type dans une base:

    SELECT SYS_OP_GUID() FROM DUAL;SYS_OP_GUID()

    19A57209ECB73F91E03400400B40BBE3

    Cration du type personne_t dans les 2 bases:CREATE TYPE personne_t OID '19A57209ECB73F91E03400400B40BBE3'

    AS OBJECT (attrib1 NUMBER); (dans chaque base)

  • Page 28

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 55

    Vue schmatique du swizzling :Transfert de lobjet en RAM 1- La page de lobjet oid8 sur disque est transfre vers la cache RAM du serveur. Ladresse

    RAM de chaque objet de la page est inscrite dans une table OP2- Par la suite, la table OP est consulte pour trouver ladresse RAM de loid-L oid8. Lcriture

    se fait via la page vers le disque.

    oid8

    oid4Objet oid8

    Pointeur RAM

    OP (objet persistant)Oid-L oid-P

    oid2 FB234Aoid4 4AF2233oid5 93422FFoid8 F3B255

    Pour accder une valeur de oid8 avec la variable objet x, il y a consultation de la table OP et accs lobjet via ladresse RAM (oid-P) et finalement la valeur attrib1. Il y a en quelque sorte une indirectiondans laccs via la table OP. La table OP sagrandit et se retrcit avec le va et vient des pages dobjets.

    Page sur disque Dans la cache RAM du serveur

    (1) (2)

    x.attrib1

    oid obtenu de la REF

    (3)

    Page transfre en RAM

    Modle Objet Module 3 page 56

    Gnration de loid

    Loid peut tre gnr par le systme ou driv de la cl dune table.L'oid peut tre aussi driv des donnes selon la spcification dfinie pour chaque table-objet ( la gnration de la BD).

    Nombre fini de oid? Mot de 64 bits ou 128 bits --- la cration dun type gnre un objet ayant son propre oid

    La REF est donc construite ainsi:REF := oid + metadonne . (total de 42 octets) avec une machine de 32 bits

    Les mtadonnes permettent au systme didentifier rapidement quelle classe dobjets un oid appartient et cela en incorporant le oid du type de son containeur sans accder au conteneur.

    NB: Une table relationnelle n'a pas de oid pour les tuples, mais un rowid rutilisable.

  • Page 29

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 57

    Gnration de lOID Oracle : systme et driv

    Implmentation de l'OID: Ex: variable selon le systme: nombre sur 32 bits ou mieux sur 64 bits ( max objets 264-1 objets) ou +;ORACLE: (oid gnr:16 octets = 128bits soit 2 mots de 64 bits par oid).

    Choix fait lors de la cration de la table-objet:Create Table Employe of employe_t ( contraintes ...) Object Identifier is

    {SYSTEM GENERATED | PRIMARY KEY};

    Indexation automatique des oids gnrs et des oid drivs. Oid jamais rutilis (dans la mme base) : oid ne devrait pas tre un pointeur physique sur un

    objet (sauf par swizzling lorsque les objets sont dans la RAM) dont l'espace peut trerutilis par un autre objet aprs suppression du premier. Finitude de l'espace objet!

    Modle Objet Module 3 page 58

    Affichage de l'oid d'un objet: fonction REF( )

    Affichage de l'oid d'un objet de la table Employe ( avec dautres donnesdaccompagnement):

    Select Ref(e) From EmployeP eWhere e.mat = 350;

    00002 8BC6FCA7654DD687DDAC23 0845 (32 car. Hex ou 16 octets)

    En objet, lalias est ncessaireStrictement exig si la table Employe est

    dclare avec un oid SYSTEM GENERATED

    Oid (Ref) visualis (cod en hexadcimal); ne peut pas tre modifi par programmation. Affichage exceptionnel que par SQLPlus.

    Affichage de la valeur de l'objet sans son oid : Select Value (e) -- l'objet fournit sa valeur (sans oid )From EmployeP e Where e.noE = 350;

    Idem un objet non persistant!

  • Page 30

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 59

    REF porte contrainte (scope)

    Une rfrence occupe au total 64 octets (plus encombrant que le oid (16 o.)!)

    Il est possible de dfinir des rfrences de 16 octets en dfinissant une rfrence dite SCOPE.

    Une telle rfrence ne cible que des objets dune table particulire pr-identifie

    Au niveau de la table-objet: refChef REF SCOPE IS Ouvrier

    Avantage de la REF scope:

    Une REF scope rfrence obligatoirement un objet de la table cible dite scope .

    Modle Objet Module 3 page 60

    Constructeur dobjet de type table

    Cration et insertion dun objettable avec SQL ** Le nom du constructeur est le type de la table.

    Un objet est cr avec SQL au moyen de la clause INSERT INTO utilisant unconstructeur dobjet dit implicite qui exige une valeur pour chaque attribut:

    Insert into Employe values (employe_t ('Picard', 24, 'des Lilas', 'Qubec') );

    Lobjet cr est insr dans une table, le rendant persistant et lui attribuant un oid permanent. Le mme objet dfini avec un type comprenant une classe interne pourles objets-colonnes (avec 3 attributs):Insert into Employe values

    (employe_t ('Picard', adresse_t( 24, 'des Lilas', 'Qubec') ));

  • Page 31

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 61

    Cration dun objet transitoire en PL/SQL

    Cration et initialisation dun objet transitoire :ex. : NEW employe_t ('Picard', 24, 'des Lilas', 'Qubec');

    Un objet-transitoire :employe devient persistant lorsquinsr dans une table-objet. Les objets sont manipuls en PL/SQL par des variables de mme type que ceux de la BDO:

    v_employe_t : = NEW employe_t ('Picard', 24, 'des Lilas', 'Qubec');*** Couplage fort entre PL/SQL et le DD du SGBD Oracle.Idem avec un attribut de type ensemble (pour la classe interne) : v_employe_t := NEW employe_t ('Picard', 24, adresse_t( 'des Lilas', 'Qubec'));N.B. Il en est autrement avec les autres langages: la struct de lobjet est implment avec une struct du langage hte et estgnralement beaucoup plus complexe.

    Un objet est aussi cr avec un type lorsque le constructeur de type est appel par le NEW de PL/SQL suivi du constructeur de type.

    Modle Objet Module 3 page 62

    Pseudo shadowingCration de type incomplet et d'une rfrence inverse

    c_t ( c1: int , c2: ref)

    d_t ( d1:int , d2: ref)

    La rfrence inverse est cependant possible en utilisant un type incomplet.

    Create type c_t -- type incomplet/

    Create type d_t as Object ( d1 int, d2 REF c_t) -- le type d_t est cr /

    -- mise jour du type incomplet par un Create :Create type c_t as Object ( c1 int, c2 REF d_t) -- type complt/

    Utile pour les rfrences circulaires.

    Avec Oracle, un type peut utiliser un autre type que sil est dj existant dans le DD.Aucune dfinition anticipe, aucun shadowing de type.

  • Page 32

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 63

    Exemple dun type mutuellement dpendant

    CREATE TYPE employe_t AS OBJECT ( nomE VARCHAR2(20), dep REF dep_t) -- le type dep_t est absent de la base

    /** ERREUR ***

    CREATE or REPLACE TYPE dep_t AS OBJECT ( noD int, gerant REF employe_t) /-- le type employe_t est absent de la base

    *** IDEM***Le type employe_t ne peut pas tre cr car le type dp_t nexiste pas. Idem pour le type dep_t

    La solution est dutiliser un type incomplet:Create type dep_t -- un type incomplet na aucun attribut/Par la suite il faudra le complter par un Create (et non un update):

    Create type dep_t as Object (noD int , gerant REF employe_t) /

    Modle Objet Module 3 page 64

    Visibilit des attributs et Encapsulation Encapsulation des objets : Les donnes sont manipules que par les mthodes sans notion de visibilit explicite pour les attributs et les mthodes contrairement lavisibilit implants dans les L3G objet ou avec les SGBD objets qui adhrent lanorme ODMG.

    *En Oracle , le droit d'accs est accord un usager via le type. L'utilisateur voittout : les attributs et mthodes du type sur lequel il a les droits.

    Les mthodes sont prsumes toujours prsentes dans le diagramme de classe, mme si elles sont absentes dans les exemples UML et Mnav et cela , pour des raisons pratiques dallgement des figures.

    En principe, un objet de table-objet devrait se comporter comme un vritable objetde classe et tre accessible que par son interface. (Rappel)-Une signature est la liste type de ses paramtres incluant sil y a lieu, celui de retour. - Linterface de classe est l'ensemble de ses signatures.

  • Page 33

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 65

    Comparaison entre les modles Relationnel et Objet

    Le nombre de types dans le Relationnel est environ 15. En objet, nombre illimit (car il y a les TAD ou les UDT).

    Le R est bas que sur les valeurs pour implmenter les associations entre tables : partage d'attributs ayant un mme domaine. Lobjet utilise les REF pour la navigation entre les classes et parcourir les associations. La jointure par valeur nest cependant pas interdite. En R, la contrainte rfrentielle peut tre implmente par la cl trangre FK; en objet pas de FK obligatoire, la contrainte est remplace par le REF. A la cration d'un objet et son insertion dans une table (type et avec oid), la persistance est assure. Le oid est mut en pointeur physique dans la RAM : le swizzling acclre l'accs aux objets. Cette transformation est gre par le SGBD.* Une rfrence perdue est une rfrence dangling (danger dincohrence) Elle pointe sur un emplacement ne correspondant pas un objet.

    Modle Objet Module 3 page 66

    Implmentations de quelques modles navigationnels avec

    la technologie de lobjet

  • Page 34

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 67

    Du diagramme de classe UML au Mnav (Rappel)

    Transposition du navigationnel l'objet:

    Essentiellement la cration des types et des containeurs

    Instantiation dobjet:La classe externe instantie un objet qui sera stocke dans une table-

    objet, tandis que la classe interne instantie des objets-colonnes (OC).

    Les contraintes de multiplicit ne sont pas toutes renforces par le Mnav (objet). Il faut avoir recours la logique propre des mthodes pour complter la validation notamment celles des multiplicits.

    Modle Objet Module 3 page 68

    Implmentation de lassociation (1..1 1..1) en Objet

    EmployeP: noE*: intnomE: varchar(50)

    Domicile:no*: intrue : varchar(50)telD : varchar(8)

    1..11..1

    n.b. 1,1 1

    Exemple: implantation dun modle UML simple avec des multiplicits contraignantes:

    A_un >

    En raison des multiplicits 1..1Lajout dun domicile est possible que si les contraintes du modle sont vrifies la fin de la transaction logique dajout.

  • Page 35

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 69

    Mnav: implantation des associations avec REF (OR)

    REF : une rfrence vers un ou des objets dune classe .

    Create type domicile_t as object ( no int, rue varchar(30), telD varchar(8))/Create type employeP_t as Object (noE int, nomE varchar(50), refAdresse REF domicile_t) /Create table EmployeP of Type employeP_t -- cration du containeur dobjets (de la table)La contrainte (not null) sur refAdresse reste dfinir ou sera renforce par la mthode dajout. *** La REF doit toujours avoir un valeur valide pour renforcer la multiplicit.

    EmployeP : employeP_tnoE*: intnomE: varchar(50)refAdresse

    Domicile : domicile_tno*: intrue : varchar(50)telD : varchar(8)

    Modle Objet Module 3 page 70

    Dfinition des contraintes

    Les contraintes sur les attribut et celles dfinies avec plusieurs attributs se dfinissent au niveau de la table i.e. du containeur.

  • Page 36

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 71

    Les contraintes dfinies sur les objets au niveau des tables Une contrainte est toujours dfinie via la table et non au niveau du type. Ce dernier

    est partageable avec d'autres tables qui n'ont pas ncessairement les mmescontraintes mme si elles partagent le mme type.

    Contraintes de table: cl primaire, cl trangre, Unicit, Check, Create table Employe of employe_t

    (Constraint pkEmploye Primary Key (mat), Constraint c_salaire Check(salaire is not null and salaire < 99999.00));

    Rappel:La dfinition de cl est INTERDITE via le type: (est dfinie au niveau de la table)

    Create type employe_t (mat int, salaire number (8,2),Constraint pkEmploye Primary Key (mat)

    /

    Modle Objet Module 3 page 72

    Cration de la table-objet avec des contraintes

    REF : une rfrence vers un objet est construite avec l'oid.

    Create table EmployeP of type employeP_t( constraint pk_noE primary key (noE), constraint c_nomE check ( length (nomE) 56000));

    Create table Domicile of type domicile_t ; -- aucune contrainte dfinieLa multiplicit (1,1) pour Domicile nest donc pas renforce avec ce Mnav

    EmployeP : employeP_tnoE*: intnomE: varchar(50)refAdresse

    Domicile : domicile_tno*: intrue : varchar(50)telD : varchar(8)

    Contrainte de table vrifie en dernier

  • Page 37

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 73

    Insertion en violation de multiplicit dun objet de type Domicile

    Insert into Domicile values( domicile_t(500, "des Lilas " , '41854506787 ' ));

    Le commit implicite (le dfaut) la fin du DML fait en sorte que lajout de cet objet se fera en violation de sa multiplicit i.e. que le domicile ne sera pas associ un employ comme lexige le modle! Il faudra le faire avec un update de lattribut de rfrence sans avoir comme dans cet exemple, la garantie de latomicit des actions: Insert + insertSolutions :A- Faire linsertion de lemploy et de son domicile avec deux DML Insert mais dans la mme transaction dfinie dans lapplication avec report de la vrification des contraintes par le noyau. B- Faire lajout du domicile et de lemploy par une seule mthode exigeant aussi la dfinition dune transaction au sein de la mthode.

    Modle Objet Module 3 page 74

    Association: Interrogation avec navigation par le REF

    Navigation possible entre les tables en utilisant le type REF: formulation d'une requte plus simple et calcul plus rapide .

    Select E.nomE, E.refAdresse.telDFrom EmployeP EWhere E.refAdresse.rue = 'desPignes ;

    Multiplicit 1..1 du ct Domicile: La contrainte sur refAdresse exige de rfrer un et un seul objet de Domicile. Une contrainte IS NOT NULL tant dfinie sur lattribut refAdresse. Lajout dun employ doit se faire obligatoirement avec un domicile! N.B. Lutilisation de lalias est obligatoire.

    EmployeP : employe_tnoE*: intnomE: varchar(50)refAdresse

    Domicile : domicile_tno: intrue : varchar(50)telD : varchar(8)

    Chemin de navigation

  • Page 38

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 75

    Interrogation avec une slection exploitant la navigation

    ** La colonne refAdresse nest pas une donne de lusager => cart avec le relationnel

    Select E.nomE, E.refAdresse.telDFrom EmployeP EWhere E.refAdresse.rue = 'desPignes

    and E.refAdresse.no = 450and E.noE = 100;

    Cette navigation est rendue possible par loid Renforcement de la multiplicit 1..1 du cte EmployeP avec ce Mnav:Par la mthode dont le code permet de vrifier qu lajout dun domicile, il y a obligatoirement un employ et un seul qui lhabite.

    Modle Objet Module 3 page 76

    Autre Mnav quivalent: une ref vers Employe

    EmployeP : employe_tnoE*: intnomE: varchar(50)

    Domicile : domicile_tno: intrue : varchar(50)telD : varchar98)refEmp

    Select d.refEmp. nomE, d.telDFrom Domicile d Where d.rue = 'desPignes

    La multiplicit 1..1 de la classe Domicile renforce par la ref qui ne peut avoir quune seule valeur non nulle.Avec une seule ref, une seule multiplicit est donc renforce!La multiplicit (1,1) pour Employe nest pas renforce avec ce Mnav autrement que par une mthode.

  • Page 39

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 77

    Mnav avec deux REF (parcours non privilgi) et type incomplet

    REF : une rfrence vers un objet, construit avec l'oid.

    Create type employeP_t / -- type incompletCreate type domicile_t as object ( no int, rue varchar(30), telD varchar(8), refEmploye REF employeP_t) /Create type employeP_t as Object (noE int, nomE varchar(50), refAdresse REF domicile_t) /

    EmployeP : employeP_tnoE*: intnomE: varchar(50)refAdresse

    Domicile : domicile_tno*: intrue : varchar(50)telD : varchar(8)refEmploye

    Les multiplicits (1,1) pour Employe et Domicile sont renforces (via la dfinition des contraintes au niveau table) au prix dune gestion plus complexe des ajouts, suppressions et mises jour faites dans une mme transaction.

    Modle Objet Module 3 page 78

    Mnav avec 2 rfrences : complexit accrue des actions sur le modle

    Create table EmployeP of employeP_t (constraint c_refAdresse check ( refAdresseis not null));

    Create table Domicile of domicile_t ( constraint c_refEmploye check (refEmploye si not null)); Insert into EmployeP e values (employeP_t( 109, Jules,null));Insert into Domicile values (domicile_t(567, des Fleurs, 3456789, null));

    Update EmployeP e set e.refAdresse = (Select ref(d) from Domicile d Where d.telD = 3456789) Where e.noE = 109;Update Domicile d set d.refEmployeP = (Select ref (e) from EmployeP e where e.noE = 109)Where d.no = 567;

    N.B. Avec 2 refs, les deux multiplicits peuvent tre renforces dans une mme transaction avec report de la validation des contraintes. La mise jour du modle devient plus complexe et doit se faire dans une transaction non interruptible.

    Interdit pas la contrainte

  • Page 40

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 79

    Commentaires sur lusage des 2 rfrences inverses

    1. Avec 2 rfrences obligatoires les 2 multiplicits 1..1 sont renforces dans une mme transaction avec report de la vrification des contraintes.

    2. La non interruption (une proprit ACID) dans un contexte daccs concurrentiel (multi usager) exige que ces actions soient intgres dans une transaction du genre TL (Transaction Logique) dfinie par le dveloppeur. (voir plus loin comment dfinir une TL)

    3. Tout ajout dun objet doit tre suivi (sans interruption) de celui dun autre objet: lajout dun employ doit tre suivi de lajout dun domicile et dans les 2 cas les rfrences sont nulles. Les ajouts se font dans la mme TL.

    4. Les insertions dobjets doivent tre suivies sans interruption par 2 ordres Update de la rfrence donc dans la mme TL

    5. Cette complexit est cependant masque au dveloppeur si les clauses sont intgres dans une mthode dfinissant une transaction et cela avant deffectuer cette mise jour.

    Modle Objet Module 3 page 80

    Les transactions avec les objets

    Les proprits ACID dune transaction doivent tre renforces par le moteur SGBD, notamment avec les objets:

    1- Atomicit: tout ou rien2- Cohrence prserve : avant et aprs la transaction3- Isolation: transaction excute comme si elle tait seule4- Durabilit (persistance): au commit (validation) dune transaction les donnes modifies ou ajoutes sont persistantes.Pour y arriver, le SGBD a un systme de verrous utilis selon un algorithme prcis pour autoriser la concurrence sans interfrence avec les autres transactions.

  • Page 41

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 81

    Cohrence et transaction logiqueUn modle reprsente les objets dans leur tat stable i.e. quil modlise ltat de lensemble des objets un moment t lorsquil y a aucune action ou manipulation en cours.

    Transaction logique (TL)Les manipulations des objets (ajout, mise jour et suppression sur un ou plusieurs objets declasses diffrentes) sont excutes par une suite dactions lmentaires non interruptiblesprsumant la validation ultrieure russie des contraintes, notamment celles des multiplicits.

    Exemples:Ajout dun employ : une seule action dinsertion dans la BD compose la transactionlogique; la fin de cette action les contraintes de multiplicit seront vrifies et la BD est laissedans un tat stable et cohrent.

    Ajout dun employ et dun dpartement dans la mme transaction logique; la fin de la TL les contraintes de multiplicit seront vrifies.

    Important: Si la cohrence est mise en pril, la TL doit tre annule. Le principe du Tout ou Rien sapplique!

    Modle Objet Module 3 page 82

    Exemple dincohrence avec une TL

    Professeur:matP* : stringnomP : stringstatutP : char

    Cours:noCours* : stringtitreC : stringnbCr : integer

    EstResponsable >1..11..*

    1- Si un applicatif veut ajouter seulement un professeur dans la base:TL1 : Ajout professeur ( 'mat45 ', ' Tremblay, ' P') ;

    Cet ordre Ajout constitue une transaction logique simple (implicite). Si ladditionest autorise par le SGBD, la base sera alors dans un tat incohrent au regarddu MCD dont la multiplicit est 1..1 du ct Cours.Il faut ajouter obligatoirement un cours au prof dans la mme transactionavant la vrification des contraintes du modle objet par le noyau du SGBDO.

  • Page 42

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 83

    Actions dans le cadre dune transaction logique

    2- Si les deux actions sont incorpores dans une mme transaction logique soit:TL2: Ajout professeur ( 'mat45 ', ' Tremblay ', ' P ') ;

    Ajout cours values (45, ' C++ ', 3);** la cration de la rfrence est suppose se faire dans cet exemple

    A la fin de la TL2, la cohrence du modle est respecte (donc celle de la BDO) parceque les multiplicits sont valides conformment au modle. Cette cohrence dcoule de latransaction logique (TL).Dans le cas contraire, la transaction en cours sera dfaite (retour au point de cohrence deDpart: atomicit)Comment alors dfinir une transaction ?

    Modle Objet

    Contrainte Deferrable dfinie pour la table-objet

    84

    Create Table Stage of stage_t (Constraint Pk_Stage Primary Key (noS) Deferrable, (1)Constraint U_matricule Unique (matriculeE) immediate Deferrable, (2)Constraint PK_non_null Check( noS is NOT NULL), (3)Constraint FK_non_null Check( matriculeE is NOT NULL) Deferrable); (4)

    (1 ) contrainte qui peut-tre reporte, mais louverture de la BDO, elle est active(2) contrainte qui est reporte louverture de la BDO, elle est active(3) contrainte non reporte, valide ds que lattribut est modifi(4) contrainte qui peut-tre reporte, mais louverture de la BDO, elle est active

  • Page 43

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 85

    Transaction logique et transaction physiqueUne transaction logique devient une transaction (physique) avec un SGBDO particulier par un marquage spcial du dbut et de la fin de la transaction. Ce marquage varie selon le SGBD. Avec Oracle :

    Dbut : lexcution dun 1er DML Fin: Commit

    Les contraintes de table sont vrifies qu la fin de la transactionsi et seulement si les contraintes de table dont dites reportables (Deferrable) dans le schma de la BDO.

    Le report de la vrification des contraintes du schma sapplique chaque transaction. Exemple : SET Constraints ALL Deferred (pour toutes les contraintes reportables)dans SqlPlus: SET Constraint c1_xxxxx DEFERRED ; -- avec contrainte nomme

    SET Constraint c2_yyyyy DEFERRED ;

    Dans lapplicatif PL/SQL: Execute Immediate Set All Constraints Deferred;

    Modle Objet Module 3 page 86

    Intgrit dune transaction avec la mthodeLa cohrence peut tre assume deux niveaux:Niveau mthode: La logique interne dune mthode peut sous-tendre plusieurs actions et pour maintenir la cohrence, la mthode doit dfinir la transaction sans gard lapplication.

    ex.: dbut TL par la mthode Ajout objetajout dun objet o1;ajout dun objet o2; - pour ainsi valider la multiplicit

    fin de la TL par la mthode Ajouto1o2

    Niveau application (source dincohrence?):Lapplication a la responsabilit de maintenir la cohrence du modle en dfinissant le dbut et la fin de la transaction.

    ex.: dbut de la TL par lapplicationajout objet o1;ajout objet o2;

    fin la TL par lapplication**** Dans ce cas, le contrle sur la transaction assum par lapplication est une source potentielle derreurs.

  • Page 44

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 87

    La cl primaire avec le modle objet

    Loid gnr avec la cl primaire est plus compact que celui gnr par le systme.Un attribut de type REF avec un oid driv de la cl primaire est connuecomme une primary-key-based REF ou pkREF et occupe moins despace que loidgnr par le systme.

    Une REF du genre pkREF doit avoir une contrainte de type REFERENCES pour viter les REFs indtermine (non valide) (dangling).

    ** dangling : rfrence qui ne pointe pas sur un objet valide.

    Modle Objet Module 3 page 88

    Racine de persistance d'un objet de table (OT)

    Un objet est cr dans un applicatif et devient persistant lorsque:

    - insr dans une table type (OT):

    Insert Into EmployeP values (v_empl);Insert into EmployeP values (employeP_t ( 235, Paul, ..));

    - insr dans un objet de table qui est persistant (le cas du OC). Dans ce cas lobjet imbriqu na pas doid propre.

    -- NB: Les objets des langages L3G objets ne sont pas persistants moins que le langage le soit i.e. gnre et gre la cration d'objets persistants.

  • Page 45

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 89

    Couplage avec le DD et r-Insertion dun objet avec Value()

    Declare /* avec une proc PL/SQL dans lenvironnement sqlplus */v_empl employe_t; -- variable pl/sql dont le type objet dfini dans le dictionnaire (DD)

    -- Couplage fort entre le langage procdural et le dictionnaire de donnesBegin/* v_empl := NEW employe_t (234, Julie, null)) */Select value(e) into v_empl from EmployeP e Where e.noE = 234; -- voir 1Insert into EmployeLibere values (v_empl); -- voir 2 nouvel objet avec mme valeurDelete Employe e Where e.noE = 234; End;/1- recherche un objet par sa cl primaire. Chargement dans la variable objet v_empl mais sans son oid2- chargement de lobjet dans la table EmployeLibere ce qui lui donne un nouvel oid; cest donc un nouvel

    objet mme sil est idem par ses valeurs.

    Modle Objet Module 3 page 90

    Accs un objet: Fonction DEREF()La fonction REF(x) (o x est un objet) donne l'oid de l'objet x persistant. De faon similaire, la fonction DEREF(a) (o a est une rfrence incluant le oid) rend l'objetcorrespondant et l'assigne une variable du type de lobjet.Exemple: applicatif PL/SQL:

    Set serveroutput ON Declarev_ref REF client_t; -- var. de type refv_client client_t; -- variable objet de type client_tv_clientA client_t

    BeginSelect REF(x) Into v_ref from Client x Where x.matC = 10000;Select DEREF(v_ref) Into v_clientA From Dual;

    Insert into ClientAncien Values(v_clientA); -- partage du type client_tDBMS_OUTPUT.PUT_LINE(v_clientA.nomC);..End;

    /

  • Page 46

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 91

    propos du type REF et le swizzling

    La rfrence REF pointe sur (identifie) un objet sans gard son placement physiquesur le disque. (location independancy).

    Rappel:Le Ref ne peut donc pas pointer directement un objet dans la RAM comme un

    vritable pointeur physique sait le faire.Un objet dans la cache RAM voit ses Refs transformes en pointeurs physiques pour acclrer l'accs: c'est la transformation ou mutation des Refs (le swizzling)

    Cette mutation est prise en charge par le serveur (pour lapproche serveurd'objets (Oracle). Dans un systme serveur de pages dobjets, la mutation peut trefaite par un module install sur chaque client .

    page

    objet

    Des objets sont changs entre lapplication et le client

    Modle Objet Module 3 page 92

    Dfinition claire et simple dune classe dobjets (Systme O2)

    Dfinition d'une classe avec la technologie objet d systme O2 sans rfrence explicite vers un objet.

    Class Personne typetuple ( nom : string,

    age : integer,conjoint : Personne, enfants : set (Enfant),ville : tuple ( nom: string, code : integer),

    pays : Pays)End;

    Classe objet

    * Structure complexe de type tuple.

    Personne: Enfant:0..*

    0..1

    < Conjoint_de

  • Page 47

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 93

    (cohabitation: objet avec technologie relationnelle)

    Une table relationnelle peut maintemant contenir aussi un objet-colonne ((OC). Le tuple de la table qui contient un OC nest cependant pas un objet!

    Table-objet (table type):Create Type bourse_t as Object (noB int, nomB varchar2(50))/Create Type etudiant_t as Object (nom varchar2(50), age int, bourse bourse_t)/

    Create Table Etudiant of etudiant_t; -- table-objet

    Table relationnelle: Chaque tuple de la table na pas de oid!

    Create table Etudiant (nas int, bourse bourse_t); -- table relationnelle avec OC

    Cette dualit de la technologie permet de faire un passage en douce vers lobjet en prservantlacquis relationnel!

    Objet- colonne

    Modle Objet Module 3 page 94

    Diffrentes initialisation des objets de table (Oracle)

  • Page 48

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 95

    Insertion dun objet OT et OC avec Oracle

    Objet de table (OT) cr et initialis dans un Insert en utilisant dun constructeur.

    Cas 1: Un objet de table (OT) a le type dune classe du Mnav

    Insert into Employe values (employe_t(Dupont, 35, Qubec, 4000.00));

    *** Le type de la table doit tre dfini au pralable:

    Cas 2: Incluant un objet de colonne (OC): Insert into Employe values (employe_t

    (Dupont, 35, salaire_t( Qubec, 4000.00)));

    Mme info range dans la table mais structure diffremment.

    Modle Objet Module 3 page 96

    Interface OT et OC

    Quelle est la diffrence entre les deux insertions prcdentes?

    Dans les deux cas, la mme information est insre dans des tables objets mais avec des structures diffrentes.1er cas: lobjet peut tre trait que par les mthodes de linterface de OT

    2me cas: lobjet de table ajout comporte un objetcolonne. Une manipulation particulire de cet OC pourra se faire par son interface propre. Les mthodes OT demeurent toujours disponibles pour les objets de la table.

    Exemple : Pour mettre jour les nom et salaire des employs. Linterface de la classe noffrepas de mthode adquate pour modifier le salaire tandis que linterface de la classeinterne ou OC a une telle mthode.

  • Page 49

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 97

    Procdure PL/SQL dinitialisation d'un objet de table (OT) Create type employe_t as Object (no int, nom varchar(45), adresse varchar(60) / Un objet est initialis sa cration soit:

    Par des valeurs fournies au constructeur d'objet ou au NEW de PL/SQLEx. employe_t (Delphine, 35, 45000) -- cration avec le constructeur Soit par dfaut selon les valeurs formules dans le schma objet

    Si aucune valeur n'est fournie, il y a erreur. Declarev_emp emp_t; -- ce type est connu car prsent dans le DDbeginv_emp := NEW employe_t( ); -- le constructeur na pas de valeur par dfaut.

    insert into Employe values (v_emp);End;

    PLS-00306: nombre ou types d'arguments errons dans appel EMPL_Tv_emp := NEW employe_t(345, Gustave, null); Lemploy 345 na pas encore dadresse.

    N.B. En Java un objet de travail est cependant cr avec des valeurs implicites par dfaut.

    Modle Objet Module 3 page 98

    Mthode de l'objet OC

    Un objet-colonne peut avoir ses propres mthodes. Le partage du type, avec la cration d'une autre table-objet ayant le mme type de l'OC est possible et les mthodes de OC du type deviennent alors celles de la classe interne ou de la sous-table imbrique.

    Les mthodes de linterface dun OC ne s'appliquent pas un objet nil , mais sappliquent aux objets NULL (ceux qui peuvent pas tre mis jour par la suite).

  • Page 50

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 99

    Cration et initialisation par dfaut des objets de table (OT) et des objets-colonnes (OC)

    ImportantEn mode exploitation, les cration, suppression et mise jour seront ralises par des mthodes et non directement avec les DML comme dans les exemples qui suivent.

    Modle Objet Module 3 page 100

    Objet null et nil (atomically null)

    Create type adr_t as object (no int , rue varchar(40))/Create type emp_t as object (nas int, adr adr_t)/Create table Emp of emp_t;

    Insert into Emp values (emp_t(1, adr_t(null, null))); -- objet null qui peut tre mis jour

    Insert into Emp values (emp_t(2, null)); -- objet null qui ne peut pas tre mis jour

  • Page 51

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 101

    Exemple de mise jour des objets nils et nullsMise jour des objets nil et null

    Create type adr_t as object (no int , rue varchar(40))/Create type emp_t as object (nas int, adr adr_t)/Create table Emp of emp_t;Insert into Emp values (emp_t(1, adr_t(null, null)));Insert into Emp values (emp_t(2, null));Update Emp e set e.adr.no = 20 where e.nas=2;Update Emp e set e.adr.no = 20 where e.nas=1;Delete Emp;SQL> Update Emp e set e.adr.no = 20 where e.nas=2;Update Emp e set e.adr.no = 20 where e.nas=2

    *ERROR at line 1:ORA-02309: violation de NULL atomique

    SQL> Update Emp e set e.adr.no = 20 where e.nas=1;

    1 row updated.

    Modle Objet Module 3 page 102

    Affichage des objets de la table-objet et de ses valeurs

    Affichage des objets OT dpourvus de leur oid mais avec leur constructeur: Select value(e) From Emp e ;

    ** La fonction value() fournit lobjet sans oid. Le constructeur est affich avec sqpplus pour rappeler que cest un objet qui est affich. Normalement, les objets tant lus et manipuls par une application au moyen de varaiables objets.

    VALUE(e) (MATE, NOME, ADR(NO, RUE, VILLE))EMP_T(1, 1 , NULL) -- objet OC nil est perdu jamaisEMP_T(2, ADR_T(null, null)) OC Null

    Cas spcial: affichage avec SQLPlus:Affichage des valeurs des objets OT sans leur constructeur.Pour la mise au point des clauses SQL, il est possible dafficher que les valeurs:

    SQL> Select * From EmployeSup;MAT ADR(NO, RUE, VILLE)1 ---objet nil2 ADR_T(NULL, NULL)

  • Page 52

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 103

    Cration et initialisation des objets: null et nil dans PL/SQL

    Create type metier_t as Object(metier varchar2(25), classe char(1))/ Create type employeU_t as Object (mat int, metier metier_t)/Application PL/SQL pour la cration: Declare -- dans un bloc anonyme PL/SQL

    v employe_t ;n employe_t ;o employe_t ;Begin -- le constructeur implicite employe_t() exige une valeur pour tous ses paramtres.v := NEW employeU_t(250, NULL); -- OC niln := NEW employeU_t (500, metier_t(null, null)); -- OC nullo := NEW employeU_t (500, metier_t('technologiste', 'A')); -- OC initialisInsert into EmployeU values(o); -- objet o rendu persistant et assignation dun oidEnd;

    L'objet-colonne v est nil donc non modifiable. L'objet n est null et modifiable. L'objet colonne de oest initialis par le constructeur.

    Modle Objet Module 3 page 104

    Cas particulier: mise jour de l'objet-colonne (OC)

    Avec Cration de lOC:Update EmployeSup p SET p.adr = adr_t (99, null, null)

    Where p.matE = 104; -- identifie 1 seul OT SQL> Select * From EmployeSup;MATE NOME ADR(NO, RUE, VILLE)104 Desbiens ADR_T(99, NULL, NULL) -- OC est mis jour101 Desbiens -- objet nil

    Mise jour de l'objet OT 101 avec cration de lobjet colonne OC (matE = 101)Update EmployeSup p SET p.adr = adr_t(88, null, null)

    Where p.matE = 101;

    MATE NOME ADR(NO, RUE, VILLE)104 Desbiens ADR_T(99, NULL, NULL)101 Desbiens ADR_T(88, null, null)

  • Page 53

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 105

    Indexation et persistance des OT et OC (Oracle)

    Objet de table: indexation automatique avec les oids drivs SYSTEM.

    Cration avec le INSERT et un constructeur de type appropri.

    Indexation de lobjet-colonne par valeur: Insertion de l'objet hte dans une table rend son objet-colonne (qui n'a pas de

    oid) persistant. Indexation des objets-colonnes est possible mais par valeuri.e. pour chaque attribut de la classe interne.

    Create index employeAdresse_idx on Employe(adresse.rue);

    Attribut de lOC

    Modle Objet Module 3 page 106

    Les triggers (Oracle) associs une table-objet: ses limites

    Un trigger Oracle peut-tre associ une table-objet mais il y a des limites:

    1- Un trigger ne peut pas dfinir normalement une transaction (donc se terminer par un commit).

    2- Un trigger ne peut pas tre associ une table imbrique (OC) soit la table physique correspondant la nested table, ni un de ses attributs.

    3- Aucun trigger ne peut aussi modifier un LOB.

    4- Un trigger nest pas report (DEFERRABLE ) comme peut ltre les contraintes de table et dattributs.Leur usage est aussi restreint car il hypothque la performance du SGBD recherche dans le cadre du paradigme objet.

  • Page 54

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 107

    Suppression d'objets : plusieurs approches

    Via la suppression d'une table : DROP Table Employe;Entrane la suppression des objets, du containeur, des privilges et des index

    ventuels dfinis sur cette table Employe.Rend aussi inoprant les composants dpendants : dclencheurs (triggers), vues.

    TRUNCATE TABLE Employe [DROP | REUSE STORAGE ]Supprime que les objets sans supprimer le containeur ni crer desegments de rollback. Nenregistre aucune entre dans une vue matrialise .Les objets sont supprims mais lespace peut-tre conserv (REUSESTORAGE).

    Invalidation des objets par la suppression force d'un typeDROP TYPE employe_t FORCE;

    Suppression, mme si dautres objets utilisent le type!!! Les objets restent dans la base et sont temporairement invalides!!!

    Modle Objet Module 3 page 108

    Quelques infos ranges dans le dictionnaire

  • Page 55

    Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel

    Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4

    Module 3

    Modle Objet Module 3 page 109

    Dictionnaire Oracle des objets (DD)

    Le dictionnaire est compos de tables-objets dont chaque objet dcritnotamment les types. Celles-ci sont accessibles via les vues statiquessuivantes :

    USER_COLL_TYPES : pour dcrire les collections (sous-tables)USER_INDEXTYPES : pour dcrire les indexUSER_TRIGGERS : pour obtenir le texte dun triggerUSER_TYPES : pour dcrire les typesUSER_TYPE_ATTRS : pour dcrire les attributs des typesUSER_TYPE_METHODS : pour dcrire les mthodes des typesUSER_TYPE_VERSIONS : pour dcrire les versions des types

    USER_SOURCE : dcrit notamment le texte des types dun utilisateur;USER_TYPES

    Select * from User_Types;Select * From type_name, attributes, methods from User_Types;

    Modle Objet Module 3 page 110

    Information sur les types avec le dictionnaire (DD) La table (en ralit une vue) du dictionnaire, USER_TYPES fournit des informations sur la hirarchie des types :SQL> describe User_types --- fournit les attributs de la table User_tupes

    Nom (attributs) NULL ? TypeTYPE_NAME NOT NULL VARCHAR2(30)TYPE_OID NOT NULL RAW(16)TYPECODE VARCHAR2(30)ATTRIBUTES NUMBERMETHODS NUMBERPREDEFINED VARCHAR2(3)INCOMPLETE VARCHAR2(3)FINAL VARCHAR2(3)INSTANTIABLE VARCHAR2(3)SUPERTYPE_OWNER VARCHAR2(30)SUPERTYPE_NAME VARCHAR2(30)LOCAL_ATTRIBUTES NUMBERLOCAL_METHODS NUMBERTYPEID