Patrones de Diseño
description
Transcript of Patrones de Diseño
![Page 1: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/1.jpg)
Diseño con Patrones
Yupanqui García, Glen Jasper
Diseño de Sistemas
![Page 2: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/2.jpg)
2
Introducción
El diseño OO es difícil y el diseño de software orientado a objetos reutilizable lo es aún más.
Los diseñadores expertos no resuelven los problemas desde sus principios; reutilizan soluciones que han funcionado en el pasado.
– Se encuentran patrones de clases y objetos de comunicación recurrentes en muchos sistemas orientados a objetos.
– Estos patrones resuelven problemas de diseño específicos y hacen el diseño flexible y reusable.
![Page 3: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/3.jpg)
3
Definición de un patrón
Alexander(arquitecto/urbanista)
Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y describe también el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces sin tener que hacer dos veces lo mismo.
![Page 4: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/4.jpg)
4
Definición de un patrón de diseño
[Gamma]
Un patrón de diseño es una descripción de clases y objetos comunicándose entre sí adaptada para resolver un problema de diseño general en un contexto particular.
![Page 5: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/5.jpg)
5
Introducción
Es un tema importante en el desarrollo de software actual: permite capturar la experiencia
Busca ayudar a la comunidad de desarrolladores de software a resolver problemas comunes, creando un cuerpo literario de base
– Crea un lenguaje común para comunicar ideas y experiencia acerca de los problemas y sus soluciones
El uso de patrones ayuda a obtener un software de calidad (reutilización y extensibilidad)
![Page 6: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/6.jpg)
6
Elementos de un patrón
Nombre: describe el problema de diseño. El problema: describe cuándo aplicar el
patrón. La solución: describe los elementos que
componen el diseño, sus relaciones, responsabilidades y colaboración.
![Page 7: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/7.jpg)
7
Ventajas de los patrones de diseño
Son soluciones concretas:– Un catálogo de patrones es un conjunto de recetas de diseño.– Aunque se pueden clasificar, cada patrón es independiente del resto.
Son soluciones técnicas:– Dada una determinada situación, los patrones indican cómo
resolverla mediante un D.O.O.– Existen patrones específicos para un lenguaje determinado, y otros
de carácter más general. Se aplican en situaciones muy comunes:
– Proceden de la experiencia.– Han demostrado su utilidad para resolver problemas que aparecen
frecuentemente en el D.O.O.
![Page 8: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/8.jpg)
8
Ventajas de los patrones de diseño
Son soluciones simples:– Indican cómo resolver un problema particular utilizando un
pequeño número de clases relacionadas de forma determinada.
– No indican cómo diseñar un sistema completo, sino sólo aspectos puntuales del mismo.
Facilitan la reutilización de las clases y del propio diseño:
– Los patrones favorecen la reutilización de clases ya existentes y la programación de clases reutilizables.
– La propia estructura del patrón es reutilizada cada vez que se aplica.
![Page 9: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/9.jpg)
9
Inconvenientes
El uso de un patrón no se refleja claramente en el código:– A partir de la implementación es difícil determinar qué patrón de diseño se
ha utilizado.– No es posible hacer ingeniería inversa.
Referencias a “self”:– Muchos patrones utilizan la delegación de operaciones y esto provoca el
conocido problema del ámbito local de los objetos (self). Es difícil reutilizar la implementación de un patrón:
– Las clases del patrón son roles genéricos, pero en la implementación aparecen clases concretas.
Los patrones suponen cierta sobrecarga de trabajo a la hora de implementar:
– Se usan más clases de las estrictamente necesarias.– A menudo un mensaje se resuelve mediante delegación de varios
mensajes a otros objetos.
![Page 10: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/10.jpg)
10
Clasificación de los patrones
Según su ámbito:– Patrones de clases . Tratan con relaciones de
herencia (estática) entre clases.– Patrones de objetos . Se refieren a relaciones
de composición entre objetos, que pueden cambiar en tiempo de ejecución y son más dinámicas.
![Page 11: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/11.jpg)
11
Clasificación de los patrones
Según su propósito:– De creación: conciernen al proceso de creación
de objetos.– De estructura: tratan la composición de clases
y/o objetos.– De comportamiento: caracterizan las formas en
las que interactúan y reparten responsabilidades las distintas clases u objetos.
![Page 12: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/12.jpg)
12
Clasificación de los patronesGoF (gang of Four) [Gamma]
![Page 13: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/13.jpg)
13
Patrones de diseño fundamentales
Son patrones que no aparecen la tabla definida por Gamma, pero se utilizan habitualmente:
DELEGATION INTERFACE MARKER INTERFACE
![Page 14: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/14.jpg)
14
Patrón DELEGATION
Utilidad:
Cuando se quiere extender y reutilizar la funcionalidad de una clase SIN UTILIZAR LA
HERENCIA Ventajas:
– En vez de herencia múltiple– Cuando una clase que hereda de otra quiere ocultar
algunos de los métodos heredados– Compartir código que NO se puede heredar
![Page 15: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/15.jpg)
15
Patrón DELEGATIONEl problema
![Page 16: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/16.jpg)
16
Patrón DELEGATIONLa solución
![Page 17: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/17.jpg)
17
Patrón DELEGATIONImplementación
![Page 18: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/18.jpg)
18
Patrón INTERFACEUtilidad y Ventajas
Utilidad– Definir un comportamiento independiente de
donde vaya a ser utilizado
Ventajas– Desacople entre comportamiento y clase.– Realización de clases “Utilities”
![Page 19: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/19.jpg)
19
Patrón INTERFACEEl problema
![Page 20: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/20.jpg)
20
Patrón INTERFACELa Solución
![Page 21: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/21.jpg)
21
Patrón INTERFACEImplementación
![Page 22: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/22.jpg)
22
Patrón INTERFACEEjemplo
![Page 23: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/23.jpg)
23
Patrón MARKER INTERFACEUtilidad y Ventajas
Utilidad– Sirve para indicar atributos semánticos de una clase.
Ventajas:– Se puede preguntar si un objeto pertenece a una clase de
un determinado tipo o no.– Habitualmente se utiliza en clases de utilidades que tienen
que determinar algo sobre objetos sin asumir que son instancias de una determinada clase o no.
![Page 24: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/24.jpg)
24
Patrón MARKER INTERFACE
![Page 25: Patrones de Diseño](https://reader035.fdocumento.com/reader035/viewer/2022070318/5571f1c249795947648ba528/html5/thumbnails/25.jpg)
25
Patrón MARKER INTERFACEEjemplo
En Java hay clases “serializables”, “cloneables”, etc. Para ello, basta con que implementen las interfaces Serializable, Cloneable, etc.