jueves, 18 de junio de 2015

Tarea 5

Patrón Diseño Strategy


Este patrón facilita la implementación de distintas estrategias o comportamientos específicos en clases hijas a través de una clase común. Así, en tiempo de ejecución y en función de algún parámetro como el tipo de instancia, se ejecutará la estrategia concreta para esa situación.
Se recomendará usar este patrón cuando en un mismo programa debamos proporcionar distintas alternativas de comportamiento, permitiendo a través de clases independientes, encapsular las distintas estrategias.
Los distintos componentes de este patrón son:
o    Interfaz Strategy: será aquella interfaz que define el nombre del método o métodos que conformarán la estrategia.
o    Clases Strategy concretas: todas aquellas clases que implementen la interfaz Strategy dando forma al algoritmo.
o    Contexto: elemento donde se desarrollará la estrategia.

El diagrama UML de la implementación de este patrón será:
Como podemos observar, la interfaz iArea será la estrategia genérica. En este caso, además, se ha añadido una clase abstracta AbstractArea que implementará dicha interfaz y definirá algunas propiedades que serán comunes o necesarias en las implementaciones concretas (en este caso, el nombre de la figura).
o    iArea: Interfaz en la que definimos un método que nos ayudará a calcular el área de cualquier cuerpo geométrico.
o    AbstractArea: Clase abstracta que implementará la interfaz IArea y donde definimos un constructor y alguna propiedad básica o común al resto de estrategias.
A continuación desarrollaremos 3 clases para implementar la forma de calcular el área de un polígono regular, un círculo y un triángulo. Estas serán las estrategias existentes en nuestra aplicación de ejemplo.
o    AreaCircular: Estrategia que define que el cálculo del área de un circulo se lleva a cabo multiplicando el valor del radio al cuadrado por el número PI.

o    AreaTriangulo: Estrategia que define que el cálculo del área de un triángulo se lleva a cabo multiplicando el valor de la base por la altura dividiéndolo entre 2.


o    AreaPoligonoRegular: Estrategia que define que el cálculo del área de un polígono regular de n lados conocido el radio de la circunferencia que lo contiene se lleva a cabo multiplicando el número de lados, por el radio al cuadrado, por el seno de 2PI dividido entre n y todo ello dividido entre 2.


Para completar el ejemplo, se han creado un par de excepciones específicas de forma que si se pasa un valor incorrecto al constructor de un objeto nuestra aplicación nos comunique cual es el error:



Patrón de Diseño State

Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que resuelva problemas similares de manera efectiva. Otra característica es que debe ser reutilizable.
Uno de los Patrones de Diseño muy importantes es el patrón de diseño State conocido como State (Estado, Objects for States), es un patrón de Comportamiento.
El patrón de diseño State es capaz de permitir que un objeto cambie su comportamiento de forma dinámica.Dentro de las características de su paradigma dentro de la programación orientada a objetos utiliza el polimorfismo, en este patrón tenemos la ventaja de que reducimos la duplicación al eliminar el código innecesario.
El Patrón de Diseño State es un patrón de comportamiento para objetos. Se debe usar si el comportamiento de un objeto depende de su estado, y se ve modificado en tiempo de ejecución. Permite que un objeto cambie su comportamiento cuando cambia su estado interno, tal y como si el objeto cambiase de clase.

Funciones:

Encapsula un comportamiento dependiente del estado (State) en que nos encontremos se va a comportar de una manera o de otra. 
Se podría aplicar en el monopoly para los jugadores, si estas en el estado bancarrota harás una cosa y si estas en juego otra. La diferencia que esto puede cambiar en tiempo de ejecución.

• Crea un objeto por cada estado posible del objeto que lo llama para que tenga diferentes comportamientos
• Varia su comportamiento ante los diferentes mensajes.
• Hace los cambios de estado explícitos.
• Localiza fácilmente las responsabilidades de los estados específicos
Por ejemplo: una alarma puede tener diferentes estados, como desactivada, activada, en configuración. Definimos una interfaz Estado, Alarma, y luego definimos los diferentes estados
Conclusiones:

El patrón STATE está pensado para que un programa sea escalable y fácil de manejar.
El diseño se puede aplicar en diferentes situaciones.
Mucha gente lo ha usado y han logrado tener éxito de él.
El patrón ha sido utilizado para la implementación y diseño de software de juegos.

Ejemplo Codigo
Imaginemos que vamos a un banco y cuando llegamos nos colocamos en la fila de mostrador: si la misma esta abierta, seguiremos en la fila. En cambio, si esta cerrada nos colocaremos en otra fila o tomaremos alguna decisión acorde. Por otro lado, si vemos un cartel que dice "enseguida vuelvo" quizás tenemos que contemplar el tiempo disponible que tenemos. Es decir, para nosotros, el comportamiento de un banco cambia radicalmente según el estado en el que se encuentre. Para estas ocasiones, es ideal el uso de un patrón de estados.



El banco publica un método llamado atende() pero en realidad la atención la realiza la ventanilla.



La ventanilla cambia su comportamiento según el estado en que se encuentre. Por ejemplo, si esta cerrada, no hay atención directamente. Por eso mismo, delega el método de atención a su estado y es este mismo estado quién toma la decisión de atender o no.














No hay comentarios:

Publicar un comentario