S EVILLA , 18
DE ENERO DE
2007
First published in May 2006 by The Distributed Group ETSI Informtica Avda. de la Reina Mercedes s/n Sevilla, 41012. SPAIN
ndice general
1 Introduccin a los Patrones de Diseo . . . . . . . . . . . . . . . . . 1 2 Patrones Fachada y Mtodo Plantilla . . . . . . . . . . . . . . . . . . 3 3 Patrones Estrategia y Adaptador . . . . . . . . . . . . . . . . . . . . . . 5 4 Fbricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5 Patrn Decorador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
II
ndice general
ndice de Figuras
Modelo de diseo de la consulta de documentos de la biblioteca . . . . . 6 Modelo de diseo de la consulta de documentos de la biblioteca . . . . 10 Modelo de diseo de la consulta de documentos de la biblioteca . . . . 14
IV
ndice de Figuras
CUESTIN 1.9: Cundo se debera empezar a tener en cuenta los requisitos no funcionales? CUESTIN 1.10: Discuta sobre la madurez de la Ingeniera del Software respecto de las ingenieras clsicas y otras profesiones
Cuestiones especcas
CUESTIN 1.11: Por qu se le da tanta importancia al nombre en los patrones de diseo? Qu relacin tiene sto con la actividad realizada en esta fase? CUESTIN 1.12: Qu ventajas puede tener el Singleton cuando hay muchos desarrolladores? CUESTIN 1.13: Se puede aplicar los patrones de manera aislada? CUESTIN 1.14: Indique qu problema resuelve el patrn de diseo Singleton CUESTIN 1.15: Enuncie un ejemplo donde se deba usar el patrn Singleton que no aparezca en los apuntes CUESTIN 1.16: Indique que problemas surgen en la implementacin del Singleton y cmo se resuelven en Java CUESTIN 1.17: Enuncie el principio de Hollywood y explique cmo se aplica esta metfora a los frameworks y bibliotecas CUESTIN 1.18: Indique la diferencia entre idiom y patrn de diseo y discuta sobre las situaciones en las que ambos pueden confundirse. CUESTIN 1.19: Enuncie los antipatrones junto con una breve descripcin
Cuestiones especcas
CUESTIN 2.9: Indique que modicadores (public, protected, private, abstract, nal) deberan aplicarse a los distintos mtodos implicados (el mtodo plantilla, los mtodos hook) en el patrn template method. CUESTIN 2.10: Una vez aplicado el patrn Facade, Cmo podemos usar las clases del subsistema que la fachada oculta? CUESTIN 2.11: Cmo podemos enganchar una nueva funcionalidad (clase o mtodo) usando un mtodo plantilla? Quin es el encargado de llamar/usar esta nueva funcionalidad? CUESTIN 2.12: Es posible tener una clase con un mtodo plantilla que no sea abstracta? CUESTIN 2.13: Cmo aade la fachada nueva funcionalidad al subsistema? Es correcto aadir nueva funcionalidad? CUESTIN 2.14: Es obligatorio tener una fachada por subsistema? CUESTIN 2.15: Adems de simplicar el uso del subsistema, Qu otra ventaja proporciona una fachada? CUESTIN 2.16: Cmo se puede implementar un paso opcional del mtodo plantilla sin necesidad de usar un if? CUESTIN 2.17: Una clase que contenga un mtodo plantilla con muchos mtodos abstract obliga a las subclases a realizar gran parte de la implentacin del algoritmo. Es esto deseable? En qu situaciones puede ocurrir esto? Cmo podemos evitarlo?
Cuestiones especcas
CUESTIN 3.7: Cuntas clases puede adaptar un Adaptador? Si es posible que adapte a varias clases Qu lo diferencia de Faade?
CUESTIN 3.8: Cmo puede conseguir que el comportamiento de una clase cambie en tiempo de ejecucin usando el patrn Strategy? Ponga un ejemplo
Problemas
PROBLEMA 3.1:
FormularioMostrarDocumentos
uses uses LectorDocumentos +leerDocumento() Monografa -temtica: string +getContent() : string Documento -titulo : string -autor : string -indice : string +getContent() : String
Library
InternationalJournal -theme:string +getTittle() : string +getAbstract() : string +getIndex() : string +getBody() : string +getConclusions() : string
Figura 3.1: Modelo de diseo de la consulta de documentos de la biblioteca. Se tiene una aplicacin encargada de la gestin de documentos almacenados en una biblioteca. Esta aplicacin dispone de una ventana que muestra los documentos renderizando el HTML que le proporciona la clase LectorDocumentos con el mtodo leerDocumento. Esta clase utiliza el mtodo getContent de cada tipo de documentos y transforma la cadena que devuelve a HTML para pasrselo al formulario. El diseo de esta parte de la aplicacin lo puede encontrar en la gura 3.1. La forma en que se transforma cada documento a HTML depende de su tipo, es decir, la transformacin a HTML se realizar de una forma para las monografas, de otra para los manuales, etctera.
7 1. Proponga dos diseos alternativos usando patrones de diseo para implementar las distintas formas de transformar a HTML. Comente las ventajas e inconvenientes de cada uno. 2. Una biblioteca inglesa nos permite acceder a sus revistas internacionales. Desgraciadamente la interfaz proporcionada no es adecuada y adems la informacin es proporcioanda en ingls. Hemos comprado un traductor para solucionar el problema. Proponga un diseo que arregle esta situacin.
Captulo 4 Fbricas
Cuestiones generales
Todas las respuestas deben ser razonadas e incluir ejemplos cuando sea posible. CUESTIN 4.1: Cul es el principal objetivo del patrn Factory Method? Y del idiom Simple Factory? Deje clara la diferencia entre los dos patrones. CUESTIN 4.2: Qu tipos de acoplamiento resuelve Simple Factory? Ponga un ejemplo. CUESTIN 4.3: Qu relacin existe entre el patrn Template Method y el patrn Factory Method? CUESTIN 4.4: Qu ventajas ofrece el patrn Factory Method en referencia a la utilizacin/creacin de frameworks? CUESTIN 4.5: Qu GRASP(s) se aplican en el idiom Simple Factory?
Cuestiones especcas
CUESTIN 4.6: Al usar el idiom Simple Factory estamos pasando el problema de la creacin a otra clase, no lo evitamos. Qu se consigue con esto? CUESTIN 4.7: Para hacer singleton una Simple Factory Podramos poner el mtodo create como static? Qu desventaja tendra esto?
10
Captulo 4. Fbricas
CUESTIN 4.8: Cul es la ventaja del Factory Method cuando se tiene un nico producto concreto? CUESTIN 4.9: Qu diferencia hay entre un Simple Factory y un creador concreto de un Factory Method CUESTIN 4.10: El mtodo "Factory Method" tiene que ser siempre abstracto? Y protegido? CUESTIN 4.11: Es obligatorio que el Factory Method o el create del Simple Factory tomen un parmetro para decidir que tipo de objeto crear?
Problemas
PROBLEMA 4.1:
FormularioConsultaBiblioteca
Controlador Consultas -documentos: List of Documento +ConsultarDoc(entrada ttulo, entrada autor, entrada contenido) : string
instance
Figura 4.1: Modelo de diseo de la consulta de documentos de la biblioteca. Se tiene una aplicacin encargada de la gestin de documentos almacenados en la biblioteca. En los inicios de esta aplicacin se gestionaban dos tipos de documentos: manuales y monografas. El diseo de la aplicacin en ese momento lo puede encontrar en la gura 4.1. En este diseo, la interfaz de usuario est separa de la clase que se encarga de recuperar y manejar los documentos (Controlador Consulta). Esta clase es la encargada de devolver los documentos obtenidos en la consulta.
11 ltimamente, se han incluido nuevos tipos de documentos a la biblioteca: revistas y publicaciones electrnicas. Se ha detectado que con el diseo actual, tenemos que reescribir el cdigo de la clase Controlador Consultas cada vez que se incluye un nuevo tipo de documentos. Adems, el retocar este cdigo es complicado pues los datos de los documentos que devuelve la consulta se obtienen de la base de datos de la biblioteca. Proponga un nuevo diagrama de clases de diseo para1 : 1. Simplicar el acceso a la base de datos. Qu patrn podra usar? Justique su respuesta. Represente el diseo con un nuevo diagrama de clases. 2. Redisear la aplicacin para que la inclusin de nuevos documentos no suponga cambiar la clase Controlador Consultas. Describa la solucin y represente su diagrama de clases. 3. Se desea poder vender esta parte de la aplicacin a otras bibliotecas, de modo que estas puedan incluir sus propios tipos de documentos. Proponga un diseo alternativo al anterior que permita la inclusin de nuevos elementos de manera totalmente transparente a la aplicacin (es decir, sin tener que cambiar la parte que vendemos nosotros).
1 Para resolver esto puede tener que utilizar conocimientos adquiridos en los temas anteriores
12
Captulo 4. Fbricas
Cuestiones especcas
CUESTIN 5.5: Es posible decorar un objeto varias veces e incluso decorar otro decorador Que clases/relaciones permiten esto? CUESTIN 5.6: Todos los decoradores y objetos a decorar heredan/implementan la misma "interfaz". Cmo se decide en una la implementacin JAVA si sta ser una Clase abstract o una intarface? CUESTIN 5.7: Como puede conseguir cambiar el objeto al que se decora en tiempo de ejecucin? Y el decorador? Proponga un cdigo de ejemplo de ambas situaciones.
14
Problemas
PROBLEMA 5.1:
FormularioMostrarDocumentosHTML
FormularioMostrarDocumentosPDF uses
MostrarDocumentosWord
uses
uses Documento -titulo : string -autor : string -indice : string +getContent() : String Manual -asignatura: Asignatura +getContent() : string Archivo de ayuda -asignatura: Asignatura +getContent() : string
Figura 5.1: Modelo de diseo de la consulta de documentos de la biblioteca. Se tiene una aplicacin encargada de la gestin de documentos almacenados en una biblioteca. Esta aplicacin dispone de varias ventanas que muestra los documentos en HTML, PDF, y Word. Se quiere que la clase LectorDocumentos proporcione el contenido en texto plano con el mtodo leerDocumento. Esta clase utiliza el mtodo getContent de cada tipo de documentos. El diseo de esta parte de la aplicacin lo puede encontrar en la gura 5.1. 1. Proponga dos diseos alternativos que permita mostrar todos los documentos en todos los posibles formatos. Discuta las ventajas e inconvenientes de ambas soluciones
A BOO This document was typeset on // using RC TEX2 . K . for L Should you want to use this document class, please send mail to ? J=?J(J@C IALE A E B .