Telechargé par hbkstudio1

Cours patron-de-conception MRPRO avancement2-converted

publicité
Patrons de Conception
Raoudha MARAOUI
[email protected]
Plan
I.
II.
III.
IV.
V.
Introduction
Patrons de conception
Les modèles de création
Les modèles de structures
Les modèles de comportement
I.
Introduction
I.
Introduction
• Cycle de vie d’un logiciel
Maintenance
Analyse
Conception
Implémentation
Test
○ Conception
• Macroscopique
• Microscopique ou détaillée
○ Maintenance
• Corrective: correction des erreurs résiduels
• Evolutive: intégrer de nouvelles
fonctionnalité dans le logiciel
Utilisation
I.
Introduction
La conception d’un logiciel : un art difficile
○
Une conception réutilisable, extensible et efficace (complexité
linéaire non exponentielle) est une activité extrêmement
difficile.
○
Concepteur:
○
□
□
Novice
Expert
Un concepteur novice hésite entre les différents variantes:
Classe abstraite/ classe effective, relation de héritage/ relation
client/serveur.
○
○
Un concepteur expert trouve tout de suite la solution
Quel est le secret?
□
L’expérience
I.
○
Introduction
L’implémentation :
□ Est une activité répétitive : choses semblables mais non identiques
□ Solution : des algorithmes fondamentaux et des structures de
données fondamentales.
○
Conception :
□ Répétition : choses semblables mais non identiques
□ Solution : solution conceptuelle proposées sont connues
sous le
nom : Patron de conception [1]
= des modèles de conception
= des microarchitectures logicielles
= Design Pattern.
[1] « Design Patterns » Catalogue de modèle de conception réutilisable ( 1995 version Anglaise, version
française (traduction) 1990). Ce cours va présenter quelques patterns issue de ce livre. Ces patterns sont
connues sous le nom Patterns de E.Gamma ou encore Patterns de GoF ( bandes de quatres).
I.
○
Introduction
Référence de base :
« Design Patterns : Catalogue de modèle de conception réutilisable »
-
Ce cours va présenter quelques patrons issus de ce livre,
Ces patrons son connu sous le nom de patron « E.Gamma » ou
encore « patterns de Gof » ( la bande des quatres)
Les patterns de Gof sont au nombre de 23
Les deux objectifs fondamentaux de la conception OO:
- Ne pas réinventer la roue
- Réutiliser systématiquement des solutions conceptuels qui ont
fait leurs preuve.
II. Design Pattern :
Définition, propriétés, description et
catalogues
II.
Design Pattern
2.1 Définition
□ Un modèle de conception décrit un problème (sous-entendu
problème de conception) qui se manifeste constamment dans
notre environnement et décrit également le cœur de la
solution de ce problème. De telle manière que plusieurs
utilisateurs de ce modèle de conception ne se font pas de la
même manière.
□ Un modèle de conception propose une solution générique
(solution paramétrée encore squelette) à une famille de
problèmes.
II.
Design Pattern
2.2 Propriété
□ Un bon modèle de conception possède les caractéristiques
suivantes :
○ Il résout un problème de conception récurrent.
○ La solution proposée n’est pas évidente
○ La solution proposée doit être élégante et utile.
II.
Design Pattern
2.3 Description des modèles de conception
○ Tous les modèles de conception de E.Gamma sont
décrits selon le même canevas (format unique)
○ Un tel canevas comporte plusieurs rubriques :
intention, motivation, indication d’utilisateurs,
structure…
II.
Design Pattern
2.4 Catalogue de modèle de conception
II.
Design Pattern
2.5 Organisation de catalogues
III. Les modèles de création
III. Les modèles de création
3.1 Objectif
o
Les modèles de conception de création de E.Gamma sont en nombre de
5 : Fabrication, Fabrique abstraite, Prototype, Singleton et Moteur.
o
Les objectifs principaux de ces patrons sont :
1.
Abstraire le processus
d’instanciation( ou de
création d’objets)
2.
Cacher la création
d’un objet : qui a
créer l’objet, quand et
comment ?
Conséquence:
Créer , composer, assembler et représenter les objectifs pour des instances
d’une façon simple et flexible.
III. Les modèles de création
Les deux caractères récurrents sont :
1.
Ces modèles encapsulent les
connaissances concrètes des
classes formants le système
étudié.
2.
Ces modèles cachent
le
processus
de
création des objets.
III. Les modèles de création
3.2 Les modèles singletons (objet créateur)
o
Intention
Ce modèle garantit qu'une classe possède une seule instance (objet) et fournit
un accès (interface) de type global à cette classe.
o Motivations
Lorsqu’un seul serveur d’impression qui gère l’impression sur plusieurs
imprimantes.
• Un seul ordonnanceur pour gérer plusieurs processus.
• Utilisation d’objets partagés (variable globale dans le langage procédural).
III. Les modèles de création
3.2 Les modèles singletons (objet créateur)
o Structure (microarchitecture) :
Singleton
+donnee_singleton
+operation_singleton
+aquis_singleton
+instance():singleton
instance_unique
o Constituants :
La classe singleton offre une opération classe permettant d’accéder à la seule
instance.
Collaboration :
Le client doit passer par l’interface instance pour accéder à instance_unique
de la classe singleton .
o
III. Les modèles de création
TD1
o Enoncé:
Utiliser le patron singleton pour implémenter en java une variable
globale (objet partagé) par exemple un compteur de type entier.
o Solution:
Faire des correspondances compteur-> singleton
Connaissances concrètes :
•
•
•
•
•
Cpt
Incrémenter
Décrémenter
Réinitialiser
Valeur
Donnée Singleton
Opération Singleton
Acquis Singleton
III. Les modèles de création
o Solution en JAVA
public class Compteur {
private int cpt ;
private static Compteur instance_Unique= NULL ;
private Compteur(){
cpt=0 ;
}
public void reinitialiser(){
cpt=0 ;
}
public void incrementer(){
cpt++ ;
}
public void decrementer (){
cpt-- ;
}
public static Compteur instance(){
If (instance_Unique =NULL)
intance_Unique= new Compteur();
return instance_Unique ;
}
public int valeur()
{ return cpt ;
}
}
class test{
public static void main(String args[]){
Compteur.instance().incrementer();
Compteur.instance().incrementer();
Compteur.instance().incrementer();
Compteur.instance().decrementer();
System.out.println(‘’ valeur = ‘’+
compteur.instance().valeur()) ;
}
}
Compteur
- Cpt :entier
+ incrementer() :void
+ décrementer():void
+ initialiser(): void
+valeur(): entier
+ instance():Compteur
instance_Unique
III. Les modèles de création
3.3 Le modèle monteur (objet créateur)
o Intention
• Il offre le moyen de créer des objets complexes.
• Il sépare le processus (ou l’algorithme) de création et la représentation des
objets de telle manière que le même processus puisse être utilisés par des
représentations différentes,
o Motivations
Un objet complexe peut comporter plusieurs composants et il sera crée
progressivement ( partie par partie).
RTF
ASCII
Texte; .ps
…
.pdf
III. Les modèles de création
3.3 Le modèle monteur (objet créateur)
o
Structure (micro-architecture)
Directeur
Construire()
Monteur
Construire_Partie()
MonteurConcret
Produit
Construire()
AcqProduit() : Produit
III. Les modèles de création
3.3 Le modèle monteur (objet créateur)
o
Structure (micro-architecture)
• La classe Monteur alimente la création de l’objet de type Produit.
• Le client va récupérer (à la fin du processus création) l’objet
Produit en passant par l’interface AcqProduit.
Remarque :
Possibilité de réutiliser l’algorithme de construction encapsulé par
l’opération construire offerte par la classe Directeur.
III. Les modèles de création
3.3 Le modèle monteur (objet créateur)
o
Exemple
Analyseur RTF
Conversion
ConversionCaractére()
Fichier
ConversionPolice()
construire()
ConversionParagraphe()
ASCII
Text
ConversionCaractére()
ConversionPolice()
ACQ produit()
ConversionParagraphe()
ConversionCaractére()
« crée »
AcqProduit()
« crée »
ASCII
Text
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
Exercice : Patron Monteur
IV. Les modèles de structure
ou structuraux
IV. Les modèles structuraux
4.1 Objectifs
Les modèles de conceptions structuraux visent la composition des
objets et des classes.
Composition:
En passant par des objets : composition dynamique càd à l’exécution,
On utilise la relation fournisseur_client (UML: agrégation, composition , association..)
En passant par des classes: composition statique càd à la compilation.
On utilise la relation d’héritage (simplex ou multiple) (UML: généralisation,
spécialisation)
IV. Les modèles structuraux
4.2 Le modèle Façade
o
Intention :
- Il propose une vue simple d’un sous système.
o Motivation :
- Pour des applications complexes, on peut proposer une
décomposition par niveau.
- Ainsi l’application est perçue comme une collection de sous
systèmes.
- Un sous-système encapsule des classes (représenté par la
notion de « package » en UML).
IV. Les modèles structuraux
4.2 Le modèle Façade
Fig.1 Idée façade
o Les clients doivent faire des efforts importants pour localiser
ou identifier les classes (appartenant aux sous-systèmes)
souhaitées.
IV. Les modèles structuraux
4.2 Le modèle Façade
Clients
Fig.2
o Fig.2: Les clients visés par le patron Façade n’ont pas besoin de
personnalisation des classes appartenant au sous-système.
IV. Les modèles structuraux
o
Structures
Clients
Fig.2
IV. Les modèles structuraux
o
Constituants
o Façade :
- Elle propose une vue (interface= plusieurs services) simple
des fonctionnalités offertes par le sous-système.
- Elle délègue les requêtes (demandes) venant des clients aux
classes concernées appartenant au sous-système.
- Un seul objet « Façade » pourrait souvent faire l’affaire.
o Les classes des sous-systèmes :
- Elles ne connaissent pas Façade, càd elles ne possèdent pas
des références sur des objets Façade.
o Les clients :
- Ces classes passent inévitablement par Façade.
- Elles ne connaissent pas les classes du sous-systèmes.
IV. Les modèles structuraux
TD2
o Enoncé :
On donne les 3 classes A ,B et C exportant respectivement ra, rb
et rc. Réaliser en java une classe f sous forme d’une Façade
exportant une primitive r utilisant sous forme d’une séquence
ra, rb , rc.
IV. Les modèles structuraux
TD2
o Solution :
A
ra()
B
F
rb()
r()
application
C
rc()
Relation entre classe:
-Structurelles (association, agrégation, composition)
-Non structurelles (dépendance)
IV. Les modèles structuraux
TD2
Public class A{
Public A()
{…}
Public void ra(){ … }
}
Public class B{
Public B()
{…}
Public void rb(){ … }
}
Public class C{
Public C()
{…}
Public void rc(){ … }
}
Public class F {
Public F () { … }
Public void r(){
A a= new A();
B b= new B();
C c= new C();
a.ra();
b.rb();
c.rc();
}
}
Class Application{
Public Application()
{
F f= new F ();
f.r();
}
}
IV. Les modèles structuraux
4.3 Le modèle composite
o Intention :
- Il permet d’organiser des structures composites sous forme
arborescente ou hiérarchique.
- Ces structures comportent des objets individuels (simples ou
atomiques ou terminaux) et des objets composites (ou non
terminaux).
- Le modèle composite propose la même interface aux clients
permettant la manipulation soit des objets terminaux soit des
objets non terminaux.
o Motivation :
- Les structures (arbres, foret) sont largement utilisées en
informatique.
IV. Les modèles structuraux
4.3 Le modèle composite
o Structure:
Composant
enfant
1..*
Operation()
Ajouter(composant)
Client
Supprimer(composant)
AcqEnfant(int)
feuille
composite
Operation()
Operation()
Ajouter(composant)
Objet terminaux
Supprimer(composant)
AcqEnfant(int):composant
Objet non terminaux
IV. Les modèles structuraux
4.3 Le modèle composite
o Constituants:
Composant :
- La classe composant possède une interface commune aux
deux types d’objet : terminaux et non terminaux.
- Ainsi elle peut proposer des opérations abstraites et des
opérations abstraites ayant une implémentation par défaut (
avec souvent une sémantique qui ne fait rien) : ajouter() ,
supprimer() et AcqEnfant(int).
Feuille :
- Elle modélise un groupe d’objets terminaux.
- Elle redéfinit ou surcharge les opérations abstraites héritées
de la classe composant.
IV. Les modèles structuraux
4.3 Le modèle composite
o Constituants:
Composite :
- Elle modélise un groupe d’objets non terminaux.
- Elle peut redéfinir toutes les méthodes héritées de la classe
composant.
Client :
- Ils envoi ses requêtes au composant.
IV. Les modèles structuraux
TD3
o Enoncé:
Utiliser le modèle Composite pour modéliser les prédicats
comportant des variables booléennes, des opérateurs
booléens unaires er des opérateurs booléens binaire.
La modélisation proposée doit permettre l’évaluation des
prédicats.
o Illustration :
le prédicat (a^b) v (c^d)v Ꞁe peut être modélisé par l’arbre
suivante :
v
Ꞁ
v
^
a
^
b
c
e
d
IV. Les modèles structuraux
TD3
o Solution:
correspondance :
Variable
Feuille
Unaire
Composite
Binaire
Composite
Prédicat
Composant
Evaluation
Opération
IV. Les modèles structuraux
TD3
o Solution:
correspondance :
Application
Predicat
1
2
Evaluation() :
boolean
Binaire
Variable
evaluation():b
oolean
Unaire
evaluation():b
oolean
evaluation():b
oolean
NON
evaluation():
boolean
Et
Ou
evaluation():
boolean
evaluation():
boolean
IV. Les modèles structuraux
o
Traduction JAVA:
Public abstract class Predicat{
Public abstract boolean evaluation() ;}
Public class variable extends Predicat{
Public abstract class Unaire extends Predicat{
Protected Predicat operande ;
Protected Unaire(Predicat p){
Super();
Private boolean valeur;
Operand=p;}}
Public variable(){
Valeur= false;}
Public boolean evaluation(){
Public class NON extends Unaire{
Public NON(Predicat p){
Super(p);
Return valeur ;
}
}
Public void affecter(boolean v){
Public Boolean evaluation(){
Return ! operande.evaluation();
Valeur= v;}
}
}
IV. Les modèles structuraux
o
Traduction JAVA:
Public abstract class Binaire extends Predicat{
Public class Et extends binaire{
Public ET(Predicat g, Predicat d){
Protected Predicat gauche;
Protected Predicat droite;
Super(g,d) ;}
Public boolean evaluation(){
Protected Biniare(Predicat g, Predicat d){
}
}
Return(g.evaluation()&& d.evaluation())
Super();
}
Gauche=g;
Public class Ou extends binaire{
Droite=d;
Public Ou (Predicat g, Predicat d){
Super(g,d) ;}
Public boolean evaluation(){
Return(g.evaluation()|| d.evaluation() );
}
IV. Les modèles structuraux
Public class Exp{ Public static void main(String args[] ){
Variable a= new variable();
Variable b= new variable();
Variable c= new variable();
Variable d= new variable();
Et e1= new ET(a,b);
Et e2= new Et(c,d) ;
OU exp= new Ou(e1,e2) ;
a.affecter(true);
b.affecter(true);
c.affecter(true);
d.affecter(true);
System.out.println(“res” + exp.evaluation() );} }
V. Les modèles de
comportement ou
comportementaux
V.
Les modèles comportementaux
5.1 Objectif
• Ces modèles permettent de décrire des algorithmes, des
comportements entre objets et communication inter-objet.
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
o Intention
- Le modèle Patron de méthode définit, dans une opération
appelée « Patron méthode », le squelette d’un algorithme.
- Un tel algorithme possède des parties invariantes et des
parties variantes.
- Les parties variantes sont déléguées aux classes
descendantes (sous-classes).
- Le squelette ou la structure de l’algorithme ne doit pas être
touché par les sous-classes.
Rappel : Un algorithme est une séquence d’état qui aboutit à
une solution.
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
o Motivation
ARS : algorithme de recherche séquentiel
Cas1 : ensemble d’éléments stockés dans un tableau.
#define n 10 ;
int a[n] ;
unsigned recherche(int x){
unsigned i;
i=0;
while ((i<n)&&(a[i]!=x))
i++;
return (i<n);
}
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
Cas2: ensemble d’éléments stockés dans une liste linéaire
struct nœud
{
int cle ;
struct nœud* suivant ;
}
struct liste{
struct nœud * premier ;
struct nœud * dernier ;
}
Unsigned recherche (int x){
struct nœud *p ;
p=ll -> premier ;
while(p && p-> cle!=x)
p= p -> suivant;
return p!= null;
}
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
Remarque :
Chose semblable mais non identique : structure ou
squelette de l’algorithme de recherche séquentiel
identique dans les deux cas.
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
o Structure :
Classe abstraite
PatronMethode()
operationPrimitive1()
operationPrimitive2()
Classe concrete
operationPrimitive1()
operationPrimitive2()
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
o Constituants
• Classe abstraite :
- Elle encapsule le squelette (ou la structure) de l’algorithme dans
l’opération PatronMéthode. Celle-ci ne peut pas être surchargé par les
classes descendantes .
− Elle propose des méthodes abstraites (operationPrimitives1() et
operationPrimitives2() ) permettant de modéliser les étapes variantes
de l’algorithme. Ces méthodes ne peuvent pas être appelées par des
clients.
− L’opération PatronMéthode en tant qu’opération effective va appeler
les
opérations
abstraites
(operationPrimitives1()
et
operationPrimitives2()).
V.
Les modèles comportementaux
5.1 Le modèle Patron de méthode
o Constituants
Un tel principe permettant une structure de contrôle inversée est connu
sous le nom de principe Hollywood.
• Classe concrète :
Elle
permet
d’implémenter
les
parties
variantes
(operationPrimitives1() et operationPrimitives2()) de l’algorithme.
Remarque :
1. le modèle PatronMethode est largement utilisé dans les bibliothèques
de classe.
2. La classe abstraite est appelée également « classe comportement »
V.
Les modèles comportementaux
TD4
o Enoncé
Utiliser le patron de conception Patron méthode pour implémenter
l’algorithme de recherche séquentiel.
V.
Les modèles comportementaux
TD4
o Solution
Recherche
« final »
À ne pas surcharger
+ trouver()
#demander()
#avancer()
#courant()
#audela()
liste
tableau
#demander()
#demander()
#avancer()
#avancer()
#courant()
#courant()
#audela()
#audela()
V.
Les modèles comportementaux
TD4
Public Class Tableau extends Recherche
o Solution JAVA
{private int []a ;
Public Abstract Class Recherche
Private int position ;
{
Protected Abstract void demander() ;
Public Tableau(int [] b)
Protected Abstract void avancer();
{
Protected Abstract boolean audela():
Super() ;
Protected Abstract int courant();
a= new int [b.length] ;
Public final boolean trouve (int x)
for (int i=0; i<a.length(); i++)
{demarrer();
While( ! audela() && courant() != X)
avancer();
a[i]=b[i];
}
Protected void demarrer()
Return (!audela());
{
}
Position=0 ;
}
}
V.
Les modèles comportementaux
TD4
Public class Test
o Solution JAVA
{
Protected void avancer()
Public static void main( String [] args)
{ position ++ ;
{ int [] c= {13, 8, 4, 100, 300};
}
Tableau t= new Tableau(c) ;
Protected int courant()
System.out.println(t.trouve(13)) ;
{
System.out.println(t.trouve(8)) ;
Retrun a[position] ;
System.out.println(t.trouve(4)) ;
}
System.out.println(t.trouve(100)) ;
Protected boolean audela()
System.out.println(t.trouve(300)) ;
{return position >= a.length;
}
}
}
}
V.
Les modèles comportementaux
Question
Trouver une modélisation OO en UML de la représentation physique
donnée ci-dessus.
premier
cle suivant
dernier
V.
Les modèles comportementaux
Question
Trouver une modélisation OO en UML de la représentation physique
donnée ci-dessus.
premier
dernier
cle suivant
liste
0..1
premier
0..1
noeud
0..1
cle : integer
dernier
suivant
V.
Les modèles comportementaux
Question
JAVA
Class Nœud
{ private int valeur ;
privateNoeud suivant ;
Public Nœud (int val, Nœud s)
{valeur= val ;
suivant=s ;
}
Public int obtenir_valeur()
{return valeur ;}
Public void changer_valeur(int v){
valeur=v ;
}
Public Nœud obtenir_suivant()
{return suivant ;
}
Public void changer_suivant(Nœud s)
{suivant=s ;}}
Public class liste extends recherche
{
private Nœud premier ;
private Nœud dernier ;
private Nœud courand_ref ;
Public liste()
{super() ;
premier= null ;
dernier= null ;
}
Public void ajouter_apres_dernier(int x)
{ Nœud n= new Nœud(x,null) ;
dernier.changer_suivant(n);
dernier=n;
}
Protected void demarrer()
{courant_ref= premier ;
}
Protected void avancer()
{ courant_ref= courant_ref.obtenir_suivant() ;
}
V.
Les modèles comportementaux
Question
JAVA
Protected int courant()
{ return courant_ref.obtenir_valeur() ;
}
Protected boolean audela()
{
Return courant_ref== null ;
}
Public final void parcours()
{demarrer();
While(!=audela())
{action();
avancer();
}
}
Protected abstract void Action()
{}
}
V.
Les modèles comportementaux
5.2 Le modèle Stratégie
o Intention
- Définit une famille d’algorithmes, encapsule chacun d’entre
eux et les rend interchangeables.
- Le modèle stratégie permet aux algorithmes d’évoluer
indépendamment des clients.
o Motivation
- Un problème donné peut être résolu par plusieurs
algorithmes.
Par exemple: Tri: Tri insersion, tri selection, tri à bulle, tri
rapide, tri par tas,
V.
Les modèles comportementaux
5.2 Le modèle Stratégie
-Une mauvaise solution: codifier l’algorithme au sein de la
classe client
Class Client {…
Public void tri_insertion(){…}
…}
Problème:
- L’évoluvité de la classe Client ne sera pas aisée.
Idée forte du modèle stratégie et développer les algorithmes
et les clients.
V.
Les modèles comportementaux
5.2 Le modèle Stratégie
o Structure
Strategie
Contexte
interfaceContexte()
Strategie
interfaceAlgorithme()
StrategieConcret A
StrategieConcret B
StrategieConcret C
interfaceAlgorithme()
interfaceAlgorithme()
interfaceAlgorithme()
V.
Les modèles comportementaux
5.2 Le modèle Stratégie
o Constituant
• Strategie:
- Elle propose une interface commune à tout les algorithmes
représentés
• StrategieConcrete:
- Elle implémente l’interface proposée par la classe abstraite
« strategie »
- Elle encapsule un algorithme bien définit.
• Contexte:
-Elle modélise le contexte d’application des algorithmes
représentés
- Elle gère une référence sur un objet strategie.
- Elle peut fournir une interface offrant les données
nécessaires à l’exécution d’un algorithme représenté.
V.
Les modèles comportementaux
5.2 Le modèle Stratégie
o Collaboration
• Le client commence par choisir une stratégie concrète (à
défaut on peut lui proposer une stratégie choisie à priori) et il
configure l’objet contexte avec la stratégie choisie. Ensuite il
passe par l’objet contexte.
• Les deux classes « contexte » et « strategie » peuvent interagir
par l’implémentation d’une stratégie concrète.
• L’interaction entre contexte et strategie peut être assurée par
une référence sur un objet contexte géré par strategie, soit par
dépendances non-structurelles (paramètres formels).
V.
Les modèles comportementaux
TD5
o Enoncé
• Mettre en évidence les apports du modèle stratégie pour une
conception OO de table de hashage.
Rappel: Table de hashage
Fonction de hashage
Clef1
Clef2
1.
2.
Clef3
Clef4
…
Espace de clés
3.
m
4.
Espace des indices
V.
Les modèles comportementaux
TD5
• La fonction hashage permet de transformer une clé vers un
indice.
• Pour une entrée (où un indice appartient à [0,m-1] on peut lui
attacher plusieurs clefs.
• Ceci est connu sous le nom d’une collision.
H(k)= ord(k) mod m
ord(k)=k
11,1,6,7,13,8,14,5
n=8
m=5
0
m-1
0
5
1
11
2
7
3
13
4
14
1
8
6
V.
Les modèles comportementaux
TD5
• Fonction de hashage
Méthode de division:
h(k)= k mod m
avec m est un nombre premier et k un entier.
Méthode de multiplication:
h(k)=[h(KA, mod 1)]
KA mod 1 représente la partie décimale de KA
V.
Les modèles comportementaux
TD5
o Solution
• Correspondance
contexte
Hashage
strategie
Fonction de hashage
strategieConcret A
Division
strategieConcret B
Multiplication
V.
Les modèles comportementaux
TD5
o Solution
Hashage
ajouter()
FonctionDeHashage
Supprimer()
h(k:integer,n:integer) :integer
Rechercher()
Division
Multiplication
h(k:integer,n:integer) :integer
A:real
h(k:integer,n:integer) :integer
Affecter_A (a:real)
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Intention
- Ce modèle introduit deux concepts: sujet et observateur.
- Il permet d ’établir une interdépendance souvent de type 1
à plusieurs
- Un sujet observé par plusieurs observateurs.
- Le changement de l’objet observé entraine une
modification vers ses observateurs
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Motivation
a
b
c
80
10
10
50
30
20
40
30
30
sujet
a=50%
b=30%
c=20%
notifié
Requête pour
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Structure
Sujet
notifier()
1..*
observateur
Attache(o:observateur)
Observateur
MiseAjour()
Detache (o:observateur)
Sujet concret
Observateur concret
EtatObservateur
EtatObservateur
AcqEtat()
sujet
MiseAjour()
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Constituants
• Sujet:
- Elle propose une interface permettant d’attacher et de détacher
des observateurs dynamiquement
- Elle connait ses observateurs via une référence.
- Elle propose une interface de notification (opérateur notifié)
permettant d’informer ses observateurs d’un changement d’état
d’un sujet concret.
• Sujet concret:
- Elle mémorise l’état d’un sujet concret qui pourrait intéresser
un observateur concret
- Elle fournit une interface (AcqEtat())permettant d’aquérir son
état.
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Constituants
• Observateur:
- C’est une classe abstraite qui propose une interface de mise à
jour commune à tous les observateurs concrets
• Observateur concret:
- Elle implémente l’interface de mise a jour
- Elle mémorise un état lié aux aspect pertinents du sujet observé
- Elle gère une référence su le sujet observé (ici l’association
ayant comme rôle sujet)
V.
Les modèles comportementaux
5.3 Le modèle Observateur
o Collaboration
• Un sujet concret qui détecte un changement lié à son état active
l’opération « notifier », celle-ci informe tout les observateurs
observant ce sujet concret,
• Chaque observateur concret concerné va activer l’opération mise
à jour, celle-ci pourrait demander des renseignements auprès du
sujet concerné,
V.
Les modèles comportementaux
TD6
o Enoncé
• En utilisant le modèle observateur, proposer une C.OO d’un sujet
ayant trois grandeurs A, B et C et observés par 3 afficheurs:
tabulaire, histogramme et circulaire.
V.
Les modèles comportementaux
TD6
o Solution
Grandeur
Attacher(visualisation)
1..*
Détacher(visualisation)
Observateur
Visualisation
MiseAjour()
Notifier()
Tabulaire
Histogramme
Circulaire
A:real
A:real
A:real
GrandeurReelle
A:real
B:real
B:real
B:real
B:real
C:real
Visualisation()
C:real
Visualisation()
C:real
Visualisation()
C:real
ObtenirA ():real
Miseajour()
Miseajour()
Miseajour()
sujet
ObtenirB():real
sujet
ObtenirC():real
sujet
V.
Les modèles comportementaux
5.4 Le modèle itérateur
o Intention
- Il définit une méthode d’accès séquentielle à un agrégat
d’objet sans dévoiler sa représentation interne.
- Agrégat est un objet stockant plusieurs objets: c’est une
structure composite
o Motivation
- Des structures de données ou des agrégats (comme table,
liste linéaire, arbre, …) peuvent être parcourue en adoptant
plusieurs itinéraires,
- Table
de gauche à droite
de droite à gauche
V.
Les modèles comportementaux
5.4 Le modèle itérateur
o Motivation
Idem, pour les listes:
Liste
Premier()
Suivant()
Dernier()
Elementcourant()
Supprimer()
Ajouter()
- Il s’agit d’une mauvaise solution, car on intègre dans la
structure de donnée (ou dans l’agrégat), les opérations liées
au parcours séquentiel de cet agrégat.
- Idée: découpler des techniques séquentielles appelées
itérateurs.
V.
Les modèles comportementaux
5.4 Le modèle itérateur
o Structure
Iterateur
Premier()
Suivant()
Agregat
termine():boolean
CreerItérateur():iterateur
Elementcourant()
AgregatConcret
IterateurConcret
CreerItérateur():iterateurConcret
agregat
V.
Les modèles comportementaux
5.4 Le modèle itérateur
o Constituants
-Iterateur:
• Il offre une interface (premier, suivant, termine, elementCourant)
permettant de parcourir d’une façon séquentielle un agrégat, Bien
entendu il s’agit d’une classe abstraite.
- IterateurConcret:
• Il implémente l’interface proposée par Iterateur,
• Il gère une référence sur un agrégat concret,
• Il gère un indexe permettant de connaitre l’élément courant.
- Agregat:
• Il propose une interface abstraite permettant de créer des
itérateurs,
-AgregatConcret:
• Il implémente l’interface proposée par Agregat.
V.
Les modèles comportementaux
5.4 Le modèle itérateur
o Collaboration
-Itérateur concret assure le suivi de l’élément courant de l’agrégat et
permet de déterminer l’élément suivant dans le parcours.
V.
Les modèles comportementaux
TD7
o Enoncé
-En s’inspirant du modèle itérateur proposer deux itérateurs
permettant de parcourir un tableau de gauche à droite et de droite à
gauche.
V.
Les modèles comportementaux
TD7
o Solution
Iterateur
Premier()
Tableau
Suivant()
element(integer):T
termine():boolean
Longueur():integer
Elementcourant()
Afficher(iterateur)
agregat
agregat
GD
DG
index
index
Premier()
Premier()
Suivant()
Suivant()
termine():boolean
termine():boolean
Elementcourant()
Elementcourant()
V.
Les modèles comportementaux
TD7
Void afficher (iterateur it) {
it.premier();
While(!it.premier())
It.suivant;}
Tableur t=new Tableur();
GD g=new GD(t);
DG d=new DG(t);
t.afficher(g);
t.afficher(d);
Public class GD extends iterateur{
Private Tableau agregat;
Private int index;
Public GD(Tableau t){
Agregat=t;
…}
}
Parcourir le tableau
de droite à gauche
et de gauche à
droite en affichant
ses valeurs.
V.
Les modèles comportementaux
5.5 Le modèle commande
o Intention
- Il encapsule une requête ou une opération dans un
objet ceci permet de gérer plusieurs types de requêtes
(ou opérations).
- Il permet de proposer une solution OO au fonction
CallBack (les paramètres fonctionnels dans les
langages procéduraux)
V.
Les modèles comportementaux
5.5 Le modèle commande
o Motivation
2
Void sousprogramme (…,void(*sp)(…))
{…
(*sp)();
…
1
}
Void sp1 (…){}
Sousprogramme(…,sp1)
1:on active
2:on revient sur l’environnement
Alias:Action/transaction
V.
Les modèles comportementaux
5.5 Le modèle commande
o Structure
Commande
Invocateur
1..*
CommandeConcret
Recepteur
Client
Exécuter()
action
Exécuter()
recepteur
« crée »
V.
Les modèles comportementaux
5.5 Le modèle commande
o Constituants
• Commande:
- Déclare une interface abstraite (Executer()) pour exécuter une
opération (ou une requête)
• CommandeConcret:
- concrétise executer en appelant ou en invoquant des opérations
offertes par la classe recepteur,
- La commande concrète peut être non-autonome (dépend de la
classe récepteur) ou encore composite.
• Invocateur:
- Demande à commandeConcret d’exécuter la requête ou
l’opération.
• Récepteur:
- Collabore avec commandeConcret pour pouvoir exécuter
l’opération.
• Client:
- crée la commande concrète positionne le récepteur.
V.
Les modèles comportementaux
5.5 Le modèle commande
o Mérites
• ça découple l’invocation du récepteur.
• Il permet d’ajouter des commandes concrètes sans toucher aux
classes existantes.
V.
Les modèles comportementaux
TD8
o Enoncé
En s’inspirant du modèle commande, proposer une conception OO de
l’opération traversée d’un tableau. Une telle opération doit être
paramétrée sur l’action à effectuer sur chaque élément visité.
V.
Les modèles comportementaux
TD8
o Solution
Invocateur
1 Commande
Executer()
Parcours()
Tableau
Premier()
Suivant()
recepteur
termine():boolean
Incrementation
Afficher
Elementcourant()
Executer()
Executer()
Modifiercourant()
recepteur
V.
Les modèles comportementaux
5.5 Le modèle visiteur
o Intention
- Représente l’opération qui doit être appliquée sur les
éléments d’une structure d’objet.
o Motivation
- La traversée des structures d’objets nécessite souvent
d’effectuer une opération sur chaque élément visité.
- Les structures d’objet à traverser peuvent être
polymorphes (càd comportant plusieurs types
d’objets).
V.
Les modèles comportementaux
5.5 Le modèle visiteur
o Motivation
Class A
{void faireOp1();
void faireOp1();
.
.
.
}
- A joue le rôle de structure
d’objet à traverser.
- Prévoir toutes les
opération à effectuer sur
cette structure d’objet.
Une faible cohésion de la classe A.
V.
Les modèles comportementaux
5.5 Le modèle visiteur
Element
1..*
o Structure
Structure
d’objet
Accepter(visiteur)
ElementConcretA
ElementConcretB
Accepter(visiteur)
Accepter(visiteur)
OperationA()
OperationB()
Visiteur
Client
visiteElementConcretA(ElementConcretA)
visiteElementConcretB(ElementConcretB)
VisiteurConcretA
VisiteurConcretB
visiteElementConcretA(ElementConcretA)
visiteElementConcretA(ElementConcretA)
visiteElementConcretB(ElementConcretB)
visiteElementConcretB(ElementConcretB)
V.
Les modèles comportementaux
5.5 Le modèle visiteur
o Constituants
• Visiteur: représente une opération (visiteElementConcret) pour
chaque classe qui dérive de l ’élément. Il s’agit d’une classe
abstraite.
• VisiteurConcret: implémente l’interface proposée par visiteur.
• Structure d’objet: représente la structure d’objet polymorphe à
traverser.
-Crée une référence avec multiplicité sur la classe abstraite
Element.
• Element: représente la classe fondatrice de différents types
d’objets.
-Propose une interface appelée Accepter permettant d’activer le
visiteur concret adéquat.
• ElementConcret: implémente l’interface proposée par Element.
V.
Les modèles comportementaux
TD9
o Enoncé
En s’inspirant du modèle Visiteur, proposer une conception OO
permettant de traverser une bibliothèque contenant plusieurs livres.
Les opérations à appliquer sur chaque livre visité sont:
-Afficher les caractéristiques (titre, prix,..)
-Modifier
V.
Les modèles comportementaux
TD9
o Solution
Test
Element
make
Accepter(v:visiteur)
Visiteur
Visitelivre(Livre)
Livre
Accepter(v:visiteur)
Afficher
modifier
modifierPrix(mp:integer)
Visitelivre(Livre)
Visitelivre(Livre)
Name(t:string,p:integer)
Merci!
Des questions?
Téléchargement