Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Patrones de diseño

Patrones de Diseño

  • Login to see the comments

  • Be the first to like this

Patrones de diseño

  1. 1. Patrón de Diseño Un patróndescribe unproblemaqueocurre unayotravezennuestroentorno,asícomolasolución a ese problema, de tal modo que se pueda aplicar esta solución varias veces, y tiene cuatro elementos esenciales. Nombre del patrón: Describe un problema de diseño junto con sus soluciones y consecuencias. Problema: Explica el problema y cuando se debe aplicar el patrón. Solución:Describe comouna plantilla,lacual se puede aplicar en muchas situaciones diferentes. Consecuencias: Son los resultados, así como las ventajas e inconvenientes de aplicar el patrón. Los patrones de diseño no se ocupan de diseños que pueden codificarse en clases y reutilizarse como tales, sinoque sondescripcionesde clasesyobjetosrelacionadosque están particularizados para resolver un problema de diseño general en un determinado contexto. Un patrón de diseño nomina, abstrae e identifica los aspectos clave de una estructura de diseño común y cada patrón de diseño se centra en un problema concreto. Patrones de diseño en el MVC Modelo, Vista, Controlador se usa para construir interfaces de usuario y consiste en tres tipos de objetos. Modelo: es el objeto de aplicación. Vista: es la representación en pantalla. Controlador: define el modo en que la interfaz reacciona a la entrada del usuario. MVC desacoplalasvistasde losmodelosyunavistadebe asegurarse de que suaparienciareflejael estadodel modelo.Cadavezque cambianlosdatosdel modelo,este seencargade avisaralasvistas que dependen de él. Cada vista tiene la oportunidad de actualizarse a sí misma, y este enfoque permite asignar varias vistas a un modelo para ofrecer diferentes presentaciones. El modelo se comunica con sus vistas cuando cambian sus valores, y las vistas se comunican con el modelo para acceder a estos. MVC permite vistas anidadas gracias a la clase VistaCompuesta, una subclase de vista. También permite cambiar el modo en que una vista responde a la entrada de usuario sin cambiar su representación visual; además encapsula el mecanismo de respuesta en un objeto controlador. Una vista usa una instancia de una subclase de controlador para implementar una determinada estrategia de respuesta. Incluso es posible cambiar el controlador de una vista en tiempo de ejecución, para hacer que la vista cambie el modo en que responde a la entrada de usuario. Descripción de los patrones de diseño Cada patrón se divide en secciones para que sean más fáciles de aprender, comparar y usar.
  2. 2. Nombre del patrón y clasificación: nombre que pasara a nuestro vocabulario de diseño. Propósito: Que hace este patrón de diseño y en que se basa. También conocido como: Otros nombres por los que se conoce el patrón. Motivación: Como las estructuras de clases y objetos del patrón resuelven el problema. Aplicabilidad: Situaciones en las que se puede aplicar el patrón de diseño. Estructura: Representación gráfica de las clases del patrón. Participantes: Las clases y objetos participantes en el patrón de diseño. Colaboraciones: como colaboran los participantes para llevar a cabo sus responsabilidades. Consecuencias: Resultados de usar el patrón. Implementación: Acciones que se deben tener en cuenta a la hora de aplicar el patrón. Código de ejemplo: Código que muestra cómo se puede implementar el patrón. Usos conocidos: Ejemplos del patrón en sistemas reales. Patrones relacionados: Patrones que están relacionados. Catálogo de patrones de diseño. Patrones de diseño con sus propósitos. Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados. Adapter: Permite que cooperen clases, ya que no podrían hacerlo con interfaces incompatibles. Bridge: Desacopla una abstracción de su implementación. Builder: Separa la construcción de un objeto complejo de su representación. Chainof responsibility:Creaunacadenaconlosobjetosreceptoresypasalapeticiónporlamisma. Command: Encapsula una petición en un objeto, permitiendo llevar un registro. Composite: Combina objetos en estructuras de árbol para representar jerarquías. Decorator: Añade dinámicamente nuevas responsabilidades a un objeto. Facade: Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Factory Method: Permite que una clase delegue en sus subclases la creación de objetos. Flyweight: Usa el comportamiento para permitir un gran número de objetos de grano fino. Interpreter: Define una representación de su gramática. Iterator: Proporciona un modo de acceder secuencialmente a los elementos de un objeto. Mediator: Define un objeto que encapsula cómo interactúan un conjunto de objetos. Memento: Guarda el estado interno de un objeto, para poder anular operaciones. Observer: Define una dependencia de uno a muchos entre objetos. Prototype: Especifica los tipos de objetos a crear por medio de una instancia prototípica. Proxy: Proporciona un sustituto o representante de otro objeto para controlar el acceso a este. Singleton: Garantiza que una clase solo tenga una instancia y acceso global a ella. State: Un objeto puede modificar su comportamiento cada vez que cambie su estado interno. Strategy: Define unafamiliade algoritmos,encapsulacadaunode ellosyloshace intercambiables. Template Method: Permite que las subclases redefinan ciertos pasos del algoritmo. Visitor: Permite definirunanuevaoperaciónsincambiar las clasesde loselementossobre losque opera.
  3. 3. Organización del Catalogo Clasificación de los patrones de diseño, los patrones pueden tener un propósito de creación, estructural o de comportamiento. Creación: Tienen que ver con el proceso de creación de objetos. Estructurales: Tratan con la composición de clases u objetos. Comportamiento: Caracterizan el modo en que las clases y objetos interactúan. Como resuelven los patrones los problemas de diseño Los patrones los solucionan de diferentes formas. Encontrar los objetos apropiados Los programas orientados a objetos están formados de objetos, un objeto encapsula tanto datos como los procedimientos que operan sobre esos datos, estos procedimientos se conoce como métodos u operaciones. Un objeto realiza una operación cuando recibe una petición. Especificar las interfaces de los objetos Al conjunto de todas las signaturas definidas por las operaciones de un objeto se le denomina la interfaz del objeto. Un tipo es un nombre que se usa para denotar una determinada interfaz, un objeto puede tener muchos tipos. Parte de la interfaz de un objeto puede ser caracterizada por un tipo. Las interfacespuedencontenercomosubconjuntos,otrasinterfaces,losobjetossolose conocena través de su interfaz. Dos objetos con implementaciones diferentes pueden tener interfaces idénticas. La asociaciónentiempode ejecuciónentre unapeticiónaunobjetoyuna de sus operacioneseslo que se conoce como enlace dinámico,yeste nos permite sustituirobjetosentiempode ejecución por otros que tengan la misma interfaz. Especificar las implementaciones de los objetos La implementación de un objeto queda definida por su clase; la clase especifica los datos, la representación interna del objeto y define las operaciones que puede realizar. Los objetosse creaninstanciandounaclase,el objetoesunainstanciade laclase yse puedencrear muchas instancias parecidas de un objeto instanciando una clase. Cuando una subclase hereda de una clase padre,incluye lasdefinicionesde todoslosdatosyoperacionesquedefine laclase padre. Una clase abstractaesaquellaque defineunainterfazcomúnparasussubclases,estadelegaraparte o toda su implementación en las operaciones definidas en sus subclases.
  4. 4. Las operaciones que una clase abstracta define pero no implementa se denominan operaciones abstractas y las clases que no son abstractas se denominan clases concretas. Herencia de clases frente a herencia de interfaces La clase de un objetodefinecomose implementaunobjeto,el estadointernoylaimplementación de sus operaciones. Un objetopuede tenermuchostipos,yobjetosde clasesdiferentespuedentenerel mismotipo,el tipo de un objeto solo se refiere a su interfaz. La herenciade clasesdefine laimplementaciónde unobjetoentérminosde la implementaciónde otroobjeto,encambiolaherenciade interfacesdescribecuandosepuede usarunobjetoenel lugar de otro. Programar para interfaces, no para una implementación La herenciade clasesnoesmásque unmecanismoparaextenderlafuncionalidadde unaaplicación reutilizando la funcionalidad de las clases padres, permite definir un nuevo tipo de objetos basándose en otro y también para definir familias de objetos con interfaces idénticas. Cuando la herencia se usa correctamente, todas las clases que derivan de una clase abstracta compartirán su interfaz. Al manipularlosobjetossolamente entérminosde lainterfazdefinidaporlasclasesabstractas,los clientes no tienen que conocer los tipos específicos de los objetos que usan. Poner a funcionar los mecanismos de reutilización Herencia frente a composición Las dos técnicasmás comunesparareutilizarfuncionalidadensistemasorientadosaobjetossonla herencia de clases y la composición de objetos. La herencia de clases permite definir una implementaciónen términos de otra, a esta forma de reutilización mediante herencia se la denomina reutilización de caja blanca, que se refiere a visibilidad porque las clases padres suelen hacerse visibles a las subclases. La composiciónde objetosesunaalternativaa la herenciade clases,estarequiere que losobjetos a componertenganinterfacesbiendefinidas,estetipode reutilizaciónse denominareutilizaciónde caja negra, porque los detalles internos de los objetos no son visibles. La composiciónde objetosse definedinámicamente entiempode ejecuciónatravésde objetosque tienenreferenciasaotrosobjetos,ademásrequiere que los objetostenganencuentalasinterfaces de los otros.
  5. 5. Reutilizar mediante la herencia hace más fácil construir nuevos componentes que puedan ser combinados con los antiguos. La herencia y la composición trabajan por lo tanto juntas. Delegación La delegaciónesunmodo de lograr que la composiciónseatan potente parala reutilizacióncomo lo es la herencia. La principal ventajade ladelegaciónesque haceque seafácilcombinarcomportamientosentiempo de ejecución y cambiar la manera en que estos se combinan. La delegación es una buena elección de diseñosolocuandosimplificamásdeloquecomplicayfuncionamejorcuandoseusaenpatrones estándar. La delegación es un ejemplo extremo de composición de objetos. Herencia frente a tipos parametrizados Tipos parametrizados, es una técnica para reutilizar funcionalidad, también conocidos como genéricos, esta técnica nos permite definir un tipo sin especificar todos los otros tipos que usa. Los tipos sin especificar se proporcionan como parámetros cuando se va a usar el tipo parametrizado.Lostiposparametrizadospermitencambiarlostipos que puede utilizar una clase. Estructuras que relacionan tiempo de ejecución y tiempo de compilación La estructura en tiempo de ejecución de un programa orientado a objetos suele guardar poco parecidoconla estructurade su código.La estructuradel códigose fijaentiempode compilacióny consiste en clases con relaciones de herencia estáticas. Distinción entre agregación y asociación.- Agregación: - Implica que un objeto posee a otro o que es responsable de él. - Implica que el objeto agregado y su propietario tienen la misma vida. - Las relaciones tienden a ser menos y más permanentes que las de asociación. Asociación: - Implicaque unobjetosimplemente conoce a otro, denominada también relación de uso. - Las relacionesse hacenydeshacenmuchomásfrecuentemente yalgunasvecessoloexisten mientras dura una operación.
  6. 6. Diseñar para el cambio Para maximizar la reutilización reside en anticipar nuevos requisitos y cambios en los requisitos existentes.Undiseñoquenotengaencuentael cambiosufre el riesgode tenerque serrediseñado por completo en el futuro. El rediseño afecta a muchas partes del sistema software, por lo que los cambios no previstos siempre resultan costosos. Programas de aplicación En la construcción de un programa de aplicación, como un editor de documentos o una hoja de cálculo, la reutilización interna, la facilidad de mantenimiento y la extensión son las principales prioridades. Lospatronesde diseñotambiénhacenqueunaaplicaciónseamásfácil de mantenercuandose usan para limitar las dependencias de plataforma y para organizar un sistema en capas. Toolkits Un toolkit es un conjunto de clases relacionadas y reutilizables, una aplicación incorpora clases de una o más bibliotecas de clases predefinidas llamadas toolkit. Proporcionan funcionalidad que puede ayudar a que la aplicación haga su trabajo y se centra en la reutilización de código. Frameworks Un framework es un conjunto de clases cooperantes que constituyen un diseño reutilizable para una clase específica de software. El framework determina la arquitectura de nuestra aplicación. Los patrones y los frameworks son diferentes en que, los patrones de diseño tienen que ser implementados cada vez que se emplean y los frameworks son el modo en que los sistemas orientados a objetos consiguen la mayor reutilización.

×