• Aucun résultat trouvé

[PDF] Cours persistance JAVA au developpement oriente objet | Cours java

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours persistance JAVA au developpement oriente objet | Cours java"

Copied!
50
0
0

Texte intégral

(1)

Institut Mines-Télécom

Gestion de la

persistance des objets

CSC4002

Claire Lecocq

(2)

Plan du document

1.

Motivations

1.

Application exemple : la médiathèque

2.

Problématique en image

2.

Quel schéma de Base de Données Relationnelle ?

3.

Gérer la persistance dans Java : JDBC

(3)

Institut Mines-Télécom

Application exemple : la médiathèque

Développement orienté objet : standard de fait

Où sont stockées les données ?

Durée de vie ?

Partage ?

Volume de données ?

Une idée ?

Janvier 2014 3

(4)

Problématique en image

Stockage des données

Application

Mapping

chargement

déchargement

UML

Développement

Objet

Modèle E/A

Relationnel

SGBD

(5)

Institut Mines-Télécom

Plan du document

1.

Motivations

2.

Quel schéma de Base de Données Relationnelle ?

Processus de conception d’une BD (rappel)

Existe t-il un modèle relationnel pour un diagramme de

classes ?

Diagramme de classes de la médiathèque

Traduction du diagramme en dehors de l’arbre

d’héritage

Héritage

Revenons sur la sémantique de l’héritage

1

Traduction de l’héritage en modèle relationnel

3.

Gérer la persistance dans Java : JDBC

4.

Conclusion

Janvier 2014

1 la généralisation/spécialisation est appelée dans ce cours héritage

(6)

Processus de conception d’une BD

(rappel)

Monde

réel

Recueil des besoins et analyse

Besoin de la BD

Conception logique

Schéma conceptuel (haut niveau)

Transformation du modèle

Schéma conceptuel (spécifique SGBD)

Conception physique

Schéma physique (spécifique SGBD)

Indé

penda

nt

du

SG

BD

Spéci

fique

à

un

SG

BD

Prise en compte

des

particularités du

SGBD

Contrat E/A UML Placement Disque Optimisation Relationnel Réseau Hiérarchique

(7)

Institut Mines-Télécom

Existe t-il un modèle relationnel pour un

diagramme de classes ?

Si

Hypothèse 1 : existe correspondance E/A

diagramme

de classes

Hypothèse 2 : existe traduction E/A  relationnel

Voir cours CSC4001 : Introduction aux BD relationnelles

Diapositives 13 et 14 pour la médiathèque

Alors

Transformer un diagramme de classes UML (partie

statique) en un schéma relationnel « équivalent » peut

se ramener à la transformation d’un schéma E/A vers un

schéma relationnel

Janvier 2014 7

(8)

Hypothèse 1 :

Correspondance E/A

diagramme de classes

SI-BD

Entité/Association

Génie logiciel - langages

Diagramme de classes

Entité

Classe

Entité faible

Composition

Association sans attribut

Association

Association avec attribut(s)

Classe d’association

Pas de correspondance

Héritage – Généralisation,

spécialisation

Clé

Identité d’objet

Attribut calculé

Attribut dérivé

Opération

Cardinalités

Multiplicités

Attribut d’une entité de

paramètres

(9)

Institut Mines-Télécom

Hypothèse 1 :

Correspondance E/A

diagramme de classes

SI-BD

Entité/Association

Génie logiciel - langages

Diagramme de classes

Entité

Classe

Entité faible

Composition

Association sans attribut

Association

Association avec attribut(s)

Classe d’association

Pas de correspondance

Héritage – Généralisation,

spécialisation

Clé

Identité d’objet

Attribut calculé

Attribut dérivé

Opération

Cardinalités

Multiplicités

Attribut d’une entité de

paramètres

Attributs de classe

9 Janvier 2014

Problème

héritage

(10)
(11)

Institut Mines-Télécom

Traduction du diagramme en dehors de

l’arbre d’héritage

Classe façade

(12)

Traduction du diagramme en dehors de

l’arbre d’héritage

(13)

Institut Mines-Télécom

Règles de traduction

Classe  entité

Attribut d’instance  attribut d’entité

Adapter au mieux les correspondances de types

Définir la clé de l’entité

Association, agrégation  association

Composition  entité faible

Multiplicités  cardinalités

(14)

Traduction du diagramme en dehors de

l’arbre d’héritage

Modèle entité/association

Genre nom : varchar(20) nbEmprunts : integer Localisation salle : varchar(20) rayon : varchar(5) Client nom : varchar(20) prenom : varchar(20) adresse : varchar(20) nbEmpruntsEffectues : integer nbEmpruntsDepasses : integer nbEmpruntsEnCours : integer dateInscription : date codeReduction : integer dateRenouvellement : date Categorie nom : varchar(20) nbEmpruntsMax : integer tarifInscription : float coefDuree : float coefTarif : float codeReducUsed : integer FicheEmprunt dateEmprunt : date dateLimite : date depasse : integer correspondre appartenir 1,1 1,1 0,n 0,n

(15)

Institut Mines-Télécom

Hypothèse 2 : Traduction du diagramme

en dehors de l’arbre d’héritage

Modèle relationnel

15 Janvier 2014 Genre nom : varchar(20) nbEmprunts : integer Localisation salle : varchar(20) rayon : varchar(5) Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours dateInscription codeReduction dateRenouvellement catclient Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed FicheEmprunt dateEmprunt dateLimite depasse nom prenom

(16)

Il reste la partie la plus intéressante :

l’arbre d’héritage !

Genre nom : varchar(20) nbEmprunts : integer Localisation salle : varchar(20) rayon : varchar(5) Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours dateInscription codeReduction dateRenouvellement catclient Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed FicheEmprunt dateEmprunt dateLimite depasse nom prenom

(17)

Institut Mines-Télécom

Revenons sur la sémantique de l’héritage

(1)

Spécialisation peut

être :

Partielle*

: une instance

peut ne pas être

spécialisée

Totale**

: toute instance

est spécialisée dans au

moins une classe enfant

Janvier 2014

Personne

nom

prénom

adresse

Partielle

Personne

Etudiant

Salarie

Totale

Salarie = Prive

Public

Etudiant

noEtud

cycle

Salarie

salaire

Public

indice

Prive

prime

X

17

(18)

Revenons sur la sémantique de l’héritage

(2)

Spécialisation peut

être :

Recouvrement : une

instance peut être

spécialisée dans

plusieurs classes

enfants*

Partition : une instance

est spécialisée dans au

plus une classe enfant

Personne

nom

prénom

adresse

Recouvrement

Etudiant

Salarié

Partition

Prive

Public =

Etudiant

noEtud

cycle

Salarie

salaire

Public

indice

Prive

prime

Doctorant

vacataire

•Dans les cours UML et Java, l’héritage multiple a été ignoré pour raison de simplicité et

aussi parce que Java ne l’autorise pas (contrairement à C++)

(19)

Institut Mines-Télécom

Traduction de l’héritage en modèle

relationnel

3 correspondances possibles :

1.

Correspondance directe

2.

Correspondance ascendante

3.

Correspondance par aplatissement

3.1.

Pour partition

3.2.

Pour recouvrement

Janvier 2014 19

(20)

Correspondance directe (n° 1)

Une classe  une relation BD

Liaison entre les relations se fait via la clé

Correspondance de l’arbre de Document

Document code titre auteur annee empruntable emprunte nbEmprunts Audio code classification Video code dureeFilm mentionLegale Livre code nbPages

Création

d’une clé

Clé +

clé étrangère

Relation clé Contrainte d’intégrité référentielle

(21)

Institut Mines-Télécom

Correspondance directe (n° 1) - suite

Janvier 2014 Document code titre auteur annee empruntable emprunte nbEmprunts Audio code classification Video code dureeFilm mentionLegale Livre code nbPages Relation clé Contrainte d’intégrité référentielle

create view vueDocument(code, titre, auteur, annee,

empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts, typedoc, classification, nombrePages, dureeFilm, mentionLegale) as

select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Audio', classification, null, null, null

from audio, document

where audio.code = document.code

union

select document.code, titre, auteur, annee, empruntable,

emprunte, salle,rayon,nomGenre,nbEmprunts,'Video', null, null, dureeFilm, mentionLegale

from video, document

where video.code = document.code

union

select document.code, titre, auteur, annee, empruntable, emprunte, salle,rayon,nomGenre,nbEmprunts,'Livre', null, nombrePages, null, null

from livre, document

where livre.code = document.code ; VueDocument code titre auteur annee empruntable emprunte nbEmprunts Typedoc Classification nombrePages Durrefilm Mentionlegale Vue Construction de la vue par requête 21

(22)

Correspondance directe pour la

médiathèque

Document code titre auteur annee empruntable emprunte nbEmprunts nomGenre salle rayon Audio code classification Video code dureeFilm mentionLegale Livre code nbPages Genre nom nbEmprunts Localisation salle rayon Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours

catclient dateInscription codeReduction dateRenouvellement Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed FicheEmprunt nom prenom code dateEmprunt dateLimite depasse

Solution retenue pour le TP

VueDocument

code titre …

(23)

Institut Mines-Télécom

Correspondance directe et typologie des

arbres d’héritage

Spécialisation

Spécialisation

Remarques

Totale

Partielle

Partition

Recouvrement

OK

Vérification : 1

tuple de la

« relation

parent » est

toujours

référencé par 1

tuple de la

« relation

enfant »

OK

OK

Vérification :

non-duplication de

clé entre

« relations

enfants »

OK

Reconstitution de

l'objet par jointure

Sémantique très

proche du modèle

objet

Fonctionne pour

tout arbre d’héritage

Janvier 2014 23

(24)

Correspondance ascendante (n° 2)

Chaque classe spécialisée  une relation BD

Classe parent  une vue

Correspondance de l’arbre de Document

CREATE VIEW Document AS SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Audio

UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Video

UNION SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts FROM Livre

Document code titre auteur annee empruntable emprunte nbEmprunts Audio code titre auteur annee empruntable emprunte nbEmprunts classification Video code titre auteur annee empruntable emprunte nbEmprunts dureeFilm mentionLegale Livre code titre auteur annee empruntable emprunte nbEmprunts nbPages Vue Construction de la vue par requête

(25)

Institut Mines-Télécom

Correspondance ascendante pour la

médiathèque

Une vue n’est pas une relation BD !

Pas de clé  non référençable par une clé étrangère

Janvier 2014 Audio code Video code Livre code Document code FicheEmpruntAudio code nom prenom Client nom prenom FicheEmpruntVideo code nom prenom FicheEmpruntLivre code nom prenom FicheEmprunt 25

(26)

Correspondance ascendante et typologie

des arbres d’héritage

Spécialisation

Spécialisation

Remarques

Totale

Partielle

Partition

Recouvrement

OK

KO

OK

KO

Redondance

de données

Multiplie les relations

Évite les jointures pour reconstruire les

objets

Spécialisation totale. Classe abstraite =

vue (relation virtuelle)

Difficile d’assurer l’unicité des

identificateurs

(27)

Institut Mines-Télécom

Correspondance par aplatissement (n°

3.1)

Ensemble des classes de la hiérarchie  une seule

relation BD

Éventuellement chaque classe « enfant »  une vue

Correspondance de l’arbre de Document

Janvier 2014

CREATE VIEW Audio AS

SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classification FROM Document WHERE typeDocument=‘Audio’ Document code titre auteur annee empruntable emprunte nbEmprunts typeDocument classification dureeFilm mentionLegale nbPages Audio code … classification Video code … dureeFilm mentionLegale Livre code … nbPages 27

(28)

Correspondance par aplatissement 3.1

pour la médiathèque

Document code titre auteur annee empruntable emprunte nbEmprunts nomGenre salle rayon typeDocument classification dureeFilm mentionLegale nbPages Genre nom nbEmprunts Localisation salle rayon Client nom prenom adresse nbEmpruntsEffectues nbEmpruntsDepasses nbEmpruntsEnCours typeClient dateInscription dateRenouvellement codeReduction dateCotisation

FicheEmprunt nom prenom code dateEmprunt dateLimite depasse

Solution retenue pour le TP

Categorie nom nbEmpruntsMax tarifInscription coefDuree coefTarif codeReducUsed

(29)

Institut Mines-Télécom

Correspondance par aplatissement 3.1 et

typologie des arbres d’héritage

Spécialisation

Spécialisation

Remarques

Totale

Partielle

Partition Recouvrement

OK

OK

Si attribut

donnant le

nom de la

classe

autorisé à

null

OK

KO

Évite les jointures pour reconstruire les

objets

 Du vide dans la relation (valeurs nulles)

Spécialisation totale : classes abstraites

 relations (concrètes), classes concrètes

 vues (virtuelles)

Souvent la solution la plus simple à

mettre en place; la plus choisie

(30)

Correspondance par aplatissement 3.2

pour la médiathèque

Variante de la correspondance 3.1 avec utilisation

d’un attribut booléen supplémentaire par classe

enfant

Si un document pouvait être à la fois un Audio et

une Vidéo

CREATE VIEW Audio AS

SELECT code, titre, auteur, annee, empruntable, emprunte, nbEmprunts, classification FROM Document WHERE AudioB = 1 Document code titre auteur annee empruntable emprunte nbEmprunts AudioB VideoB LivreB Classification dureeFilm mentionLegale nbPages

(31)

Institut Mines-Télécom

Correspondance par aplatissement 3.2 et

typologie des arbres d’héritage

Spécialisation

Spécialisation

Remarques

Totale

Partielle

Partition

Recouvrement

OK

OK

Si tous les

attributs

booléens

correspondant

aux classes

enfants sont

autorisés à

FAUX/NULL

Non pertinent

3.1

OK

idem 3.1

Janvier 2014 31

(32)

QCM – Vrai ou faux

Y a t-il toujours un modèle relationnel

« correspondant » à un diagramme de classes ?

Le nombre de relations dans le modèle relationnel

est-il égal au nombre de classes dans le

diagramme de classes ?

Une classe abstraite est-elle toujours traduite par

une vue ?

S’il existe plusieurs modèles relationnels

« correspondant » à un diagramme de classes, je

choisis au hasard : il n’y a pas de critère de choix

?

(33)

Institut Mines-Télécom

Plan du document

1.

Motivations

2.

Quel schéma de Base de Données Relationnelle ?

3.

Gérer la persistance dans Java : JDBC

1.

Qu’est ce que JDBC ?

2.

Que faire pour pouvoir utiliser JDBC ?

3.

Principaux objets mis en œuvre

1.

Tuyaux de communication : Connection et Statement

2.

Exécution d’une requête : ResultSet

3.

Correspondance de type

1.

Exemple sur les chaînes de caractères

2.

Correspondance de type SQL/Java

4.

Étapes d’interaction avec le SGBD

5.

Politique de gestion de la persistance

4.

Conclusion

Janvier 2014 33

(34)

Qu’est ce que JDBC ?

Java DataBase Connectivity

API Java pour accéder à des SGBDR via SQL

Indépendance / SGBD cible (via des pilotes)

Fourni par le paquetage java.sql

Interfaces

Implémentées dans les pilotes (en anglais, driver)

Dépendants des SGBDs cibles

« Tout » SGBD a un pilote JDBC

SGBD

Application java

Pilote

Protocole

du SGBD

(35)

Institut Mines-Télécom

Que faire pour pouvoir utiliser JDBC ?

Avoir un pilote

Le référencer dans le CLASSPATH

Dans chaque classe qui utilise des ordres JDBC

Importer le paquetage java.sql

import java.sql.*;

Charger en mémoire la classe du (des) pilote(s) avant

d’utiliser JDBC :

Class.forName("oracle.jdbc.OracleDriver");

Class.forName("com.mysql.jdbc.Driver" );

Class.forName("org.postgresql.Driver" );

Janvier 2014 35

(36)

Tuyaux de communication :

Classe Connection et Statement

Application java

Pil

ote

Po

stgre

SQL

SGBD

PostgresSQL

Statement statement1

« SELECT * FROM Document »

Statement statement2

Statement statement3

Media : Mediatheque

Nom : string

….

Connection : @Connection

Constructeur()

rechercheBD()

miseAJourBD()

Destructeur()

(37)

Institut Mines-Télécom

Exécution d’une requête :

Classe ResultSet

Janvier 2014

Application java

Pil

ote

My

SQL

SGBD

PostgresSQL

Localisation

Statement stmt1

ResultSet rset =

stmt1.executeQuery

("select * from

localisation");

media : Mediatheque

Nom : string

….

lesLocalisations: collection

de @Localisation

37

(38)

Correspondance de types :

Exemple sur les chaînes de caractères

Application java

String salle

SGBD

PostgresSQL

Localisation

salle :

varchar(20)

Statement stmt1

rset contient

"select * from localisation";

while (rset.next()) {

String salle =

rset.getString("salle");

}

(39)

Institut Mines-Télécom

Correspondance de type SQL/Java (1)

Type SQL

Méthode recommandée

numeric

Java.Math.BigDecimal getBigDecimal()

integer

int getInt()

float

double getDouble()

char, varchar String getString()

date

java.sql.Date getDate()

java.util.Date

Janvier 2014 39

(40)

Correspondance de type SQL/Java (2)

Pas de booléen en bases de données !

Document :

empruntable et emprunte : boolean dans le

diagramme de classe

empruntable et emprunte : integer dans la base

de données

ResultSet rset = stmt.executeQuery("select * from

document");

while (rset.next()) {

boolean empruntable =

rset.getInt("empruntable") > 0;

boolean emprunte = rset.getInt("emprunte") >

0;

}

(41)

Institut Mines-Télécom

Étapes d’interaction avec le SGBD

1.

Ouvrir une connexion

Instance de Connection

2.

Créer des « fils » pour supporter l’envoi d’instructions SQL

au sein de la connexion

Requête non paramétrée dans une instance de

Statement

Requête paramétrée dans une instance de

PreparedStatement

INSERT INTO localisation (salle, rayon) values (?,

?)

3.

Demander l’exécution de ces instructions par le SGBD :

Requête d’interrogation (SELECT) : méthode

executeQuery() sur le *Statement

Requête de mise à jour (INSERT, UPDATE, DELETE) :

méthode executeUpdate() sur le *Statement

4.

Fermer la connexion : méthode close() sur la connexion

(42)

1. Établir une connexion

String driver = "org.postgresql.Driver";

String urlBd = "jdbc:postgresql://mysql-inf/TPCONCEPTION";

try {

Class.forName(driver).newInstance();

}catch(Exception cnfe) {

throw new OperationImpossible("Echec acces Pilote BD- " +

driver + " " + cnfe);

}

Statement stmt = null;

try {

laConnexion =

DriverManager.getConnection(urlBd,compte,passe);

} catch(SQLException qe) {

throw new OperationImpossible("Echec connexion BD- " + qe

+ " " + urlBD);

(43)

Institut Mines-Télécom

2 et 3. Exécuter une requête de mise à

jour (1)

private void insererBD(Document doc) throws

OperationImpossible {

try {

PreparedStatement stmt;

if (doc instanceof Audio ){

Audio au = (Audio) doc;

stmt = laConnexion.prepareStatement("INSERT INTO

document (code, titre, auteur, annee, empruntable,

emprunte, salle, rayon, nomgenre, nbemprunts,

typedoc, classification) values (?, ?, ?, ?, ?, ?,

?, ?, ?, ?, 'Audio', ?)");

stmt.setString(11, au.getClassification());

} else {

// Video puis Livre

}

Janvier 2014 43

(44)

2 et 3. Exécuter une requête de mise à

jour (2)

stmt.setString(1, doc.getCode());

stmt.setString(2, doc.getTitre());

stmt.setString(3, doc.getAuteur());

stmt.setString(4, doc.getAnnee());

stmt.setInt(5,doc.estEmpruntable()?1:0);

stmt.setInt(6, doc.estEmprunte()?1:0);

stmt.setString(7, doc.getLocalisation().getSalle());

stmt.setString(8, doc.getLocalisation().getRayon());

stmt.setString(9, doc.getGenre().getNom());

stmt.setInt(10, doc.getNbEmprunts())

} catch (SQLException e) {

throw new OperationImpossible("Echec insertion BD-

" + e);

}

(45)

Institut Mines-Télécom

QCM - Vrai/faux

Puis-je me passer de « driver » pour interagir avec le

SGBD ?

Dois-je créer une connexion (objet Connection) à

chaque fois que je dois interagir avec le SGBD et la

refermer après chaque interaction ?

Faut –il, en fonction du type de requête SQL à exécuter,

choisir judicieusement la méthode execute* à utiliser

Un ResultSet peut-il contenir de nombreux « tuples »

?

Les types Java et les types de bases de données

correspondent-ils parfaitement ?

La méthode prepareStatement est-elle utilisée pour

les requêtes paramétrées ?

Janvier 2014 45

(46)

Politique de gestion de la persistance

Comment intégrer le code JDBC qui assure le

chargement et le déchargement des objets Java

depuis la BD ?

En structurant au mieux le code (limiter le nombre

d’opérations à modifier)

Quel(s) objet(s) charger et quand ?

(47)

Institut Mines-Télécom

Chargement / déchargement (1)

Chargement

Constructeur d’objet intégrant tous les attributs

Statique : constructeur de « collections »

Similaire au TP médiathèque sérialisée

Volume de données contrôlé

Dynamique : constructeur d’objet (nécessité d’une clé

pour sélectionner l’objet)

Charger les objets connexes

Déchargement

Statique : à la fin du programme (attention aux pertes

d’information)

Dynamique : dans les opérations de mise à jour

Janvier 2014 47

(48)

Chargement / déchargement (2)

Statique

Adapté aux petits volumes de données

Faible taux de mises à jour

Simple à mettre en œuvre

Dynamique

Adapté aux volumes de données importants

Fort taux de mises à jour

Meilleure résistance aux fautes

(49)

Institut Mines-Télécom

Plan du document

1.

Motivations

1.

Application exemple : la médiathèque

2.

Problématique en image

2.

Quel schéma de Base de Données Relationnelle ?

3.

Gérer la persistance dans Java : JDBC

4.

Conclusion

Janvier 2014 49

(50)

Conclusion

Pour un diagramme de classes

Plusieurs modèles relationnels pour la persistance

Savoir choisir

Schéma relationnel

Relation + attributs avec des domaines + clé

+

contraintes d’intégrité

JDBC : une solution technique

« bas » niveau

Canevas logiciels industriels

Hibernate, TopLink

Proposition de modèles de persistance

Figure

Diagramme de classes de la médiathèque

Références

Documents relatifs

b) Les échanges d'information entre les institutions requièrent donc, mais créent aussi, naturellement ou volontairement des modifications appelées transpositions

Dans ces conditions, les écritures dont l’élève s’occupe ne sont pas pour lui « un dispositif pour l’évocation de pratiques donnant un sens à l’activité

Résumé Cet article présente un nouveau protocole d’apprentissage de la programmation dans lequel les séquences de travail sont structurées en cycles : d’abord

Pour optimiser les conditions favorisant le développement de ces compétences lors des séances de jeux de rôle, les pistes suivantes ont été identifiées à partir d’une

Une réflexion autour d’un travail collectif sur la définition des facettes, des rôles et enjeux du Directeur d’école pourrait permettre de construire une identité partagée

Elle avait elle- même travaillé en tant qu’assistante réalisateur sur le film de fiction Le Faussaire de Volker Schlöndorff, venu tourner au Liban l’histoire d’un

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

L'étude des thèmes et des motifs exploités lors de l'entrée solennelle de Charles Quint à Bologne en 1529 et de la procession solennelle après son couronnement en 1530