Le patron de conception Etat
Click here to load reader
-
Upload
gerson-sunye -
Category
Documents
-
view
544 -
download
0
description
Transcript of Le patron de conception Etat
Le patron de conception État [Gamma 95]
Gerson Sunyé — Université de Nantes http://sunye.free.fr
Gerson Sunyé — Université de Nantes
Plan
• Un exemple d’utilisation • La définition du patron
Un exemple
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
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é?
Gerson Sunyé — Université de Nantes
Solution
• Isoler les comportements dépendants des différents états de connexion dans des classes différentes.
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()
Gerson Sunyé — Université de Nantes
Exemple de connexion
: TCP/IP : Close
2 - open()1 - open()
TCP/IP::open() {
this.status.open(); }
Gerson Sunyé — Université de Nantes
Exemple de connexion
: TCP/IP : Close
: Open
3 - delete link
4 - new link
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.
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).
Le patron État
Gerson Sunyé — Université de Nantes
Nom
• State (État).
• Alias: Objects for States, Enveloppe-Letter.
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?
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.
Gerson Sunyé — Université de Nantes
Solution (1/2)
/Context /State
/handle() *
/ConcreteState *
/handle() *
/request() *
1
Gerson Sunyé — Université de Nantes
Solution (2/2)
TCP/IP TCP/IP State
open()
Close
open()
Open
open()
open()
: State
context state
concrete state
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.
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.