61
Page 1 André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4 Module 2 Modèle navigationnel © Module 2 page 1 Transformation du diagramme de classe UML en un modèle navigationnel pour un passage à l’objet Modèle navigationnel (Mnav) 2016-08-26 © André Gamache, professeur associé Département d'informatique et de génie logiciel Faculté des sciences et de génie Université Laval. Québec, Qc, Canada, G1K 7P4 Courriel: [email protected] Modèle navigationnel © Module 2 page 2 Notions d’objet Objet physique : objet matériel concret de la vie ou symbolique ayant des attributs de volume, de poids, de matière, de fonctions, de forme, d’apparence, Exemples: un avion, un moteur, une ouvre d’art, une photo, …, une réaction moléculaire, … Objet informatique: représentation des attributs de l’objet physique par une structure informatique disponible par un langage, construit de toute pièce ou une structure de stockage: entier, réel, struct, fichier, … Exemples: un vecteur de valeurs, une struct complexe, un fichier jpeg, … Objet informatique complexe: un objet informatique auquel est associé impérativement toute manipulation ou transformation de l’objet au regard de contraintes fortes et élaborées. Exemples: les plans vectorisés d’un avion et les traitements de création, mise à jour, rotation, translation, coloration, …

Modèle navigationnel (Mnav)

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Modèle navigationnel (Mnav)

Page 1

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 1

Transformation du diagramme de classe UML en un

modèle navigationnel pour un passage à l’objet

Modèle navigationnel (Mnav)

2016-08-26 ©

André Gamache, professeur associéDépartement d'informatique et de génie logicielFaculté des sciences et de génie

Université Laval. Québec, Qc, Canada, G1K 7P4

Courriel: [email protected]

Modèle navigationnel © Module 2 page 2

Notions d’objet

Objet physique : objet matériel concret de la vie ou symbolique ayant des attributs de volume, de poids, de matière, de fonctions, de forme, d’apparence, …

Exemples: un avion, un moteur, une ouvre d’art, une photo, …, une réaction moléculaire, …

Objet informatique: représentation des attributs de l’objet physique par une structure informatique disponible par un langage, construit de toute pièce ou une structure de stockage: entier, réel, struct, fichier, …

Exemples: un vecteur de valeurs, une struct complexe, un fichier jpeg, …

Objet informatique complexe: un objet informatique auquel est associé impérativement toute manipulation ou transformation de l’objet au regard de contraintes fortes et élaborées.

Exemples: les plans vectorisés d’un avion et les traitements de création, mise à jour, rotation, translation, coloration, …

Page 2: Modèle navigationnel (Mnav)

Page 2

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 3

C'est un passage utile pour des fins didactiques seulement.

Comment passer du conceptuel au modèle objet ?

La passage du diagramme de classe de UML à l‘Objet est rendu facile par le modèle dit navigationnel (un outil didactique pour le niveau conceptuel) inspiré de la notation proposée par Christian Soutou (1).

Le système à base d’objets va alléger les lacunes signalées dans le module 1, mais pas toutes!

Ce modèle Mnav joue le rôle de pivot ou d'étape entre le diagramme de classe de UML et le modèle d'implantation objet.

Le Mnav ne remplace pas la vérification et le renforcement des contraintes du modèle, lesquelles devront être prises en charge par les méthodes spécialisées de chaque interface de classe.

Le Mnav fournit une structure qui incorpore explicitement certaines contraintes du modèle mais pas toutes!

(1) Notation graphique proposée par C. Soutou, Objet-Relationnel Eyrolles1999

Modèle navigationnel © Module 2 page 4

Modèle navigationnel (Mnav)   

Objectifs du Mnav

• Faciliter le passage vers l’Objet  par un ensemble de règles de transposition :

Diagramme de classe‐UML => navigationnel  => Objet 

• Favoriser la visualisation des structures complexes et des chemins de navigation possibles en conservant la notion d’objet.

• Représenter concrètement le plus de contraintes possibles pouvant être spécifiées par le langage DDL du SGBD.

Lacune du Mnav :

• Devient rapidement encombré et encombrant pour des modèles complexes!!!

• Ne représente pas bien le partage des types entre différentes parties d’un  modèle UML (classes) complexe. 

Pourquoi le navigationnel ? Le modèle introduit les liens de type REF (implémentation avec l’oid + autres informations) entre les classes UML.

Page 3: Modèle navigationnel (Mnav)

Page 3

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 5

Quelque définitions clés du Mnav

Classe externe

La classe UML sera rendue dans le Mnav par une classe dite externe qui est en

quelque sorte au plan informatique un type (i.e. une structure nommée) défini par

ses attributs. Une classe externe définit des objets autonomes  (dont l’existence

ne dépend pas d’un autre objet) dans la base  i.e. possède une valeur + un oid

qui rend l’objet persistant.  

*** En UML, la classe externe correspond à une classe UML.***Il en sera autrement pour une autre dite interne propre au Mnav.

OID

Un oid est un identifiant d’objet unique, non réutilisable pour toute la vie de la

base. Un objet ayant un oid est persistant dans la base. Il est représenté par un rond blanc ou

noir.

Classe interne

Une classe interne est une classe capable de définir des objets (sans oid propre) mais sans oid dont la

persistance exige son imbrication dans un objet d’une classe externe. 

Les classes interne et externe sont nommées et ont chacune une interface.

Modèle navigationnel © Module 2 page 6

Les attributs du Mnav

Attribut simple:

L’attribut simple est idem à celui de UML: type atomique avec ses opérations

primitives régulières et implicites:ex. un entier avec ses opérateurs arithmétiques valides

une chaîne avec son opérateur de concaténation, …

Attribut complexe

L’attribut complexe permet d’abandonner la forme normale FN1 du modèle relationnel en ajoutant une structure de tuple pour regrouper plusieurs attributs éventuellement de types différents. (struct)

L’attribut complexe a un type (complexe) mais aucune méthode de traitement associée. Cette carence sera cependant contournée par une autre approche.

Page 4: Modèle navigationnel (Mnav)

Page 4

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 7

Lien : simple avec une classe interne ou externe

Lien simple:

Un lien est établi entre un attribut et une classe interne ou externe :

Un lien simple associe une valeur d’un attribut à 1 objet de la classe interne ou externe.

lien interne simple interne

Ce lien peut être vide (rond blanc) ou obligatoirement valué par un oid (rond noir)

Employe: employe_t

nasE : int

nomE : string (varchar)

specialite:

Modèle navigationnel © Module 2 page 8

Lien multiple avec une classe interne ou externe

Lien multiple:

Un lien multiple est établi entre un attribut et une classe interne ou externe :

Un lien multiple pour un attribut y associe 0 ou plusieurs objets de la classe interne ou externe.

nasE : int

nomE : string

lesSpecialites

Employe: employe_t

lien interne multiple

Ce lien peut être vide (rond blanc) ou obligatoirement valué (rond noir)

Page 5: Modèle navigationnel (Mnav)

Page 5

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 9

Attribut complexe: tuple et ensemble/classe externe et interne 

Tuple

Le tuple est une structure logique linéaire formée d’attributs simples ou complexes mais sans interface.

Un attribut complexe définit des valeurs dont l’existence dépend que de l’objet externe qui les héberge. Il est représenté par une structure non nommée et sans interface. Ce n’est pas une classe interne mais uniquement une structure pour y ranger des valeurs.

Un employé a une spécialité définie par 3 attributs

Exemple d’un attribut de type complexe associée à une structure de tuple.

Employe: employe_t

nasE : int

nomE : string

laSpecialite:specPrinc: string

anExp : number

date: Date

L’attribut « laSpecialite » est associé à une structure de tuple (similaire à une struct).

C’est un tuple et non une

classe interne car sans interface et sans nom de classe

représentation graphique

sans interface

Modèle navigationnel © Module 2 page 10

Attribut  associé à un seul objet

Un attribut associé à un seul objet d’une classe est représenté par un lien simple vers une classe interne. 

Dans cet exemple, l’attribut laSpecialite est obligatoirement valué par un objet qui caractérise chaque Employe et est imbriqué dans la classe externe Employe. Cet objet a une interface et une persistance.

Employe: employe_t

nasE : int

nomE : string

laSpecialite:

spec: string

annee : Date

Specialite:specialite_t

Classe interne nommée et dotée d’une interface

Le nom de la classe avec les : , annonce le type de la classenormalement constituée du nom suffixé par _t _t

Ex en O2:

nasE : int

nomE : varchar

laSpecialite: Specialite

Page 6: Modèle navigationnel (Mnav)

Page 6

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 11

Attribut d’ensemble ordonné d’objets (v)

Un attribut d’ensemble ordonné d’objets est rendu par un lien interne multiple concrétisée par une structure de type varray.

Les éléments de l’attribut lesSpecialites sont stockés dans un varray (similaire à un tableau ou un array et noté V). Chaque entrée est indicée et peut-être soit une valeur soit un objet interne. Le varray a des attributs propres qui pourraient être considérés comme des fonctions prédéfinies et non modifiables.

Classe interne de type ensemble rendue par unestructure varray (V)nasE : int

nomE : string

lesSpecialitesv

Employe: employe_t

Modèle navigationnel © Module 2 page 12

Attribut d’ensemble non ordonné d’objets

Un attribut d’ensemble d’objets est rendu par un lien interne multiple vers une classe interne.

lesSpecialites est un ensemble { } d’objets internes non vide. Chaque objet de l’ensemble est associé à l’interface de la classe interne.

nasE : int

nomE : string

lesSpecialites

Classe interne de type ensemble.

Employe: employe_t

Page 7: Modèle navigationnel (Mnav)

Page 7

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 13

Persistance d’un objet 

La notion de persistance a trait à la capacité d’un objet de devenir permanent dès sa création par une application. Certains objets ne sont pas persistants à leur création (objet de travail) tandis que d’autres le sont car ils sont intégrés à leur création dans un containeur d’objets ou dans un autre objet persistant qui leur confère une persistance. Chaque objet persistant est obligatoirement associé à un oid généré par le système.

Implantation de la persistance BD

Un objet est créé en RAM par une application et devient persistant s’il est transféré dans la cache du serveur. En cas, de panne du serveur un objet persistant encore en cache doit survivre grâce aux techniques bien connues des journaux externes du SGBD (Rollback segments de Oracle):

L’écriture d’un objet n’est pas nécessairement réalisée immédiatement pour des raisons de performance mais est toujours accompagné d’une écriture dans un journal interne ou externe qui est à la base du recouvrement (voir la notion de rollback). Ceci garantit la persistance. ‘

Modèle navigationnel © Module 2 page 14

Passage de UML au Relationnel 

Le MR privilégie la notion loqique de table qui utilise la structure  de tuple.

Atelier (noA*, nomA)   FN3; FN4:FN5

Employe (nasE*, nomE, metierE, noA)   FN3; FN4:FN5

Rappel:

Dans le MR, la normalisation est appliquée jusqu’en FN3 (ou mieux en FNBC) pour éviter l’incohérence. Idéalement, il faudrait avoir des relations en FN5 pour éviter certaines et dernières anomalies de mise à jour. Ces dernières anomalies sont cependant rares et leur évitement par un éclatement poussé des relations n’est pas toujours justifié. Important: on énonce qu’un employé a UNseul métier pour justifier la FN3.

Modèle UML: les classes UML sont des concepts logiques apparentés à la notion de type (avec la technologie Oracle).

Atelier:

noA* : int

nomA : string

Employe:

nasE*: int

nomE: string

metierE: string

0..*0..1

Embauche >Conventions:

* == 0..*

1 == 1,1

Page 8: Modèle navigationnel (Mnav)

Page 8

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 15

Passage de l’UML Atelier‐Employe au Mnav 

Lien externe multiple représente le type ensemble (set) pour l’attribut lesEmbaucheset est formé de oids des objets de type employé.

L’association UML est rendue par un lien externe qui utilise une référence pour associer un ou plusieurs objets de la classe Employe. La multiplicité minimale 0 du côté Atelier est représentée par le cercle blanc. La multiplicité minimale de 1 le serait par le rond noir.

Atelier: atelier_t

noA* : int

nomA : string

lesEmbauches:

Employe:employe_t

nasE*: int

nomE: string

metierE: string

Classe externe de type objet

La multiplicité 0..* est explicitement représentée

* lesEmbauches

*

Modèle navigationnel © Module 2 page 16

En l’absence d’un attribut d’association

Atelier: atelier_t

noA* : int

nomA : string

lesEmbauches:

Employe:employe_t

nasE*: int

nomE: string

metierE: string

lesEmbauches est un attribut d’ensemble dont les éléments sont des oids et non des objets. Ces derniers étant rangés dans le containeur de la classe externe Employe.

La spécification de lesEmbauches peut être en principe un ensemble de type set, list, bag, table, …

lesEmbauches est un attribut d’ensemble ayant un type d’ensemble et dont les éléments sont des objets internes ou des oids référant à des objets externes.

Page 9: Modèle navigationnel (Mnav)

Page 9

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 17

Autre représentation du modèle Atelier‐Employe (sans attribut) 

Atelier:atelier_t

noA* : int

nomA : string

lesEmbauches:

Employe: employe_t

nasE*: int

nomE: string

metierE: string

OidEmploye: refrefEmpl

L’attribut lesEmbauches est associé par un lien interne à un ensemble d’oids, chacun référant à un d’objet externe.

Pour simplifier la représentation, cette table d’objets internes peut être enlevée du modèle graphique.

Modèle navigationnel © Module 2 page 18

Traversée du Mnav au moyen du lien simple 

Pour faire des recherches il faut parcourir l’association UML donc exploiter le lien externe simple avec SQL:

1‐ Quels sont les employés qui travaillent dans l’atelier 120?

Le lien externe multiple permet de répondre à ces questions sans avoir à formuler explicitement une jointure. En pseudoSQL:

Sélection de l’atelier 120 fournit l’ensemble des oids dont chacun permet de référer à l’objet de Employé associé. 

Select   {oid de employé}  from Atelier a where a.noA =120

2‐ Quel est l’atelier où travaille l’employé dont le nasE est 50?

Il faut afficher l’objet Atelier dont l’attribut  lesEmbauches renferme l’oid  du nasE50.  

select a.noA from Atelier a 

Where (oid de l’employe de nasE =50) )  IN

(les oids de l’ensemble des employés de Atelier);

Page 10: Modèle navigationnel (Mnav)

Page 10

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 19

Ajout  d’un attribut d’association: classe interne et lien multiple

Ce modèle représente l’embauche à une certaine date d’un employé par un atelier.

** L’attribut lesEmbauches désigne un ensemble d’objets de la classe refEmployedont les obets sont de type REF et dont la définition comprend un attribut d’association: dateEmbauche

Atelier: atelier_t

noA* : int

nomA : string

lesEmbauches:

refEmpl

dateEmbauche

nasE*: int

nomE: string

metierE: string

refEmploye: refNouvel attribut possible

Employe:employe_t

Modèle navigationnel © Module 2 page 20

Renforcement de la 2e multiplicité : 0..1 du côté Atelier?

Lien externe multiple pour représenter le type ensemble (set). Aucun sens de parcours privilégié.

nasE*: int

nomE: string

metierE: string

refAtelier

Employe:

Atelier:

noA* : int

nomA : string

lesEmbauches:

Classe externe de type objet

Boucle interdite:

Pour définir l’objet Employe, il faut se référer à l’objet Atelier dont le type sera incomplet car il réfère par son lien multiple à un ensemble d’objets dont le type est déjà incomplet.

Page 11: Modèle navigationnel (Mnav)

Page 11

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 21

Renforcement de la contrainte 0..1 du côté Atelier

Comment faire?

Par les méthodes :

*- Prévoir la vérification de toutes les contraintes par une méthodeexécutée dans une transaction avec synchronisation et validation des diverses modifications faites sur les données.

Modèle navigationnel © Module 2 page 22

Représentation de Atelier‐Employe sans classe externe

Lien interne de type ensemblepour modéliser l’association 0,* (pointe double).Ce lien sous-tend l’imbrication des objets Employe dans un objet Atelier.

Mnav représente visuellement et directement les données complexes sans exiger la normalisation des structures de 1er niveau.

Caractéristiques de ce modèle: accès direct à un atelier et à ses employés;

Sauf: la multiplicité du côté Atelier : En créant un employé il faut aussi obligatoirement créer au préalable un Atelier : (1..1) du côté Atelier

Classe interne de type objet

La classe UML devient une classe externe ou un type externe avec 3 attributs.

Attribut d’ensemble référant à des d’objets d’une classe interne.

Atelier: atelier_t

noA* : int

nomA : string

lesEmbauches:

nasE: int

nomE: string

metierE: string

Employe :employe_t

modifNomA( )

Page 12: Modèle navigationnel (Mnav)

Page 12

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 23

Représentation multiple pour un modèle

Pour un même modèle UML il peut dont y avoir plusieurs modèles Mnav possibles.

Comment choisir?

Le plus complexe n’est pas nécessairement le pire comme le plus simple le meilleur.

Critère de choix:

Le choix se fera entre plusieurs représentations de la même réalité sur la base de l’efficacité des principales opérations à mettre en œuvre pour effectuer les traitements lourds. L’importance relative des questions est aussi à prendre en compte (mais souvent difficile à estimer). Il faudra souvent attendre de connaître les structures physiques utilisées pour l’implantation du modèle pour faire un choix judicieux!

Modèle navigationnel © Module 2 page 24

Réification : construction d’un objet [informatique] 

Un objet est structuré par l’entremise de son constructeur. Après sa création un objet peut acquérir un oid le rendant persistant.

Quel est le constructeur?Chaque classe externe, interne a un type qui porte le même son nom suffixé par _t :

L’objet :employe := [ 234, ‘Paul’, 34, 85, ...] ∊ classe de type employe_t

Avec Oracle, cet objet est construit avec le constructeur qui porte le nom du type: employe_t ( 234, ‘Paul’, 34, 85, ...)

L’objet construit est rangé dans son extension ou son containeur qui est une table-objet de Oracle et devient alors persistant, acquérant un oid.

L’extension peut être toute autre structure de type ensemble utilisée avec d’autres systèmes: list(), bag(), set(), ….

Page 13: Modèle navigationnel (Mnav)

Page 13

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 25

Résumé des conventions d'écriture pour le Mnav 

La notion de classe externe correspond à une structure de données complexe équivalente à la classe UML. La classe interne est aussi un type ou une structure de données mais imbriquée dans une classe externe. Elle peut représenter une structure d’ensemble ou de tuple selon la nature du lien (multiple ou simple)

Le lien externe est de type REF représente une référence logique sans égard à leur implantation physique. Le lien peut-être simple ou multiple et réfère à des objets.

Les objets d’une classe interne sont dits objet-colonne.

Par convention:

Le nom d'une classe externe commence par une lettre majuscule : Employe

Le nom d'un attribut ou d'une méthode commence par une minuscule: matriculeE. Ce nom n'a pas d'accents, ni autres symboles orthographiques;

Le nom d'une association UML commence par une majuscule : EffectueS;

Modèle navigationnel © Module 2 page 26

Ensemble vide: création et suppression des objets

Attribut lesEmbauches est un lien interne multiple sur des objets internes (sans oid) de Employe (objet-colonne de Oracle) inclus dans la classe Atelier.

La référence non obligatoire suppose que l’ensemble peut être vide, i.e. il peut y a voir un atelier sans employé!

La suppression du dernier employé d’un atelier n’implique pas la disparition de ce dernier!

noA : int

nomA : string

lesEmbauches :

nasE : int

nomE : string

metierE : string

Employe: employe_t

Atelier : atelier_t

Les opérations (méthodes)

Page 14: Modèle navigationnel (Mnav)

Page 14

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 27

Information ajoutée par la référence obligatoire (ou non vide)?

La référence obligatoire impose qu’un atelier à sa création a obligatoirement au moins 1 employé.

La suppression du dernier employé sous-tend la suppression de l’atelier.

** Source d’incohérence si l’atelier n’est pas supprimé avec la suppression du dernier employé.

noA : int

nomA : string

lesEmbauches :

Les opérations

nasE : int

nomE : string

metierE : string

Employe:employe_t

Atelier: atelier_t

Dans cet exemple, le lien interne multiple représente un ensemble d’objets internes

nommé lesEmbauches. En Oracle cet ensemble imbriqué correspond à une sous-table .

Modèle navigationnel © Module 2 page 28

Représentation  (Oracle) TABULAIRE du lien interne multiple

Atelier: noA: string nomA: string

nasE : int nomE: string metierE: string

A20 Atelier B 123 Arthur fraîseur

234 Sylvie tourneur

A30 Atlier C 256 Pierre perceur

456 Serge ponceur

{lesEmbauches} oulesEmbauches: { }

Cette vision de la classe instanciée repose sur la notion de table comme containeur. La table Atelier a un attribut d’ensemble, lesEmbauches tune sous-table (imbriquée) formée avec les attributs typés : nasE, nomE, metierE.

Nested TableAvec 2 collections (sets)

Page 15: Modèle navigationnel (Mnav)

Page 15

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 29

Lien externe : avec le type REF

La navigation entre les classes externes se fait avec un lien défini par un attribut de type REF.

Le lien externe spécifie une référence à un objet  (matérialisée par un oid ou l'équivalent). L’oid n’est pas une adresse physique mais le deviendra lorsque l’objet sera transféré dans la cache du serveur d’objets (swizzling ou mutation de la référence).

Il est possible de contraindre le lien REF pour le limiter à cibler qu’une sorte d'objets (via la REF) et au besoin à être null (attribut scopé avec le SCOPE)

oid + objets

Cache en RAM

Adr_RAM oid

Objets associés à des adresses physiques de la RAM

Espace exécution du SGBD

Modèle navigationnel © Module 2 page 30

Inconvénient du Mnav: partage difficile d’une classe interne

Le partage d’une classe interne avec plusieurs autres classes externes est difficile à

représenter dans le Mnav : partage de Adresse par les classes Atelier et Domicile.

Possibilité d'utiliser une astuce comme un lien fait d'un pointillé ?? Devient rapidement

lourd avec plusieurs partages dans de gros modèles !

Atelier: adresse_t

noA : int

nomA : string

adresseA :

no: int

rue:

Ville:

Adresse:

paysD : string

adresseD:

Domicile:domicile_t

(mais sous-entend un oid pour adresseD??

Or les objets de Adresse n’ont pas de oid!)

Page 16: Modèle navigationnel (Mnav)

Page 16

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 31

Résumé: attributs et liens du Mnav

Un attribut peut être:

• Simple (chaîne de caractères, nombre, …)

• Composé (complexe) avec une structure de tuple [..]

• Une référence (logique et basée sur l’oid : Ref)

• Collection ou un set   (d’objets ou des références)

• Combinaisons des types précédents : TAD (Type Abstrait défini par l’usager)

Lien interne et externe:

Externe (inter): entre deux classes externes (explicite)  incluant un ou des valeurs de Ref. C'est un lien navigationnel. Ex.: Oracle : un attribut de type REF.

Interne (intra): à l'intérieur d'une même classe externe et donnant accès  représentant une structure de tuple;  c'est un lien non‐navigationnel ‐‐ (avec Oracle:  ce lien référence un objet‐colonne, OC,  intégré dans la classe externe;

Modèle navigationnel © Module 2 page 32

Lien simple et multiple (sommaire)

Un lien simple peut être:  

1. Interne: pour associer à un attribut ayant une valeur complexe  ou à un objet d’une classe interne (avec son interface) 

2. Externe: pour associer un objet à un seul objet externe appartenant à une autre classe.

Un lien multiple (sous‐tend l’ensemble*) associe un objet à plusieurs instances d’un objet regroupé dans un ensemble (ordonné ou pas) 

1. Interne multiple pour associer plusieurs objets‐colonnes inclus dans la classe interne. 

2. Externe multiple pour associer plusieurs objets autonomes référés via un ensemble de oid 

*En Oracle, un ensemble est une collection (terme générique pour Oracle!). 

Page 17: Modèle navigationnel (Mnav)

Page 17

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 33

Avantages escomptés du modèle navigationnel (Mnav)

Le passage du DC‐UML vers le modèle objet est plus simple via le Mnav surtout avec les petits modèles UML .

Favorise un choix plus judicieux des liens entre les classes d’objets en prenant en compte les accès anticipés;

Une description plus explicite des associations

La visualisation des chemins par les liens rendant (souvent)  plus facile la formulation des requêtes complexes multi‐classes;

*** Une recherche plus performante des objets de la base

Modèle navigationnel © Module 2 page 34

Inconvénients du modèle navigationnel

Le partage d'un même type par plusieurs classes n'est pas représenté simplement voire adéquatement par le Mnav.

Il demeure possible (mais déconseillé ) de débuter la conception d'une base objet par l'élaboration directe d'un schéma navigationnel, donc sans DC‐UML.   Danger de simplification ! C'est un modèle didactique … qu’il faudra abandonner par la suite! 

Peut être parfois plus difficile de raisonner avec le Mnav complexe que de le faire le modèle relationnel, notamment pour les mises à jour des attributs de type ensemble.

Toutes les contraintes du diagramme de classe UML ne sont pas implémentées implicitement par la structure du Mnav. Il faudra le compléter dans le modèle objet par l’usage des méthodes.

Etape non essentielle ajoutée : passage direct du DC‐UML vers l’objet est  possible sans transiter par le modèle Mnav.

Page 18: Modèle navigationnel (Mnav)

Page 18

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 35

Sommaire des symbolesLien simple

** L’absence de cercle signifie obligatoire

Lien simple obligatoire

Classe C1attribClé

attrib1

struct

Classe C1attribClé

attrib1

Avec les liens interne et externe :

Lien simple pouvant être null (facultatif)

Lien simple obligatoirement valué* (not null)

*Valuation: signifie donner une valeur à un attribut conformément à son type

La valuation de attrib1 donne une valeur représentée par la struct interne ou celle correspondant à un objet de la classe externe.

Modèle navigationnel © Module 2 page 36

Sommaire des symbolesLien multiple

** L’absence de cercle signifie obligatoire

Lien multiple

Classe C1attribCle

attrib1

Classe int.

Classe C1attribCle

attrib1

Classe externe

Avec les liens multiples

interne et externe :

Lien multiple pouvant être null (ensemble pouvant être vide)

Lien multiple obligatoirement valué (ensemble obligatoirement non vide)

1-La valuation de attrib1 donne un ensemble d’objet internes2- dans le 2e cas, l’attribut est valué par un ensemble d’objets externes..

Page 19: Modèle navigationnel (Mnav)

Page 19

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 37

Suite : Sommaire de la représentation graphique (1)

Dans un Mnav, le lien simple est représenté par une flèche simple () et le lien multiple par une flèche a double pointe.

Le lien interne (intra) associe un attribut de structure complexe participant à la définition de la classe hôte et dont les données sont intégrées dans l’objet hôte.

Le choix entre un lien interne ou externe est basé sur des considérations d'exploitation : efficacité et le sens privilégié de la navigation exprimé par la flèche dans le  diagramme de classe UML. 

En bref: le lien externe évite la formulation explicite des jointures par l’application, mais peut rendre les mises à jour et les ajouts plus complexes : les Ref doivent être ajoutées et des contraintes sur les Ref doivent être gérées correctement. 

Le lien Interne facilite la suppression des objets : suppression d'une instance de Chercheur entraîne celle de Adresse (son adresse).

Modèle navigationnel © Module 2 page 38

Cascade de liens dans le modèle navigationnel (Mnav)

Représentation explicite par les liens externes: des structures de données complexes, des hiérarchies et des agrégations;

noA*: int

nomA : string Employe: employe_t

nasE*: string

nomE : string

Les opérations

Le type { } est sous-entendu par le lien externe multiple

refMetier

lesEmbauchesMetier: metier_t

noM*: int

corpoM: int

cotisation: real

Atelier: atelier_t

At Em Me

Création 1 objet 2 3 1

mise à jour 1 objet 2 2 1

Suppression 1 objet 1 2 2

lesEmbauches est le nom d’un ensemble de références (oid)

La difficulté est évaluée au regard de la gestion des liens.

Page 20: Modèle navigationnel (Mnav)

Page 20

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 39

Cascade d’associations UML:   1..* ‐ 1..*  (liens) 

Region:region_tnoR*: int

nomR : string

Ville:ville_tnomV: string1..*1..1

Reunit > (Interface) (Interface)

1..1

Formée >

Arrondis:arrondis_t

nomA: stringpresA: stringpopA: int

(Interface)

1..*L’insertion d’une région ne peut pas se faire sans celle d’au moins une ville laquelle ne peut pas être créée dans la base sans la création d’au moins un arrondissement.

Pour y arriver il faudra retarder la vérification des contraintes de ce modèle géré par le SGBD.

Modèle navigationnel © Module 2 page 40

Mnav avec deux liens externes 

Region: region_t

noR*: int

nomR:string

lesVilles:

Ville:ville_T

nomV*: stringlesArrondis:

La multiplicité 1..1 du côté Region sera renforcée par la méthode d’ajout d’une ville afin de vérifier qu’il y a obligatoirement une région associée à une ville au moins un arrondissement.

Le lien renforce la contrainte qu’une région est obligatoirement associée à au moins une ville.

Arrondis:arrondis_t

nomA: string

presA:string

popA: intTrois classes, cela sous-tend normalement un stockagedes objets dans des tablespaces de Oracle différents, ce qui peut alourdir l’exploitation.

R V A

création 2 2 1

mise à jour 2 3 2

suppression 1 3 2AjoutV

delaRegion

?

Page 21: Modèle navigationnel (Mnav)

Page 21

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 41

Pourquoi ne pas définir aussi un lien inverse?

Ce 2e lien de Ville vers Region (delaRegion) serait pratiquement inutile s’il n’est pas justifié par le parcours privilégié du lien.

Exemple avec un lien inverse ajouté:

Ajout du lien delaRegion dans Ville:

- créer un 1er lien de Region vers Ville avec l’insertion d’une REF.

Region: region_t

noR*: int

nomR:string

lesVilles:

Ville:ville_T

nomV: stringlesArrondis:

AjoutV

delaRegion:

Le parcours préférentiel d’une association détermine la nature du lien à privilégier.

?Select r.nomR

From Region r

Where (oid de la ville dont le nomV = ) IN lesVilles

Modèle navigationnel © Module 2 page 42

Mnav avec deux liens : externe et interne

L'attribut lesVilles est une collection ou set() de oids (ref) sur les objets de la classe externe Ville.

Avec un lien interne entre Ville et Arrondis. Cela sous-tend que les objets de Arrondis sont stockés dans les pages de l’objet de Ville associé.

R V

création 2 3

Mise à jour 2 2

suppression 2 2

Region: region_t

noR* : int

nomR : string

lesVilles:

Ville: ville_tnomV : string lesArrondis

Arrondis:nomA: stringpresA: stringpopA: int

En découle une plus grande performance dans l’accès

aux arrondissements.

Page 22: Modèle navigationnel (Mnav)

Page 22

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 43

Mnav avec deux liens et imbrication des classes

Le lien est interne et multiple pointant sur une classe interne ce qui sous-tend un ensemble.

Par contre ce Mnav ne permet pas d’avoir une ville sans qu’elle soit associée à un une région. La contrainte 1..1 est renforcée par ce modèle navigationnel.La suppression d'une instance de Region entraîne aussi celle de ses villes et arrondissements.

Impact au niveau de la performance?

Quels sont les arrondissements de la région R1?

noR*: string

nomR: string

lesVilles:

Region: region_t

Ville:ville_t

nomV* : int

lesArrondis:

Arrondis:

nomA*:string

presA: string

popA: int

R V A

création 3 2 1

mise à jour 3 2 1

suppression 1 2 2

lecture 1 2 3

Modèle navigationnel © Module 2 page 44

Modèle UML CSP

La suppression d'un objet Chercheur nécessairement la suppression de sa subvention entraîne (si elle existe) mais pas des projets qu’elle finance.

Chercheur:

noC*: string

nomC: string

Subvention :

noS : int

nomPgm : string

Projet : projet_t

noP* : int

montant : real

organisme : string

0..*1..1

1..*

0..1

Gere >

Finance >

Page 23: Modèle navigationnel (Mnav)

Page 23

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 45

Combinaison de lien interne simple et externe multiple

Le dernier projet ne pourrait-être supprimé sans faire disparaître la subvention obtenue; sinon il y a violation de la contrainte sur le lien externe.

Si une subvention est supprimée, le chercheur ne l’est pas de facto. Idem pour Projet

L’ajout d’un chercheur peut se faire sans subvention ni projet.

Si le chercheur a une subvention, celle-ci est obligatoirement associée à 1 ou plusieurs projets.

C P

création 2 1

Mise à jour 2 1

suppression 1 2

Chercheur:

noC*: string

nomC: string

lesSubventions:

Subvention :

noS : int

nomPgm : string

lesProjets

Projet:

noP* : int

montant : real

organisme : string

Modèle navigationnel © Module 2 page 46

Mnav avec deux liens externes et multiples

Avec ce modèle il devient plus difficile d’obtenir le chercheur travaillant sur un projet subventionné particulier. La suppression du dernier projet entraîne celle de la subventionmais pas celle du chercheur.

Chercheur:

noC*: string

nomC: string

lesSubventions:

Subvention :

noS : int

nomPgm : string

lesProjets

Projet:

noP* : int

montant : real

organisme : string

Page 24: Modèle navigationnel (Mnav)

Page 24

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 47

Les interfaces dans un Mnav 

Les classes externe et interne peuvent avoir leur propre interface.

Avec la technologie Oracle:

• L’interface d’une classe externe permet le traitement des objets de table (OT).

• L’interface d’une classe interne permet le traitement des objets imbriqués (objets-colonnes (OC)).

Dans les deux cas: objets à part entière: interface et persistance.

Modèle navigationnel © Module 2 page 48

Les interfaces dans un Mnav 

PC:

noSerie*: intadrIP: stringcpu: string

installerPC(…)

brancherPC(…)

Logiciel:

nomL* : string

versionL: int

editeurL: string

lesInstallations:

Installation:datateI: string

refPosteI:

installerLog(…)

noD*: int

nomD: string

adresseD:

lesLogiciels:

budget : real

Departement:

creerDep

achatLogiciel(…)

Adresse:rue : string

ville : string

Dans un modèle les signatures sont identifiéesglobalement comme une interface: avec Oracle, l’interface n‘est pas nommée.

L’interface est factorisée au regard des instances et rangée dans le dictionnaire de la base, lui-même structuré en objets.

Page 25: Modèle navigationnel (Mnav)

Page 25

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 49

Accès aux objets ou aux données ?

En phase d’exploitation, l’application peut faire une recherche et obtenir soit un objet soit les valeurs de l’objet en provenance de la base de données.

Cas 1: La recherche renvoie à l’application des objets que celle-ci doit stocker dans une structure d’objet préalablement définie par l’application.

Ces objets peuvent ensuite être traités par les méthodes propres à l’application par le programme JAVA, C++, …

Cas 2: La recherche renvoie que les valeurs des objets trouvés par la SGBD. Ces valeurs sont stockées dans des variables typées locales à l’application.

Le traitement se poursuit et se fait par l’application.

Pour obtenir que ces valeurs avec une BDOO de Oracle: il faut souvent aplatir les tables contenant les objets-colonnes.

C’est le unnesting des objets qui se fait par le SGBD sur le serveur avec SQL.

Modèle navigationnel © Module 2 page 50

Classe interne  et UnNesting (sous‐table)

Une classe interne avec un lien multiple incident correspond à une sous-table dans une vision tabulaire des données.

Pour avoir accès aux données des objets de la classe interne avec SQL, donc aux données de la sous-table avec celles de l’objet externe associé , il faut faire une opération spéciale de unNesting.Ce traitement ramène les objets-colonnes (les objets de la classe interne) au 1er niveau, exploitables directement par SQL (et les curseurs de PL/SQL) comme des valeurs (et non comme des objets).

lesEmpl

Depart: noD: int

nomD: varchar

Empl:

noE : int

nomE: varchar

lesEmpl.noE : int

lesEmpl.nomE: varchar

Depart: noD: int

nomD: varcharUnnestDepart noD nomD lesEmpl.noE lesEmpl.nomE

Select d.noD, e.noE

From Departement d, Table(d.lesEmpl) e

Where d.Empl.noE > 135;Select lesEmpl

From Departement d

Where d.lesEmpl.noE >135;

Page 26: Modèle navigationnel (Mnav)

Page 26

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 51

Représentation tabulaire d’une classe externe et interne

Avec la technologie objet de Oracle, le container ou l’extension des objets est la table laquelle doit pouvoir stocker des valeurs et des objets en cohabitation.

Une classe interne est rendue par une table imbriquée peu importe le niveau et doit être aplatie

(Unnested) suivi d’une jointure pour permettre l’accès aux valeurs avec SQL. Les valeurs de la classe

externe est rendue par une table de base  du genre relationnelle.

A lesBC D

a1 c1 d1 c3 d2

a2 c4 d5

A B.C B.Da1 c1 d1

a1 c3 d2

a2 c4 d5

a1 c4 d4

T1: T1*:

Impossible : Insert into T1 ( A, B.C, B.D) values (a1, c4, d4); Mais …

Insert into T1* ( A, B.C, B.D) values (a1, c4, d4); si et seulement si la table préalablement aplatie

Select * from T1; -- fournit les valeurs de A et les objets-colonnes

Mais : Select A, B from T1 ne peut pas être calculé! Donc pas de réponse!

+

Modèle navigationnel © Module 2 page 52

Unnesting d'une table (classe interne) en Oracle :  la fonction Table() 

SQL‐DML manipule seulement des valeurs de tables de premier niveau, car SQL implémente les opérateurs de l’algèbre relationnelle.  

SQL doit donc exploiter des tables aplaties pour obtenir des valeurs!

Une table imbriquée est aplatie (Unnested)  par la fonction Table() qui implique l’usge d’ une clé interne entre la table et la sous‐table ramenée au 1er niveau!  

On peut aussi interpréter le unnesting comme une pseudo «désencapsulation»de l’ensemble imbriqué* pour amener au 1er niveau les attributs et les valeurs des objets de l’ensemble.

L’accès et l’affichage SEULEMENT des valeurs d’attribut des objets‐colonnes ne

nécessitent pas la jointure: seule la Table() de l’attribut d’ensemble est «unnesté». 

* L’attribut associé à un lien multiple en est un d’ensemble contenant des objets imbriqués

Page 27: Modèle navigationnel (Mnav)

Page 27

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 53

Représentation tabulaire du Mnav et un lien interne

T1

A : int

lesB

B

c : int

d: int

A: lesB:lesB_tC D

a1 c1 d1 c3 d2

a2 c4 d5

T1

Modèle navigationnel © Module 2 page 54

Unnesting et le Stockage physique d’une table imbriquée

A lesB: lesB_tC D

a1 c1 d1 c3 d2

a2 c4 d5

A cle‐Interne

a1 p0001

a2 p0002

C D cle‐interme

c1 d1 p0001

c3 d2 p0001

c4 d5 p0002

T1a

T1

T1b

Jointure implicite: T1 := T1a |x| T1b

Select x.A , w.C, w.D

From T1 x , Table (x.lesB) w;

Pour accéder à des valeurs particulières de l’ensemble imbriqué seulement:

Select w.C

From Table (lesB) w ;

Pour afficher les valeurs de tous les attributs, il faut recourir au unnesting avec la fonction Table() suivi d’une jointure entre la table parent et la sous-table pour obtenir une table temporaire aplatie:

Stockage d’une table imbriquée:

Page 28: Modèle navigationnel (Mnav)

Page 28

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 55

Le Unnesting et la classe interne

Pour chaque modèle navigationnel ayant une table interne, cela suppose au niveau de l’implantation et de l’exploitation une opération de Unnesting pour avoir accès aux valeurs.

Select

Select x.A, w.C

From T1 x , Table (x.lesB) w;

Select w.D /* lecture que des valeurs de la sous-table */

From Table (lesB) w ;

Select x.A /* unnesting non necessaire pour afficher que cette valeur A */

From T1 x;

Select * from lesB -- invalide car lesB n’a pas de containeur associé

Modèle navigationnel © Module 2 page 56

Résumé pour aide‐mémoire

Le passage du DC-UML au Mnav peut se faire de diverses façons. Le critère de choix du modèle cible est que le modèle navigationnel obtenu se conforme le plus possible :

1- avec la sémantique du DC-UML et de ses contraintes.

2- avec l’exploitation des données

Plus il y aura de contraintes renforcées par la structure et la sémantique du modèle Mnav, plus ce dernier sera à privilégier.

Les contraintes qui ne sont pas renforcées par le Mnav, le seront par une méthode.

Passage du diagramme de classe UML au modèle navigationnel (Mnav)

Page 29: Modèle navigationnel (Mnav)

Page 29

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 57

Du DC‐UML vers le navigationnel:  règles de passage  

Transformation d'une classe UML :

• Chaque classe du DC‐UML, sauf les classes‐associations, est transformée en une 

classe externe du Mnav. 

• Chaque attribut composé de type tuple UML devient une classe interne avec un lien interne simple vers un seul objet. Il peut aussi être transformé en un attribut complexe sans être un objet.

• Chaque attribut d’ensemble est rendu par un lien interne multiple ou un lien externe multiple (avec Ref)  selon l’existence autonome ou pas des objets au regard de la suppression. Le choix estaussi fonction de la performance d’accès recherchée.

Identifiant  facultatif pour la classe du Mnav :

• Chaque classe du Mnav (sauf les sous‐classes dans l’arbre d’héritage) et la classe d'association,  peut avoir un identifiant de valeur. Souvent pratique pour la recherche, mais non obligatoire.

• Si aucun attribut ne convient pas comme clé, on peut ajouter une clé, si possible  significative. Ce n’est cependant pas une exigence du modèle.

Transformation des associations :

Plusieurs possibilités selon le genre d'association : 1‐1,  1‐*  et  *‐*…

La contrainte d’une association étant spécifiée de préférence par le DDL‐SQL du SGBD

utilisé. Autrement, elle sera renforcée par une méthode.

Modèle navigationnel © Module 2 page 58

Transformation de l'association 0..1 – 1..1

1ère solution : 

L'attribut de type Ref peut être nul dans C2. L'accès privilégié est par C2. 

C1

as1op1

C2

as2op2Asso

0..1 1,1

En lisant l'attribut ar2 de C2 (1 ref ) il y a un accès direct à l'instance correspondante dans C1. Le ar2 est de type REF et peut être null.

C2

as2

ar2

C1

as1

Toutes les multiplicités de la classe UML ne sont pas représentées par ce Mnav!

< A

as : attribut simplear: attribut de type REFop: interface 

Page 30: Modèle navigationnel (Mnav)

Page 30

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 59

2ème solution avec le parcours inverse : accès via C1 et accès à C2 via l'attribut de référence ar1 qui ne peut pas être nul.

(Suite)  Transformation des associations:  0..1 – 1..1

Le sens de la navigation est indiqué dans le DC-UML suggérant la transformation appropriée.

Si le sens de la navigation est absent dans l'association : on peut assumer alors que les 2 sens sont équiprobables

C1

as1op1

C2

as2op2A >

0..1 1..1

C2as2

C1

as1

ar1

La multiplicité du côté de C1 n’est pas représentée !

Modèle navigationnel © Module 2 page 60

(suite) Transformation des associations UML :   0..1 – 1..1

3e solution pour les 2 sens de parcours: 2 liens simples (aucun sens privilégié)

ar1 de C1 est du type REF monovalué non null qui réfère à C2 (donc aux objets de la classe C2).

ar2 : est un attribut REF qui réfère à un objet de C1 et qui peut être null.• La suppression de C2 sous-tend 1 mise à jour de ar1.

• La suppression de C1 est suivie d’une mise à jour de ar2Ce Mnav exprime le renforcement des 2 contraintes par le modèle sans égard au sens privilégié du parcours de l’association. Il faut recourir cependant au shadowing ou type incomplet pour définir ce modèle.

C2as2

ar2

C1as1

ar1

Page 31: Modèle navigationnel (Mnav)

Page 31

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 61

4e solution (dite universelle): utilisation d'une 3e classe CA avec 2 liensexternes. Toutes les multiplicités sont renforcées par le modèle.

(suite) Transformation des associations:  0..1 – 1..1

Évolution du modèle:Le modèle peut évoluer en intégrant un attribut pour la classe d’association sans pénaliser l'interrogation et la manipulation de la base d’objets.

C2as2*

CAar2

ar1

C1as1*

La suppression de C2 entraîne celle de C1 qui lui serait associé.

Modèle navigationnel © Module 2 page 62

Interrogation avec SQL: cas lien simple 

Stages étudiants (UML) :

Etudiant(e):matricule* : string

nom : string

Stage:noS* : int

themeS: string

respS : string

Effectue >0..1 1..1

Solution avec une REF simple: Etudiant(e):

matricule* : string

nom : string

refStage

Stage:noS* : int

themeS: string

respS : string

Un lien peut être parcouru grâce à la référence et via la notation pointée.

Page 32: Modèle navigationnel (Mnav)

Page 32

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 63

Quelques interrogations du modèle Mnav (via le lien simple)

1‐ Quels sont les étudiants  (matricule)  sans stage?

Aucun car pour être dans la base il faut être associé à un stage.

2‐ Quels sont les stages  disponibles?

Select s.noSFrom Stage   s

‐ (minus)

Select e.refStage.noSFrom Etudiant e[ Where e.refStage is not null ]

Notez le parcours de l’association par la notation pointée.

Etudiant(e):matricule* : string

nom : string

refStage

Stage:noS* : int

themeS: string

respS : string

Modèle navigationnel © Module 2 page 64

(Suite) interrogation avec SQL 

3‐ Quels sont les thèmes des stages choisis?

Select  e.refStage.themeS

From  Etudiant e ;

4‐ Quel est le matricule des étudiants et le numéro de stage choisi  dont le thème porte sur l’analyse?

Select e.matricule, e.refStage.noS

From Etudiant e

Where e.refStage.themeS =  "analyse";

Page 33: Modèle navigationnel (Mnav)

Page 33

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 65

Association de multiplicités  0..*  et  1..1

1ère solution : un lien multiple. La multiplicité minimale 0 figure à la source du lien ar2 de C2. Le parcours privilégié est pris en compte.

C1

as1*op1

C2

as2*op2

< A0..* 1..1

(enfants) (parent)

L'accès par C2 est privilégié (<). La suppression d'un objet C2 doit entraîner s’il y a lieu les objets C1 associés (contrainte 1..1 du côté C2). La suppression de C1 ?

C2C1as2*ar2

as1*(<)

c1 c2

création 2 1

Mise à jour 1 2

suppression 2 2

recherche 1 1

as : attribut simplear: attribut de type REFop: action d’interface 

op1 op2

Modèle navigationnel © Module 2 page 66

Association   0..* ‐‐ 1..1   (suite)

2e solution *** : un lien monovalué non nul vers le parent C2

Chaque instance de C1 est liée à une instance de C2 par la référence ar1 obligatoire.

La suppression de C1 se limite à cette opération.

La suppression de C2 doit être bloquée si elle est référée par un objet de C1.

La ref ar1 doit avoir obligatoirement une référence valide.

La suppression de C2 devrait donc éventuellement entraîner aussi celle de C1 qui s'y réfère et cela au cours d’une même transaction.

C2as2*

C1as1*

ar1

c1 c2

création 2 1

Mise à jour 2 1

suppression 1 2

recherche 1 1

Page 34: Modèle navigationnel (Mnav)

Page 34

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 67

Interrogation avec le modèle de la solution no 1 

Quels sont les objets C1 associés à un objet C2 dont as2 = 5 ?

Select s.as1.*

From C1 s

Where s.ar1.as2 = 5

La variable objet associée à C1 , s est obligatoire

Le parcours avec le lien externe simple est fait grâce avec la notation pointée.

Modèle navigationnel © Module 2 page 68

L’ajout d’un objet C2 ne présume de lacréation d’un objet C1.En supprimant un objet C2, les objets C1. associés sont aussi supprimés.

L’ajout d’un objet de C1 suppose l’existence d’un objet hôte C2.

Association  (C1)  0..*   ‐ 1..1  (C2) avec un lien interne multiple

Le lien interne multiple pour ar2 sous-tend un ensemble formé avec des objets-colonnes de type C1 imbriqués. La réalisation physique en Oracle prend la forme d’une sous-table d’objets imbriqués. ** L'accès est privilégié par C2 pour trouver les C1. La suppression de C1 n’entraîne pas celle de C2, la classe hôte.

C2as2

ar2

(ou lesar2)

C1

as1

Page 35: Modèle navigationnel (Mnav)

Page 35

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 69

Attribut d’ensemble sous‐tend la notion de oid

La notion d’ensemble pour l’attribut ar2:

En raison du lien multiple, le ar2 est un ensemble de oids se référant à autant

d’objets de la classe CA. L’implantation physique de cet ensemble dépend du

SGBD. En Oracle, cet ensemble prendra la forme d’une sous-table imbriquée de

oids par exemple. Avec d’autres, cela peut-être une liste, un bag,…

Modèle navigationnel © Module 2 page 70

Exemple avec une association: (C) 1..* ‐ 1..1 (P)

Exemple : Cours‐Prof

Cours:

noC* : int

titreC :string

nbCred : int

Prof:

noP*:int

nomP :

gradeP:int

Enseigne 1..11..*

Avec Oracle, ce Mnav est inacceptable en raison de l’impossibilité de référer à un type incomplet via un lien multiple

Prof:noP* : int

nomP : string

gradeP : int

lesCours

Cours:noC* : int

titreC : string

nbCred : int

refProf

Page 36: Modèle navigationnel (Mnav)

Page 36

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 71

Mnav avec (C) 1..* ‐ 1..1 (P) :  lien multiple

Prof:noP* : int

nomP : string

gradeP : int

lesCours

Cours:noC* : int

titreC : string

nbCred : int

Pour un professeur donné, il sera facile d’obtenir tous les cours dont il est responsable.

Prof:noP* : int

nomP : string

gradeP : int

Cours:noC* : int

titreC : string

nbCred : int

refProf

1- Avec un lien externemultiple:

2- Avec un lien externe simple:

Modèle navigationnel © Module 2 page 72

Quelles sont les contraintes associées à l'ajout et à la suppression d'un cours / prof?

Avec le Mnav 1:

À l’ajout d’un cours:

Le cours  ajouté doit être associé à un prof : pas renforcé dans le Mnav 1

À la suppression d’un cours:

Le cours est supprimé suivi d’une suppression dans lesCours.

À l’ajout et d’un professeur:

Ajout d’un prof implique l’ajout d’un ou plusieurs cours (contrainte de multiplicité). 

Suppression:  ‐ suppression de tous les cours enseignés par ce prof.

et     ‐ suppression du prof.

Ces contraintes devront être implémentées dans une méthode de suppression qui prendra en charge la vérification de ces contraintes dans une même transaction.

Page 37: Modèle navigationnel (Mnav)

Page 37

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 73

CoursnoC* : int

titreC: string

nbCred : int

Etudiantmatricule:*

nom:string

Inscrit 1..*0..*

Association (C) 0..* ‐ 1..*  (E) sans attribut d’association

Avec Oracle, la circularité des liens multiples interdit la définition des types lesCours et lesEtudiants. Donc le modèle ci-dessus doit être abandonné!

Etudiant:Cours: cours_tmatricule* : int

nom : string

lesCours

noC* :int

titreC : string

nbCred : int

lesEtudiants

La définition de 2 liens circulaires ne peut pas être faite si la classe cible renferme aussi une définition multiple inverse (voir type incomplet).

Solution 1:

Modèle navigationnel © Module 2 page 74

CoursnoC* : int

titreC: string

nbCred : int

Etudiantmatricule:*

nom:string

Inscrit 1..*0..*

Association (C) 0..* ‐ 1..* (E) sans attributs d’association

Solution 2: Avec préférence de parcours: 1 liens multiple avec un nouvel attribut de type ensemble de REF .

Etudiant:Cours: cours_tmatricule* : int

nom : string

noC* :int

titreC : string

nbCred : int

lesEtudiants

>

Quels sont les matricules d’étudiant inscrits au cours 124?

La sélection du cours identifie les références les étudiants inscrits via le lien externe multiple.** Avec le lien multiple: l’attribut a le type d’un ensemble (Table of) de références vers les type etudiant_t

Page 38: Modèle navigationnel (Mnav)

Page 38

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 75

Afficher les cours suivis par un étudiant

Select c. noC

From Cours c

Where (select ref(e) from Etudiant e where e.matricule=123) IN

(select e.* from table(lesEtudiants) e );

NOC

50

n.b. Le 2e select fournit que les oids de l’ensemble lesEtudiants; il n’est nécessaire de faire une jointure et le unnesting car la projection implique que les oids.

Les oids de l’ensemble lesEtudiants

Modèle navigationnel © Module 2 page 76

Quelques interrogations sur ce Mnav (2)

Select *

From Cours c

Where c.lesEtudiants is not empty; -- prédicat d’ensemble

NOC TITREC NBCRED LESETUDIANTS

50 Java 3 LESETUDIANTS_T(0000220208E938BD8BE15C46F3A8544ADB258D6A9E19FF34467AEE448EAF2B2D401B8701)

Select c.noC

From Cours c

Where c.lesEtudiants is not empty ; NOC50

Page 39: Modèle navigationnel (Mnav)

Page 39

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 77

Définition de cette structure  en objet Oracle

Demo pour l’association    0..* ‐ 1..*

Create type etudiant_t as object (matricule varchar(10), nom varchar(50))

/

*** le lien multiple externe est spécifié comme un ensemble de références de type etudiant_t

Create type lesEtudiants_t as table of REF etudiant_t ‐‐ as SET OF  refétudiant_t

/

Create type cours_t as object ( noC int, titreC varchar(50), nbCred int, lesEtudiants lesEtudiants_t)

/

Create table Etudiant of  etudiant_t;

Create table Cours of cours_t Nested table lesEtudiants Store as Table_lesEtudiants ;

Modèle navigationnel © Module 2 page 78

Suite …Les objets:

Insert into Etudiant values (etudiant_t(‘123’, ‘Luce’));

Insert into Etudiant values (etudiant_t(‘456’, ‘Jacques’));

Insert into Cours values  cours_t(50, 'Java', 3, (lesEtudiants_t(

(select ref(e)  from Etudiant e Where e.matricule = ‘123')

)

));

SQL> select lesEtudiants from Cours;  

LESETUDIANTS

LESETUDIANTS_T(0000220208E938BD8BE15C46F3A8544ADB258D6A9E19FF34467AEE448EAF2B2C4D401B8701)

***************************************************

Select c.noC, c.lesEtudiants from Cours c;  

NOC LESETUDIANTS

50 LESETUDIANTS_T(0000220208E938BD8BE15C46F3A8544ADB258D6A9E19FF34467AEE448EAF2B2C4D401B8701

Page 40: Modèle navigationnel (Mnav)

Page 40

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 79

Association: (C)  0..*‐ 1..*  (E) Avec  au moins un attribut à la classe‐association

Solution 3 : 2 liens simples imposés par la présence d’un attribut d’association

Recherche aussi possible si la classe-association a aussi les clés des classes externes concernées..

La classe CA, et les 2 liens s'imposent si l'association Inscrit a des attributs.

Etudiant: matricule* : string

nom : string

Cours: noC* :int

titreC : string

nbCred : int

Inscription: refEtudiant

refCours

dateInsc : DateAttribut de l’association

Modèle navigationnel © Module 2 page 80

Recherche avec la classe d’association (avec notation pointée et lien simple)

Quels sont les matricules étudiants inscrits au cours 134FT en 2012?

Select In.refEtudiant.matricule

From Inscription In

Where In.refCours.noC = ‘134FT’ and In.dateInsc = ‘2012’;

Quels sont les cours suivis par l’étudiante Elise?

Select I.refEtudiant.noC

From Inscription I

Where I.reEtudiant.nom = ‘Elise’;

Quels sont les cours suivis par chaque étudiant inscrit dans la BD?

Select I.refCours.*

From Inscription I

Page 41: Modèle navigationnel (Mnav)

Page 41

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 81

Recherche avec l’attribut d’ensemble

Quels sont les matricules étudiants inscrits à aucun cours?

(Select e.matricule

From Etudiant e)

( Select Ins.refEtudiant.matricule

from Inscription Ins)

`

Modèle navigationnel © Module 2 page 82

Est-ce que ce Mnav est spécifiable en objet?

Usine: usine_t

noU* : int

nomU : varchar

lesProduits

Produit: produit_t

noP* : int

leDepot

VilleDepot:villeDepot_t

nomV *:varchar

popV : int

maireV : varchar

La définition du lien multiple est possible dans ce modèle car les liens ne forment pas une boucle avec un lien multiple.

Est-il possible de supprimer un produit sans supprimer aucun autre objet?

Page 42: Modèle navigationnel (Mnav)

Page 42

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 83

Association 0..* ‐ 0..* avec un attribut pour l’association

Solution 1 (universelle) : une 3e classe avec le nom de l'association est formée avec les attributs de l'association, deux liens monovalués vers les classes participantes. Les multiplicités ne sont pas renforcées par le Mnav.

Le CA12 peut avoir un identifiant composé de as1 et as2 représentés dans le CA12.

Propriété de la classe association

C1

as1*C2

as2*

0..* 0..*

CA12

as3

C2:

as2*C1:

as1* CA12:as3

ar3

ar4

Un objet de C2 (:C2) non associé à un objet de C1 n’aura pas d’objet d’association du type CA12.

1..1

Modèle navigationnel © Module 2 page 84

Recherche avec une classe d’association

Quels sont les C1 associés à une valeur clé k2 de C2?

1- recherche dans CA12

Select o.ar3.*, o.as3

From CA12 o

Where o.ar4.as2 = k2

C2:

as2*C1:

as1* CA12:as3

ar3

ar4

Quels sont les C1 non associés à un objet C2?

2- Les C1 moins les CA12:

Select x.* From C1

-- (moins)

Select o.ar3.*

From CA12 o

Where o.ar3 is not null;

Page 43: Modèle navigationnel (Mnav)

Page 43

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 85

Association 0..* ‐ 0..* avec  un attribut (suite)

Solution 2: une classe interne avec un lien interne multiple et un lien externe simple.

La suppression d'une instance de C1 sous-tend la suppression de l'instance de CA12 associée.

Que donnerait: Select o.* from CA12 o?Un ensemble d’objets-colonnes CA12 exploitables en PL/SQL avec un curseur!

as2*

ar2

C1:as1*

CA12:as12

ar4 :

C2:

Modèle navigationnel © Module 2 page 86

Exemple : Association UML  0..* ‐ 0..* avec attribut d’association

Depart

codeD*: int

nomD:string

Logiciel

codeLog*:int

nomLog:stringAchat

dateAchat:

0..*0..*

Les achats de logiciels distincts faits par un département sont représentés par la classe interne dont les éléments ont la structure achat_t . La suppression d’un logiciel fait disparaître toute l’information au sujet de son achat.

Logiciel:

codeLog* : int

nomLog : varchar

lesAchats

Depart:depart_t

codeD*: int

nomD: varchar

Achat :achat_tdateAchat : DaterefDep

1..1

Page 44: Modèle navigationnel (Mnav)

Page 44

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 87

Création de la base objet

Create type depart_t as object (codeD int, nomD varchar(50))

/Create type achat_t as object ( dateAchat Date, refDep REF depart_t)

/create type lesAchats_ as table of achat_t

/Create type logiciel_t as object (codeLog int, nomLog varchar(50), lesAchatslesAchats_t)

/Create table logiciel of logiciel_t nested table lesAchats store as Table_lesAchats;

Create table Depart of depart_t;

1* insert into Logiciel values(logiciel_t(100,'youpi', lesAchats_t(achat_t(sysdate,null))))

Modèle navigationnel © Module 2 page 88

Interrogation de la classe externe:  Logiciel

Important

Il est possible d’interroger ce modèle notamment les classes qui ont un containeur d’objets en propre (table).

Ainsi, il est possible d’interroger la table-objet Logiciel mais pas directement la classe interne qui correspond à des objets-colonnes imbriqués.

Select * from lesAchatsERROR at line 1:

ORA-00942: Table ou vue inexistante

Select lesAchats -- fournit les objets imbriqués.

from Logiciel

Page 45: Modèle navigationnel (Mnav)

Page 45

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 89

Affichage des objets de la classe interne

CODELOG NOMLOG LESACHATS(DATEACHAT, REFDEP)

100 youpi LESACHATS_T(ACHAT_T('14-09-16', NULL))

Select * from Logiciel -- fournit tous les objets y compris les imbriqués.

Affichage des données de la classe interne avec Unnesting:

Select L.codeLog, v.dateAchat

from Logiciel L, Table(L.lesachats) v

CODELOG DATEACHAT

1 1799

Modèle navigationnel © Module 2 page 90

Fonction REF()

Une fonction essentielle pour établir le lien externe et permettre la navigation associative  avec SQL : REF(x)

où x est un objet et la fonction fournit l’oid de cet objet.

*** ne pas confondre la fonction REF() et le type REF qui est le type oid

L’association entre deux objets de classes différentes A et B est établie avec la référence soit l’oid. 

Page 46: Modèle navigationnel (Mnav)

Page 46

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 91

Fonction REF(): initialisation de l’attribut de type ref

Créer un objet A dont la valeur  x = 15  avec une association avec l’objet B dont c=5 .

x* : int

w : 

Insertion des objets associés:  

Insert into B values (b_t( 5 , 10 ));

Insert into A values (a_t ( 15 , (select REF(b) from B  b where b.c =5)));

* Lors du «parsing» du DML, il y a évaluation en priorité les expressions entre parenthèses.

A: B:c : int

d: int

Modèle navigationnel © Module 2 page 92

Exemple comportant plusieurs classes navigationnelles

Modélisation des randonnées effectuées par des personnes qui  visitent des lieux touristiques situés dans diverses régions.

Page 47: Modèle navigationnel (Mnav)

Page 47

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 93

Exemple d'une classe d'association participant à une autre association (solution universelle)

Rando:

noR* : intPersonne:

nasP*: int0.. * 0…*

RandoPerso:

lieuDepart:

dateDepart:

LieuTourist

lieuT*:string

regionT:

RL:

dateVisite:

prix: :real

1..*0..*

UML

Rando

noR*:intPersonne

nasP*: int

RandoPerso:

lieuDepart:

dateDepart:

refRando

refPersonne

LieuTourist:

lieuT: string

regionT: charRL:

dateVisite: Date

prix: real

refLieuTourist

refRandoPerso

Mnav

Tant que les classes Mnav sont concrétisées par des classes d'objets dotés d’un oid, la clé primaire n'est pas essentielle, mais utile pour la recherche des objets.

Les liens sont tous simples.

Ils sont traversés avec la notation pointée.

1..1

1..1

Modèle navigationnel © Module 2 page 94

Quelques interrogations avec parcours par référence ?

Dans le choix de la transformation, il ne faut pas perdre de vue l’exploitation subséquente du modèle. Cela peut justifier la classe d’association.

Voici  quelques  clauses SQL pour interroger et mettre à jour cette base.

Quels sont les régions  de départ pour les randos effectués par le randonneur dont le nasP est 3456?

Select   rp.refRando.noR

From  RandoPerso rp

Where rp.refPersonne.nasP = 3456;

Quels sont les lieux touristiques visités par le randonneur dont le nasP est 3456?

Select   t.refLieuTourist.lieuT

From   RL  t

Where t.refRandoPerso.refPersonne.nasP = 3456; ‐‐ double indirection

Page 48: Modèle navigationnel (Mnav)

Page 48

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 95

Mise à jour du modèle RANDO avec les références

Le randonneur 3456 qui  a quitté le 15‐09‐2010 n’a pas parcouru la région 5 mais la région 6. Une mise à jour s’impose.

Update RandoPerso rp set rp.refRando =

(select  Ref(r) From Rando r  Where r.noR = 6)

Where rp.dateDepart = to_date(2010‐09‐15 , ‘YYYY‐MM‐DD’) 

and rp.refPersonne.nasP = 3456 

and rp.refRando.noR = 5 ;

Remarque:

Dans ce Mnav, une randonnée d’une personne ne peut pas être ajoutée s’il n’y a pas aussi la visite d’un lieu touristique. Cela est imposé par la contrainte de multiplicité. Le Mnav ne renforce pas cette contrainte! 

Modèle navigationnel © Module 2 page 96

Pour l'association Modèle navigationnel

1..1 – 1..1 Un lien simple obligatoire

1..1 – 0..*(sans préférence de navigation) Un lien simple de enfant vers le parent

0..* - 1..* sans attributs 2 liens simples

0..* - 1..* avec attributs 2 liens simples + CA

Les contraintes non explicitées et renforcées par le Mnav le seront par les méthodes.

Les choix  à privilégier pour les associations (Best  Practices)

Page 49: Modèle navigationnel (Mnav)

Page 49

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 97

Association réflexive 1..1  – 0.. * Modèle Ouvrier spécialisé

OuvriernasO* : int

adrO : string

metierO: string

chef

Ouvrier 0..*

1..1

Solution 1 : 1 lien externe simple:

rôle

Ouvrier:ouvrier_tnasO*: intadrO: stringmetierO: stringrefChef

dirig

éPar

>

* Un chef est aussi un ouvrier

NB: Un chef est aussi un ouvrier

Modèle navigationnel © Module 2 page 98

Lien simple et le suivi avec la notation pointée 

• Quel est le chef de  l’ouvrier 50?

Select o.refChef.nasO

From Ouvrier o

Where o.nasO = 50    (and o.refChef.nasO is null);

Quels sont les ouvriers dont le chef est 25?

Select o.*

From Ouvrier o

Where o.refChef .nasO = 25;

Quel est le chef du chef 25?Select o. refChef.nas.O

From Ouvrier o

Where o.nas = 25;

Ouvrier:ouvrier_tnasO* : intadrO : stringmetierO : stringrefChef

Page 50: Modèle navigationnel (Mnav)

Page 50

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 99

Select et Curseur PL/SQL

Quels sont les ouvriers dirigés par le chef 25

Select o.nas. o.metierO (1)

From Ouvrier o

Where o.refChef = 25;

(1) Un ensemble d’objets sera formé par le calcul de la réponse. Cet ensemble sera exploré par la suite avec une proc PL/SQL exploitant un curseur*.

*Curseur est l’équivalent du ResultSet. Cet espace permet de parcourir les objets un à un avec une proc PL/SQL.

Ouvrier:ouvrier_tnasO* : intadrO : stringmetierO : stringrefChef

Modèle navigationnel © Module 2 page 100

Modèle à deux liens externes

Modèle exclu evec Oracle:

Ce Mnav ne peut pas être implémenté avec Oracle en raison de la présence dans le Mnav d’une boucle comprenant un lien multiple qui aboutit à un type incomplet (ouvrier_t).

Ouvrier:ouvrier_tnasO* : intadrO : stringmetierO : stringrefCheflesOuvriers

Page 51: Modèle navigationnel (Mnav)

Page 51

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 101

Ajout d’un ouvrier (25) et son chef (100)  (modèle à un seul lien)

Ouvrier:ouvrier_tnasO*: intadrO: stringmetierO: stringrefChef

Avec ce modèle, un ouvrier qui est un chef réfère à lui-même.

Create type ouvrier_t as object(nasO int, adrO varchar(50), metierO varchar(50), refChef REF ouvrier_t);

Insert into Ouvrier values (ouvrier_t(25, 'rue des pignes', 'soudeur', null));

L’ouvrier 25 a l’ouvrier 100 comme chef:

Update Ouvrier o Set o.refChef =

( select Ref(x) From Ouvrier x where x.nasO = 100)

Where o.nasO = 25 ;

Modèle navigationnel © Module 2 page 102

Insertion d’un ouvrier‐chef (nasO = 100) avec qui est chef

-- Insertion d’un ouvrier-chef dont le nasO = 100: (2 opérations)

Insert into Ouvrier values (ouvrier_t(100, 'rue des guignols', 'soudeur', null));

Insertion de son chef qui est lui-même:

Update Ouvrier o set o.refchef=

(select Ref(w) from Ouvrier w where w.nasO = 100);

Page 52: Modèle navigationnel (Mnav)

Page 52

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 103

Agrégation  des classes 

Modèle navigationnel © Module 2 page 104

Agrégation : composition et partage

Agrégation de composition et de partage : ce sont d’abord des associations dotées de contraintes supplémentaires au regard de la suppression.

• Composition (forte) : la suppression de l'agrégat doit entraîner celle des instances agrégées (qui composent ..). Chaque instance du composant ne peut être qu’en association qu'avec une seule  instance de l'agrégat. Donc pas de partage du composant!

• Faible (ou partagée) : la suppression de l'agrégat n'entraîne pas nécessairement celle d'un composant qui peut être éventuellement en association avec une autre instance de l’agrégat ou avec une entité d’une autre classe. 

La représentation d'une agrégation :

• Soit par imbrication de la classe du composant dans laclasse composée (agrégat) avec des liens simples ou multiples;

• Soit par une classe composée reliée aux différentes classes (externes) avec des liens simples ou multiples externes.

Page 53: Modèle navigationnel (Mnav)

Page 53

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 105

Agrégation de composition forte 

La suppression d'une instance de C1 entraîne celle des instances de C2 associées. Dans cet exemple la création de C1 peut ou pas se faire dans la même transaction que la création de C2.

Quel est le Mnav pour l'agrégation ci-dessous ?

Ordinateur:

noSerie: int

Ecran :

noEcr*:int

Disque:

noDisq*:int

0..*1..1

1..1

C1as1

C2as20..*1..1

C1

c2

as2

as1

ast1

Modèle navigationnel © Module 2 page 106

Agrégation de composition pour une association  1.. * – 1..1  orientée 

La suppression de C2 entraîne de facto celle des C1.

La suppression de C1 est possible mais s’il est le dernier, l’opération est refusée.

La composition sous-tend un accès par C2.

C1:as3:

C2:as2:

1..* 1..1 C2:

as2:

ar2:

C1:

as3:

as4

C2: as2 ar2

as3 as4

t90 10 as

23 sig

28 Low

R45 12 dig

Page 54: Modèle navigationnel (Mnav)

Page 54

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 107

Mnav pour l’agrégation avec 2 composants

Solution avec 2 liens internes :

La modélisation avec une agrégation forte sous-tend la suppression dans la BD de l’écran et des disques qui le composent lorsque l’ordinateur est supprimé de la BD.

De même un écran ou un disque ne peut pas être dans la base sans être associé à un ordinateur. Par contre, un ordinateur peut agréger qu’un écran (sans disque 0..* ).

Ecran:

noEcr*:

Ordinateur

noSerie*:

Disque:

noDisq*:

0..*1..1

1..1

Ordinateur:

noSerie*:

refEcran

lesDisques

noEcr*:

Disque:

noDisq*:

Ecran:

Modèle navigationnel © Module 2 page 108

Quelle est la vision tabulaire de ce Mnav?

Ordinateur:

noSerie*:

refEcran

lesDisques

noEcr*:

Disque:

noDisq*:

fourn

Ecran:

Ordinateur noSerie refEcran lesDisques

noEcr noDisq fourn

2345 e34 D2 F1

D3 F2

34712 e89 D7 F2

D9 F1

D12 F4

562 E23 Null null

Dans cet exemple, tous les objets internes sont physiquement imbriqués dans la classe externe Ordinateur.

Page 55: Modèle navigationnel (Mnav)

Page 55

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 109

Composition forte avec une multiplicité de  0..1

En ajout: un écran est inscrit dans la BD sans obligation d’être associé à un ordinateur. Idem pour le disque.

Un ordi est fait de 0 ou 1 écran et de 0 ou plusieurs disques .

En suppression : enlèvement obligatoire, s’ils existent , de l'écran et des disques associés à l’ordinateur.

NB: Avec la composition, la suppression a priorité sur la cardinalité (0..1) ou (1..1). Résultat idem mais différent avec l’ajout.

Ordinateur

noSerie:int

Ecran

noE*: int

capaciteD:

marqueD:

Disque

noD: int

tailleE:

0..*0..1

0..1

Modèle navigationnel © Module 2 page 110

Mnav de l'agrégation forte avec (0..*) avec deux classes externes

Gestion plus lourde avec l’agrégation forte

La suppression d'un ordinateur doit aussi entraîner la suppression de l'écran et des disques de la base. Ce sont des objets dans des containeurs distincts.

3 opérations de suppression sont nécessaires pour supprimer un ordi!!

Pour ajouter un ordi, 3 opérations d’ajout sont éventuellement nécessaires:

• ajout un objet ordinateur

• ajout d’un ou plusieurs objets (disque)

• ajout d’un objet écran

Ordinateur:

noSerie* : intlesDisquesrefEcran

Disque:noD*: int

capaciteD:

marqueD:

Ecran:noE*:int

tailleE:

Page 56: Modèle navigationnel (Mnav)

Page 56

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 111

Quelle est la vision tabulaire de cette agrégation?

Ordinateur: noSerie prix refEcran lesDisques

noEcr noDisq

34712 oid9 oid7

oid19

oid8

562 oid3 Null

Disque: noD capaciteD marqueD

(oid7) d67 456 Digital

(oid19) D5 897 LaCie

(oid8) D1 67845 IBM

Ecran: noE tailleE

(oid9) e9 760

(oid3) e8 1024

Modèle navigationnel © Module 2 page 112

Agrégation partagée (ou faible)  avec une multiplicité 1..*‐‐ 0..*  

L’accès se fait sur C2 pour avoir accès à C1.

Le point d'entrée est C2:

La suppression de C2 ne doit pas entraîner automatiquement celle de C1 qui peut être partagée avec une autre occurrence de C2 (exclusion de l’intégration de C1 dans C2).

Exige éventuellement une mise à jour de ar2. Le partage de C2 est à vérifier de préférence par la méthode utilisée pour la suppression.

C1as1:

C2as2:

1..* 0..*

C2as2:

ar2

C1as1:

<

Page 57: Modèle navigationnel (Mnav)

Page 57

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 113

Sur la nature des réponses …

En cours d’exécution, une application ( browser, pgm Java, ….) peut obtenir du SGBD des données typées ou des objets.

La nature de la réponse dépendra des structures disponibles dans l’application pour stocker la réponse ainsi que des méthodes « invokées » en cours d’exploitation.

Si une application appelle l’exécution d’une méthode qui retourne des objets, l’application devra avoir généré les structures « natives » nécessaires pour les ranger et les manipuler.

Modèle navigationnel © Module 2 page 114

Clin d’œil sur la Spécialisation/généralisationHéritage dans le DC‐UML

L’héritage est une notion qui réfère aux classes d’une hiérarchie et non aux containeurs des objets.

Page 58: Modèle navigationnel (Mnav)

Page 58

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 115

Héritage et ses propriétés dans le Mnav

L'héritage du Mnav se formalise avec la même sémantique que celle de UML; il est spécifié directement avec le schéma objet avec une clause DDL. L'héritage aura des propriétés : exclusivité (d), overlapping (o), total (c) et partiel (i). Chacune exprime une contrainte entre les classes spécialisées.

{complete, disjoint}

{incomplete, overlapping} : card(BDO) = card(C1) +card(C2) – card(C2) ⋂ card(C3)

{incomplete, disjoint}: card(BDO) = card(C1) + card(c1) + card(C2)

{complete, overlapping} : card(BDO) = card(c2) + card(c3) – card(c2) ⋂ card(c3)

Le Mnav conserve la notation UML pour l'héritage ainsi que ses caractéristiques.

C1

as1* : int

C2

as2: C3

as3:

{complete, disjoint} : card (BDO) = card(c2) + card(c3)

Le nombre d’objets dans leur containeur respectif de type C1 est égal au nombre d’objets de C2 plus ceux de C3

Remarque: cette hiérarchie n’exclut pas que des objets de type C2 et C3 cohabitent dans le même containeur que C1.

Modèle navigationnel © Module 2 page 116

Héritage avec une association incidente : 1..1  et 1..1

Une association avec une superclasse est aussi l’objet d’un héritage spécialisé

{complete, disjoint}L’association Asso1-5 se fait avec une superclasse (concrète ou abstraite).

Comme il y a héritage, un objet de C5 peut-être en association soit avec un objet de C2 ou C3 via une REF

NB: cela en raison du « complete» pour l’héritage: C5 ne pas être en association avec un objet de type C1, mais peut l’être avec un objet de type C2 ou C3.

C1

as1* : int

C2

as2: C3

as3:

C5

as5* : int1..1 1..1Asso1-5

Page 59: Modèle navigationnel (Mnav)

Page 59

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 117

Mnav pour l’héritage impliquant une Ref sur une superclasse

{complete, disjoint}

L’attribut lesRefC5est une ensemble de références à des objets soit de C2 ou de C3.

** refC5 pourrait avoir aussi une contrainte propre comme par exemple une limite sur le nombre total d’objets référés peu importe sa nature.

C1

as1* : int

C2

as2: C3

as3:

C5

as5* : int

lesRefC5

C5 aura donc un ensemble de ref soit sur C1, soit sur C2 soit sur C3 selon la couverture de l’héritage.

Modèle navigationnel © Module 2 page 118

Mnav pour l’héritage impliquant une ref sur une classe autre que la racine

{complete, disjoint}

L’attribut refC5 est une ensemble de références à des objets soit de C3 ou de C4.

Aucune référence à un objet de la classe C1 et C2 n’est alors autorisée.

C1

as1* : int

C2

as2: C3

as3:

C5

as5* : int

lesRefC5

C4

as6* : int

{i, d}

Page 60: Modèle navigationnel (Mnav)

Page 60

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 119

Conclusion

Le Mnav a pour but de visualiser plusieurs structures conduisant à l’objet et en évitant autant que possible les jointures explicites.

Renforcement par la structure:

Il permet aussi de renforcer par la structure même certaines contraintes du modèle, mais pas toutes. Les autres seront renforcées par les méthodes de l’interface.

Renforcement par les méthodes:

Les contraintes de multiplicité autres que les classiques, par exemple une contrainte de multiplicité du genre (0..5) , restent à être renforcées par la logique même des méthodes de l’interface.

Ces méthodes peuvent aussi s’appeler l’une l’autre afin de profiter de leur logique propre par le partage. La notion de transaction est sous-tendue dans la logique de la méthode. La transaction doit donc être définie dans chaque méthode.

Le Mnav met aussi en évidence la notion de type d’ensemble sans toutefois préciser s’il s’agit d’un ensemble ordonné ou pas: Varray() , le set ou la sous-table.

Modèle navigationnel © Module 2 page 120

Commentaire  sur le diagramme UML proposé pour le développement du logiciel au regard de celui des données

Un diagramme de classe pour le développement du logiciel se distingue de celui des données par le fait que la partie supérieure d’une classe, celle des données, est moins élaborée et surtout n’est pas obligatoirement persistante (à moins que le langage de développement le soit). Les langages de programmation persistants ne sont pas nombreux!

L’interface

C’est la partie des opérations qui correspond aux différentes fonctions ou procédures nécessaires pour exploiter les données. Ce sont les constituants du logiciel qui est l’objet d’un développement.

Page 61: Modèle navigationnel (Mnav)

Page 61

André Gamache professeur associé, Département d'informatique et de génie logicielFaculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Module 2

Modèle navigationnel © Module 2 page 121

Modèle Navigationnel

Passage de UML au  Mnav

Exercices

Modèle navigationnel © Module 2 page 122

Fin