Qué es un patrón de diseño.docx

download Qué es un patrón de diseño.docx

of 8

Transcript of Qué es un patrón de diseño.docx

INFORME DE LECTURAPATRONES DE DISEO

Qu es un patrn de diseo?Disear software orientado a objeto es difcil, y ms a objetos reutilizables. Nuestro diseo debe ser especifico al problema que enfrentamos pero lo suficientemente general pada adecuarse a futuros cambios. No hay que resolver los problemas comenzando desde cero sino reutilizando soluciones que hayan servido en el pasado. Los patrones de diseo hacen que sea ms fcil la reutilizacin de buenos diseos y arquitecturas.Un patrn de diseo un problema y su solucin, que son recurrentes en un entorno, es una descripcin de clases y objetos comunicndose entre s adaptada para resolver un problema de diseo general en un contexto particular.En general los patrones de diseo tienen cuatro elementos esenciales:Nombre: describe el problema junto con sus soluciones.Problema: describe en qu casos utilizar el patrn.Solucin: describe los elementos que constituyen el diseo. No describe una aplicacin en concreto, sino que es una platilla para aplicarse en muchas situaciones.Consecuencias: resultados, ventajas y desventajas de utilizar el patrn.

Problemas de DiseoEncontrar los objetos adecuados: los patrones de diseo ayudan a identificar las abstracciones menos obvias y los objetos que las expresan. Hay patrones que describen como implementar familias intercambiables de algoritmos o como representar cada estado de una entidad como un objeto.Determinar la granularidad de los Objetos: los patrones de diseo se encargan de tratar de decidir que es un objeto y que no. Tambin describen como descomponer objetos grandes en objetos ms pequeos y la interaccin de objetos a travs de peticiones entre grupos de objetos.Especificar las interfaces de los objetos: los patrones de diseo ayudan a definir las interfaces de los objetos identificando sus objetos claveEspecificar las implementaciones de los objetos: los objetos son una instanciacin de una clase. Las clases pueden definirse en trmino de las existentes utilizando la herencia para que pueda usar las definiciones y mtodos de una clase padre. Existen clases abstractas llamadas interfaces que sirven para definir una estructura comn para las subclases.Herencia de clases frente a herencia de interfaces: es importante diferenciar la clase de un objeto y su tipo. La clase define la implementacin y el tipo define la interfaz del objeto. Un objeto puede tener muchos tipos, y objetos de clases diferentes un tipo en comn.Programar para interfaces, no para implementacin: la herencia de clases no es ms que un mecanismo para extender funcionalidades reutilizndolas. Pero tambin es importante la capacidad de para definir familias de objetos con interfaces idnticas. De esta forma todas las sublcases pueden responder peticiones en la interfaz de la subclase abstracta que las define. Esto tiene dos ventajas: que los clientes se adapten solamente a la interfaz abstracta y los clientes solo conocen las clases abstractas que definen la interfaz.Esto lleva al primer principio de diseo orientado a la reutilizacin:Programe para una interfaz, no para una implementacin.

ReutilizacinLas dos tcnicas ms comunes para hacer uso de la reutilizacin de funcionalidades son la herencia y la composicin de objetos. La composicin ensambla objetos para obtener funcionalidades ms complejas. Herencia: - Se define en tiempo de compilacin.- Facilita modificar la implementacin que est siendo reutilizada.- No se pueden cambiar las implementaciones en tiempo de ejecucin.- Rompe la encapsulacin.Composicin: - Se define dinmicamente en tiempo de ejecucin.- Requiere que los objetos tengan en cuenta las interfaces de los otros.- No se rompe la encapsulacin.- Dinamismo en la relacin de objetos.Esto nos lleva al segundo principio de diseo orientado a la reutilizacin:Favorecer la composicin de objetos frente a la herencia de clases.

DelegacinUn objeto encargado de una peticin delega la misma en su delegado. La principal ventaja es hacer que se fcil combinar comportamientos en tiempo de ejecucin.

Estructuras que Relacionan Tiempo de Ejecucin y Tiempo de CompilacinLa estructura en tiempo de ejecucin del cdigo del programa. La estructura del cdigo se fija en tiempo de compilacin, y consiste en clases con relaciones de herencia estticas. La estructura de tiempo de ejecucin de un programa consiste en objetos que se comunican entre s. La agregacin implica que un objeto posee a otro o que es responsable de l y tienen la misma vida. La asociacin implica que un objeto simplemente conoce a otro. Los objetos as relacionados pueden pedirse operaciones entre s, pero no son responsables el uno del otro.

Disear para el CambioLa clave para maximizar la reutilizacin reside en anticipar nuevos requisitos y cambios en los requisitos existentes, y en disear los sistemas de manera que se adapte a los cambios. Un diseo que no sea robusto ante los cambios probablemente tenga que sufrir un rediseo completo en el futuro. Los patrones de diseo ayudan a evitar esto al asegurar que un sistema pueda cambiar de formas concretas.

Causas comunes de rediseo junto con los patrones de diseo que lo resuelven: Crear un objeto especificando su clase explcitamente. Dependencia de operaciones concretas. Dependencia de plataformas hardware o software. Dependencia de las representaciones o implementaciones de objetos. Dependencias algortmicas. Fuerte acoplamiento. Aadir funcionalidad mediante la herencia. Incapacidad para modificar las clases convenientemente.

Programas de aplicacinSi estamos construyendo un programa de aplicacin, como un editor de documentos o una hoja de clculo, la reutilizacin interna, la facilidad de mantenimiento y la extensin son las principales prioridades para que la aplicacin se pueda adaptar fcilmente a los cambios futuros.ToolkitsUn toolkit es un conjunto de clases relacionadas y reutilizables diseadas para proporcionar funcionalidad til de propsito general, es decir que son herramientas de uso general en aplicaciones. Nos permiten, como desarrolladores, evitar recodificar funcionalidad comn.

FrameworksUn frameworkes un conjunto de clases cooperantes que constituyen un diseo reutilizable para una clase especfica de software, determinando la arquitectura de la aplicacin y representando las decisiones de diseo que son comunes a su dominio de aplicacin.

Cmo Seleccionar un Patrn de Diseo Considere cmo los patrones de diseo solucionan problemas de diseo. Hojee las secciones Propsito. Estudie cmo se interrelacionan los patrones. Estudie patrones de propsito similar. Examine una causa de rediseo. Piense qu debera ser variable en su diseo.

Como Usar un Patrn de Diseo Lea el patrn de principio a fin para tener una perspectiva. Vuelva atrs y estudie las secciones de Estructura, Participantes y Colaboraciones. Examine la seccin Cdigo de Ejemplo para ver un ejemplo concreto del patrn en cdigo. Elija nombres significativos en el contexto de la aplicacin para los participantes en el patrn. Defina las clases. Declare sus interfaces, establezca sus relaciones de herencia y defina las variables de instancia que representan datos y referencias de objetos. Defina nombres especficos de la aplicacin para las operaciones del patrn. Implemente las operaciones para llevar a cabo las responsabilidades y colaboraciones del patrn.

Captulo 2

En este captulo se presenta el diseo de un editor de documentos

Problemas de diseo Elegir las estructuras de los documentos. Formateado. Adornos de interfaz de usuario. Permitir varios estndares de interfaz de usuario. Poder modificar la interfaz a travs de la evolucin de la etapa de desarrollo. Permitir mltiples sistemas de ventanas. Operaciones de usuario. Comprobacin ortogrfica y separacin de palabras.

El captulo muestra las clases que va a utilizar la aplicacin y los patrones de diseo que va utilizando.

GlifosClase abstracta para todos los objetos que puedan aparecer en la estructura de un documento. Para esta clase se utiliza el patrn Composite que se utiliza para la composicin recursiva

FormateadoEs la clase encargada de dar formato al texto (glifo), es decir separarlo en lneas, columnas, etc. Para poder cambiar rpidamente el algoritmo de formateado en tiempo de ejecucin se encapsula el formato en un objeto.

Componedor y composicinSe define la clase Componedor para los objetos que puedan almacenar un algoritmo de formateado. Los Glifos formateados forman parte de una subclase Composicin. En esta clase se utiliza el patrn Strategy que describe como encapsular un algoritmo en un objeto.

Interfaz de usuarioPara la interfaz de usuario se utiliza el patrn Decorator. Expresa la relacin de clases y objetos que interactan en la creacin de la interfaz.

Abstraccin de creacin de objetosPara esto se utiliza el patrn Abstract Factory que separar la clase que crea los objetos, de la jerarqua de objetos a instanciar permitiendo instanciar objetos sin llamar a su constructor directamente.

VentanasLa creacin de ventanas utiliza el patrn Abstract Factory y el patrn Bridge que nos permite mantener y mejorar las abstracciones de ventanas sin tocar el cdigo dependiente del sistema de ventanas.

Operaciones de usuarioEl sistema tiene varias interfaces para llevar a cabo las operaciones de usuario. Para llevar a cabo las operaciones se utiliza el patrn Command el cual describe como encapsular una peticin usando una interfaz que oculta a los clientes la implementacin de las peticiones.

Clase IteratorEsta clase abstracta permite recorrer una estructura y acceder a sus elementos. Para esto se usa el patrn Iterator que representa las tcnicas utilizadas para realizar esta tarea y para encapsular los datos.Separar la clase que crea los objetos, de la jerarqua de objetos a instanciar.