Retroceder   Foros del Web > Temas generales de computación > Programación > Ingeniería del software y Gestión de proyectos

Respuesta
 
Herramientas Desplegado
Antiguo 13-may-2008, 07:28   #1 (permalink)
drumman ha deshabilitado el karma
 
Fecha de Ingreso: diciembre-2007
Mensajes: 5
Patrones de Diseño: State vs Strategy

Buenas, mi idea es encontrar diferencias y aplicacion de estos dos patrones de diseño. Gracias
drumman está desconectado   Responder Citando
Antiguo 13-may-2008, 20:33   #2 (permalink)
SidP no se puede cailificar en este momento
 
Avatar de SidP
 
Fecha de Ingreso: febrero-2006
Ubicación: /etc/php.ini
Mensajes: 122
Re: Patrones de Diseño: State vs Strategy

mismo diagrama de clases.
misma idea de delegación.
El estado es privado del objeto, ningún otro objeto sabe de él.
un state define una máquina de estados con sus transiciones.
un strategy suele tener un único mensaje público.
http://www.google.com.cu/search?aq=f...G=Buscar&meta=


Salu2
SidP está desconectado   Responder Citando
Antiguo 15-may-2008, 10:13   #3 (permalink)
venkman llegará a ser famoso muy prontovenkman llegará a ser famoso muy pronto
 
Avatar de venkman
 
Fecha de Ingreso: enero-2008
Mensajes: 445
Enviar un mensaje por MSN a venkman
Re: Patrones de Diseño: State vs Strategy

Lo que es diferente es la intención de lo que se hace. El esquema puede ser igual, pero su sentido es bastante distinto.

Se usan estados cuando el comportamiento de un objeto depende de algún modo de su situación, cuando su comportamiento varía de una situación a otra. Imagina un horno microondas (con teclas). El comportamiento de la tecla de encendido depende de que antes hayas pulsado ya un tiempo y una temperatura. Si estás en el estado inicial, pulsar encendido no hará nada. Si estás en el estado de ya haber introducido tiempo y potencia, entonces el mismo botón encenderá el horno. El comportamiento del teclado depende de su estado.

Se usan Estrategias cuando puedes tener diferentes comportamientos para objetos que por lo demás son iguales. Imagina un horno de nuevo (pero ahora un horno cualquiera). Todos los hornos tienen un botón de encendido, pero en uno de ellos el botón de encender lo que hace es abrir el gas, en otro lo que hace es conectar la corriente a la resistencia, en otro activar el generador de microondas, en otro más antiguo pone a frotar dos palitos (xD)...
Todos los objetos horno son más o menos equivalentes, todos calientan lo que haya dentro, pero la forma de hacerlo (con gas, con electricidad, con microondas, con un frotador de palitos (xD)) es diferente.

En ambos casos lo que se persigue es encapsular el comportamiento e independizarlo del objeto. Pero en cada caso lo haces por diferentes razones. En el caso del estado porque ese comportamiento puede ir variando y en el caso de la estrategia porque podrías reutilizar el objeto genérico simplemente aplicándole otro comportamiento.

En un caso irás asignando diferentes estado con diferentes comportamientos a lo largo del tiempo. En el otro asignarás una u otra estrategia al inicializar el objeto y luego (probablemente) ya no más.



Luego hay otras diferencias menores, como que las estrategias en general tienden a ser independientes entre sí. "ActivarMicroondas" no tiene ninguna relación con "AbrirGas". Los estados en general tienden a ser bastante dependientes. El estado "TiempoAceptado" y "PotenciaAceptada" suelen compartir variables de estado (precisamente) y se conocen. Hay una relación que dice que si estoy en "TiempoAceptado" e introduzco la potencia, iré a "PotenciaAceptada".
venkman esta en línea ahora   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:11.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93