Patrones de diseño patrones



Descargar 270,5 Kb.
Fecha de conversión19.03.2017
Tamaño270,5 Kb.

Patrones

  • En las distintas actividades de la vida diaria se reconocen patrones:
    • Trabajo
    • Vida familiar
    • Hobbies
  • Hardware
  • Hardware
  • Software
  • Poder rehusar componentes y
  • lograr un mantenimiento fácil.
  • Lograr un software flexible
  • habitualmente
  • Problema
  • Solución
  • La solución debe ser tal, que sirva
  • cada vez que se presenta
  • el mismo problema

Patrones de diseño

  • “Son descripciones de clases y objetos relacionados que están adaptados para resolver un problema de diseño general en un contexto determinado”.
  • Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson

Patrones de diseño

  • .
  • Ingeniero
  • Las buenas soluciones permanecen, las malas se rechazan.
  • Los ingenieros deben conocer y saber aplicar los estándares conocidos

Patrones de diseño

  • Se definen con un alto nivel de abstracción.
  • Son independientes de los lenguajes de programación y de los detalles de implementación.
  • Los patrones promueven y facilitan la reutilización de arquitecturas y diseños de software que han demostrado su validez en muchas aplicaciones.

Arquitectura

  • Define la forma y la estructura de la aplicación de software.
  • Relacionada al propósito de la aplicación.
  • Arquitectura de módulos y sus interconexiones
  • Patrones de diseño
  • Paquetes, componentes, clases

Evidencias de diseño erróneo

  • Rigidez: problemas para insertar algún cambio.
  • Fragilidad: el software falla en muchos lugares al insertar un cambio.
  • Inmovilidad: no se pueden rehusar partes del proyecto.
  • Viscosidad:
          • De diseño: cuando se deben hacer cambios, es más fácil hacer cosas mal, que bien.
          • De entorno: entorno de desarrollo ineficiente

Cambios de requerimientos

  • Los cambios en un diseño de software, si no fueron cambios previstos en el diseño original, degradan el mismo. Incluyen dependencias.
  • Generalmente lo hacen ingenieros que no estaban relacionados con la filosofía de diseño original.

Patrones de diseño

  • Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson
  • Design Patterns.
  • 1994

Patrones de diseño

  • Describe una estructura dentro de la cual catalogar y describir patrones
  • Cataloga 23 patrones
  • Destaca estrategias y aproximaciones basadas en el diseño de patrones

Patrones de diseño

  • No crearon los patrones descriptos en el libro.
  • Los descubrieron como existentes dentro de la comunidad del software

Patrones de diseño

  • Porque estudiar patrones de diseño
  • Reuso de soluciones de diseño.
  • Establecer terminología común.
  • Dan una perspectiva de alto nivel sobre el análisis y diseño.

Que resuelve un patrón de diseño?

  • Patrón de diseño: proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicación de componentes que resuelven un problema de diseño en un contexto particular

Patrones de diseño

  • Programe para una interfaz, no para una implementación.
  • Comience cualquier jerarquía que necesite para solucionar su problema con una clase abstracta, sin implementación de métodos. Que solo describa los métodos que debe soportar.

Patrones de diseño

  • Favorecer la composición frente a la herencia de clases.
  • Construir objetos que contengan otros objetos. No cargue con todo el peso de heredar métodos que no necesita

Patrones de diseño

  • Encuentre lo que varía y encapsúlelo.
  • Lo que puede ser cambiado en su diseño encapsúlelo en una clase , para no tener necesidad de rediseñar.

Patrones de diseño

  • Herencia de clases
  • Ventajas
  • Se define estáticamente
  • Fácil modificación de la implementación
  • Desventajas
  • No se cambian implementaciones en tiempo de ejecución
  • Rompe encapsulamiento

Patrones de diseño

  • Composición de objetos
  • Ventajas
  • Se define dinámicamente
  • No se rompe encapsulamiento

Patrones de diseño

  • Que debería ser variable en su diseño
  • Que puede ser cambiado en su diseño, sin necesidad de rediseñar.
  • Encapsule lo que puede variar.
    • Distintos algoritmos de ordenación de arreglos
    • Encapsule cada algoritmo en una clase

Patrones de diseño

  • Manipular objetos en función de la interfaz
  • definida por la clase abstracta, de la cual
  • extiende, tiene dos ventajas:

Patrones de diseño

  • Los clientes no tienen que conocer los tipos específicos de los objetos que usan, basta con que estos cumplan con la interfaz que esperan los clientes.
  • Los clientes desconocen las clases que implementan dichos objetos; sólo conocen la clase abstracta que define la interfaz.

Patrones de diseño

  • Aceptarlos
  • Reconocerlos
  • Internalizarlos

Clasificación de patrones (GoF)

  • Patrones de creación: Tratan de la inicialización y configuración de clases y objetos.
  • Patrones estructurales: Tratan de desacoplar interfaz e implementación de clases y objetos.
  • Patrones de comportamiento: Tratan de las interacciones dinámicas entre sociedades de clases y objetos

Patrones de creación

  • The Factory Method retorna una de las posibles subclases de una clase abstracta dependiendo de los datos que se le provee.
  • The Abstract Factory Method retorna una de las varias familias de objetos.
  • The Builder Pattern separa la construcción de un objeto complejo de su representación. Varias representaciones se pueden crear dependiendo de las necesidades del programa.
  • The Prototype Pattern inicializa e instancia una clase y luego copia o clona si necesita otras instancias, mas que crear nuevas instancias.
  • The Singleton Pattern es una clase de la cual no puede existir mas de una instancia.

Patrones estructurales

  • Adapter: cambia la interfaz de una clase a la de otra.
  • Bridge: permite mantener constante la interfaz que se presenta al cliente, cambiando la clase que se usa
  • Composite: una colección de objetos
  • Decorator: una clase que envuelve a una clase dándole nuevas capacidades.
  • Facade: reúne una jerarquía compleja de objetos y provee una clase nueva permitiendo acceder a cualquiera de las clases de la jerarquía.
  • Flyweight: permite limitar la proliferación de pequeñas clases similares.

Patrones de comportamiento

  • Cadena de responsabilidad: permite que un conjunto de clases intenten manejar un requerimiento.
  • Interpreter: define una gramática de un lenguaje y usa esa gramática para interpretar sentencias del lenguaje.
  • Iterator: permite recorrer una estructura de datos sin conocer detalles de cómo están implementados los datos
  • Observer: algunos objetos reflejan un cambio a raíz del cambio de otro, por lo tanto se le debe comunicar el cambio de este último.
  • Strategy: cantidad de algoritmos relacionados encerrados en un contexto a través del cual se selecciona uno de los algoritmos.

Otros tipos de patrones

  • Patrones de programación concurrente
  • Patrones de interfaz gráfica
  • Patrones de organización de código
  • Patrones de optimización de código
  • Patrones de robustez de código
  • Patrones de fases de prueba

Plantilla GoF

  • Nombre Un buen nombre es vital porque será parte del vocabulario de diseño
  • Nombres Alternativos Otros nombres de uso común para el patrón.
  • Propósito Qué problema pretende solucionar.
  • Motivación Descripción del problema y su contexto
        • Puede consistir en un ejemplo (un escenario) que ilustre la clase de problemas que el patrón intenta resolver.
        • En general se entienden mejor los problemas concretos que los abstractos.

Plantilla GoF

  • Estructura Representación gráfica de las clases de los objetos que participan en el patrón y de sus relaciones estructurales (estáticas)
        • Actualmente, lo más común es usar UML.
  • Aplicabilidad ¿En qué situaciones puede/debe aplicarse el patrón?
  • Participantes Las clases y objetos que participan en el patrón y sus responsabilidades o roles
  • Consecuencias ¿Qué efectos positivos y negativos implica el uso del patrón?
          • ¿Cuáles son los compromisos de diseño que implica su uso?
          • ¿Qué aspectos de la estructura del sistema pueden variar de forma independiente?
  • Colaboración Cómo colaboran los participantes para llevar a cabo sus responsabilidades y proporcionar el comportamiento deseado

Plantilla GoF

  • Usos conocidos Al menos dos ejemplos de uso del patrón en aplicaciones reales.
  • Implementación ¿Cómo puede implementarse el patrón en un lenguaje de programación?
          • ¿Qué dificultades implica?
          • ¿Hay aspectos dependientes del lenguaje de programación?
  • Código de ejemplo Fragmentos de código que ilustren cómo se implementa el patrón en uno o varios lenguajes de programación
  • Patrones relacionados ¿Cuáles son los patrones más estrechamente relacionados con el dado?
          • ¿Se usa en conjunción con otros patrones? ¿De qué manera?

Singleton

public final class Singleton {

  • public final class Singleton {
  • private final static Singleton singleton = new Singleton();
  • private Singleton(){
  • System.err.println( "Objeto Singleton creado." ); }
  • public static Singleton obtenerInstanciaSingleton()
  • {return singleton; }
  • }

public class PruebaSingleton {

  • public class PruebaSingleton {
  • // ejecutar ejemplo Singleton
  • public static void main( String args[] )
  • Singleton primerSingleton;
  • Singleton segundoSingleton;
  • primerSingleton = Singleton.obtenerInstanciaSingleton() segundoSingleton = Singleton.obtenerInstanciaSingleton();
  • if ( primerSingleton == segundoSingleton )
  • System.err.println( "primerSingleton y segundoSingleton " + "se refieren al mismo objeto Singleton" ); }}

Estrategia

Estrategia

  • public class Context {
  • Strategy strategy=null;
  • public Context(Strategy strategy) {
  • this.strategy = strategy;}
  • public int realizarOperacion(){
  • return this.strategy.calcular();}}
  • public interface Strategy {
  • int calcular();}

Estrategia

  • public class ConcreteStrategyOne implements Strategy{ public int calcular() {return 1; }}
  • public class ConcreteStrategyTwo implements Strategy {public int calcular() {return 2;}}
  • public class ConcreteStrategyThree implements Strategy {public int calcular() {return 3;}}

Observer

Observer

  • abstract public class Sujeto {
  • protected Observador []observan;
  • public Sujeto (){observan = new Observador[10];}
  • abstract public Observador adscribir (Observador e);
  • abstract public Observador quitar (Observador e);
  • abstract public void registra(Observador e);
  • }

Observer

  • public class Sensor extends Sujeto {
  • private double valor;
  • int pos;
  • public Sensor (){}
  • public double getValor(){return valor;}
  • public Observador adscribir (Observador e){
  • observan[pos]=e;
  • pos++; return e;}

Observer

  • public Observador quitar (Observador e){
  • int indice=0;
  • for(int j=0; j<=observan.length;j++)
  • while(j<=observan.length) {
  • if(observan[j].equals(e))
  • observan[j]=null;
  • else System.out.println("No encontre el elemento");
  • } return e;
  • }
  • public void registra(Observador o) {
  • observan[pos]=o; }}

Beneficios de los patrones

  • Los patrones favorecen la reutilización de diseños y arquitecturas a gran escala.
  • Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software.
  • Proporcionan un cuerpo de conocimiento utilizable por toda la comunidad software.
  • Favorecen la transmisión de conocimiento entre profesionales y entre clientes y desarrolladores
  • Proporcionan un lenguaje común. Los nombres de los patrones forman parte del vocabulario técnico del ingeniero software.

Problema de los patrones

  • Los patrones, no llevan de forma directa a la reutilización del código, aunque dicha reutilización se facilita mediante su uso.
  • La integración de los patrones en el proceso de desarrollo se hace todavía de forma manual.
  • El número de patrones identificados es cada vez más grande. Las clasificaciones actuales no siempre sirven de guía para decidir cual usar.

Problema de los patrones

  • El número de combinaciones patrones estilos y atributos que se dan en la práctica son incontables.
  • Los patrones se validan por la experiencia y el debate, no mediante la aplicación de técnicas formales

Cómo seleccionar un patrón de diseño

  • Considerar cómo los patrones de diseño solucionan problemas de diseño.
  • Buscar las intenciones de cada patrón.
  • Estudiar cómo se interrelacionan los patrones.
  • Estudiar patrones de propósito similar.
  • Examinar la causa de un rediseño.
  • Considerar que debería ser variable en un diseño.

Cómo usar un patrón de diseño

  • 1. Leer el patrón una vez para tener una visión general
  • 2. Volver y estudiar la estructura, los participantes y las colaboraciones
  • 3. Ver un ejemplo concreto codificado del patrón
  • 4. Elegir nombres para los participantes del patrón que sean significativos en el contexto de la aplicación

Cómo usar un patrón de diseño

  • 5. Definir las clases
  • 6. Definir nombres específicos de la aplicación para las operaciones en el patrón.
  • 7. Implementar las operaciones que realizarán las responsabilidades y colaboraciones del patrón.

Problema a resolver

  • Existe un archivo de texto, el que se debe leer en distintos momentos y bajo condiciones variables.
  • Como lo resuelvo?

Problema a resolver

    • Leer solo las palabras que comiencen con t
    • Leer las palabras de más de 5 caracteres
    • Leer los palíndromos
  • Varia la estrategia de lectura
  • Encapsular



Compartir con tus amigos:


La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal