28
Patrones de Diseño Ing. Miguel Angel Cedeño Garcidueñas [email protected]

Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Embed Size (px)

Citation preview

Page 1: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de DiseñoIng. Miguel Angel Cedeño Garcidueñas

[email protected]

Page 2: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de Diseño

“Diseñar software orientado a objetos es difícil, pero diseñar software orientado a objetos reutilizable es más difícil todavía. Diseños generales y flexibles son muy difíciles de encontrar la primera vez”

Page 3: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de DiseñoComo llegar a ser un maestro del software. 1) Aprender las reglas: - Algoritmos, estructuras de datos, lenguajes de programación, recursividad etc.2) Aprender los principios: - Programación Orientada a objetos, programación estructurada, programación modular, programación genérica etc.3) Para llegar a ser maestro, hay que estudiar los diseños de otros maestros.- Estos diseños contienen patrones que deben ser atendidos memorizados y aplicados repetidamente.

¿Qué conoce un programador experto que desconoce uno inexperto? - Reutilización de soluciones que funcionaron en el pasado.

Page 4: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de Diseño

Un software capaz de evolucionar tiene que ser reutilizable.

El software cambia.

Para anticiparse a los cambios en los requisitos hay que diseñar pensando en qué aspectos pueden cambiar.

Los patrones de diseño están orientados al cambio

Page 5: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de DiseñoCapturan la experiencia y la hacen accesible a los no expertos.

El conjunto de sus nombres forman un vocabulario que ayudan a que los desarrolladores se comuniquen mejor.

Los patrones llegan a ser la base de un manual de ingeniería de software.

Facilitan la restructuración de un sistema tanto si fue o no concebido con patrones en mente.

Reutilización.

Para anticiparse a los cambios en los requisitos hay que diseñar pensando en qué aspectos pueden cambiar.

Page 6: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de DiseñoClasificación de patrones:- Patrones arquitecturales: Expresan un paradigma fundamental para estructurar un sistema de software. - Proporcionan un conjunto de subsistemas predefinidos, con reglas y guías para organizar las relaciones entre ellos.

Patrones de diseño: - Compuestos de varias unidades arquitecturales más pequeñas.- Describen el esquema básico para estructurar subsistemas y componentes.

Patrones elementales (idioms)- Específicos de un lenguaje de programación .- Describen cómo implementar componentes particulares de un patrón.

Page 7: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Clasificación de los patrones:- 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 8: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de Diseño

Cada patrón de diseño describe un problema que ocurre una y otra vez en el entorno, además describe la solución, de forma que se puede volver a utilizar las veces que sea necesario.

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 9: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Busca ayudar a la comunidad de desarrolladores de software a resolver problemas comunes.

El uso de patrones ayuda a obtener un software de calidad (reutilización y extensibilidad).

Además de permitir capturar experiencia ya acumulada de otros programadores en beneficio al programador nuevo.

Page 10: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

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 11: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Patrones de diseño que se usan habitualmente:- DELEGATION- INTERFACE- MARKER INTERFACE

Page 12: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

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 y quiere ocultar algunos de los métodos heredados. - Compartir código que no se puede heredar.

Page 13: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

- El lenguaje no permite herencia multiple

- La clase C no desea todos los métodos de B

Page 14: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

- No usar herencia sino la relación “USA”

Page 15: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseñoclass C extends A { B objB; C() { // En el constructor se puede crear el objeto B objB = new B();

} void b1() { objB.b1(); } ....

}

Page 16: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Patrón INTERFACE- Utilidad: Definir un comportamiento independiente de donde vaya ser utilizado, así mismo podrán heredar otras clases por medio de herencia de interfaz. - Ventajas: Desacople de clases “Utiles”.

Page 17: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseñovoid imprimirEstructura(??? o) {

o.irAlPrimero(); while (o.tieneElems()); imprimir (o.obtenerSiguiente());}

Todos los objeto “o”, tienen que implementar:- irAlPrimero();- tieneElems();- obtenerSiguiente();(El problema: de qué tipo son los objetos “o”?)

Page 18: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Page 19: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseñoSolución definir los parámetros de un tipo de interfaz, todas las clases (instancias) que quieran utilizar ese comportamiento deberán implementar dicho interfaz. class MiClase<T> implements Recorrible<T> {

Vector<T> v = new Vector<T>(); int pos; void irAlprimero() { pos = 0; } boolean tieneElems() { v.length < pos; } T obtenerSiguiente() {

T o = v.elementAt(pos); pos++; return o; } }}

Page 20: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Patrón MARKER INTERFACE - 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 21: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

En java basta con implementar a Serializable o clonable.

Page 22: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Patrón SINGLETON- Utilidad: Asegurar que una clase tiene solo una instancia y proporcionar un punto de acceso global a ella. - Ventajas: Es necesario cuando hay clases que tienen que gestionar de manera centralizada un recurso. Una variable global no garantiza que solo se instancie una vez.

Page 23: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

public final class Miclase implements Cloneable { private static Miclase instancia = new Miclase(); public static Miclase getInstance() { return instancia; } ....}

Page 24: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Patrón FAÇADE (Fachada): Intención: Simplifica el acceso a un conjunto de clases proporcionando una única clase que todos utilizan para comunicarse con dicho conjunto de clases.Ventajas: Los clientes no necesitan conocer las clases ocultas sin necesidad de cambiar los clientes. Sólo hay que realizar los cambios necesarios en FAÇADE.

Page 25: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Se aplica el patrón FAÇADE cuando se necesita proporcionar una interfaz simple para un subsistema complejo, cuando se quiera estructurar varios sistemas en capas, ya que sería el punto de entrada a cada nivel.

Estructura un entorno de programación y reduce la complejidad con la división en subsistema, minimizando las comunicaciones y dependencias entre ellos.

Page 26: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de diseño

Page 27: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Patrones de Diseño

MVC: Modelo-Vista-Controlador: - Basado en tres tipos de objetos:- Modelo: Objetos de dominio- Vista: Objetos presentación en pantalla (Interfaz de usuario). - Controlador: Define la forma en que la interfaz reacciona a la entrada del usuario.

Page 28: Patrones de Diseño - nimbary.siia.umich.mxnimbary.siia.umich.mx/~miguel/arch/patrones_diseg_v1.pdf · Patrones de Diseño Como llegar a ser un maestro del software. 1) Aprender las

Bibliográfia

The design patterns (James W. Cooper)