Le patron de conception Etat

19

Click here to load reader

description

Présentation rapide du patron Etat [Gamma 95].

Transcript of Le patron de conception Etat

Page 1: Le patron de conception Etat

Le patron de conception État [Gamma 95]

Gerson Sunyé — Université de Nantes http://sunye.free.fr

Page 2: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Plan

• Un exemple d’utilisation • La définition du patron

Page 3: Le patron de conception Etat

Un exemple

Page 4: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Implémentation de TCP/IP

open() close() send()

acknowledge() synchronize()

status : String

TCP/IP::send(s : Stream) { if state = ‘open’

{ (…)

} !

if state = ‘closed’ {

(…) }

!if state = ‘idle’

{ (…)

} }

TCP/IP

Page 5: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Problème

• Comment éviter que l’état de la connexion soit vérifié à chaque fois qu’un paquet est envoyé?

Page 6: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Solution

• Isoler les comportements dépendants des différents états de connexion dans des classes différentes.

Page 7: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

En d’autres termes:

TCP/IP TCP/IP State

open()

Close

open()

Open

open()

open() close() send()

acknowledge() synchronize()

status

Idle

open()

Page 8: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Exemple de connexion

: TCP/IP : Close

2 - open()1 - open()

TCP/IP::open() {

this.status.open(); }

Page 9: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Exemple de connexion

: TCP/IP : Close

: Open

3 - delete link

4 - new link

Page 10: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Conséquences

• Chaque instance de la classe “TCP/IP” est associée à une instance d’une sous-classe de “TCP/IP State”.

• La vérification de l’état n’est plus nécessaire.

Page 11: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Observations

• Cette solution est utilisée dans la plupart des implémentations du protocole TCP/IP sur Unix.

• Une solution similaire est utilisée dans plusieurs éditeurs graphiques (comportement d’un outil selon le type de figure sélectionnée).

Page 12: Le patron de conception Etat

Le patron État

Page 13: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Nom

• State (État).

• Alias: Objects for States, Enveloppe-Letter.

Page 14: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Problème

• Comment traiter un objet dont le comportement est fortement dépendant de son état, sans vérifier, à chaque appel d’une opération, l’état actuel?

Page 15: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Contexte

• Le comportement d’un objet dépend de son état.

• Différentes opérations contiennent des opérateurs conditionnels sur l’état de l’objet.

Page 16: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Solution (1/2)

/Context /State

/handle() *

/ConcreteState *

/handle() *

/request() *

1

Page 17: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Solution (2/2)

TCP/IP TCP/IP State

open()

Close

open()

Open

open()

open()

: State 

context state

concrete state

Page 18: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Conséquences

• Le comportement spécifique à un état est isolé.

• Les transitions d’état sont explicites.

• Les objets-états peuvent être partagés.

Page 19: Le patron de conception Etat

Gerson Sunyé — Université de Nantes

Compromis d’implémentation

• Qui définit les transitions d’état?

• Création et destruction des états.

• Utilisation de l’héritage dynamique.