• Aucun résultat trouvé

[PDF] cours Langage UML PDF | Télécharger PDF

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] cours Langage UML PDF | Télécharger PDF"

Copied!
19
0
0

Texte intégral

(1)

Implémentation d'UML

avec Java et Design patterns

U M L UML UML UML UML UM L U M L UML UML

Dominique Ribouchon – Février 2005

Objectifs du cours

Etudier quelques exemples d'implémentation de

spécifications UML en Java, avec utilisation de design

patterns:

diagramme de classes: généralisation

diagramme d'états-transition

(2)

Plan du cours

• Les designs pattern

• Généralisation avec le pattern Delegation

• Le diagramme d'états-transitions avec le pattern State:

– Principes généraux

– Instanciation d'un objet à états

– Etat composite

Designs patterns

• Solutions communes à des problèmes de conception

récurrents

• A l'échelle d'une ou peu de classes

• "Patron de solution" documenté

• Ex: "Gamma" patterns

(Design patterns Element of Reusable Object-Oriented

Software

(3)

-5

Exemple: le Singleton

• Diagramme de classes

Singleton

-singletonInstance: Singleton -data … + getInstance(): Singleton + getService …

Utilisateur

<<use>> if (singletonInstance == null) singletonInstance = new Singleton(); return singletonInstance; 6

Le Singleton (2)

• Diagramme de collaboration

:Utilisateur instance:Singleton 1: instance:= getInstance() 2: getService() Singleton

(4)

7

Le singleton (3)

Lien avec le pattern

SingletonPattern

Mailer Singleton

"la classe Mailer joue le rôle de Singleton dans la collaboration paramétrée SingletonPattern"

Plan du cours

• Les designs pattern

• Généralisation avec le pattern Delegation

• Le diagramme d'états-transitions avec le pattern State:

– Principes généraux

– Instanciation d'un objet à états

– Etat composite

(5)

9

Le pattern délégation

A

B

délègue 10

Généralisation

Héritage ou délégation?

Personne Homme Femme

(6)

11

Généralisation implémentée par Délégation

Homme

Personne

1 0..1 délègue délègue

Femme

1 0..1

=> Composition

Délégation - Exemple

• Marie, une femme:

(7)

13

Implémentations Java

• Héritage: héritage Java (extends)

public class Personne {

private int age;

public Personne() {age=0;}

public int getAge() {return age;}

}

public class Femme extends Personne {

private int nbMaternites;

public Femme() {nbMaternites=0;}

public int getNbMaternites(return nbMaternites);

}

Utilisation de l'objet marie, instance de femme:

marie Femme = new Femme();

….

ageMarie = marie.getAge();

14

Implémentations Java (2)

Délégation: attribut de type classe

public class Personne {

private int age;

public Personne() {age=0;} public int getAge() {return age;} }

public class Femme { private int nbMaternites; private Personne personne; public Femme() {

nbMaternites=0;

personne = new Personne(); }

public int getNbMaternites(return nbMaternites); public int getAge(){return personne.getAge();} }

(8)

15

Comparaison

• Héritage:

– Avantages: extensibilité, gestion automatique des liens

– Inconvénients: rigidité des objets (des liens)

• Délégation:

– Avantages: objets modifiables dynamiquement,

implémentation de la généralisation dans un langage

sans héritage

– Inconvénients: codage plus lourd (gestion manuelle des

liens)

Une variante du pattern délégation

Personne SexePersonne

SexeMasculin SexeFeminin délègue 1

(9)

17

Délégation et polymorphisme

délègue 1 1 Personne sePreparer() SexePersonne sePreparer() SexeMasculin sePreparer() {se raser} SexeFeminin sePreparer() {se maquiller} 18

Généralisation multiple

Personne

Homme Femme Enfant Adolescent Adulte

sexe age

Adolescente Fillette

(10)

19

Généralisation multiple (2)

• Comment transformer la généralisation multiple grâce à la

délégation?

• Quel problème présentait la première solution?

Autre solution pour implémenter

le diagramme suivant?

Personne

(11)

21

Plan du cours

• Les designs pattern

• Généralisation avec le pattern Delegation

• Le diagramme d'états-transitions avec le pattern State:

– Principes généraux

– Instanciation d'un objet à états

– Etat composite

22

Diagramme d'états-transitions

Repos En numérotation Retour d'appel Connectée décrochage raccrochage munérotation complete reponse appelé raccrochage raccrochage

Classe: Ligne téléphonique

(12)

23

Le design pattern State

Context handleX() handleY() … 1 delegates -currentState ContextState handleX(): ContextState handleY(): ContextState

ConcreteStateA ConcreteStateB ConcreteStateC handleX() handleY() handleX() handleY() handleX() handleY()

Le pattern State appliqué à

la Ligne téléphonique

Ligne décrochage() numComplète() réponseAppelé() raccrochage() 1 délègue -etatCourant EtatLigne décrochage(): EtatLigne numComplète(): EtatLigne réponseAppelé(): EtatLigne raccrochage(): EtatLigne

(13)

25

Avantages et inconvénients

• Avantages:

– Lisibilité – les états et les transitions sont explicites

– Extensibilité

• Inconvénient: code peu compact – augmentation du

nombre de classes

26

Implémentation Java

public class Ligne {

private int numeroLigne; private EtatLigne etatCourant;

public void decrochage(){etatCourant = etatCourant.decrochage();} public void numComplete(){etatCourant = etatCourant.numComplete();} public void reponseAppele(){etatCourant= etatCourant.reponseAppele();} public void raccrochage(){etatCourant = etatCourant.raccrochage();} public void afficherEtat(){etatCourant.afficherEtat();}

public Ligne(){ numeroLigne=4;

etatCourant = new EtatRepos(); }

//************************************ private abstract class EtatLigne{

protected abstract EtatLigne decrochage(); protected abstract EtatLigne numComplete(); protected abstract EtatLigne reponseAppele(); protected abstract EtatLigne raccrochage(); protected abstract void afficherEtat();

(14)

27

Implémentation Java(2)

private class EtatRepos extends EtatLigne{ protected EtatLigne decrochage(){

System.out.println( "Tonalité invitation à numéroter

sur la ligne " + numeroLigne);

return new EtatEnNum(); }

protected EtatLigne numComplete(){

System.out.println( "erreur: evt non attendu dans cet état"); return this;

}

protected EtatLigne reponseAppele(){

System.out.println( "erreur: evt non attendu dans cet état"); return this;

}

protected EtatLigne raccrochage(){

System.out.println( "erreur: evt non attendu dans cet état"); return this;

}

protected void afficherEtat(){

System.out.println( "Etat: Repos"); }

}

Placement des attributs

Context handleX() handleY() … 1 delegates -currentState ContextState handleX(): ContextState handleY(): ContextState

(15)

29

Exercice

• Faire le diagramme d'états-transition d'une personne sur le

critère de l'age:

– Les états sont: Enfant, Adolescent, Adulte

– Dans chacun de ces états, une personne prend en

compte l'événement "dormir", mais le traite

différemment:

• Dans l'état "Enfant": écouter un conte

• Dans l'état "Adolescent": écouter walk-man

• Dans l'état "Adulte": lire roman

• Concevoir ce diagramme d'états-transitions avec le design

pattern State

30

Plan du cours

• Les designs pattern

• Généralisation avec le pattern Delegation

• Le diagramme d'états-transitions avec le pattern State:

– Principes généraux

– Instanciation d'un objet à états

– Etat composite

(16)

31

Exemple

Naissance d'une personne, Marie:

marieP:Personne marieE:EtatEnfant

Possibilité d'instanciation

Class Personne {

public Personne() {

etatAgeCourant = new EtatEnfant();

}

private EtatAge etatAgeCourant;

}

(17)

33

Plan du cours

• Les designs pattern

• Généralisation avec le pattern Delegation

• Le diagramme d'états-transitions avec le pattern State:

– Principes généraux

– Instanciation d'un objet à états

– Etat composite

34

La ligne téléphonique sans état composite

Repos En numérotation Retour d'appel Connectée décrochage raccrochage munérotation complete reponse appelé raccrochage raccrochage

(18)

35

La ligne téléphonique avec état composite

Repos En numérotation Active Retour d'appel Connectée décrochage

raccrochage mun complete

reponse appelé

Exercice

• Comment concevoir un état composite dans l'esprit du

design pattern State?

(19)

37

Correction exercice Age

Enfant

dormir/ecouter conte

Adolescent

dormir/ecouter walk-man

Adulte

dormir/lire roman apres(1 an)[age<12] apres(1 an)[age<18] apres(1 an)[age>=12] apres(1 an)[age>=18] 38

Correction exercice Age (2)

Personne delegue 1

-etatCourant

EtatAge anniversaire(): EtatAge dormir()

AgeEnfant AgeAdolescent AgeAdulte anniversaire() dormir() { ecouter conte} anniversaire() dormir(){ecouter walk-man} anniversaire() dormir() { lire roman} age anniversaire() dormir()

Références

Documents relatifs

This research argues that designers have much to benefit from user generated content because users submit elements pertaining to all design spaces and reveal elements of

En effet, en inscrivant le dilemme exploitation/exploration dans la réflexion sur l’apprentissage organisationnel, March (1991) ouvre une nouvelle voie pour les

65 ‌ ؿصفلا ةصلاخ ةهئٛه فه ؽقحتمل ؾلذو ْئدبه ؿكشب ةىٓعلا دارفأ ِمع ةساردلا سآقه ؽٓبطتب اىهق ا جئاتىلا ِمع اىمصحتو ،تاودٖا ؽٓبطت ْف ةربخ باستك

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

The crucial axiom in the axiomatization is that for belief after attention-based announcement: [ϕ]Ba ψ ↔ h a → Ba ϕ → [ϕ]ψ ∧ ¬h a → Ba ψ It says that the belief

Notre thèse vise à comprendre la transformation du lien social durant les parcours migratoire de réfugiés ex-yougoslaves sélectionnés à l'extérieur du pays et

De manière générale, l’étude archéologique des maisons du centre du ğebel Zawiyé a livré peu d’indices d’une recherche de confort ou de commodité autres que ceux

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