Este documento describe los patrones de diseño y proporciona ejemplos de su aplicación. Explica que los patrones de diseño capturan soluciones recurrentes a problemas comunes de diseño de software para facilitar la reutilización. Define los elementos que componen un patrón y clasifica patrones como de creación, estructurales o de comportamiento. Incluye descripciones detalladas de patrones como Singleton, Factory Method y Adapter.
Los patrones de diseño dentro del área de la ingeniería de software son diseñados con el objetivo de solventar un problema en específico, pero de forma general como para poder adecuarse a futuros requisitos y problemas.
El documento explica el patrón de diseño Builder. Este patrón permite crear diferentes tipos de objetos a partir de un mismo proceso de construcción mediante la utilización de clases constructoras específicas. Se usa un ejemplo de construcción de figuras geométricas como cuadrados, triángulos y rectángulos para ilustrar cómo el patrón Builder permite crear estos objetos de forma independiente a través de constructores dedicados a cada figura.
El documento habla sobre el tema de herencia en programación orientada a objetos. Explica que la herencia permite que una clase herede los atributos y comportamientos de otra clase base. Define los tipos de herencia simple y múltiple, e ilustra su implementación en Java con ejemplos de clases Empleado y Ejecutivo. También cubre conceptos como los constructores, métodos de la clase Object y una aplicación de herencia de figuras geométricas.
Este documento presenta los fundamentos de la orientación a objetos, incluyendo principios como la abstracción, encapsulamiento, modularidad, jerarquía, tipos, concurrencia, persistencia y polimorfismo. También describe términos técnicos como enlace dinámico, y mecanismos básicos como objetos, clases y mensajes.
Patrones de diseño - Daniel E. Jaramillo2008PA2Info3
El documento describe los patrones de diseño, sus tipos y elementos. Explica que un patrón es una solución efectiva y reusable a un problema de diseño recurrente. Los patrones capturan experiencia para hacerla accesible, ayudan a comprender sistemas y facilitan la reutilización. Se describen patrones de creación, estructurales y de comportamiento como el Abstract Factory, Observer y otros.
Este documento describe conceptos clave de programación orientada a objetos en Java como herencia, polimorfismo, clases abstractas e interfaces. Explica que la herencia permite que una clase herede atributos y métodos de otra clase, y que el polimorfismo permite invocar métodos de objetos de diferentes clases de la misma manera. También describe cómo las clases abstractas pueden contener métodos abstractos que deben implementarse en subclases, mientras que las interfaces definen métodos que deben implementarse.
El documento presenta las unidades de una introducción a la programación orientada a objetos, incluyendo clases, objetos, herencia, polimorfismo y excepciones. Explica conceptos como abstracción, encapsulamiento, modularidad y diagrama de clases. El objetivo es diseñar e implementar objetos de programación que permitan resolver situaciones reales de ingeniería.
El documento describe conceptos clave de la programación orientada a objetos como clases, objetos, atributos, métodos, herencia, encapsulamiento y polimorfismo. También explica el lenguaje unificado de modelado (UML), que permite visualizar y modelar sistemas mediante diagramas con elementos de modelado estandarizados.
Los patrones de diseño dentro del área de la ingeniería de software son diseñados con el objetivo de solventar un problema en específico, pero de forma general como para poder adecuarse a futuros requisitos y problemas.
El documento explica el patrón de diseño Builder. Este patrón permite crear diferentes tipos de objetos a partir de un mismo proceso de construcción mediante la utilización de clases constructoras específicas. Se usa un ejemplo de construcción de figuras geométricas como cuadrados, triángulos y rectángulos para ilustrar cómo el patrón Builder permite crear estos objetos de forma independiente a través de constructores dedicados a cada figura.
El documento habla sobre el tema de herencia en programación orientada a objetos. Explica que la herencia permite que una clase herede los atributos y comportamientos de otra clase base. Define los tipos de herencia simple y múltiple, e ilustra su implementación en Java con ejemplos de clases Empleado y Ejecutivo. También cubre conceptos como los constructores, métodos de la clase Object y una aplicación de herencia de figuras geométricas.
Este documento presenta los fundamentos de la orientación a objetos, incluyendo principios como la abstracción, encapsulamiento, modularidad, jerarquía, tipos, concurrencia, persistencia y polimorfismo. También describe términos técnicos como enlace dinámico, y mecanismos básicos como objetos, clases y mensajes.
Patrones de diseño - Daniel E. Jaramillo2008PA2Info3
El documento describe los patrones de diseño, sus tipos y elementos. Explica que un patrón es una solución efectiva y reusable a un problema de diseño recurrente. Los patrones capturan experiencia para hacerla accesible, ayudan a comprender sistemas y facilitan la reutilización. Se describen patrones de creación, estructurales y de comportamiento como el Abstract Factory, Observer y otros.
Este documento describe conceptos clave de programación orientada a objetos en Java como herencia, polimorfismo, clases abstractas e interfaces. Explica que la herencia permite que una clase herede atributos y métodos de otra clase, y que el polimorfismo permite invocar métodos de objetos de diferentes clases de la misma manera. También describe cómo las clases abstractas pueden contener métodos abstractos que deben implementarse en subclases, mientras que las interfaces definen métodos que deben implementarse.
El documento presenta las unidades de una introducción a la programación orientada a objetos, incluyendo clases, objetos, herencia, polimorfismo y excepciones. Explica conceptos como abstracción, encapsulamiento, modularidad y diagrama de clases. El objetivo es diseñar e implementar objetos de programación que permitan resolver situaciones reales de ingeniería.
El documento describe conceptos clave de la programación orientada a objetos como clases, objetos, atributos, métodos, herencia, encapsulamiento y polimorfismo. También explica el lenguaje unificado de modelado (UML), que permite visualizar y modelar sistemas mediante diagramas con elementos de modelado estandarizados.
Este documento presenta un prólogo para un libro sobre programación orientada a objetos. Explica que el libro cubrirá los conceptos básicos de POO de una manera sencilla y con ejemplos. Se divide en ocho capítulos que cubren temas como la historia de la programación, clases y objetos, herencia, polimorfismo y manejo de errores. El apéndice incluye errores comunes y ejercicios de práctica.
El documento introduce conceptos básicos de programación orientada a objetos como objetos, clases, métodos y encapsulamiento. Explica que los objetos son entidades del dominio problema, las clases son plantillas abstractas que definen los atributos y comportamientos comunes a un grupo de objetos, y el encapsulamiento implica definir métodos de acceso para los atributos de una clase. También presenta los modificadores de acceso como privado, público y protegido.
El documento describe los conceptos fundamentales de un diagrama de clases, incluyendo que representa objetos del sistema, cada objeto pertenece a una clase, y las clases se representan mediante rectángulos con el nombre, atributos y operaciones de la clase. También describe los diferentes tipos de relaciones entre clases como asociación, agregación, composición, asociaciones calificadas y n-arias.
Este documento describe los conceptos fundamentales de la programación orientada a objetos como la abstracción, encapsulación e herencia. Explica que la POO surgió en los años 60 y se popularizó en los 80. También detalla algunas ventajas de la POO como la reusabilidad, mantenibilidad y modificabilidad del código, así como algunos desafíos como la necesidad de cambiar la forma de pensar y el posible impacto en el rendimiento.
El documento describe conceptos básicos de programación orientada a objetos como clases, objetos, atributos, métodos y constructores. Explica cómo crear una clase Persona y una clase Triángulo con sus respectivos atributos y métodos. También presenta ejemplos de uso de la clase String y cómo hacer que clases interactúen mediante el ejemplo de una clase Banco y una clase Cliente.
El documento introduce los conceptos básicos de la programación orientada a objetos (POO), incluyendo clases, objetos, herencia, polimorfismo, sobrecarga de operadores y funciones, funciones especiales como constructores y destructores, y excepciones. También describe la metodología de modelado y desarrollo de software orientado a objetos utilizando notación estándar como UML.
Este documento describe tres patrones de diseño: Decorator, FlyWeight y Template Method. Decorator permite agregar dinámicamente funcionalidades a objetos sin herencia. FlyWeight reduce redundancia al compartir información común entre objetos. Template Method define la estructura de un algoritmo en una superclase para que las subclases redefinan ciertos pasos.
Este documento introduce conceptos básicos de programación orientada a objetos. Explica que la POO es un paradigma que representa la realidad descomponiendo problemas en objetos con atributos y comportamientos. Compara la POO con la programación estructurada, y define conceptos clave como clase, objeto, encapsulamiento, herencia y polimorfismo. Finalmente, presenta a Java como un lenguaje orientado a objetos multiplataforma e introduce su máquina virtual y API.
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
Este documento explica conceptos básicos de programación orientada a objetos como clases, objetos, encapsulamiento, herencia, interfaces y polimorfismo. Define clases como representaciones abstractas que agrupan atributos y comportamientos comunes, y objetos como instancias concretas de una clase. Explora la implementación de estos conceptos en C# a través de ejemplos.
El documento describe los conceptos fundamentales de la programación orientada a objetos (POO). Explica que la POO se basa en abstracciones del mundo real como objetos que tienen estado, comportamiento e identidad. Define clases como plantillas para crear objetos, los cuales interactúan mediante el envío de mensajes que activan métodos.
Este documento presenta conceptos básicos de programación orientada a objetos en Java como clases, objetos, atributos, métodos, constructores y destrucción de objetos. Explica cómo crear clases en Java, declarar objetos, acceder a los atributos y métodos de objetos, y el proceso de eliminación de objetos gestionado por el recolector de basura.
El documento presenta un resumen del temario de un curso sobre programación orientada a objetos en .NET. Cubre conceptos como clases, objetos, herencia, polimorfismo, abstracción y encapsulamiento, así como modificadores de visibilidad y constructores. También explica conceptos avanzados como clases abstractas, sobrecarga de constructores y destructores.
Este documento introduce los conceptos básicos de la programación orientada a objetos. Explica que los objetos encapsulan datos y comportamientos y que las clases sirven como plantillas para crear objetos. También cubre principios como abstracción, encapsulamiento, herencia y polimorfismo.
El documento describe los conceptos fundamentales de la programación orientada a objetos como clases, objetos, herencia, encapsulamiento, polimorfismo e interfaces. Define clases como estructuras que representan objetos del mundo real con atributos y métodos, y objetos como instancias concretas de una clase. Explica cómo mediante la herencia las clases pueden heredar atributos y métodos de otras clases, y cómo la encapsulación protege los datos dentro de una clase.
Este documento presenta información sobre un curso de programación orientada a objetos. Incluye detalles sobre la forma de evaluación, exámenes diagnósticos, y conceptos básicos de POO como clases, objetos, herencia, encapsulamiento y polimorfismo. También presenta ejemplos de diagramas de clases usando el lenguaje de modelado unificado.
Elementos básicos de la programación orientada a objetos.Whaleejaa Wha
Este documento describe conceptos básicos de la programación orientada a objetos. Explica que un paradigma de programación determina la estructura y forma de pensar para construir un programa. La programación orientada a objetos se basa en la creación e interacción de objetos, a diferencia de la programación procedural que enfatiza la secuencia de pasos. Define conceptos clave como clases, objetos, atributos y métodos.
Este documento presenta los conceptos fundamentales de la programación orientada a objetos. Explica que la POO modela el mundo real a través de objetos con atributos y métodos. Define conceptos como clase, herencia, mensaje e identifica las características clave de la POO como la abstracción, encapsulamiento e inherencia.
La herencia permite que una clase herede atributos y métodos de otra clase. Esto permite crear clases derivadas que extienden la funcionalidad de clases base. Por ejemplo, una clase Vehículo podría ser la clase base, y clases como Auto, Camión y Moto podrían heredar de Vehículo, obteniendo sus atributos como ruedas y métodos como arrancar(), pero también incluyendo sus propios atributos y métodos específicos.
Este documento explica qué son los patrones de diseño y proporciona detalles sobre algunos patrones de creación específicos. Define los patrones de diseño como soluciones documentadas a problemas comunes de desarrollo de software. Explica brevemente los patrones Singleton, Prototype y Factory Method, incluyendo sus propiedades, aplicabilidad e implementación.
Este documento presenta una introducción a los patrones de diseño de software. Explica que un patrón describe un problema común de diseño y una solución probada a ese problema en un contexto particular. Luego, describe algunos patrones comunes como el patrón MVC y cómo separa la lógica de la interfaz de usuario del modelo de datos subyacente. Finalmente, discute el patrón de fábrica y cómo permite crear objetos de manera flexible sin acoplar las clases concretas.
Este documento introduce los patrones de diseño de software, definidos como soluciones probadas a problemas comunes de diseño de software. Explica los conceptos básicos de patrones, sus objetivos, tipos (creación, estructura y comportamiento) y algunos patrones específicos como Abstract Factory, Singleton y Observer.
Este documento presenta un prólogo para un libro sobre programación orientada a objetos. Explica que el libro cubrirá los conceptos básicos de POO de una manera sencilla y con ejemplos. Se divide en ocho capítulos que cubren temas como la historia de la programación, clases y objetos, herencia, polimorfismo y manejo de errores. El apéndice incluye errores comunes y ejercicios de práctica.
El documento introduce conceptos básicos de programación orientada a objetos como objetos, clases, métodos y encapsulamiento. Explica que los objetos son entidades del dominio problema, las clases son plantillas abstractas que definen los atributos y comportamientos comunes a un grupo de objetos, y el encapsulamiento implica definir métodos de acceso para los atributos de una clase. También presenta los modificadores de acceso como privado, público y protegido.
El documento describe los conceptos fundamentales de un diagrama de clases, incluyendo que representa objetos del sistema, cada objeto pertenece a una clase, y las clases se representan mediante rectángulos con el nombre, atributos y operaciones de la clase. También describe los diferentes tipos de relaciones entre clases como asociación, agregación, composición, asociaciones calificadas y n-arias.
Este documento describe los conceptos fundamentales de la programación orientada a objetos como la abstracción, encapsulación e herencia. Explica que la POO surgió en los años 60 y se popularizó en los 80. También detalla algunas ventajas de la POO como la reusabilidad, mantenibilidad y modificabilidad del código, así como algunos desafíos como la necesidad de cambiar la forma de pensar y el posible impacto en el rendimiento.
El documento describe conceptos básicos de programación orientada a objetos como clases, objetos, atributos, métodos y constructores. Explica cómo crear una clase Persona y una clase Triángulo con sus respectivos atributos y métodos. También presenta ejemplos de uso de la clase String y cómo hacer que clases interactúen mediante el ejemplo de una clase Banco y una clase Cliente.
El documento introduce los conceptos básicos de la programación orientada a objetos (POO), incluyendo clases, objetos, herencia, polimorfismo, sobrecarga de operadores y funciones, funciones especiales como constructores y destructores, y excepciones. También describe la metodología de modelado y desarrollo de software orientado a objetos utilizando notación estándar como UML.
Este documento describe tres patrones de diseño: Decorator, FlyWeight y Template Method. Decorator permite agregar dinámicamente funcionalidades a objetos sin herencia. FlyWeight reduce redundancia al compartir información común entre objetos. Template Method define la estructura de un algoritmo en una superclase para que las subclases redefinan ciertos pasos.
Este documento introduce conceptos básicos de programación orientada a objetos. Explica que la POO es un paradigma que representa la realidad descomponiendo problemas en objetos con atributos y comportamientos. Compara la POO con la programación estructurada, y define conceptos clave como clase, objeto, encapsulamiento, herencia y polimorfismo. Finalmente, presenta a Java como un lenguaje orientado a objetos multiplataforma e introduce su máquina virtual y API.
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
Este documento explica conceptos básicos de programación orientada a objetos como clases, objetos, encapsulamiento, herencia, interfaces y polimorfismo. Define clases como representaciones abstractas que agrupan atributos y comportamientos comunes, y objetos como instancias concretas de una clase. Explora la implementación de estos conceptos en C# a través de ejemplos.
El documento describe los conceptos fundamentales de la programación orientada a objetos (POO). Explica que la POO se basa en abstracciones del mundo real como objetos que tienen estado, comportamiento e identidad. Define clases como plantillas para crear objetos, los cuales interactúan mediante el envío de mensajes que activan métodos.
Este documento presenta conceptos básicos de programación orientada a objetos en Java como clases, objetos, atributos, métodos, constructores y destrucción de objetos. Explica cómo crear clases en Java, declarar objetos, acceder a los atributos y métodos de objetos, y el proceso de eliminación de objetos gestionado por el recolector de basura.
El documento presenta un resumen del temario de un curso sobre programación orientada a objetos en .NET. Cubre conceptos como clases, objetos, herencia, polimorfismo, abstracción y encapsulamiento, así como modificadores de visibilidad y constructores. También explica conceptos avanzados como clases abstractas, sobrecarga de constructores y destructores.
Este documento introduce los conceptos básicos de la programación orientada a objetos. Explica que los objetos encapsulan datos y comportamientos y que las clases sirven como plantillas para crear objetos. También cubre principios como abstracción, encapsulamiento, herencia y polimorfismo.
El documento describe los conceptos fundamentales de la programación orientada a objetos como clases, objetos, herencia, encapsulamiento, polimorfismo e interfaces. Define clases como estructuras que representan objetos del mundo real con atributos y métodos, y objetos como instancias concretas de una clase. Explica cómo mediante la herencia las clases pueden heredar atributos y métodos de otras clases, y cómo la encapsulación protege los datos dentro de una clase.
Este documento presenta información sobre un curso de programación orientada a objetos. Incluye detalles sobre la forma de evaluación, exámenes diagnósticos, y conceptos básicos de POO como clases, objetos, herencia, encapsulamiento y polimorfismo. También presenta ejemplos de diagramas de clases usando el lenguaje de modelado unificado.
Elementos básicos de la programación orientada a objetos.Whaleejaa Wha
Este documento describe conceptos básicos de la programación orientada a objetos. Explica que un paradigma de programación determina la estructura y forma de pensar para construir un programa. La programación orientada a objetos se basa en la creación e interacción de objetos, a diferencia de la programación procedural que enfatiza la secuencia de pasos. Define conceptos clave como clases, objetos, atributos y métodos.
Este documento presenta los conceptos fundamentales de la programación orientada a objetos. Explica que la POO modela el mundo real a través de objetos con atributos y métodos. Define conceptos como clase, herencia, mensaje e identifica las características clave de la POO como la abstracción, encapsulamiento e inherencia.
La herencia permite que una clase herede atributos y métodos de otra clase. Esto permite crear clases derivadas que extienden la funcionalidad de clases base. Por ejemplo, una clase Vehículo podría ser la clase base, y clases como Auto, Camión y Moto podrían heredar de Vehículo, obteniendo sus atributos como ruedas y métodos como arrancar(), pero también incluyendo sus propios atributos y métodos específicos.
Este documento explica qué son los patrones de diseño y proporciona detalles sobre algunos patrones de creación específicos. Define los patrones de diseño como soluciones documentadas a problemas comunes de desarrollo de software. Explica brevemente los patrones Singleton, Prototype y Factory Method, incluyendo sus propiedades, aplicabilidad e implementación.
Este documento presenta una introducción a los patrones de diseño de software. Explica que un patrón describe un problema común de diseño y una solución probada a ese problema en un contexto particular. Luego, describe algunos patrones comunes como el patrón MVC y cómo separa la lógica de la interfaz de usuario del modelo de datos subyacente. Finalmente, discute el patrón de fábrica y cómo permite crear objetos de manera flexible sin acoplar las clases concretas.
Este documento introduce los patrones de diseño de software, definidos como soluciones probadas a problemas comunes de diseño de software. Explica los conceptos básicos de patrones, sus objetivos, tipos (creación, estructura y comportamiento) y algunos patrones específicos como Abstract Factory, Singleton y Observer.
El documento presenta una introducción a los patrones de diseño, describiendo que su objetivo es promover la reutilización mediante la solución de problemas comunes de software de manera probada. Explica que existen diferentes tipos de patrones clasificados según su propósito, ámbito y elementos. Finalmente, brinda recomendaciones sobre cómo seleccionar y aplicar los patrones de diseño en los proyectos de software.
El documento presenta una introducción a los patrones de diseño de software, describiendo los patrones de creación, estructurales y de comportamiento. Explica que los patrones describen problemas comunes de diseño de software y soluciones probadas a esos problemas, y que ayudan a diseñar software de forma flexible y reutilizable.
Este documento describe los patrones de diseño, que son soluciones probadas a problemas comunes en el desarrollo de software. Explica que los patrones describen un problema recurrente y la solución a ese problema de forma que pueda ser aplicada en diferentes contextos. Además, clasifica los patrones en creacionales, estructurales y de comportamiento, y brinda ejemplos de patrones populares dentro de cada categoría como el Factory Method, Adapter y Observer respectivamente.
Este documento provee una introducción a los patrones de diseño. Explica que los patrones de diseño son soluciones estándar a problemas comunes de programación que ayudan a flexibilizar el código. Cubre las categorías principales de patrones creacionales, estructurales y de comportamiento, así como ejemplos de cada categoría. También discute las ventajas de los patrones de diseño como la promoción de la reutilización y la facilitación de la documentación.
Patrones de Diseño. (Design Patterns).pdfmillonario2
Este documento presenta una introducción a los patrones de diseño. Explica conceptos clave como qué es un patrón de diseño, cómo se describen y clasifican los patrones. Luego describe algunos patrones específicos como Abstract Factory y Singleton, explicando su propósito, motivación, estructura, participantes y colaboraciones. El documento provee una visión general de los patrones de diseño más comunes.
Este documento presenta la agenda para un taller sobre patrones de software. El taller se llevará a cabo durante 4 sesiones los sábados de diciembre y enero. La agenda cubrirá conceptos básicos de patrones, patrones para la creación, estructura y comportamiento de objetos, patrones compuestos, y el uso de patrones en la gestión de proyectos. El objetivo del taller es familiarizar a los participantes con el vocabulario y aplicación de patrones de software.
Este documento describe el patrón de diseño Factory. Explica que Factory centraliza la creación de objetos, normalmente de una misma familia, y que delega la responsabilidad de crearlos a una clase factoría. Proporciona ejemplos de cómo usar Factory para crear figuras geométricas, vehículos y determinar si estos son eléctricos o de gasolina.
(1) La programación orientada a objetos es más adecuada para el desarrollo de software que los métodos tradicionales como el diseño en cascada debido a que se basa en la descomposición del problema en objetos del dominio real. (2) Los problemas de software son extremadamente complejos ya que pueden contener millones de elementos de miles de tipos diferentes, por lo que se requieren técnicas avanzadas como la modularización, abstracción y herencia para gestionar esta complejidad. (3) La programación orientada a objetos, al modelar el problema en
Los patrones de diseño son soluciones a problemas comunes de diseño de software que se han probado efectivas. Proporcionan catálogos de elementos reusables, evitan reiterar soluciones ya conocidas, y facilitan el aprendizaje. Existen patrones de diferentes categorías como creacionales, estructurales y de comportamiento. Los patrones no imponen diseños ni eliminan creatividad, sino que aconsejan aplicar soluciones probadas cuando se tenga el mismo problema.
Este documento describe los patrones de diseño de software orientado a objetos. Explica que los patrones de diseño son soluciones a problemas comunes en el diseño de software que pueden ser aplicados repetidamente. Describe tres tipos principales de patrones: patrones creacionales que se enfocan en la creación de objetos, patrones estructurales que describen cómo relacionar objetos y clases, y patrones de comportamiento que distribuyen responsabilidades entre objetos. También presenta el patrón Observer como un ejemplo, explicando sus participantes, colaboración y consec
El documento describe los conceptos fundamentales de la programación orientada a objetos, incluyendo sus características, principios y tipos de paradigmas de programación. Explica los conceptos de objetos, métodos, estados de objetos, mensajes, herencia, polimorfismo, abstracción y encapsulamiento. También incluye ejemplos de cómo implementar estas características en clases y subclases.
Este documento introduce los paradigmas de programación y las colecciones en Java. Explica que un paradigma de programación provee una visión y métodos para construir programas. Describe varios paradigmas como imperativo, declarativo, estructurado y orientado a objetos. Luego, introduce las colecciones en Java, explicando que separan interfaces de implementaciones y proveen interfaces genéricas como Collection e Iterator para acceder a elementos de manera uniforme.
Este documento describe los patrones de diseño orientados a objetos, definidos como soluciones probadas a problemas comunes de diseño. Explica varios patrones fundamentales como el encapsulamiento, herencia, abstract factory, builder, factory method y otros. También clasifica los patrones en creacionales, estructurales y de comportamiento, e ilustra cada categoría con ejemplos de patrones como observer, state y strategy.
Este documento presenta una introducción a los patrones de diseño. Explica conceptos clave como patrones, clasificaciones de patrones y plantillas de definición de patrones. Luego, analiza varios patrones importantes como Adaptador, Factoría, Singleton, Estrategia y su aplicación en un ejemplo de diseño de software para la gestión de ventas y servicios externos.
Conceptos básicos de programación orientada a objetos (poo)Maria Garcia
CONCEPTOS BÁSICOS DE PROGRAMACIÓN ORIENTADA A OBJETOS (POO)
Dentro del perfil de egresado en licenciatura en informática se encuentra que éste debe propiciar proyectos investigativos que contribuyan a la solución de problemas de la comunidad educativa, es ahí donde este módulo proporcionará a los estudiantes tener una visión más amplia en cuanto al tema tecnológico y le permitirán crear proyectos más enriquecedores
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
El documento describe varias técnicas para mejorar la productividad en el desarrollo de aplicaciones. Explica los patrones de diseño, incluyendo su definición, tipos principales y el patrón Singleton en detalle. También cubre temas como mapeo objeto-relacional, metodologías de desarrollo y herramientas que pueden ayudar a los desarrolladores.
Este documento describe patrones de diseño de software. Explica que los patrones de diseño son descripciones de clases y objetos relacionados que resuelven problemas de diseño comunes en diferentes contextos. También describe varios tipos de patrones como patrones de creación, estructurales y de comportamiento. Explica que los patrones promueven la reutilización y establecen una terminología común en el diseño de software.
Este documento resume una tesis que tuvo como objetivo diseñar e implementar un sistema de ventas y marketing online para la empresa Multiservicios Recort. Se aplicaron cuestionarios a los empleados para medir su nivel de satisfacción con el sistema actual y su nivel de adaptación a las nuevas tecnologías. Los resultados mostraron que el 58.6% está satisfecho con el sistema actual, mientras que el 90% cree que un sistema de ventas online aumentaría los beneficios y están de acuerdo con capacitarse para usar las nuevas tecnologías.
Este documento describe la investigación realizada para diseñar un sistema informático de control de certificados para el Instituto Abaco en Piura, Perú en 2018. El objetivo fue mejorar el orden y emisión de certificados mediante la automatización de los procesos. Se aplicó una encuesta a 10 empleados, encontrando que el 85% no estaba satisfecho con el sistema actual y el 82% consideraba necesario implementar un nuevo sistema. Los resultados mostraron la necesidad de diseñar e implementar un sistema de control de certificados para mejorar la gestión de datos y pro
Este documento describe la investigación realizada para diseñar un sistema informático de control de certificados para el Instituto Abaco en Piura, Perú en 2018. El objetivo fue mejorar el orden y emisión de certificados mediante la automatización de los procesos. Se aplicó una encuesta a 10 empleados, encontrando que el 85% no estaba satisfecho con el sistema actual y el 82% consideraba necesario implementar un nuevo sistema. Los resultados mostraron la necesidad de diseñar e implementar un sistema de control de certificados para mejorar la gestión de datos y pro
Este manual del usuario describe las características y funciones de la impresora L375 de Epson. Incluye secciones sobre el uso del panel de control, la ubicación de los componentes, ajustes de temporizadores, soluciones móviles Epson Connect, configuración de red Wi-Fi, carga de papel, impresión desde computadoras Windows y Mac, escaneo, relleno de tinta, ajuste de calidad de impresión, mantenimiento y solución de problemas.
El documento presenta una serie de preguntas y soluciones sobre las diferentes actividades y herramientas que ofrece el software Edilim. Se mencionan actividades como sopa de letras, rompecabezas, emparejamiento de imágenes, galerías de sonido e imágenes, etiquetado, secuencias y operaciones matemáticas. El documento provee información sobre los tipos de archivos multimedia compatibles y la estructura de archivos creados en Edilim.
El documento resume los siete sacramentos de la Iglesia Católica: Bautismo, Confirmación, Eucaristía, Penitencia, Unción de los enfermos, Orden sacerdotal y Matrimonio. Explica que los sacramentos de iniciación son el Bautismo, Confirmación y Orden y que los de sanación son Reconciliación y Unción de los Enfermos. Además, describe brevemente cada uno de los sacramentos y su significado para los creyentes.
El siglo XX trajo una democratización y universalización de la educación pública. Se realizaron reformas educativas basadas en valores científicos y sociales, y se extendió la educación obligatoria más allá del nivel primario. Surge la "educación nueva", con un enfoque más activo centrado en los intereses y capacidades individuales del estudiante.
ESPERAMOS QUE ESTA INFOGRAFÍA SEA UNA HERRAMIENTA ÚTIL Y EDUCATIVA QUE INSPIRE A MÁS PERSONAS A ADENTRARSE EN EL APASIONANTE CAMPO DE LA INGENIERÍA CIVIŁ. ¡ACOMPAÑANOS EN ESTE VIAJE DE APRENDIZAJE Y DESCUBRIMIENTO
2. 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.
3. 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.
4. 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.
5. 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)
6. 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.
7. 7
Más información en...
• Desing Patterns. E. Gamma, R. Helm, R.
Johnson, and J. Vlissides. Design Patterns.
Addison Wesley, 1995.
• Patterns Home Page: http://hillside.net/patterns/
• Thinking in patterns with java
http://www.mindview.net/Books/TIPatterns/
8. 8
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.
9. 9
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Además: PATRONES DE DISEÑO FUNDAMENTALES
Clasificación de los patrones
GoF (gang of Four) [Gamma]
10. 10
Patrones de diseño fundamentales
Son patrones que no aparecen la tabla definida
por Gamma, pero se utilizan habitualmente:
• DELEGATION
• INTERFACE
• MARKER INTERFACE
11. 11
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
12. 12
Patrón DELEGATION
El problema
Clase A
a1()
….
Clase B
b1(),b2()
….
Clase C
a1(), b1(), b2()
….
- El lenguaje utilizado NO PERMITE HERENCIA MÚLTIPLE
- La clase C no desea TODOS los métodos de B
13. 13
Patrón DELEGATION
La solución
Clase A
a1()
….
Clase B
b1(), b2()
….
Clase C
a1(), b1()
….
NO USAR HERENCIA
SINO LA RELACIÓN “USA”
usa
El método b1() habrá que
añadirlo a C
15. 15
Patrón INTERFACE
Utilidad y Ventajas
Utilidad
Definir un comportamiento independiente de
donde vaya a ser utilizado
Ventajas
Desacople entre comportamiento y clase.
Realización de clases “Utilities”
16. 16
Patrón INTERFACE
El problema
Utilities
void imprimirEstructura (????? o) {
o.irAlPrimero();
while (o.tieneElems() );
imprimir (o.obtenerSiguiente() );
}
Todos los objeto o, tienen que implementar:
irAlPrimero(), tieneElems(), obtenerSiguiente().
Problema: De qué tipo son los objetos o?
17. 17
Patrón INTERFACE
La solución
Clase Utilities
ImprimirEstructura(Recorrible o)
….
Interfaz Recorrible
irAlPrimero(),
tieneElems(),
obtenerSiguiente().
usa
Clase A
Solución: Definir los parámetros de un tipo Interfaz.
Todas las clases(instancias) que quieran utilizar ese comportamiento
deberán implementar dicho interfaz
implementa
irAlPrimero(),
tieneElems(),
obtenerSiguiente().
18. 18
Patrón INTERFACE
Implementación
class MiClase<T> implements Recorrible<T> {
Vector<T> v=new Vector<T>();
int pos;
void irAlPrimero() { pos=0;}
boolean tieneElems() {v.lenght < pos;}
T obtenerSiguiente() {
T o=v.elementAt(pos); pos++;
return o; }
}
}
19. 19
Patrón INTERFACE
Ejemplo
// Estructuras de datos, algoritmos y predicados JGL
Array queue = new Array( );
queue.add( ...);
Counting.countIf(queue, new MayorEdad());
class MayorEdad implements UnaryPredicate {
public boolean execute (Object o1)
{ ...... } }
Definición: Counting.countIf(Container,UnaryPredicate);
Uso de
countIf
20. 20
Patrón MARKER INTERFACE
Utilidad 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.
21. 21
Patrón MARKER INTERFACE
Clase Utilidad
operacion(Object o)
….
Interfaz Markerusa
Clase Marcada
m1()
….
Dentro del código del método operacion(Object o) de la
clase Utilidad podemos preguntar si el objeto o es de una
clase Marker:
if (o instanceof Marker) {...}
else {...}
Clase NoMarcada
nm1()
….
22. 22
Patrón MARKER INTERFACE
Ejemplo
En Java hay clases “serializables”,
“cloneables”, etc. Para ello, basta con
que implementen las interfaces
Serializable, Cloneable, etc.
23. 23
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
24. 24
Patrón SINGLETON
• Utilidad
– Asegurar que una clase tiene una sola 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 sólo se instancie
una vez
25. 25
Patrón SINGLETON
La solución
Clase CSingleton
- CSingleton laInstancia
….
- CSingleton ()
+ getInstance ()
Atributos
Métodos
- indica que es private + indica que es public
Método
static
– El constructor de la clase DEBE SER PRIVADO
– Se proporciona un método ESTÁTICO en la clase que devuelve
LA ÚNICA INSTANCIA DE LA CLASE: getInstance()
26. 26
Patrón SINGLETON
Implementación
public class CSingleton {
private static CSingleton laInstancia = new CSingleton();
private CSingleton() {}
public static CSingleton getInstance() {
return laInstancia;
}
………………………….
}
27. 27
Patrón SINGLETON
Inconvenientes
Se podría obtener una nueva instancia usando el esquema anterior:
public class MiCSingleton extends CSingleton
implements Cloneable {}
MiCSingleton mcs = new MiCSingleton();
MiCSingleton mcsCopia = mcs.clone();
Para solucionarlo: definir CSingleton como final
public final class CSingleton {...}
28. 28
public final class Facultad implements Serializable {
private Vector listaProfesores;
private Vector listaEstudiantes;
private Vector listaAsigs;
private Vector listaMatrs;
private static Facultad laFacultad=new Facultad();
private Facultad() // EL CONSTRUCTOR ES PRIVADO
{ listaProfesores = new Vector(); // Sólo hay UNA instancia
listaEstudiantes= new Vector(); // y se guarda en laFacultad
listaAsigs = new Vector();
listaMatrs = new Vector(); }
public static Facultad getInstance() {return laFacultad;}
public Vector obtListaProfesores()
{return listaProfesores;}
public void anadirProfesor(Profesor p)
{listaProfesores.addElement(p); }
EJEMPLO DE
PATRÓN
SINGLETON
29. 29
Utilidad
Separar la clase que crea los objetos, de la
jerarquía de objetos a instanciar
Ventajas
– Centralización de la creación de objetos
– Facilita la escalabilidad del sistema
– El usuario se abstrae de la instancia a crear
Patrón FACTORY METHOD
30. 30
Patrón FACTORY METHOD
El problema
Clase A
oper1()
oper2()
...
Clase A’
oper1()
oper2()
...
Clase A’’
oper1()
oper2()
...
If (tipo==1)
create A’
else
create A’’
Programa1
If (tipo==1)
create A’
else
create A’’
Programa2
Problema: Qué sucede si queremos añadir A’’’?
31. 31
Patrón FACTORY METHOD
Una primera solución
Clase A
oper1()
oper2()
static A create(tipo)
Clase A’
oper1()
oper2()
...
Clase A’’
oper1()
oper2()
...
A.create(1);
Programa1
A.create(2)
Programa2
Solución: Hay que recompilar todas las clases que heredan de A
Puede que no tengamos acceso al código de A
32. 32
Patrón FACTORY METHOD
La solución final
Interfaz A
oper1()
oper2()
...
Clase CFactory
A create(tipo)
….
Solución: Separar el creador de las instancias de la propia clase
las instancias se crean en una clase CFactory
Clase A1
oper1()
oper2()
...
Clase A2
oper1()
oper2()
...
33. 33
Patrón FACTORY METHOD
class Aplicación {
...
A newA(...) {
A miA;
CFactory fact= new CFactory();
...
miA = fact.create(“TIPO 2”);
...
return miA; }
• No se crean las instancias directamente en Aplicación
• Si se quisiera añadir un nuevo A A’’’, NO
NECESARIAMENTE habría que modificar la clase
Aplicación. Los tipos que CFactory puede crear los puede
devolver un método y Aplicación trabajar con él.
34. 34
Patrón FACTORY METHOD
class CFactory {
...
A create(String tipo) {
if (“TIPO 1”.equals(tipo))
return new A1();
else if (“TIPO 2”.equals(tipo))
return new A2(); .... }
• Se crean las instancias de los Aes en CFactory, no en la clase
Aplicación
• Se pueden añadir nuevos Aes sin modificar Aplicación. Basta
con añadir la clase A3 y modificar CFactory (añadir el tipo
correspondiente a dicho A: “TIPOX”)
35. 35
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
36. 36
Patrón ADAPTER
Intención
Convertir la interfaz de una clase en otra interfaz esperada por los
clientes.
Permite que clases con interfaces incompatibles se comuniquen
Ventajas
Se quiere utilizar una clase ya existente y su interfaz no se
corresponde con la interfaz que se necesita
Se quiere envolver código no orientado a objeto con forma de
clase
37. 37
Patrón ADAPTER
El problema
Clase A usa Interfaz C
Clase B
m1(….)
m2(….)
….
b1(….)
b2(….)
….
Se desea utilizar la clase A (el método
ejec) utilizando como entrada un
objeto de la clase B
objetoDeA.ejec(objetoDeB)
Pero no se puede, ya que la clase B
no implementa la interfaz C
ejec(Interfaz C)
38. 38
Patrón ADAPTER
La solución
usa
Interfaz C
m1(….)
m2(….)
….
Clase B
b1(….)
b2(….)
….
Clase A
ejec(Interfaz C)
Solución: construir una clase Adaptadora de B que implemente la
interfaz C. Al implementarla, usa un objeto de B y sus métodos
Clase AdapterB
m1(….)
m2(….)
….
usa
Para utilizar la clase A:
objetoDeAdapterB =NEW AdapterB(objetoDeB)
AdapterB(B)
objetoDeA.ejec(objetoDeAdapterB)
39. 39
Patrón ADAPTER
Diagrama de interacción
El cliente quiere usar el objeto a (para que ejecute el
método ejec) con un objeto de b. Para ello necesita
crear un objeto adaptador que encapsule b
ab: AdapterB
new AdapterB(b)
ejec(ab)
ab
a : A
m1(...)
b1()
b : B
m2(...)
b2()
: Cliente
40. 40
Patrón ADAPTER
• Convierte la interfaz de una clase en
otra interfaz que los clientes esperan.
Permite que clases con interfaces
incompatibles puedan ser utilizadas
conjuntamente.
– La interfaz de la clase B (los métodos
b1(),b2()…) los convierte/adapta a los
métodos esperados por la clase A
(métodos m1(),m2(),…)
41. 41
Patrón ADAPTER
Ejemplo de uso en JGL
usa
Interfaz Sequence
Array Java nativo: int[]
Clase Sorting
sort(Sequence)
OBJETIVO: PODER USAR LOS ALGORITMOS DE JGL CON int []
int ints[] = { 3, -1, 2, -3, 4 };
IntArray intArray = new IntArray( ints );
Sorting.sort( intArray );
Clase IntArray
usa
IntArray(int [] )
add, clear, isEmpty,
size. (de Container)
at, put, contains, ...
Operaciones con arrays:
acceso elº i: int[i], ...
Implementa: add,
clear, isEmpty, size..Adapter proporcionado por JGL
De JGL
De Java
42. 42
Patrón ADAPTER
Ejemplo I
class WhatIUse {
public void op(WhatIWant wiw)
{ wiw.f();} }
class WhatIHave {
public void g() {}
public void h() {} }
class Adapter implements WhatIWant {
WhatIHave whatIHave;
public Adapter(WhatIHave wih) {
whatIHave = wih; }
public void f() {
// Implementa usando los
// métodos de WhatIHave:
whatIHave.g();
whatIHave.h(); } }
interface WhatIWant
{ void f(); }
43. 43
Gráfico
Dibujar( )
Mover( )
Polígono
Dibujar( )
Mover( )
Cuadrado
Dibujar( )
Mover( )
Círculo
Dibujar( )
Mover( )
Label
Draw( )
Move( )
Texto
Dibujar( )
Mover( )
♦Extender un editor gráfico con clases de otro toolkit
Patrón ADAPTER
Ejemplo II
44. 44
Patrón COMPOSITE
Intención
Componer objetos en jerarquías todo-parte y permitir a los clientes
tratar objetos simples y compuestos de manera uniforme
Ventajas
♦Permite tratamiento uniforme de objetos simples y complejos así
como composiciones recursivas
♦Simplifica el código de los clientes, que sólo usan una interfaz
♦Facilita añadir nuevos componentes sin afectar a los clientes
Inconvenientes
♦Es difícil restringir los tipos de los hijos
♦Las operaciones de gestión de hijos en los objetos simples pueden
presentar problemas: seguridad frente a flexibilidad
45. 45
Patrón COMPOSITE
El problema: La escalabilidad
Documento
Página
MarcoColumna
Imagen
LíneaDeTexto
Carácter
Un documento está formado por varias páginas, las cuales están formadas por columnas que
contienen líneas de texto, formadas por caracteres.
Las columnas y páginas pueden contener marcos. Los marcos pueden contener columnas.
Las columnas, marcos y líneas de texto pueden contener imágenes.
46. 46
Patrón COMPOSITE
La solución
ElementoDeDocumento
Carácter Imagen ElemDeDocCompuesto
Documento Página Columna Marco LíneaDeTexto
Un documento está formado por varias páginas, las cuales están formadas por
columnas que contienen líneas de texto, formadas por caracteres.
Las columnas y páginas pueden contener marcos. Los marcos pueden
contener columnas.
Las columnas, marcos y líneas de texto pueden contener imágenes.
0..n
47. 47
Patrón COMPOSITE
La solución
para cada hijo en m_hijo
hijo->Operación();
Simple
Operación()
Compuesto
Operación()
Add(c : Componente)
Remove(c : Componente)
Iterar() : Componente
m_hijo
Cliente Componente
Operación() unCompuesto
unCompuesto
unSimpleunSimpleunSimple
unSimple unSimple
♦Participantes
♦Componente: declara una clase abstracta para la composición de objetos,
♦Simple: representa los objetos de la composición que no tienen hijos e
implementa sus operaciones
♦Compuesto: implementa las operaciones para los componentes con hijos y
almacena a los hijos
♦Cliente: utiliza objetos de la composición mediante la interfaz de Componente
48. 48
Patrón COMPOSITE
Ejemplo: La jerarquía de clases de AWT
• Sirve para diseñar clases que agrupen
a objetos complejos, los cuales a su vez
están formados por objetos complejos
y/o simples
• La jerarquía de clases AWT se ha diseñado
según el patrón COMPOSITE
49. 49
Patrón COMPOSITE
Ejemplo: La jerarquía de clases de AWT
COMPONENTE
CONTENEDOR
(todo contenedor es
un componente)
Applet
Las posibilidades son infinitas…
- Una ventana formada por 2 cajas de texto, 2 campos de texto, 3 botones, 1
panel que contenga 5 casillas de validación y una lista desplegable.
-Una ventana formada por 2 etiquetas, 2 campos de texto y un botón
-…
Además, añadir nuevos tipos de contenedores y de componentes no sería muy
costoso (estaríamos ante una solución extensible)
50. 50
Patrón COMPOSITE
Un diseño francamente malo …
Frame
Button
CheckBox
TextField
…
- Se necesitarían métodos addButton, addCheckBox, addTextField,
addFrame en la clase Frame (y los correspondientes a todos los que faltan)
- Además el diagrama está muy incompleto, ya que un Button puede ser
componente de un Panel, Dialog, …
- Si se quisiera añadir un nuevo componente XXX, habría que cambiar la
clase Frame y añadir el método addXXX (nada extensible)
*
*
*
*
51. 51
Componentes principales de Swing
JComponent
JFrame
JWindow
JPanel
JDialog
JList JComboBox
JMenuBar
JTextField,
JTextArea,
JButton…
Applet
JApplet
52. 52
Intención: El patrón FACADE 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 que
hay tras la clase FACADE
– Se pueden cambiar las clases “ocultadas” sin
necesidad de cambiar los clientes. Sólo hay que
realizar los cambios necesarios en FACADE
Patrón FACADE
53. 53
Patrón FACADE
El problema
Clase A
a1()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
usa
usa
usa
….
Clase CLIENTE
Clases SERVIDORAS
La clase A debe saber cuál
es exactamente la clase que
le proporciona el servicio:
b1() es de B, c1() de C, d1()
de D, ...
54. 54
Patrón FACADE
El problema
Clase CLI1
cl11()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
usa
usa...
….
Clases CLIENTES Clases SERVIDORAS
Problema: Además puede haber
muchas clases cliente...
Clase CLI2
cl21()
….
Clase CLI3
cl31()
….
55. 55
Patrón FACADE
La solución
Clase CLI1
cl11()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
….
Clases CLIENTES Clases SERVIDORAS
Solución: Proporcionar una clase que
implemente todos los servicios (b1()…).
Los clientes sólo usarán dicha clase.
Clase CLI2
cl21()
….
Clase CLI3
cl31()
….
Clase Facade
b1(), c1(), d1(),..
usa
usa
public class Facade {
B objB = new B();
C objC = new C();…
void b1() { objB.b1();}..}
57. 57
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
58. 58
• Intención
– Definir una dependencia 1:n de forma que
cuando el objeto 1 cambie su estado, los n
objetos sean notificados y se actualicen
automáticamente
• Motivación
– En un toolkit de GUI, separar los objetos
de presentación (vistas) de los objetos de
datos, de forma que se puedan tener
varias vistas sincronizadas de los mismos
datos (editor-subscriptor)
Patrón OBSERVER
59. 59
a = 50%
b = 30%
c = 20%
notificación de cambio
peticiones, modificaciones
sujeto
observadores
Patrón OBSERVER
Ejemplo
60. 60
Clases OBSERVADORAS
(Vistas)
Interfaz Observer
update()
….
Clase OBSERVADA
(Modelo)
susObservers
0..*
Clase ObsConcreta
update() {
// Qué hacer cuando
// cambie el “objeto
// observado” suSubject
// Llamará: suSubject.get()
} ...
suSubject
Se implementa
añadiendo el atributo
Observable suSubject
en ObsConcreta
Se implementa
añadiendo el atributo
Vector susObservers
en Subject
Class ObsConcreto
set(...){
// call notifyObservers()}
get() {...}
.....
1
Class Observable
addObserver(Observer)
removeObserver(Observer)
notifyObservers()
setChanged()
Patrón OBSERVER
La solución
61. 61
Patrón OBSERVER
Diagrama de interacción
s: Observable oi: Observer
set(...)
update()
Llama a update()
para cada objeto
de susObservers
get(...)
“actualizarse con los
nuevos valores” de s
addObserver(oi) Registrarse como
“observador” de s
Se cambia algún
valor de s
setChanged()
notityObservers()
62. 62Este método es invocado cuando el objeto observado ha cambiadoupdate()
countObservers
deleteObservers
deleteObserver(o)
addObserver (o)
Métodos
notifyObservers
hasChanged
setChanged()
Devuelve el número de observadores
Elimina todos los observadores
Elimina el observador o
Añade un nuevo observador o
Notifica a todos los objetos suscritos si el objeto esta en
Estado “modificado”
Devuelve cierto si el objeto esta “modificado”
marca el objeto como “modificado”
Significado
Patrón OBSERVER
La clase Observable
La interfaz Observer
64. 64
Patrón OBSERVER
Ejemplo: La clase Observable (el modelo)
package mvc;
import java.util.*;
public class Observado extends java.util.Observable{
public double getF(){return temperatureF;}
public double getC(){return (temperatureF - 32.0) * 5.0 / 9.0;}
public void setF(double tempF){
temperatureF = tempF;
setChanged();
notifyObservers();
}
public void setC(double tempC){
temperatureF = tempC*9.0/5.0 + 32.0;
setChanged();
notifyObservers();
}
private double temperatureF = 32.0;
}
65. 65
Patrón OBSERVER
Ejemplo: La clase Observer (la vista)
public class Observador implements java.util.Observer
{
private Observado modelo;
public Observador(Observado model)
{
modelo=model;
model.addObserver(this); // Conecta la Vista con el Modelo
}
public void update(Observable t, Object o) // Invocada desde el modelo
{ System.out.println("La temperatura ha cambiado" + modelo.getF());
}
}
66. 66
Patrón OBSERVER
Ejemplo: El programa principal
public static void main(String[] args) {
Observado o=new Observado();
Observador ob=new Observador(o);
Observador2 ob2=new Observador2(o);
o.setF(45.5);
}
The temperature has changed45.5
La temperatura ha cambiado45.5
Process exited with exit code 0.
68. 68
...
public class ObserverQuePinta extends Frame
implements Observer{
Label label1 = new Label();
Panel panel1 = new Panel();
Observable suSubject;
public ObserverQuePinta(Observable s) {
suSubject = s;
s.addObserver(this);
}
public void update() {
String c = suSubject.getColor();
if (c.equals("ROJO")) panel1.setBackground(Color.red);
else if (c.equals("VERDE")) panel1.setBackground(Color.green);
else if (c.equals("AZUL")) panel1.setBackground(Color.blue);
} }
public interface Observer {
void update();
}
VISTA
69. 69
public class Subject extends Observable {
Choice choice1 = new Choice();
public Subject() {
choice1.addItem("ROJO"); choice1.addItem("VERDE");
choice1.addItem("AZUL");
choice1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
setChanged();
notifyObservers(); }}
}
public String getColor() {return choice1.getSelectedItem();}
}
MODELO
70. 70
Subject s = new Subject();
Observer o1 = new ObserverQuePinta(s);
Observer o2 = new ObserverQuePinta(s);
CREACIÓN DE OBJETOS SUBJECT
Y OBSERVER
Patrón OBSERVER
Inicialización
71. 71
• Si se quisiera añadir un nuevo OBSERVER
que en vez de pintar escribiera un número
para cada color (1 si ROJO, 2 si VERDE, 3 si
AZUL), ¿qué habría que hacer?
– Escribir nueva clase OBSERVER que implemente
“notificar”
• Si se quisiera cambiar el SUBJECT para
escoger el color pinchando un Checkbox en
vez de escogerlo de un Choice
– Hay que sustituir el Subject y llamar a “notificar”
de los observers cuando se seleccione un nuevo
Checkbox
A
B
Patrón OBSERVER
Adaptabilidad de la solución
72. 72
...
public class ObserverQueEscribeNums extends Frame
implements Observer{
Label label1 = new Label();
TextArea textArea1 = new TextArea();
Subject suSubject;
public ObserverQueEscribeNums(Subject s) {
suSubject = s;
s.addObserver(this); ... }
public void update() {
String c = suSubject.getColor();
if (c.equals("ROJO"))
textArea1.append("NUEVO COLOR: "+1+"n");
else if (c.equals("VERDE"))
textArea1.append("NUEVO COLOR: "+2+"n");
else if (c.equals("AZUL"))
textArea1.append("NUEVO COLOR: "+3+"n");
} }
public interface Observer {
void notificar();
}
EXTENDER CON UN NUEVO OBSERVER
A
73. 73
...
public class Subject extends Frame {
Checkbox checkbox1 = new Checkbox();
Checkbox checkbox2 = new Checkbox(); // ... y checkbox3
CheckboxGroup checkboxGroup1 = new CheckboxGroup();
public Subject() {
checkbox1.setLabel("ROJO");
checkbox1.setCheckboxGroup(checkboxGroup1);
checkbox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
notificar(); } });
checkbox2.setLabel("VERDE"); // y checkbox3.setLabel("AZUL");...
public void addObserver(Observer o) {susObservers.addElement(o);}
public void notificar() {
setChanged();
notifyObservers(); } }
public String getColor() {
return checkboxGroup1.getSelectedCheckbox().getLabel();} }
CAMBIAR DE SUBJECT
B
75. 75
Intención:
– Encapsular algoritmos relacionados en
clases y hacerlos intercambiables.
– Se permite que la selección del algoritmo
se haga según el objeto que se trate.
Ventajas
– Se permite cambiar el algoritmo
dinámicamente
– Se eliminan sentencias condicionales para
seleccionar el algoritmo deseado
Patrón STRATEGY
77. 77
Patrón STRATEGY
Clase Cliente
….
Clase StrConcr1
operac()
….
Interfaz Strategy
operac()
….
usa
….
0..11
Clase StrConcr2
operac()
….
La clase Cliente necesita ejecutar un método: operac(),
que puede ser implementado siguiendo distintos
algoritmos. Se pueden implementar todos ellos (en las
clases StrConcrX) y ser trasparente a Cliente.
78. 78
Patrón STRATEGY
Implementación
class Cliente {
Strategy s;
// PARA SELECCIONAR EL ALGORITMO
// SE ASIGNA A s LA INSTANCIA
// DE LA SUBCLASE QUE LO IMPLEMENTA
Cliente(Strategy str) {s = str;}
// EL Cliente SIEMPRE SE EJECUTARÁ ASÍ:
s.operac(); }
Cliente c = new Cliente(new StrConcr1());
Se indica cuál es el algoritmo que se ejecutará
79. 79
Patrón STRATEGY
Implementación
class Cliente {
// EN VEZ DE:
if (cond1) operac1();
else if (cond2) operac2();
else ...
}
• Sentencias condicionales para seleccionar el algoritmo
• Si se quisiera añadir una nueva forma de ejecutar
operac() entonces HABRÍA QUE CAMBIAR EL
CÓDIGO DE LA CLASE Cliente
80. 80
• Intención:
– Proporcionar una forma de acceder a los
elementos de una colección de objetos de manera
secuencial sin revelar su representación interna.
Define una interfaz que declara métodos para
acceder secuencialmente a la colección.
• Ventajas:
– La clase que accede a la colección solamente a
través de dicho interfaz permanece independiente
de la clase que implementa la interfaz.
Patrón ITERATOR
81. 81
Cliente
IteradorConcreto
Interfaz Iterador
hasNextItem()
getNextItem()
Interfaz Agregado
CrearIterador() : Iterador
AgregadoConcreto
CrearIterador() : Iterador hasNextItem()
getNextItem()
♦Participantes
♦Iterador: define una interfaz para acceder a los elementos del
agregado y recorrerlos
♦IteradorConcreto: implementa la interfaz de Iterador y mantiene
la posición actual del recorrido
♦Agregado: define una interfaz para crear un objeto iterador
♦AgregadoConcreto: implementa la interfaz de creación del iterador
para devolver una instancia apropiada de IteradorConcreto
return new IteradorConcreto(this);
Patrón ITERATOR
82. 82
• Ejemplos en Java:
Patrón ITERATOR
Vector listOfStudents = new Vector();
// PARA RECORRER EL VECTOR:
Enumeration list = listOfStudents.elements();
while ( list.hasMoreElements() )
System.out.println( list.nextElement() );
Hashtable anIndex = new Hashtable();
// PARA RECORRER LA TABLA HASH:
Enumeration list = anIndex.keys();
while ( list.hasMoreElements() )
System.out.println( list.nextElement() );