Patrones de diseño I
Upcoming SlideShare
Loading in...5
×
 

Patrones de diseño I

on

  • 2,224 views

 

Statistics

Views

Total Views
2,224
Slideshare-icon Views on SlideShare
2,188
Embed Views
36

Actions

Likes
1
Downloads
79
Comments
0

1 Embed 36

http://rsa.utpl.edu.ec 36

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Patrones de diseño I Patrones de diseño I Presentation Transcript

    • Patrones de Diseño Imagemaker IT Agosto, 2011 “ Si los constructores hicieran las casas de la misma forma en que los Desarrolladores escriben código, El primer pájaro carpintero que viniera destruiría la civilización. ” Stephen Stelting, Olav Maassen.
    • Temario
      • Introducción
      • Historia
      • ¿Qué es un patrón de diseño?
      • Características
      • Conceptos Básicos
      • Por qué usar patrones
      • Tipos de patrones
      • Plantilla de Patrones
      • ¿De que me sirve usar patrones de diseño?
      • Como seleccionar y usar un patrón
      • Reutilización
      • Ejemplo
    • Introducción
      • “ Diseñar software orientado a objetos es
      • difícil, y diseñar software orientado a objetos reutilizable es todavía más difícil” –
      • Capítulo 1 introducción - Design Patterns, The Gang of Four.
      • Diseñar para el cambio.
      • Anticiparse a los cambios en los requisitos o variantes, diseñando de forma tal, que nuestro software se adapte a distintas situaciones.
    • Introducción
      • El objetivo del diseño de software es llegar a
      • un producto de calidad .
      • El diseño debe ser adecuado para la aplicación en particular, pero dicha solución también debe ser general para poder enfrentar distintos escenarios y evitar el rediseño.
      • No es necesario partir desde cero.
    • Historia
      • La idea de patrón de diseño que utilizamos en Ingeniería de Software viene de la arquitectura. En 1977 se publicó “A Pattern language: Towns/Building/Construction” de Christopher Alexander y otros.
      • Según Alexander, cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo siquiera dos veces de la misma forma”.
    • Historia
      • Los patrones de diseño de software nacen
      • en los 80’s con Kent Beck y Ward Cunningham, que discutían patrones para Smalltalk.
      • La contribución más célebre es el libro “Patrones de Diseño” de Erick Gamma, Richard Helm, Ralph Johnson y John Vlissides con ejemplos en C++, la famosa Gof (Gang of Four).
    • ¿Qué es un patrón de Diseño?
      • Según Dirk Riehle y Heinz Zullighoven:
      • “ Un patrón es la abstracción de una forma
      • concreta que puede repetirse en contextos específicos. ”
      • Para Christopher Alexander: “ Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo ni siquiera dos veces de la misma forma ” .
    • Características
      • Soluciona un problema: buscan solucionar
      • problema concreto y recurrente.
      • Es un concepto probado: son soluciones demostradas, no teorías ni especulaciones.
      • La solución no es obvia: muchas técnicas de solución de problemas tratan de hallar soluciones por medio de principios básicos. Los mejores patrones generan una solución a un problema de forma indirecta.
      • Describe participantes y relaciones entre ellos: No solo describen módulos sino estructuras y mecanismos complejos. Y por supuesto, como se relacionan para lograr su objetivo.
    • Características
      • Repetición, adaptabilidad y utilidad: si no se repite, no es un patrón, pero además de esto debe demostrar su adaptabilidad y utilidad en al menos 3 sistemas existentes. Explicando como el patrón es exitoso; y mostrar la utilidad detallando porque es beneficioso.
    • Conceptos Básicos
      • Nombre: nombre descriptivo del patrón.
      • También conocido como: nombre alternativo si lo hay.
      • Propiedades según 2 aspectos: Tipo (Creación, comportamiento, estructural, de sistema) y Nivel (Clase única, componente, arquitectónico).
      • Propósito: explicación de las implicaciones del patrón.
      • Presentación: descripción del problema que permite enfrentar.
      • Aplicabilidad: cuando y por qué sería deseable su utilización.
      • Descripción: explicación detallada del patrón, indicando que hace y cómo se comporta.
      • Implementación: explicación de qué debe hacerse para implementar este patrón.
    • Conceptos Básicos
      • Ventajas e Inconvenientes: consecuencias del uso
      • del patrón y los compromisos asociados al uso del mismo.
      • Variantes: posibles implementaciones alternativas y variaciones del patrón.
      • Patrones Relacionados: otros patrones con los que está asociado o con los que tiene relación estrecha.
      • Ejemplo: Un ejemplo en un lenguaje de programación determinado.
    • Por qué Usar Patrones de Diseño
      • Porque su utilización y documentación
      • permite a desarrolladores novatos beneficiarse de la experiencia de soluciones anteriores.
      • Proporcionan un vocabulario común a los desarrolladores, mejorando la comunicación de soluciones entre ellos.
      • Al tener conocimiento sobre patrones, logramos mejores diseños ya que sabemos de antemano los pros y contras que pueda tener una solución planteada.
      • Las soluciones con patrones resuelven
      • problemas específicos hacen los diseños OO más flexibles , elegantes y reutilizables .
      • Al recoger la experiencia de problemáticas anteriores, partimos con una buena base para enfrentar el nuevo desafío.
      Por qué Usar Patrones de Diseño
    • Por qué Usar Patrones de Diseño
      • Facilitan la reutilización de diseños y arquitecturas de
      • software que han tenido éxito ó buen
      • comportamiento/rendimiento.
      • Ayudan a comprender mejor un sistema cuando está documentado con los patrones que se utilizaron en su desarrollo.
      • Facilitan la reestructuración de un sistema.
      • Al estar orientados al cambio, permite adaptarse más rápido y de mejor forma a las modificaciones que se dan en los sistemas durante un período de tiempo.
    • Tipos de Patrones
      • Patrones de arquitectura: expresa una
      • organización o esquema estructural fundamental para sistemas software. Proporciona un conjunto de subsistemas predefinidos, especifica sus responsabilidades, e incluye una guía para organizar las relaciones entre ellos.
      • Patrones de Diseño: proporciona un esquema para refinar los subsistemas o componentes de un sistema software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicar componentes que resuelven un problema de diseño en un contexto particular.
    • Tipos de Patrones
      • Patrones de programación: Describe como implementar aspectos de componentes o de las relaciones entre ellos utilizando las facilidades del lenguaje de programación dado.
      • Patrones de análisis: describen un conjunto de prácticas que aseguran la obtención de un buen modelo de un problema y su solución.
      • Patrones organizacionales: describen la estructura y prácticas de las organizaciones humanas, especialmente en las que producen, usan o administran software.
    • Tipos de Patrones de Diseño
      • Patrones de Creación: Muestran la guía de cómo
      • crear objetos cuando esta labor requiere tomar decisiones. Estas normalmente serán resueltas dinámicamente decidiendo que clases instanciar o sobre qué objetos se delegarán las responsabilidades.
      • Patrones de Partición: durante el análisis, se examina el problema para identificar actores, casos de uso, requerimientos y sus relaciones. Estos patrones proveen la guía de cómo dividir actores complejos y casos de múltiples clases.
    • Tipos de Patrones de Diseño
      • Patrones de Comportamiento: Son utilizados
      • para organizar, manejar y combinar el comportamiento que tendrán los objetos en el contexto de nuestra solución.
      • Patrones Estructurales: Describen las formas comunes en que diferentes tipos de objetos pueden ser organizados para trabajar unos con otros.
      • Patrones de concurrencia: permiten coordinar operaciones concurrentes y están dirigidos a 2 tipos principales de problemas: Recursos compartidos y secuencia de operaciones.
    • Catálogo de Patrones
    • ¿De que me sirve usar patrones de diseño?
      • Determinar Granularidad: los objetos pueden
      • variar en tamaño y número. Se debe decidir qué será un objeto y que no.
      • Especificar las interfaces: Son el conjunto de signatures o firmas de las operaciones de un objeto. Los patrones nos ayudan a definir estas interfaces, incluso indican que no poner en la interface.
      • Determinar los tipos: El tipo es el nombre utilizado para denotar una interface. Un objeto es de un tipo si acepta todas las operaciones indicadas en su interface. Los patrones nos ayudan a determinar estos tipos y analizar las relaciones que tendrán entre ellas.
      • Obligan a programar para la interface, NO a la implementación.
      • Con una herencia bien utilizada podemos
      • definir familias de objetos con interfaces idénticas
      • Si la herencia es usada correctamente, todas las clases derivadas de una clase abstracta comparten la misma interface, es decir, responden a los mismos mensajes.
    • Como seleccionar y usar un patrón
      • Considerar los problemas de diseño: seleccionar los
      • patrones que lo resuelvan.
      • Observar la intención del patrón: escoger los más cercanos al problema.
      • Estudiar como se interrelacionan los patrones: quizás haya que usar más de uno.
      • Estudiar los patrones de propósito similar: esto es para comparar posibles soluciones.
      • Estudiar posibles causas de rediseño: Tener en cuenta las que evitan los patrones.
      • Considerar variabilidad en el diseño: para anticiparse al cambio.
      • Leer todo el patrón más de una vez: obtener una
      • visión global, especialmente de la aplicabilidad
      • y consecuencias del uso.
      • Definir las clases de los patrones escogidos: Escoger los nombres, que deben ser representativos en el contexto de la aplicación.
      • Definir nombres de las operaciones: ser consistente.
      • No Intentar aplicar un patrón a la fuerza: Esto es de suma relevancia, ya que la utilización de un patrón debe ser el resultado de un análisis a conciencia, y su aplicabilidad un proceso natural, considerando matices, pero no forzando su uso.
    • Mecanismos de Reutilización
      • Usualmente la herencia es vista como el mecanismo de reutilización en orientación a objetos.
      • Aún así, existe otra técnica alternativa llamada composición de objetos . En ella se obtiene una nueva funcionalidad ensamblando o componiendo objetos. Y para ello es necesario, que dichos objetos posean interfaces bien definidas.
      • Ambas tienen sus ventajas y desventajas que veremos a continuación.
      Herencia vs. Composición
    • Ventajas de la Herencia
      • Queda definida en tiempo de compilación y es
      • sencilla de usar.
      • El lenguaje que usamos le da sustento.
      • Es más fácil de modificar si se necesita para reutilizar.
      Desventajas de la Herencia
      • No se puede cambiar la implementación de lo heredado en tiempo de ejecución
      • Como la clase padre implementa parte de la estructura de la clase hija, ésta expone detalles a sus herederos.
      • Las clases padre e hija están íntimamente relacionadas. Un cambio en la clase padre, provoca un cambio en la clase hija.
    • Composición
      • La composición de objetos se define en tiempo de
      • ejecución, por medio de objetos que tienen referencias a otros objetos.
      Ventajas de la Composición
      • Como los objetos solo se acceden por medio de las interfaces,
      • no se quiebra el encapsulamiento. Por esto, las interfaces deben
      • ser cuidadosamente diseñadas.
      • Los objetos pueden ser reemplazados en tiempo de ejecución, siempre y cuando posean la misma interface.
      • La implementación de un objeto se escribe en términos de interfaces lo que reduce las dependencias de implementación.
      • Lema de orientación a objetos: “ Favorecer la composición de objetos por sobre la herencia ” .
    • Delegación
      • La delegación es la técnica que le da poder a la
      • composición de objetos.
      • En delegación, 2 objetos están involucrados en atender un mensaje ó pedido: un objeto receptor que recibe el mensaje y lo deriva en el objeto delegado .
      • Ventajas de la composición
      • Es fácil combinar comportamiento en tiempo de ejecución y cambiar la manera en que estos se combinan.
      • Desventaja
      • El software dinámico y parametrizable es difícil de entender.
    • Singleton
      • Tipo: creación
      • Nivel: Objeto
      • Propósito: Permite tener una única instancia de esta clase en el sistema, a la vez que permite que todas las clases tengan acceso a esa instancia.
      • Aplicabilidad: Usar cuando se quiera solo una instancia de una clase, pero debe estar disponible globalmente.
      • Descripción: Este patrón asegura que se crea un máximo de una instancia en la JVM. Para asegurar que se tiene el control sobre esta instanciación, se debe hacer el constructor privado . Dado lo anterior, es imposible crear una instancia, por lo que se debe proporcionar un método estático getInstance() para acceder a una instancia de esa clase, la que será creada siempre y cuando no haya sido creada con anterioridad, en cuyo caso, devuelve dicha instancia, la que ha sido almacenada como un atributo privado de la clase.
      • Implementación:
      • Ventajas e Inconvenientes:
      • La clase Singleton es la única clase que puede crear una instancia de sí misma. No se puede obtener ninguna instancia sin utilizar el método estático proporcionado.
      • No necesita pasar la referencia a todos los objetos que acceden al Singleton.
      • Sin embargo, este patrón puede presentar problemas de acceso multithread, dependiendo de cómo se haya realizado la implementación.
    • Variaciones
      • Una de las opciones más exploradas del patrón Singleton,
      • es tener más de una instancia dentro de la clase.
      • La ventaja es que el resto de la aplicación puede permanecer inalterada, mientras que todos aquellos objetos que conocen la existencia de múltiples instancias pueden utilizar algún método para obtener una de las otras instancias.
      • El método de acceso al Singleton puede ser el punto de entrada al conjunto total de instancias, aunque todas tengan un tipo distinto. Este puede determinar, en tiempo de ejecución, que tipo de instancia devolver. Esto podría parecer extraño, pero es muy útil cuando se utiliza carga dinámica de clases.
      • Patrones Relacionados
      • Abstract Factory
      • Builder
      • Prototype
      • Ejemplo:
      • package cl.bch.ejemplo;
      • /**
      • * Clase de ejemplo con la implementación de un Singleton
      • * @author sergio
      • *
      • */
      • public class ClassicSingleton {
      • // Instancia donde almacenaremos la instancia
      • private static ClassicSingleton instance= null;
      • //Constructor privado
      • private ClassicSingleton() {
      • // Exists only to defeat instantiation.
      • }
      • /**
      • * Metodo con el cual devolvemos la instancia solicitada de la clase
      • * @return
      • */
      • public static ClassicSingleton getInstance() {
      • if( instance == null) {
      • instance = new ClassicSingleton();
      • }
      • return instance;
      • }
      • }
      • Gracias… Totales!