MGT-350
INGENIERÍA DE SOFTWARE Y
   CONTROL DE CALIDAD

   DISEÑO BASADO EN PATRONES


              Por:
        Marvin Zumbado

                         18 Agosto 2012
Patrones de Diseño
          (Design Patterns)


Las primeras instancias para la reutilización de
diseños abstractos aparecieron en la documentación
y publicación de algoritmos fundamentales (Knuth.
1971)
Los patrones de diseño se derivaron de las ideas
introducidas por Christopher Alexander (Alexander et
ai, 1977), quien sugirió que existían ciertos patrones
del diseño de edificios que eran comunes e
inherentemente interesantes y efectivos
Un poco de historia

En 1987, Ward Cunningham y Kent Beck trabajaron con
Smaltalk y diseñaron interfaces de usuario. Decidieron,
para ello, utilizar alguna de las ideas de Alexander para
desarrollar un lenguaje pequeño de patrones para servir
de guía a los programadores.
De 1990 en adelante varios autores como Erich Gamma,
Richard Helm, Ralph Johnson y John Vlissides
(nombrados el grupo de los cuatro) realizan un catálogo
de patrones de diseño y así sucesivamente se han ido
agregando más patrones de diseño como de
organización de código, de optimización de código, etc.
Patrones de Diseño:
          ¿Para qué sirven?

Los patrones de diseño son la base para la búsqueda de
soluciones a problemas comunes en el desarrollo
de software y otros ámbitos referentes al diseño de
interacción o interfaces.

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
resuelva problemas similares de manera efectiva. Otra
característica es que debe ser reutilizable.
Patrones de diseño


Los patrones y los lenguajes de patrones son formas
de describir las mejores prácticas, buenos diseños y
encapsulan la experiencia de tal forma que es posible
que otras personas puedan reutilizar dicha
experiencia.
Proporciona un esquema para refinar los subsistemas
o componentes de un sistema software, o las
relaciones entre ellos.
Tipos de patrones
Patrones de arquitectura
 organización o esquema estructural
Patrones de diseño
 esquema para refinar los subsistemas o componentes
  de un sistema software, o las relaciones entre ellos
Patrones de programación (idioms)
 Utiliza facilidades del lenguaje de programación dado.
Patrones de análisis
 conjunto de prácticas
Patrones organizacionales
 estructura y prácticas de las organizaciones
Otros tipos de patrones menos
           comunes

Patrones de programación concurrente.
Patrones de interfaz gráfica.
Patrones de organización del código.
Patrones de optimización de código.
Patrones de robustez de código.
Patrones de la fase de prueba.
Elementos de un patrón


Nombre
Objetivo
Contexto
Aplicabilidad
Solución
Implementación
Concecuencias
Patrones relacionados
Cualidades de un patrón de diseño


 Encapsulación y abstracción: cada patrón encapsula un
 problema bien definido y su solución en un dominio
 particular.
 Extensión y variabilidad: cada patrón debería ser abierto
 por extensión o parametrización por otros patrones
 Generalidad y composición: cada patrón, una vez aplicado,
 genera un contexto resultante, el cual concuerda con el
 contexto inicial de uno o más de uno de los patrones del
 catálogo
 Equilibrio: cada patrón debe realizar algún tipo de balance
 entre sus efectos y restricciones
De creación         Estructurales     Comportamiento     Concurrencia
Fábrica Abstracta   Adaptador        Cadena           de
                                     responsabilidad     Objeto Activo
Constructor Virtual Puente           Orden               Obstaculizar
Método           de Objeto compuesto Intérprete
fabricación                                              Pegue
Prototipo           Envoltorio       Iterador            Mensajes (MDP)
Instancia Única     Fachada          Mediador            Doble candado
                    Peso ligero      Recuerdo            Eventos asincronos
                    Proxy            Observador          Suspencion
                                                         vigilada
                    Módulo           Estado              Candado
                                     Estrategia          Monitor object
                                     Método Plantilla    Reactor
                                     Visitante           Bloqueado
                                                         Lectura-Escritura
                                                         Scheduler
                                                         Manejo de Hilos
                                                         Almacenamiento
Ventajas y Desventajas

Ventajas:
  Permiten reutilizar soluciones de problemas
  comunes.
  Están probados y son lo suficientemente
  flexibles para adaptarse.
Desventajas:
  Su elevado número (falta de catalogación).
  Su complejidad.
  Poca definición.
Tipos de Patrones


Adaptador: Adapta la interfaz de una clase a la
interfaz esperada por sus clientes, favorece la
reutilización (de la clase adaptada) y permite la
colaboración con interfaces incompatibles. También
se conoce como Wrapper.
Tipos de Patrones
Decorador: Permite añadir responsabilidades
adicionales a un objeto de forma dinámica. Los
decoradores proporcionan una alternativa flexible a la
subclasificación para añadir funcionalidad.
Tipos de Patrones
Estado: Es un patrón de comportamiento para
objetos. Se debe usar si el comportamiento de un
objetodepende 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.
Tipos de Patrones
Tipos de Patrones


Singular (singleton): (instancia única) está diseñado
para restringir la creación de objetos pertenecientes a
una clase o el valor de un tipo a un único objeto. Su
intención consiste en garantizar que una clase sólo
tenga una instancia y proporcionar un punto de
acceso global a ella
Tipos de Patrones
Tipos de Patrones


Iterador: Proporciona una forma de acceder
secuencialmente a los elementos de una colección sin
mostrar la representación interna de la misma.
Permite definir diversos recorridos sobre una
estructura, admitiendo el uso simultáneo de la misma
por parte de varios clientes.
Tipos de Patrones
Tipos de Patrones


Chain of Responsibility (Cadena de responsabilidad):
Permite establecer la línea que deben llevar los
mensajes para que los objetos realicen la tarea
indicada.
Tipos de Patrones
Tipos de Patrones


Composite. Combina objetos en
estructuras de árbol para
representar jerarquías de parte-
todo. Permite que los clientes
traten de manera uniforme a los
objetos individuales y a los
compuestos.
Tipos de Patrones


Facade. Proporciona una
interfaz unificada para
un conjunto de
interfaces de un
subsistema. Define una
interfaz de alto nivel que
hace que el subsistema
se más fácil de usar.
Tipos de Patrones


Prototype. Especifica los
tipos de objetos a crear por
medio de una instancia
prototípica, y crear nuevos
objetos copiando este
prototipo.
Tipos de Patrones

Proxy: se utiliza como
intermediario para acceder
a un objeto, permitiendo
controlar el acceso a él.
Necesitamos crear objetos
que consumen muchos
recursos, pero no queremos
instanciarlos a no ser que el
cliente lo solicite o se
cumplan otras condiciones
determinadas.
Tipos de Patrones


Flyweight. Usa el
compartimiento
para permitir un
gran número de
objetos de grano
fino de forma
eficiente.
Tipos de Patrones


Bridge. Desvincula una abstracción de su
implementación, de manera que ambas puedan variar
de forma independiente.
    Abstraccion                                        Implementacion
    Operacion()                                        OperacionImpl()


                       imp.OperacionImpl()


 OperacionRedefinida                         ImplementaA          ImplementaB
                                             OperacionImpl()      OperacionImpl()
CONCLUSIONES


 La noción de un patrón como un concepto reutilizable ha sido desarrollada en
  varias áreas además del diseño software, que incluye gestión de
  configuraciones, diseño de interfaces de usuario y escenarios de interacciones
 El uso de patrones es una forma efectiva de reutilización.
 Se puede afirmar que sólo ingenieros de software experimentados que tengan
  un conocimiento profundo de patrones pueden utilizarlos de forma efectiva.
  Estos desarrolladores pueden reconocer situaciones genéricas en las que se
  puede aplicar un patrón.
 Los programadores sin experiencia, aun cuando hayan leído libros sobre
  patrones, siempre encontrarán difícil decidir si pueden reutilizar un patrón o si
  necesitan desarrollar una solución de propósito específico.
MUCHAS GRACIAS

Desarrollo basado en patrones

  • 1.
    MGT-350 INGENIERÍA DE SOFTWAREY CONTROL DE CALIDAD DISEÑO BASADO EN PATRONES Por: Marvin Zumbado 18 Agosto 2012
  • 2.
    Patrones de Diseño (Design Patterns) Las primeras instancias para la reutilización de diseños abstractos aparecieron en la documentación y publicación de algoritmos fundamentales (Knuth. 1971) Los patrones de diseño se derivaron de las ideas introducidas por Christopher Alexander (Alexander et ai, 1977), quien sugirió que existían ciertos patrones del diseño de edificios que eran comunes e inherentemente interesantes y efectivos
  • 3.
    Un poco dehistoria En 1987, Ward Cunningham y Kent Beck trabajaron con Smaltalk y diseñaron interfaces de usuario. Decidieron, para ello, utilizar alguna de las ideas de Alexander para desarrollar un lenguaje pequeño de patrones para servir de guía a los programadores. De 1990 en adelante varios autores como Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides (nombrados el grupo de los cuatro) realizan un catálogo de patrones de diseño y así sucesivamente se han ido agregando más patrones de diseño como de organización de código, de optimización de código, etc.
  • 4.
    Patrones de Diseño: ¿Para qué sirven? Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. 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 resuelva problemas similares de manera efectiva. Otra característica es que debe ser reutilizable.
  • 5.
    Patrones de diseño Lospatrones y los lenguajes de patrones son formas de describir las mejores prácticas, buenos diseños y encapsulan la experiencia de tal forma que es posible que otras personas puedan reutilizar dicha experiencia. Proporciona un esquema para refinar los subsistemas o componentes de un sistema software, o las relaciones entre ellos.
  • 6.
    Tipos de patrones Patronesde arquitectura  organización o esquema estructural Patrones de diseño  esquema para refinar los subsistemas o componentes de un sistema software, o las relaciones entre ellos Patrones de programación (idioms)  Utiliza facilidades del lenguaje de programación dado. Patrones de análisis  conjunto de prácticas Patrones organizacionales  estructura y prácticas de las organizaciones
  • 7.
    Otros tipos depatrones menos comunes Patrones de programación concurrente. Patrones de interfaz gráfica. Patrones de organización del código. Patrones de optimización de código. Patrones de robustez de código. Patrones de la fase de prueba.
  • 8.
    Elementos de unpatrón Nombre Objetivo Contexto Aplicabilidad Solución Implementación Concecuencias Patrones relacionados
  • 9.
    Cualidades de unpatrón de diseño Encapsulación y abstracción: cada patrón encapsula un problema bien definido y su solución en un dominio particular. Extensión y variabilidad: cada patrón debería ser abierto por extensión o parametrización por otros patrones Generalidad y composición: cada patrón, una vez aplicado, genera un contexto resultante, el cual concuerda con el contexto inicial de uno o más de uno de los patrones del catálogo Equilibrio: cada patrón debe realizar algún tipo de balance entre sus efectos y restricciones
  • 10.
    De creación Estructurales Comportamiento Concurrencia Fábrica Abstracta Adaptador Cadena de responsabilidad Objeto Activo Constructor Virtual Puente Orden Obstaculizar Método de Objeto compuesto Intérprete fabricación Pegue Prototipo Envoltorio Iterador Mensajes (MDP) Instancia Única Fachada Mediador Doble candado Peso ligero Recuerdo Eventos asincronos Proxy Observador Suspencion vigilada Módulo Estado Candado Estrategia Monitor object Método Plantilla Reactor Visitante Bloqueado Lectura-Escritura Scheduler Manejo de Hilos Almacenamiento
  • 12.
    Ventajas y Desventajas Ventajas: Permiten reutilizar soluciones de problemas comunes. Están probados y son lo suficientemente flexibles para adaptarse. Desventajas: Su elevado número (falta de catalogación). Su complejidad. Poca definición.
  • 13.
    Tipos de Patrones Adaptador:Adapta la interfaz de una clase a la interfaz esperada por sus clientes, favorece la reutilización (de la clase adaptada) y permite la colaboración con interfaces incompatibles. También se conoce como Wrapper.
  • 16.
    Tipos de Patrones Decorador:Permite añadir responsabilidades adicionales a un objeto de forma dinámica. Los decoradores proporcionan una alternativa flexible a la subclasificación para añadir funcionalidad.
  • 17.
    Tipos de Patrones Estado:Es un patrón de comportamiento para objetos. Se debe usar si el comportamiento de un objetodepende 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.
  • 18.
  • 19.
    Tipos de Patrones Singular(singleton): (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella
  • 20.
  • 21.
    Tipos de Patrones Iterador:Proporciona una forma de acceder secuencialmente a los elementos de una colección sin mostrar la representación interna de la misma. Permite definir diversos recorridos sobre una estructura, admitiendo el uso simultáneo de la misma por parte de varios clientes.
  • 22.
  • 23.
    Tipos de Patrones Chainof Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
  • 24.
  • 25.
    Tipos de Patrones Composite.Combina objetos en estructuras de árbol para representar jerarquías de parte- todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
  • 26.
    Tipos de Patrones Facade.Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.
  • 27.
    Tipos de Patrones Prototype.Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.
  • 28.
    Tipos de Patrones Proxy:se utiliza como intermediario para acceder a un objeto, permitiendo controlar el acceso a él. Necesitamos crear objetos que consumen muchos recursos, pero no queremos instanciarlos a no ser que el cliente lo solicite o se cumplan otras condiciones determinadas.
  • 29.
    Tipos de Patrones Flyweight.Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.
  • 30.
    Tipos de Patrones Bridge.Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. Abstraccion Implementacion Operacion() OperacionImpl() imp.OperacionImpl() OperacionRedefinida ImplementaA ImplementaB OperacionImpl() OperacionImpl()
  • 31.
    CONCLUSIONES  La nociónde un patrón como un concepto reutilizable ha sido desarrollada en varias áreas además del diseño software, que incluye gestión de configuraciones, diseño de interfaces de usuario y escenarios de interacciones  El uso de patrones es una forma efectiva de reutilización.  Se puede afirmar que sólo ingenieros de software experimentados que tengan un conocimiento profundo de patrones pueden utilizarlos de forma efectiva. Estos desarrolladores pueden reconocer situaciones genéricas en las que se puede aplicar un patrón.  Los programadores sin experiencia, aun cuando hayan leído libros sobre patrones, siempre encontrarán difícil decidir si pueden reutilizar un patrón o si necesitan desarrollar una solución de propósito específico.
  • 32.