Le patron de conception État [Gamma 95]
Gerson Sunyé — Université de Nantes
http://sunye.free.fr
Plan
•
•

Un exemple d’utilisation
La définition du patron

Gerson Sunyé — Université de Nantes
Un exemple
Implémentation de TCP/IP

TCP/IP

status : String
open()

close()
send()
acknowledge()
synchronize()

TCP/IP::send(s : Str...
Problème
•

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

Gerson Sunyé — U...
Solution
•

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

Gerson Su...
En d’autres termes:

status

TCP/IP

TCP/IP State

open()

open()

close()
send()
acknowledge()
synchronize()
Idle

open()...
Exemple de connexion

1 - open()

2 - open()
: TCP/IP

TCP/IP::open() {
this.status.open();
}

Gerson Sunyé — Université d...
Exemple de connexion

3 - delete link
: TCP/IP

: Close

4 - new link
: Open

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”.

•
...
Observations
•

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

•

Une solu...
Le patron État
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
appe...
Contexte
•

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

•

Différentes opérations contiennent des opérateurs
condition...
Solution (1/2)

/Context
/request() *

1

/State
/handle() *

/ConcreteState *
/handle() *

Gerson Sunyé — Université de N...
Solution (2/2)

TCP/IP

TCP/IP State

open()

open()
context

: State 

state

Open

concrete state open()

Gerson Sunyé —...
Conséquences
•

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

•

Les transitions d’état sont explicites.

•

Les objets-...
Compromis d’implémentation
•

Qui définit les transitions d’état?

•

Création et destruction des états.

•

Utilisation de...
Prochain SlideShare
Chargement dans…5
×

Le patron de conception Etat

1 251 vues

Publié le

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

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 251
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
20
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Le patron de conception Etat

  1. 1. Le patron de conception État [Gamma 95] Gerson Sunyé — Université de Nantes http://sunye.free.fr
  2. 2. Plan • • Un exemple d’utilisation La définition du patron Gerson Sunyé — Université de Nantes
  3. 3. Un exemple
  4. 4. Implémentation de TCP/IP TCP/IP status : String open()
 close() send() acknowledge() synchronize() TCP/IP::send(s : Stream) { if state = ‘open’ { (…) } ! if state = ‘closed’ { (…) } ! if state = ‘idle’ { (…) } } Gerson Sunyé — Université de Nantes
  5. 5. 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
  6. 6. Solution • Isoler les comportements dépendants des différents états de connexion dans des classes différentes. Gerson Sunyé — Université de Nantes
  7. 7. En d’autres termes: status TCP/IP TCP/IP State open() open()
 close() send() acknowledge() synchronize() Idle open() Open open() Gerson Sunyé — Université de Nantes Close open()
  8. 8. Exemple de connexion 1 - open() 2 - open() : TCP/IP TCP/IP::open() { this.status.open(); } Gerson Sunyé — Université de Nantes : Close
  9. 9. Exemple de connexion 3 - delete link : TCP/IP : Close 4 - new link : Open Gerson Sunyé — Université de Nantes
  10. 10. 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
  11. 11. 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). Gerson Sunyé — Université de Nantes
  12. 12. Le patron État
  13. 13. Nom • State (État). • Alias: Objects for States, Enveloppe-Letter. Gerson Sunyé — Université de Nantes
  14. 14. 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
  15. 15. 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
  16. 16. Solution (1/2) /Context /request() * 1 /State /handle() * /ConcreteState * /handle() * Gerson Sunyé — Université de Nantes
  17. 17. Solution (2/2) TCP/IP TCP/IP State open() open() context : State  state Open concrete state open() Gerson Sunyé — Université de Nantes Close open()
  18. 18. 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
  19. 19. Compromis d’implémentation • Qui définit les transitions d’état? • Création et destruction des états. • Utilisation de l’héritage dynamique. Gerson Sunyé — Université de Nantes

×