introducción a los patrones de diseño de software
TRANSCRIPT
![Page 1: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/1.jpg)
Unidad 1
Patrones de Diseño de Software
Introducción a los Patrones de Diseño de Software
![Page 2: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/2.jpg)
Introducción
![Page 3: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/3.jpg)
Diseño Orientado a Objetos
El objetivo del Diseño Orientado a Objetos es resolver un problema
No se debe resolver cada problema partiendo desde cero
Es necesario reutilizar soluciones que ya han demostrado resolver un problema
![Page 4: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/4.jpg)
Definición
Un patrón de diseño es una descripción de clases y objetos que se comunican entre sí para resolver un problema de diseño general en un contexto particular
![Page 5: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/5.jpg)
Elementos de un Patrón
De manera general se encuentra:Nombre del PatrónEl problema que resuelveLa soluciónConsecuencias
![Page 6: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/6.jpg)
Problema
Se presenta el tipo de problema que se resuelve
Explica el problema y su contexto Puede incluir las condiciones que deben darse para aplicar el patrón
![Page 7: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/7.jpg)
Solución
Describe que elemento forman parte del diseño
La manera en que se relacionan Sus responsabilidades y cómo colaboran
![Page 8: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/8.jpg)
Consecuencias
Resultados a obtener tras aplicar el patrón Ventajas y desventajas de aplicarlo
Tiempo de desarrollo Portabilidad Flexibilidad del código
![Page 9: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/9.jpg)
El Patrón MVC
Modelo / Vista / Controlador Aplicado en el desarrollo de sistemas con interfaces gráficas
Formado por tres tipos de objetos: Modelo. Es el modelo de la aplicación Vista. Es la parte gráfica Controlador. Cómo reacciona la interfaz a la
entrada
![Page 10: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/10.jpg)
Gang of Four (GoF)
Se trata de cuatro autores que iniciaron con el concepto de patrones de diseño en el desarrollo de software
Principios en los que se basan los patrones de diseño: Programar para una interfaz, no una
implementación Preferir composiciones de objeto sobre herencia
Este grupo desarrolló 23 patrones estándar, conocidos como los patrones GoF
![Page 11: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/11.jpg)
Catálogo de Patrones de Diseño
Los patrones se clasifican en base a dos criterios: Propósito. ¿Qué hace un patrón? Ámbito. Afecta a clases u objetos
Propósito: Creación. Creación de objetos Estructural. Composición de clases y objetos Comportamiento. Responsabilidades
![Page 12: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/12.jpg)
Los más utilizados
Los patrones más utilizados son: Abstract Factory Adapter Composite Decorator Factory Method Observer Strategy Template Method
![Page 13: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/13.jpg)
Diseñar para el Cambio
![Page 14: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/14.jpg)
El Paradigma Orientado a Objetos Una aplicación en el paradigma OO, está formada por objetos
Un objeto encapsula datos y procedimientos (métodos)
Un objeto recibe una petición y realiza una operación Con una operación, se cambian los datos de un objeto Lo más complejo es descomponer un sistema en objetos
Se programa para un problema no en términos de re utilización
![Page 15: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/15.jpg)
Diseñar para el Cambio
El objetivo de los patrones es facilitar la re utilización de código
Para poder reutilizarlo, se debe pensar en los nuevos requisitos Re definición de funciones Re implementación de clases
Los patrones de diseño ayudan a asegurar que el sistema cambie de forma concreta
![Page 16: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/16.jpg)
Importancia de los Patrones
Los patrones ayudan a identificar objetos que no proceden del análisis
Ayudan a identificar la granularidad de los objetos
Ayudan a especificar las interfaces de los objetos Una interfaz ayuda a saber lo que hace un objeto
![Page 17: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/17.jpg)
Ventaja de Utilizar Patrones
Permite que una solución sea sencilla de reutilizar, extender y mantener
Aplicar patrones significa programar para resolver problemas y que automáticamente se convierten en buenas técnicas de diseño
![Page 18: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/18.jpg)
Ejemplo Sencillo
Considerar una aplicación web en dónde hay navegación entre todos sus elementos
La funcionalidad para saltar entre cada página y cómo mostrar la siguiente sería muy repetitiva
![Page 19: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/19.jpg)
Solución con Patrones
Existe un patrón que indica la creación de un elemento intermedio que se encargue de todas las peticiones.
![Page 20: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/20.jpg)
Cambio de Objetos
Suponer que una aplicación a trabajado con cierto tipo de objetos
En una actualización, ese tipo ha cambiado y ahora debe trabajar con nuevos
Sería muy tardado modificar todo el código para que se adapte a este nuevo requerimiento
![Page 21: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/21.jpg)
¿Qué propone un patrón?
¿Y si un patrón propusiera un bloque que adaptara el objeto viejo a uno nuevo?
![Page 22: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/22.jpg)
Patrones y Orientación y Objetos
![Page 23: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/23.jpg)
Patrones y Objetos
La re utilización de ideas es el objetivo principal de los Patrones de Diseño
En particular en el diseño de aplicaciones Orientadas a Objetos
![Page 24: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/24.jpg)
Patrones y Objetos
Dados los cuatro aspectos básicos de la POO Abstracción Encapsulado Polimorfismo Herencia
Los patrones de diseño están involucrados con cada uno de ellos
![Page 25: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/25.jpg)
Abstracción
La abstracción se relaciona en como se entiende un problema antes del diseño OO
El entender como se va dividiendo un problema en segmentos, es parte vital para una representación en objetos
Los patrones presentan como atacar un problema muchas veces a nivel abstracto
![Page 26: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/26.jpg)
Encapsulado
Es cuando se “agrupan” (encapsulan) los datos y operaciones de un objeto
Los patrones de diseño hacen mucha énfasis en el encapsulado de acciones o datos
![Page 27: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/27.jpg)
Polimorfismo
Desarrollar código que pueda trabajar con distintos tipos de objetos en tiempo de ejecución
En muchos de los patrones de diseño, el polimorfismo juega un papel de gran importancia
![Page 28: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/28.jpg)
Herencia
Una clase puede heredar sus datos y operaciones a otras clases
Los patrones de diseño en general tienden a usar Composición en vez de Herencia
![Page 29: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/29.jpg)
Principios de Diseño
![Page 30: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/30.jpg)
Principio de Diseño 1
Se deben identificar los elementos de una aplicación que varían y separarlos de los que permanecen igual
Esto ayuda a que las partes que varían se modifiquen sin alterar a las que no cambian
![Page 31: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/31.jpg)
Principio de Diseño 2
Programar orientado a una interfaz, no hacia una implementación
Los objetos realizarán una implementación concreta o específica a partir de un super tipo, preferentemente una interfaz o clase abstracta
![Page 32: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/32.jpg)
Principio de Diseño 3
Considerar la Composición en lugar de la Herencia
Una Composición “tiene un” es preferible a una Herencia “es un” ya que permite cambiar el comportamiento al momento de la ejecución
![Page 33: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/33.jpg)
Principio de Diseño 4
Las clases deben ser extendidas y no modificadas
A una clase se le agregará funcionalidad en base a extensiones y no a modificaciones de su código
![Page 34: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/34.jpg)
Principio de Diseño 5
Se debe buscar el bajo acoplamiento entre objetos
Se buscará reducir el uso de relaciones que aumenten la relación de un componente con otros Herencia Composición Asociación
![Page 35: Introducción a los Patrones de Diseño de Software](https://reader030.vdocuments.net/reader030/viewer/2022012701/61a40a770a0fb17f8424a473/html5/thumbnails/35.jpg)
Principio de Diseño 6
Depender de abstracciones, no de clases concretas
Se debe preferenciar el uso de clases abstractas o interfaces que sean implementadas por otras clases