Luis Pereda Calvo1 Comportamiento de Objetos Estrategia (Strategy) *Política (Policy)

Slides:



Advertisements
Presentaciones similares
MODELOS ORIENTADOS A OBJETOS
Advertisements

Curso de java básico (scjp)
Curso de java básico (scjp)
Curso de java básico (scjp)
Observador (observer) Visita (Visitor) Singleton
FACHADA COMPOSITOR MEMENTO
Adapter, Bridge, Decorator.
III - Gestión de memoria
Lenguaje de programación Java
Base de Datos Distribuidas FUNDAMENTOS DE BASES DE DATOS DISTRIBUIDAS
Arquitectura CLARO-TECNOTREE
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Introducción a la programación orientada a aspectos.
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
Diseño y programación de
Encapsulamiento y Abstracción
Funciones en lenguaje C
Lic. Rosemary Torrico Bascopé
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Modelado Arquitectónico
Semana 5 Subprogramas..
FACTORY METHOD Edmundo Álvarez Jiménez Antonio Fernández Alonso
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Javier Juárez González José Carlos Bernárdez Fdez. Alberto Barbosa León.
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
Mediator (Mediador) Trabajo realizado por: Guillermo Palacios Pelayo
Programación Orientada a Aspectos (POA)
Patrones Creacionales
ANDRES FELIPE BORRERO SALAZAR COD ALEXANDRA CARREÑO SALAS COD LUCIO ANIBAL CRIOLLO COD ALEJANDRO RUIZ IDROBO COD
DISEÑO DE SOFTWARE 1ª. Parte
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
Chain of Responsibility José Manuel Domínguez Arroyo Margarita Lozano Pérez Carlos Ignacio Mantecón Nebreda.
Patrones de diseño DECORATOR Mario Rodríguez Martín
Realizado por: Manuel González Joaquín Windmuller José Lorenzo Rodríguez
Patrones de Diseño: Command
Son la base para la búsqueda de soluciones o problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
INTRODUCCIÓN A JAVA. Índice ¿Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales ¿Qué ventajas tengo como desarrollador?
MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
César Estéban Castañeda Luis Andrés Almanza
Una introducción a la computación evolutiva
PATRÓN ADAPTER (Adaptador) Elena Moreno Ramírez Laura Sánchez Romero Aroa Solana Ruiz.
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Programación orientada a objetos Capítulo 6 Diseño de clases.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
Facultad de Ingeniería
Patrones de Comportamiento Descripción El patrón estrategia es un patrón de comportamiento que su utiliza para definir una familia de algoritmos, encapsularlos.
Programación Orientada a Objeto
Introducción a la Programación Orientada a Objetos (POO)
Patrones de diseño equipo n.1
Edwin Oliveros.  El diseño de sistemas consiste en la transformación del modelo de diseño, que toma en cuenta los requerimientos no funcionales y las.
UNIDAD 2: “Características del Modelado UML” CONTENDIDO Elaborado por: Ingeniero Harold Cabrera Meza Actualizado por: Ingeniero Nilson Albeiro Ferreira.
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Patrón de Diseño Brigde ( Handle/Body) Calderón Márquez Jorge Alberto Posgrado de Ciencia e Ingeniería en Computación. Tecnología Orientada a Objetos.
Programación Orientada a Objetos: CLASES Y OBJETOS
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
PARADIGMA viene del Griego Paradeima = Modelo. Un paradigma es el resultado de los usos, y costumbres, de creencias establecidas de verdades a medias,
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Luis Pereda Calvo1 Comportamiento de Objetos Estrategia (Strategy) *Política (Policy)

Luis Pereda Calvo2 Introducción Los patrones de Comportamiento describen patrones de comunicación entre clases y objetos. El patrón Strategy encapsula un algoritmo en un objeto, facilitando especificar y cambiar el algoritmo que usa un objeto.

Luis Pereda Calvo3 Propósito Define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan. Muestra el poder del polimorfismo en la POO.

Luis Pereda Calvo4 Motivación Existen multitud de algoritmos para dividir en lineas un flujo de texto. Codificarlos en las clases que los usan es totalmente desaconsejable por varias razones: - los clientes que necesiten estas funcionalidades se vuelven más complejos, más grandes y más difíciles de mantener. - los distintos algoritmos serán apropiados en determinados momentos y por tanto no hay razón para permitir múltiples algoritmos si no se van a utilizar todos. - es difícil añadir nuevos algoritmos o modificarlos cuando la división en líneas es parte integral de un cliente. Esto se puede evitar con clases que encapsulen los diferentes algoritmos de division en lineas. Un algoritmo así encapsulado se denomina una ESTRATEGIA.

Luis Pereda Calvo5 Motivación ComponedorSimple implementa una estrategia simple que calcula un salto de línea cada vez. ComponedorTex implementa el algoritmo Tex para buscar saltos de línea. Trata de optimizar los saltos globalmente (un párrafo cada vez). ComponedorMatriz implementa una estrategia que selecciona los saltos de línea. Es útil para dividir unos iconos en filas.

Luis Pereda Calvo6 Aplicabilidad Muchas clases relacionadas difieren solo en su comportamiento. Las estrategias permiten configurar una clase con un determinado comportamiento entre varios posibles. Se necesitan distintas variantes de un algoritmo para soluciones de compromiso entre tiempo y espacio. Pueden usarse estrategias cuando las variantes se implementan como una jerarquía de clases. Un algoritmo usa datos que los clientes no deberían conocer y se usa para evitar exponer estructuras de datos dependientes del algoritmo. En vez de tener muchas sentencias condicionales para las operaciones de varios comportamientos.

Luis Pereda Calvo7 Estructura y Participantes Estrategia: - Declara una interfaz común a todos los algoritmos permitidos. El Contexto usa esta interfaz para llamar al algoritmo definido por una EstrategiaConcreta. EstrategiaConcreta: - Implementa el algoritmo usando la interfaz Estrategia.

Luis Pereda Calvo8 Estructura y Participantes Contexto: - Se configura con un objeto EstrategiaConcreta. - Mantiene una referencia a un objeto Estrategia. - Puede definir una interfaz que permita a la Estrategia acceder a sus datos.

Luis Pereda Calvo9 Colaboraciones Estrategia y Contexto interactúan para implementar el algoritmo elegido. Un contexto puede pasar a la Estrategia todos los datos requeridos por el algoritmo cada vez que se le llama, o incluso puede el Contexto pasarse a sí mismo como argumento de las operaciones de Estrategia, lo que permite a Estrategia hacer llamadas al Contexto cuando le sea necesario. El Contexto redirige peticiones de los clientes a su Estrategia. Los clientes interactúan exclusivamente con el Contexto al cual le pasan un objeto EstrategiaConcreta. El cliente elige entre una familia de subclases EstrategiaConcreta.

Luis Pereda Calvo10 Consecuencias Familias de algoritmos relacionados: La herencia puede ayudar a sacar factor común de la funcionalidad de los algoritmos. Una alternativa a la herencia: Encapsular el algoritmo en subclases de Estrategia separadas nos permite variar el algoritmo independientemente de su contexto, haciéndolo más fácil de cambiar, comprender y extender. Eliminación de sentencias condicionales: Al juntarse muchos comportamientos en una clase es difícil no usar condiciones para seleccionar el comportamiento correcto. Un codigo que presenta muchas sentencias condicionales suele indicar la necesidad de aplicar el patrón Strategy.

Luis Pereda Calvo11 Consecuencias Una elección de implementaciones: Las estrategias pueden proporcionar distintas implementaciones del mismo comportamiento por razones de tiempo y/o espacio. Así, es el cliente el que elige entre las distintas posibilidades. Los clientes deben conocer las estrategias: Este patrón tiene el inconveniente que el cliente debe comprender las diferencias entre las Estrategias, para elegir la mejor. Costes de comunicación Estrategia Contexto: La interfaz de Estrategia es compartida por todos sus hijos. Puede darse el caso de que ciertas subclases no usen toda la información que reciben a través de la interfaz. Por tanto, habrá veces en las que el Contexto inicialice parámetros inútiles.

Luis Pereda Calvo12 Consecuencias Mayor número de objetos: Se puede reducir este coste implementando las estrategias como objetos sin estado que puedan ser compartidos por el contexto.

Luis Pereda Calvo13 Implementación Definir las interfaces Estrategia y Contexto: Ambas deber permitir a una EstrategiaConcreta acceder eficientemente a cualquier dato que necesiten cualquiera de las dos. Contexto puede pasar los datos como parámetros a Estrategia (esto los mantiene desacoplados) o también puede pasarse a sí mismo como argumento para que Estrategia tome de él explícitamente lo que necesite. También Estrategia puede guardar una referencia a Contexto, eliminando la necesidad de pasar nada. Esta implementación hace que Contexto defina una interfaz más elaborada, acoplando más estrechamente Estrategia y Contexto.

Luis Pereda Calvo14 Implementación Estrategias como parámetros de plantillas: En C++ pueden usarse plantillas para configurar una clase como una estrategia. Esta técnica solo se podrá aplicar si: - se puede seleccionar la Estrategia en tiempo de compilación. - no hay que cambiarla en tiempo de ejecución. Hacer opcionales los objetos Estrategia: Contexto puede simplificarse en caso de que tenga sentido no tener un objeto Estrategia. Contexto comprueba si tiene un objeto Estrategia antes de acceder a él. De esta manera los clientes no tienen que tratar con las Estrategias, a menos que no les sirva el comportamiento predeterminado.

Luis Pereda Calvo15 Código de Ejemplo class Composicion{ public: Composicion(Componedor*); void Reparar(); private: Componedor* _componedor; Componente* _componentes;//lista de componentes int _contadorComponenetes;//número de componentes int _anchoLinea;//ancho de línea de composición int _saltosLinea;//posición de los saltos de //línea en los componentes int_contadorLineas;//el número de líneas };

Luis Pereda Calvo16 Código de Ejemplo class Componedor { public: virtual int Componer( Coord natural[], Coord estirado[], Coord encogido[], int contadorComponentes, int anchoLinea, int saltos ) = 0; protected: Componedor(); };

Luis Pereda Calvo17 Código de Ejemplo void Composición::Reparar(){ Coord* natural; Coord* maxima; Coord* minima; int contadorComponentes; int* saltos; // prepara arrays con tamaños deseados de los componentes //... // determina donde van los saltos: int contadorSaltos; contadorSaltos = _componedor->Componer( natural, maxima, minima, contadorComponentes, _anchoLinea, saltos ); // coloca los componentes en función de los saltos //... }

Luis Pereda Calvo18 Código de Ejemplo class ComponedorSimple : public Componedor { public: ComponedorSimple(); virtual int Componer(){ Coord natural[], Coord maxima[], Coord minima[], int contadorComponentes, int anchoLinea, int saltos[] ); //.. };

Luis Pereda Calvo19 Código de Ejemplo class ComponedorTex : public Componedor { public: ComponedorTex(); virtual int Componer(){ Coord natural[], Coord maxima[], Coord minima[], int contadorComponentes, int anchoLinea, int saltos[] ); //.. };

Luis Pereda Calvo20 Código de Ejemplo class ComponedorMatriz : public Componedor { public: ComponedorMatriz(); virtual int Componer(){ Coord natural[], Coord maxima[], Coord minima[], int contadorComponentes, int anchoLinea, int saltos[] ); //.. };

Luis Pereda Calvo21 Código de Ejemplo Composicion* rapida = new Composicion(new ComponedorSimple); Composicion* elegante = new Composicion(new ComponedorTex); Composicion* iconos = new Composicion(new ComponedorMatriz);

Luis Pereda Calvo22 Patrones relacionados Flyweight (Peso Ligero): Los objetos Estrategia suelen ser buenos pesos ligeros.

Luis Pereda Calvo23 Bibliografía Patrones de Diseño, E.Gamma y otros. Ed: Addyson Wesley