Modèle navigationnel (Mnav) Notions d`objet

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
Modèle navigationnel (Mnav)
Transformation du diagramme de classe UML en un
modèle navigationnel pour un passage à l’objet
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]
2015-04-07 ©
Module 2 page
Modèle navigationnel ©
1
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, …
Module 2 page
Modèle navigationnel ©
Page 1
2
Module 2
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
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!
C'est un passage utile pour des fins didactiques seulement.
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
Module 2 page
Modèle navigationnel ©
3
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.
Module 2 page
Modèle navigationnel ©
Page 2
4
Module 2
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
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. 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.
Classe interne
Une classe interne est une classe capable de définir des objets mais sans oid dont la
persistance exige son imbrication dans un objet d’une classe externe. La classe interne et externe sont nommées et ont une interface.
Module 2 page
Modèle navigationnel ©
5
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 FN1 en ajoutant une structure de
tuple pour regrouper plusieurs attributs éventuellement de types différents.
(struct)
L’attribut complexe a un type mais aucune méthode de traitement associée.
Module 2 page
Modèle navigationnel ©
Page 3
6
Module 2
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
Lien simple 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.
Employe:
nasE : int
lien interne simple
nomE : string
specialite:
Ce lien peut être vide (rond blanc) ou obligatoirement valué par un oid (rond noir)
Module 2 page
Modèle navigationnel ©
7
Lien multiple
Lien multiple:
Un lien multiple est établi entre un attribut et une classe interne ou externe :
Un lien multiple pour un attribut associe ce dernier 0 ou plusieurs objet de la
classe interne ou externe.
Employe:
nasE : int
nomE : string
lesSpecialites
Lien interne multiple
Ce lien peut être vide (rond blanc) ou obligatoirement valué (rond noir)
Module 2 page
Modèle navigationnel ©
Page 4
8
Module 2
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
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.
Employe:
Exemple d’un attribut de
type complexe associée à une
structure de tuple.
nasE : int
C’est un tuple et non une
nomE : string
classe interne car sans interface
et sans nom de classe
laSpecialite:
représentation graphique
specPrinc: string
sans interface
anExp : number
date: Date
Un employé a une
spécialité définie par
3 attributs
L’attribut « laSpecialite » est associé à une structure de tuple (similaire à une struct).
Module 2 page
Modèle navigationnel ©
9
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. Le nom de la classe avec les : ,
annonce le type de la classe
normalement constituée du
nom suffixé par _t
_t
Employe: employe_t
nasE : int
nomE : string
Classe interne nommée
et dotée d’une interface
Ex O2:
laSpecialite:
Specialite:specialite_t
nasE : int
spec: string
nomE : varchar
annee : Date
laSpecialite: Specialite
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.
Module 2 page
Modèle navigationnel ©
Page 5
10
Module 2
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
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.
Employe:
Classe interne de type
ensemble rendue par une
structure varray
nasE : int
nomE : string
lesSpecialites
v
Les éléments de l’attribut lesSpecialites sont stockés dans un varray (similaire à
un tableau ou un array). Chaque entrée est indexé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.
Module 2 page
Modèle navigationnel ©
11
Attribut d’ensemble non ordonné d’objets
 Un attribut d’ensemble d’objets est rendu par un lien interne multiple vers une classe interne.
Employe:
nasE : int
Classe interne de type
ensemble.
nomE : string
lesSpecialites
lesSpecialites est un ensemble { } d’objets internes non vide. Chaque objet est
associé à l’interface de la classe interne.
Module 2 page
Modèle navigationnel ©
Page 6
12
Module 2
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
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 dè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 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 à la base du recouvrement (voir la notion
de rollback). Ceci garantit la persistance.
‘
Module 2 page
Modèle navigationnel ©
13
Passage de UML au Relationnel Modèle UML: les classes UML sont des concepts logiques apparentés à la
notion de type (avec la technologie Oracle).
Employe:
Atelier:
noA* : int
nomA : string
0..*
0..1
Embauche >
nasE*: int
nomE: string
metierE: string
Conventions:
* == 0..*
1 == 1,1
Le MR privilégie la notion de table en sous‐tendant 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 UN
seul métier pour justifier la FN3.
Module 2 page
Modèle navigationnel ©
Page 7
14
Module 2
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
Passage de l’UML Atelier‐Employe au Mnav Atelier:
Lien externe multiple représente le type
ensemble (set) pour l’attribut lesEmbauches
et est formé de oids des objets de type
employé.
noA* : int
nomA : string
*
lesEmbauches:
La multiplicité 0..* est explicitement
représentée
Employe:
* lesEmbauches
nasE*: int
Classe externe de type objet
nomE: string
metierE: string
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.
Module 2 page
Modèle navigationnel ©
15
En l’absence d’un attribut d’association
Atelier:
noA* : int
nomA : string
lesEmbauches:
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, …
Employe:
nasE*: int
nomE: string
metierE: string
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.
Module 2 page
Modèle navigationnel ©
Page 8
16
Module 2
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
Autre représentation du modèle Atelier‐Employe (sans attribut) Atelier:
noA* : int
nomA : string
lesEmbauches:
OidEmploye:
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.
refEmpl
Employe:
nasE*: int
nomE: string
metierE: string
Module 2 page
Modèle navigationnel ©
17
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.
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 nasE
50. 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);
Module 2 page
Modèle navigationnel ©
Page 9
18
Module 2
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
Ajout d’un attribut d’association: classe interne et lien multiple
Atelier:
noA* : int
** L’attribut lesEmbauches désigne un
ensemble d’objets de la classe refEmploye
dont la définition comprend un attribut
d’association: dateEmbauche
nomA : string
lesEmbauches:
Nouvel attribut possible
Employe:
refEmploye:
refEmpl
nasE*: int
dateEmbauche
nomE: string
metierE: string
Ce modèle représente l’embauche à une certaine date d’un employé par un atelier.
Module 2 page
Modèle navigationnel ©
19
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é.
Atelier:
noA* : int
nomA : string
lesEmbauches:
Employe:
Classe externe de type objet
nasE*: int
nomE: string
metierE: string
refAtelier
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.
Module 2 page
Modèle navigationnel ©
Page 10
20
Module 2
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
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éthode
exécutée dans une transaction avec synchronisation et validation des
diverses modifications faites sur les données.
Module 2 page
Modèle navigationnel ©
21
Représentation de Atelier‐Employe sans classe externe
Atelier:
noA* : int
La classe UML devient
une classe externe ou un
type externe avec 3
attributs.
nomA : string
lesEmbauches:
Employe :
Attribut d’ensemble
référant à des d’objets
d’une classe interne.
nasE: int
nomE: string
metierE: string
modifNomA( )
Lien interne de type ensemble
pour modéliser l’association
0,* (pointe double).
Ce lien sous-tend l’imbrication
des objets Employe dans un
objet Atelier.
Classe interne de type objet
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
Module 2 page
Modèle navigationnel ©
Page 11
22
Module 2
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
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!
Module 2 page
Modèle navigationnel ©
23
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 tableobjet 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(), ….
Module 2 page
Modèle navigationnel ©
Page 12
24
Module 2
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
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;
Module 2 page
Modèle navigationnel ©
25
Ensemble vide: création et suppression des objets
Atelier : atelier_t
noA : int
nomA : string
lesEmbauches :
Employe:
nasE : int
nomE : string
metierE : string
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!
Les opérations(méthodes)
Attribut lesEmbauches est un lien interne multiple sur des objets internes (sans
oid) de Employe (objet-colonne de Oracle) inclus dans la classe Atelier.
Module 2 page
Modèle navigationnel ©
Page 13
26
Module 2
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
Information ajoutée par la référence obligatoire (ou non vide)?
Atelier :
noA : int
La référence obligatoire impose qu’un
atelier à sa création a obligatoirement
au moins 1 employé.
nomA : string
lesEmbauches :
La suppression du dernier employé
sous-tend la suppression de l’atelier.
Employe:
nasE : int
** Source d’incohérence si l’atelier n’est pas
supprimé avec la suppression du dernier
employé.
nomE : string
metierE : string
Les opérations
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 .
Module 2 page
Modèle navigationnel ©
27
Représentation (Oracle) TABULAIRE du lien interne multiple Atelier:
noA: string
A20
Nested Table
A30
{lesEmbauches} ou
lesEmbauches: { }
nomA: string
nasE : int
nomE: string
metierE:
string
123
Arthur
fraîseur
234
Sylvie
tourneur
256
Pierre
perceur
456
Serge
ponceur
Atelier B
Atlier C
Avec 2 collections (sets)
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 soustable (imbriquée) formée avec les attributs typés : nasE, nomE, metierE.
Module 2 page
Modèle navigationnel ©
Page 14
28
Module 2
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
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)
Objets associés à des adresses
physiques de la RAM
Cache en RAM
Adr_RAM oid
Espace exécution du SGBD
oid +
objets
Module 2 page
Modèle navigationnel ©
29
Inconvénient du Mnav: partage difficile d’une classe interne
Atelier: adresse_t
noA : int
Domicile:domicile_t
nomA : string
paysD : string
adresseA :
Adresse:
no: int
rue:
Ville:
adresseD:
(mais sous-entend un oid pour adresseD??
Or les objets de Adresse n’ont pas de oid!)
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 !
Module 2 page
Modèle navigationnel ©
Page 15
30
Module 2
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
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;
Module 2 page
Modèle navigationnel ©
31
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!). Module 2 page
Modèle navigationnel ©
Page 16
32
Module 2
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
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;
Module 2 page
Modèle navigationnel ©
33
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.
 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 … dont 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 ne sont pas implémentées implicitement par une structure du Mnav.
 Etape non essentielle ajoutée : passage direct du DC‐UML vers l’objet est possible sans transiter par le modèle Mnav.
Module 2 page
Modèle navigationnel ©
Page 17
34
Module 2
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
Sommaire des symboles
Lien simple
Lien simple
Lien simple pouvant être null (facultatif)
Lien simple obligatoirement valué* (not null)
** L’absence de cercle signifie obligatoire
Avec les liens interne et externe :
Classe C1
Classe C1
attrib_Cle
attribClé
attrib1
attrib1
struct
*Valuation: signifie donner une valeur à un attribut
La valuation de attrib1 donne une valeur représentée par
la struct interne ou celle correspondant à un objet de la
classe externe.
Module 2 page
Modèle navigationnel ©
35
Sommaire des symboles
Lien multiple
Lien multiple
Lien multiple pouvant être null (ensemble pouvant être vide)
Lien multiple obligatoirement valué (ensemble obligatoirement non vide)
** L’absence de cercle signifie obligatoire
Avec les liens multiples
Classe C1
attrib_Cle
interne et externe :
Classe C1
attribCle
attrib1
attrib1
Classe int.
La valuation de attrib1 donne un ensemble de valeurs .
Classe externe
Module 2 page
Modèle navigationnel ©
Page 18
36
Module 2
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
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).
Module 2 page
Modèle navigationnel ©
37
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;
Atelier: atelier_t
Le type { } est sous-entendu par le lien externe multiple
noA*: int
Employe: employe_t
nomA : string
nasE*: string
lesEmbauches
nomE : string
refMetier
lesEmbauches est le nom
d’un ensemble de références
(oid)
Les opérations
At
Em
Me
Création 1 objet
2
3
1
mise à jour 1 objet
2
2
1
Suppression 1 objet
1
2
2
Metier: metier_t
noM*: int
corpoM: int
cotisation: real
La difficulté est évaluée au regard de la gestion des liens.
Module 2 page
Modèle navigationnel ©
Page 19
38
Module 2
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
Cascade d’associations UML: 1..* ‐ 1..* (liens) Region:
1..*
1..1
noR*: int
Ville:
nomV: string
Reunit >
nomR : string
(Interface)
(Interface)
Formée >
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.
1..1
1..*
Arrondis:
nomA: string
presA: string
popA: int
(Interface)
Pour y arriver il faudra retarder la vérification des
contraintes de ce modèle géré par le SGBD.
Module 2 page
Modèle navigationnel ©
39
Mnav avec deux liens externes Region: region_t
noR*: int
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.
nomR:string
lesVilles:
Ville:ville_T
?
R V
A
création
2 2
1
mise à jour
2 3
2
Arrondis:
suppression
1 3
2
nomA: string
presA:string
popA: int
nomV*: string
lesArrondis:
delaRegion
AjoutV
Trois classes, cela sous-tend normalement un stockage
des objets dans des tablespaces de Oracle différents,
ce qui peut alourdir l’exploitation.
Module 2 page
Modèle navigationnel ©
Page 20
40
Module 2
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
Pourquoi ne pas définir aussi un lien inverse?
2e
Ce 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
Le parcours préférentiel d’une association
détermine la nature du lien à privilégier.
noR*: int
nomR:string
lesVilles:
Ville:ville_T
nomV: string
lesArrondis:
?
Select r.nomR
From Region r
delaRegion
Where (oid de la ville dont le nomV = ) IN lesVilles
AjoutV
Module 2 page
Modèle navigationnel ©
41
Mnav avec deux liens : externe et interne
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é.
Region: region_t
En découle une plus grande performance dans l’accès
aux arrondissements.
noR* : int
Ville: ville_t
nomR : string
nomV : string
lesArrondis
lesVilles:
R
V
création
2
3
Mise à jour
2
2
suppression
2
2
Arrondis:
nomA: string
presA: string
popA: int
L'attribut lesVilles est une collection ou set() de oids (ref) sur les objets de la classe externe
Ville.
Module 2 page
Modèle navigationnel ©
Page 21
42
Module 2
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
Mnav avec deux liens et imbrication des classes
Region: region_t
noR*: string
nomR: string
lesVilles:
Ville:ville_t
nomV* : int
lesArrondis:
Arrondis:
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?
nomA*:string
R
V
A
création
3
2
1
presA: string
mise à jour
3
2
1
suppression
1
2
2
lecture
1
2
3
popA: int
Module 2 page
Modèle navigationnel ©
43
Modèle UML CSP
Chercheur:
noC*: string
nomC: string
0..*
1..1
Gere >
Subvention :
noS : int
nomPgm : string
Finance >
0..1
1..*
Projet : projet_t
noP* : int
montant : real
organisme : string
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.
Module 2 page
Modèle navigationnel ©
Page 22
44
Module 2
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
Combinaison de lien interne simple et externe multiple
Chercheur:
noC*: string
nomC: string
lesSubventions:
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.
Subvention :
noS : int
nomPgm : string
lesProjets
Projet:
noP* : int
montant : real
organisme : string
C P
création
2 1
Mise à jour
2 1
suppression
1 2
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
Module 2 page
Modèle navigationnel ©
45
Mnav avec deux liens externes et multiples
Chercheur:
Projet:
noC*: string
noP* : int
nomC: string
montant : real
lesSubventions:
organisme : string
Subvention :
noS : int
nomPgm : string
lesProjets
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 subvention
mais pas celle du chercheur.
Module 2 page
Modèle navigationnel ©
Page 23
46
Module 2
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
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 (objetscolonnes (OC)).
Dans les deux cas: objets à part entière: interface et persistance.
Module 2 page
Modèle navigationnel ©
47
Les interfaces dans un Mnav Logiciel:
Departement:
nomL* : string
versionL: int
editeurL: string
lesInstallations:
noD*: int
nomD: string
adresseD:
lesLogiciels:
budget : real
Installation:
datateI: string
Adresse:
refPosteI:
rue : string
ville : string
installerLog(…)
creerDep
achatLogiciel(…)
PC:
Dans un modèle les signatures sont identifiées
globalement 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.
Modèle navigationnel ©
Page 24
noSerie*: int
adrIP: string
cpu: string
installerPC(…)
brancherPC(…)
Module 2 page
48
Module 2
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
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.
Module 2 page
Modèle navigationnel ©
49
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).
Depart:
Depart:
noD: int
noD: int
nomD: varchar
lesEmpl
Unnest
Empl:
noE : int
Depart
noD
nomD
lesEmpl.noE
lesEmpl.nomE
nomD: varchar
lesEmpl.noE : int
lesEmpl.nomE: varchar
nomE: varchar
Select d.noD, e.noE
From Departement d, Table(d.lesEmpl) e
Select lesEmpl
Where d.Empl.noE > 135;
From Departement d
Where d.lesEmpl.noE >135;
Module 2 page
Modèle navigationnel ©
Page 25
50
Module 2
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
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.
T1:
T1*:
A
a1
a2
lesB
A
B.C
B.D
C
D
a1
c1
d1
c1
d1
a1
c3
d2
c3
d2
a2
c4
d5
c4
d5
a1
c4
d4
+
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!
Module 2 page
Modèle navigationnel ©
51
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
Module 2 page
Modèle navigationnel ©
Page 26
52
Module 2
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
Représentation tabulaire du Mnav et un lien interne
T1
A : int
T1
lesB
A:
B
a1
c : int
d: int
a2
lesB:lesB_t
C
D
c1
d1
c3
d2
c4
d5
Module 2 page
Modèle navigationnel ©
53
Unnesting et le Stockage physique d’une table imbriquée
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:
T1
A
lesB: lesB_t
a1
a2
C
D
c1
d1
c3
d2
c4
d5
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 ;
Stockage d’une table imbriquée:
T1a
T1b
C
D
cle‐interme
A
cle‐Interne
c1
d1
p0001
a1
p0001
c3
d2
p0001
a2
p0002
c4
d5
p0002
Jointure implicite: T1 := T1a |x| T1b
Modèle navigationnel ©
Page 27
Module 2 page
54
Module 2
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
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é
Module 2 page
Modèle navigationnel ©
55
Résumé pour aide‐mémoire
Passage du diagramme de classe UML au modèle navigationnel (Mnav)
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.
Module 2 page
Modèle navigationnel ©
Page 28
56
Module 2
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
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 est
aussi 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.
Module 2 page
Modèle navigationnel ©
57
Transformation de l'association 0..1 – 1..1
C1
as1
op1
0..1
<A
C2
1,1
as2
op2
Asso
as : attribut simple
ar: attribut de type REF
op: interface 1ère solution : L'attribut de type Ref peut être nul dans C2. L'accès privilégié est par C2. C1
C2
as1
as2
Toutes les multiplicités de
la classe UML ne sont pas
représentées par ce Mnav!
ar2
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.
Module 2 page
Modèle navigationnel ©
Page 29
58
Module 2
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
(Suite) Transformation des associations: 0..1 – 1..1
 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.
C1
as1
op1
C2
1..1
0..1
as2
op2
A>
C1
La multiplicité du côté
de C1 n’est pas
représentée !
C2
as2
as1
ar1
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
Module 2 page
Modèle navigationnel ©
59
(suite) Transformation des associations UML : 0..1 – 1..1
 3e solution pour les 2 sens de parcours: 2 liens simples (aucun sens privilégié)
C1
C2
as1
as2
ar1
ar2
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 ar2
Ce 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.
Module 2 page
Modèle navigationnel ©
Page 30
60
Module 2
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
(suite) Transformation des associations: 0..1 – 1..1
4e solution (dite universelle): utilisation d'une 3e classe CA avec 2 liens
externes. Toutes les multiplicités sont renforcées par le modèle.
C1
C2
as1*
as2*
CA
ar2
ar1
La suppression de C2 entraîne celle de C1 qui lui serait associé.
É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.
Module 2 page
Modèle navigationnel ©
61
Interrogation avec SQL: cas lien simple Stages étudiants (UML) :
Etudiant(e):
matricule* : string
nom : string
Stage:
0..1
Effectue > 1..1 noS* : int
themeS: string
respS : string
Solution avec une REF simple:
Etudiant(e):
Stage:
matricule* : string
noS* : int
nom : string
themeS: string
refStage
respS : string
Un lien peut être parcouru grâce à la référence et via la notation pointée.
Module 2 page
Modèle navigationnel ©
Page 31
62
Module 2
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
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?
Etudiant(e):
Stage:
Select s.noS
From Stage s
matricule* : string
noS* : int
nom : string
themeS: string
‐ (minus)
refStage
respS : string
Select e.refStage.noS
From Etudiant e
[ Where e.refStage is not null ]
Notez le parcours de l’association par la notation pointée.
Module 2 page
Modèle navigationnel ©
63
(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";
Module 2 page
Modèle navigationnel ©
Page 32
64
Module 2
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
Association de multiplicités 0..* et 1..1
(enfants)
C1
as1*
op1
(parent)
0..*
C2
1..1
as2*
<A
op2
as : attribut simple
ar: attribut de type REF
op: action d’interface  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*
C2
as2*
ar2
(<)
op2
op1
c1
c2
création
2
1
Mise à jour
1
2
suppression
2
2
recherche
1
1
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 ?
Module 2 page
Modèle navigationnel ©
65
Association 0..* ‐‐ 1..1 (suite)
2e solution *** : un lien monovalué non nul vers le parent C2
C1
C2
as1*
as2*
ar1
c1
c2
création
2
1
Mise à jour
2
1
suppression
1
2
recherche
1
1
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.
Module 2 page
Modèle navigationnel ©
Page 33
66
Module 2
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
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.
Module 2 page
Modèle navigationnel ©
67
Association (C1) 0..* ‐ 1..1 (C2) avec un lien interne multiple
C2
L’ajout d’un objet C2 ne présume de la
création d’un objet C1.
En supprimant un objet C2, les objets C1.
associés sont aussi supprimés.
as2
L’ajout d’un objet de C1 suppose
l’existence d’un objet hôte C2.
as1
ar2
(ou lesar2)
C1
Le lien interne multiple pour ar2 sous-tend un ensemble formé avec des objetscolonnes 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.
Module 2 page
Modèle navigationnel ©
Page 34
68
Module 2
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
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,…
Module 2 page
Modèle navigationnel ©
69
Exemple avec une association: (C) 1..* ‐ 1..1 (P)
Exemple : Cours‐Prof
Cours:
noC* : int
Prof:
1..*
Enseigne
1..1 noP*:int
titreC :string
nomP :
nbCred : int
gradeP:int
Cours:
Prof:
noC* : int
noP* : int
titreC : string
nomP : string
nbCred : int
gradeP : int
refProf
lesCours
Avec Oracle, ce Mnav est inacceptable en raison de l’impossibilité de référer à un type
incomplet via un lien multiple
Module 2 page
Modèle navigationnel ©
Page 35
70
Module 2
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
Mnav avec (C) 1..* ‐ 1..1 (P) : lien multiple
Pour un professeur donné, il sera facile d’obtenir tous les cours dont il est responsable.
Cours:
1- Avec un
lien externe
multiple:
Prof:
noC* : int
noP* : int
titreC : string
nomP : string
nbCred : int
gradeP : int
lesCours
2- Avec un lien externe simple:
Cours:
Prof:
noC* : int
noP* : int
titreC : string
nomP : string
nbCred : int
gradeP : int
refProf
Module 2 page
Modèle navigationnel ©
71
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.
Module 2 page
Modèle navigationnel ©
Page 36
72
Module 2
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
Association (C) 0..* ‐ 1..* (E) sans attribut d’association
Cours
noC* : int
0..*
Inscrit
Etudiant
1..* matricule:*
titreC: string
nom:string
nbCred : int
Solution 1:
Cours: cours_t
Etudiant:
noC* :int
matricule* : int
titreC : string
nom : string
nbCred : int
lesCours
lesEtudiants
Avec Oracle, la circularité des liens multiples interdit la définition des types lesCours et
lesEtudiants. Donc le modèle ci-dessous doit être abandonné!
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).
Module 2 page
Modèle navigationnel ©
73
Association (C) 0..* ‐ 1..* (E) sans attributs d’association
Cours
noC* : int
titreC: string
0..*
Inscrit
Etudiant
1..* matricule:*
>
nom:string
nbCred : int
Solution 2: Avec préférence de parcours: 1 liens multiple avec un nouvel attribut de type
ensemble de REF .
Cours: cours_t
Etudiant:
noC* :int
matricule* : int
titreC : string
nom : 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 etudiant_t
Module 2 page
Modèle navigationnel ©
Page 37
74
Module 2
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
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 );
Les oids de l’ensemble lesEtudiants
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.
Module 2 page
Modèle navigationnel ©
75
Quelques interrogations sur ce Mnav (2)
Select *
From Cours c
Where c.lesEtudiants is not empty;
-- prédicat d’ensemble
NOC TITREC
50 Java
NBCRED
LESETUDIANTS
3
LESETUDIANTS_T(0000220208E938BD8BE15C46F3A8544ADB258D6A9E19FF34467AEE448EAF2B2D401B8701)
Select c.noC
From Cours c
Where c.lesEtudiants is not empty ;
NOC
50
Module 2 page
Modèle navigationnel ©
Page 38
76
Module 2
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
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 ;
Module 2 page
Modèle navigationnel ©
77
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
50
LESETUDIANTS
LESETUDIANTS_T(0000220208E938BD8BE15C46F3A8544ADB258D6A9E19FF34467AEE448EAF2B2C4D401B8701
Module 2 page
Modèle navigationnel ©
Page 39
78
Module 2
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
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
Etudiant:
Cours:
noC* :int
matricule* : string
titreC : string
nom : string
nbCred : int
Recherche aussi possible si la classeassociation a aussi les clés des classes
externes concernées..
Inscription:
refEtudiant
refCours
dateInsc : Date
La classe CA, et les 2 liens
s'imposent si l'association
Inscrit a des attributs.
Attribut de l’association
Module 2 page
Modèle navigationnel ©
79
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
From
I.refCours.*
Inscription I
Module 2 page
Modèle navigationnel ©
Page 40
80
Module 2
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
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)
`
Module 2 page
Modèle navigationnel ©
81
Est-il que ce Mnav est spécifiable en objet?
Produit: produit_t
Usine: usine_t
noU* : int
noP* : int
nomU : varchar
leDepot
lesProduits
VilleDepot:villeDepot_t
nomV *:varchar
popV : int
maireV : varchar
Est-il possible de supprimer un produit sans
supprimer aucun autre objet?
La définition du lien multiple est possible dans ce modèle car les liens ne
forment pas une boucle avec un lien multiple.
Module 2 page
Modèle navigationnel ©
Page 41
82
Module 2
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
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.
0..*
C1
0..*
C2
1..1
as1*
as2*
CA12
as3
Propriété de la classe association
C2:
C1:
as1*
as2*
CA12:
as3
ar3
Le CA12 peut avoir un identifiant composé de as1
et as2 représentés dans le CA12.
ar4
Un objet de C2 (:C2) non associé à un objet de C1 n’aura pas
d’objet d’association du type CA12.
Module 2 page
Modèle navigationnel ©
83
Recherche avec une classe d’association
C2:
C1:
as1*
as2*
CA12:
as3
ar3
ar4
Quels sont les C1 associés à une
valeur clé k2 de C2?
Quels sont les C1 non associés à un
objet C2?
1- recherche dans CA12
2- Les C1 moins les CA12:
Select o.ar3.*, o.as3
Select x.* From C1
From CA12
--
o
(moins)
Select o.ar3.*
Where o.ar4.as2 = k2
From CA12
o
Where o.ar3 is not null;
Module 2 page
Modèle navigationnel ©
Page 42
84
Module 2
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
Association 0..* ‐ 0..* avec un attribut (suite)
 Solution 2: une classe interne avec un lien interne multiple et un lien externe simple.
C1:
C2:
as1*
as2*
ar2
CA12:
as12
ar4 :
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!
Module 2 page
Modèle navigationnel ©
85
Exemple : Association UML 0..* ‐ 0..* avec attribut d’association
Depart
codeD*: int
nomD:string
0..*
0..*
1..1
Logiciel
codeLog*:int
nomLog:string
Achat
dateAchat:
Depart:depart_t
Logiciel:
codeD*: int
codeLog* : int
nomD: varchar
nomLog : varchar
lesAchats
Achat :achat_t
dateAchat : Date
refDep
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.
Module 2 page
Modèle navigationnel ©
Page 43
86
Module 2
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
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), lesAchats
lesAchats_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))))
Module 2 page
Modèle navigationnel ©
87
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 lesAchats
ERROR at line 1:
ORA-00942: Table ou vue inexistante
Select lesAchats
-- fournit les objets imbriqués.
from Logiciel
Module 2 page
Modèle navigationnel ©
Page 44
88
Module 2
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
Affichage des objets de la classe interne
Select * from Logiciel
CODELOG NOMLOG
100
youpi
-- fournit tous les objets y compris les imbriqués.
LESACHATS(DATEACHAT, REFDEP)
LESACHATS_T(ACHAT_T('14-09-16', NULL))
Affichage des données de la classe interne avec Unnesting:
Select L.codeLog, v.dateAchat
from Logiciel L, Table(L.lesachats) v
CODELOG
1
DATEACHAT
1799
Module 2 page
Modèle navigationnel ©
89
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
L’association entre deux objets de classes différentes A et B est établie avec la référence soit l’oid. Module 2 page
Modèle navigationnel ©
Page 45
90
Module 2
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
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 .
A:
x* : int
w : B:
c : int
d: int
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.
Module 2 page
Modèle navigationnel ©
91
Exemple comportant plusieurs classes
Modélisation des randonnées effectuées par des personnes qui visitent des lieux touristiques situés dans diverses régions.
Module 2 page
Modèle navigationnel ©
Page 46
92
Module 2
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
Exemple d'une classe d'association participant à une autre association (solution universelle)
Rando:
Personne:
noR* : int
1..1
0.. *
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.
0…*
RandoPerso:
lieuDepart:
dateDepart:
UML
nasP*: int
1..*
0..*
1..1
LieuTourist
lieuT*:string
regionT:
RL:
dateVisite:
prix: :real
Rando
Personne
noR*:int
nasP*: int
Mnav
RandoPerso:
dateDepart:
Les liens sont tous simples.
Ils sont traversés avec la notation pointée.
LieuTourist:
lieuDepart:
RL:
refRando
dateVisite: Date
refPersonne
prix: real
lieuT: string
regionT: char
refLieuTourist
refRandoPerso
Module 2 page
Modèle navigationnel ©
93
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
Module 2 page
Modèle navigationnel ©
Page 47
94
Module 2
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
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! Module 2 page
Modèle navigationnel ©
95
Les choix à privilégier pour les associations (Best Practices)
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.
Module 2 page
Modèle navigationnel ©
Page 48
96
Module 2
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
Association réflexive 1..1 – 0.. * Modèle Ouvrier spécialisé
1..1
chef
nasO* : int
adrO : string
metierO: string
0..*
Solution 1 :
rôle
dirigéPar >
Ouvrier
* Un chef est
aussi un ouvrier
Ouvrier
1 lien externe simple:
Ouvrier:ouvrier_t
nasO*: int
adrO: string
metierO: string
refChef
NB: Un chef est aussi un ouvrier
Module 2 page
Modèle navigationnel ©
97
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.*
Ouvrier:ouvrier_t
nasO* : int
adrO : string
metierO : string
refChef
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;
Module 2 page
Modèle navigationnel ©
Page 49
98
Module 2
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
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;
Ouvrier:ouvrier_t
nasO* : int
adrO : string
metierO : string
refChef
(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.
Module 2 page
Modèle navigationnel ©
99
Modèle à deux liens externes
Modèle exclu evec Oracle:
Ouvrier:ouvrier_t
nasO* : int
adrO : string
metierO : string
refChef
lesOuvriers
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).
Module 2 page
Modèle navigationnel ©
Page 50
100
Module 2
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
Ajout d’un ouvrier (25) et son chef (100) (modèle à un seul lien)
Ouvrier:ouvrier_t
Avec ce modèle, un ouvrier qui est un chef réfère à lui-même.
nasO*: int
adrO: string
metierO: string
refChef
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 ;
Module 2 page
Modèle navigationnel ©
101
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);
Module 2 page
Modèle navigationnel ©
Page 51
102
Module 2
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
Agrégation des classes Module 2 page
Modèle navigationnel ©
103
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.
Module 2 page
Modèle navigationnel ©
Page 52
104
Module 2
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
Agrégation de composition forte C1
1..1
as1
0..*
C2
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.
as2
C1
as1
Quel est le Mnav pour l'agrégation
ci-dessous ?
ast1
Ordinateur:
c2
noSerie: int
as2
1..1
1..1
0..*
Ecran :
Disque:
noEcr*:int
noDisq*:int
Module 2 page
Modèle navigationnel ©
105
Agrégation de composition pour une association 1.. * – 1..1 orientée C1:
as3:
1..*
1..1
C2:
C2:
as2:
as2:
ar2:
La suppression de C2 entraîne de facto celle des C1.
C1:
La suppression de C1 est possible mais s’il est le
dernier, l’opération est refusée.
as3:
as4
La composition sous-tend un accès par C2.
C2:
as2
ar2
as3
t90
R45
as4
10
as
23
sig
28
Low
12
dig
Module 2 page
Modèle navigationnel ©
Page 53
106
Module 2
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
Mnav pour l’agrégation avec 2 composants
Solution avec 2 liens internes :
Ordinateur
Ordinateur:
noSerie*:
noSerie*:
1..1
refEcran
lesDisques
1..1
Ecran:
0..*
Disque:
Ecran:
noEcr*:
noDisq*:
noEcr*:
Disque:
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.
noDisq*:
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..* ).
Module 2 page
Modèle navigationnel ©
107
Quelle est la vision tabulaire de ce Mnav?
Ordinateur noSerie refEcran
Ordinateur:
noSerie*:
noEcr
2345
e34
34712
e89
refEcran
lesDisques
Ecran:
noEcr*:
562
E23
lesDisques
noDisq
fourn
D2
F1
D3
F2
D7
F2
D9
F1
D12
F4
Null
null
Disque:
noDisq*:
fourn
Dans cet exemple, tous les objets internes sont
physiquement imbriqués dans la classe externe
Ordinateur.
Module 2 page
Modèle navigationnel ©
Page 54
108
Module 2
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
Composition forte avec une multiplicité de 0..1
Ordinateur
En ajout: un écran est inscrit dans la BD sans
obligation d’être associé à un ordinateur. Idem
pour le disque.
noSerie:int
0..1
Un ordi est fait de 0 ou 1 écran et de 0 ou plusieurs
disques .
0..1
0..*
Disque
Ecran
noE*: int
noD: int
capaciteD:
tailleE:
En suppression : enlèvement obligatoire, s’ils
existent , de l'écran et des disques associés à
l’ordinateur.
marqueD:
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.
Module 2 page
Modèle navigationnel ©
109
Mnav de l'agrégation forte avec (0..*) avec deux classes externes
Ordinateur:
noSerie* : int
lesDisques
refEcran
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!!
Disque:
noD*: int
noE*:int
capaciteD:
tailleE:
marqueD:
Ecran:
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
Module 2 page
Modèle navigationnel ©
Page 55
110
Module 2
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
Quelle est la vision tabulaire de cette agrégation?
Ordinateur: noSerie
prix refEcran
lesDisques
noEcr
34712
noDisq
oid9
oid7
oid19
oid8
562
oid3
Null
Disque:
noD
capaciteD
marqueD
Ecran:
noE
tailleE
(oid7)
d67
456
Digital
(oid9)
e9
760
(oid19)
D5
897
LaCie
(oid3)
e8
1024
(oid8)
D1
67845
IBM
Module 2 page
Modèle navigationnel ©
111
Agrégation partagée (ou faible) avec une multiplicité 1..*‐‐ 0..* Le point d'entrée est C2:
C1
as1:
1..*
0..*
<
C2
as2:
L’accès se fait sur C2 pour avoir accès à C1.
C1
C2
as1:
as2:
ar2
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.
Module 2 page
Modèle navigationnel ©
Page 56
112
Module 2
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
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.
Module 2 page
Modèle navigationnel ©
113
Clin d’œil sur la Spécialisation/généralisation
Hé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.
Module 2 page
Modèle navigationnel ©
Page 57
114
Module 2
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
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.
C1
{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
as1* : int
{complete, overlapping} : card(BDO) = card(c2) + card(c3) – card(c2) ⋂ card(c3)
{incomplete, disjoint}: card(BDO) = card(C1) + card(c1) + card(C2)
{complete, disjoint}
{incomplete, overlapping} : card(BDO) = card(C1) +card(C2) – card(C2) ⋂
card(C3)
C2
C3
as2:
as3:
Le Mnav conserve la notation UML pour l'héritage
ainsi que ses caractéristiques.
Remarque: cette hiérarchie n’exclut pas que des objets de type C2 et C3 cohabitent dans le
même containeur que C1.
Module 2 page
Modèle navigationnel ©
115
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é
C5
C1
1..1
as1* : int
Asso1-5
{complete, disjoint}
C2
as2:
1..1
as5* : int
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
C3
as3:
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.
Module 2 page
Modèle navigationnel ©
Page 58
116
Module 2
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
Mnav pour l’héritage impliquant une Ref sur une superclasse
C5 aura donc un ensemble de ref soit sur C1, soit sur C2 soit sur C3 selon la
couverture de l’héritage.
C5
C1
as5* : int
as1* : int
lesRefC5
{complete, disjoint}
C2
L’attribut lesRefC5est une ensemble de
références à des objets soit de C2 ou de
C3.
C3
as2:
as3:
** 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.
Module 2 page
Modèle navigationnel ©
117
Mnav pour l’héritage impliquant une ref sur une classe autre que la racine
C1
C5
as1* : int
as5* : int
lesRefC5
{complete, disjoint}
C2
as2:
C3
as3:
{i, d}
C4
as6* : int
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.
Module 2 page
Modèle navigationnel ©
Page 59
118
Module 2
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
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.
Module 2 page
Modèle navigationnel ©
119
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.
Module 2 page
Modèle navigationnel ©
Page 60
120
Module 2
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
Modèle Navigationnel
Passage de UML au Mnav
Exercices
Modèle navigationnel ©
Module 2 page
121
Module 2 page
122
Fin
Modèle navigationnel ©
Page 61
Module 2