I NGENIERÍA DEL S OFTWARE G ESTIÓN II B OLETÍN DE EJERCICIOS A NTONIO R UIZ -C ORTÉS O CTAVIO M ARTÍN S EVILLA , 21 DE ENERO DE 2005 DE First published in January 2005 by The Distributed Group ETSI Informática Avda. de la Reina Mercedes s/n Sevilla, 41012. SPAIN ­ Copyright c MMV The Distributed Group http://www.tdg-seville.info [email protected] In keeping with the traditional purpose of furthering science, education and research, it is the policy of the publisher, whenever possible, to permit non-commercial use and redistribution of the information contained in the documents whose copyright they own. You however are not allowed to take money for the distribution or use of these results except for a nominal charge for photocopying, sending copies, or whichever means you use redistribute them. The results in this document have been tested carefully, but they are not guaranteed for any particular purpose. The publisher or the holder of the copyright do not offer any warranties or representations, nor do they accept any liabilities with respect to them. Índice General Prólogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v 1 Introducción al diseño software . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 Técnicas de representación . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1 Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Patrones generales de software para asignar responsabilidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1 Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4 Patrones de diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1 Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ii Índice General Índice de Figuras 3.1 Dominio de información sobre gestión ferroviaria . . . . . . . . . . . . . . . . . . 7 1 2 3 4 5 6 Diagrama de clases y de secuencias del problema 4.3 . . . . . . . . . . . . . . . Diagrama de clases del problema 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de secuencias del problema 4.4 . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de clases y de secuencias del problema 4.3 . . . . . . . . . . . . . . . Diagrama de clases del problema 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de secuencias del problema 4.4 . . . . . . . . . . . . . . . . . . . . . . . . 21 22 23 27 28 29 iv Índice de Figuras Prólogo El presente documento recopila algunas cuestiones teóricas y problemas relacionadas con la materia de la asignatura Ingeniería del Software II correspondiente al tercer curso de la Ingeniería Técnica en Informática de Gestión. El principal objetivo de esta asignatura es introducir al alumno en la problemática del diseño orientado a objetos. Para lograr dicho objetivo adecuándonos al estado actual de la cuestión, se ha visto conveniente revisar sus contenidos, razón por la que en el curso 2004/05 se ha procedido a reordenar algunos contenidos de años anteriores y a introducir algunos nuevos. Una de las consecuencias de estos cambios en la asignatura, es la obsolescencia de los ejercicios y exámenes propuestos en cursos académicos anteriores. Si a esto añadimos que la asignatura no había dispuesto hasta la fecha de boletín de problemas, no cabe duda que la necesidad de elaborar este documento era todavía mayor. Hay dos características que marcan el contenido de este boletín. En primer lugar, se tratan de cuestiones del mismo tipo de las que se pueden y de hecho se han propuesto en exámenes oficiales de la asignatura. Con ellos pretendemos que el alumno pueda autoevaluarse al tiempo que familiarizarse con el mismo tipo de cuestiones con las que será evaluado. En segundo lugar, se trata de un boletín que no incluye todas las soluciones a las cuestiones, lo que sin duda, será motivo de queja para una parte de los alumnos. No obstante, dado que de este modo aumentan las probabilidades de que el alumno intente resolver las cuestiones y problemas planteándoselas desde el principio, estamos convencidos de que también aumentarán sus probabilidades de aprender y aprobar. Por otra parte, se recuerda a los lectores que también son alumnos, que la asignatura cuenta con una lista de correo en la que se puede y recomienda discutir la resolución de estas cuestiones y problemas. vi Prólogo En cuanto a la estructura del documento, esté se ha organizado en los mismos capítulos que el temario de la asignatura más un capítulo con las soluciones de algunas cuestiones y problemas. Cada capítulo tiene una sección de preguntas de carácter teórico y otra de carácter más aplicado cuando la materia lo requiere. Los autores Sevilla, enero de 2.005 Capítulo 1 Introducción al diseño software 1.1 Cuestiones CUESTIÓN 1.1: ¿Que relación existe entre el cuerpo de conocimiento de la Ingeniería del Software y el reconocimiento de ésta como profesión? CUESTIÓN 1.2: ¿A qué representa las siglas SWEBOK? ¿Qué asociaciones relacionadas con la informática han auspiciado dicho proyecto? CUESTIÓN 1.3: ¿En qué aspectos suelen coincidir la mayoría de las definiciones de Ingeniería del Software? CUESTIÓN 1.4: Discuta sobre si el diseño es o no una actividad compleja. CUESTIÓN 1.5: Defina los siguientes conceptos y describa mediante un ejemplo la relación que existe entre ellos si es que existe: atributo básico y derivado de calidad, requisito no funcional, requisito de calidad, catálogo de atributos. CUESTIÓN 1.6: Comente su interpretación sobre la gráfica propuesta por Osmond para ilustrar los posibles caminos durante el proceso de desarrollo software. CUESTIÓN 1.7: Discuta sobre la madurez de la Ingeniería del Software respecto de las ingenierías clásicas y otras profesiones. 2 Capítulo 1. Introducción al diseño software Capítulo 2 Técnicas de representación 2.1 Cuestiones CUESTIÓN 2.1: Discuta sobre los criterios que suelen seguirse para decidir entre utilizar agregación o composición. CUESTIÓN 2.2: ¿De qué otra manera se conocen las agregaciones no compartidas en UML? ¿Por qué? CUESTIÓN 2.3: ¿Qué diferencia existe entre un diagrama de clases de análisis y un diagrama de clases de diseño? CUESTIÓN 2.4: CUESTIÓN 2.5: ¿Qué sabe sobre los diagramas de interacción de UML? Muestre con un ejemplo simple la forma de expresar una iteración en un diagrama de colaboración. 2.2 Problemas Para realizar los siguientes problemas asuma la existencia de una clase que guarda una relación de agregación con la clase y de una clase . Considere el contrato sintáctico que estime oportuno con la semántica habitual de un sistema de archivos. Si en algún caso se indica de manera explícita otras clases de objetos considere los contratos sintáctico y semántico que estime oportunos. 4 Capítulo 2. Técnicas de representación PROBLEMA 2.1: Elabore el diagrama de colaboración correspondiente a la acción de comprimir una carpeta. PROBLEMA 2.2: Elabore el diagrama de colaboración correspondiente a la acción de comprimir una carpeta asumiendo que la clase dispone de un método para comprimir el contenido completo de una carpeta. PROBLEMA 2.3: Elabore el diagrama de colaboración correspondiente a la acción de comprimir una carpeta y de enviarla por correo electrónico. PROBLEMA 2.4: Elabore el diagrama de colaboración correspondiente a la acción de borrar una carpeta. Debe tenerse en cuenta que los archivos superiores a un tamaño predeterminado, p.e. de 10 MB, no van a la papelera de reciclaje. PROBLEMA 2.5: Elabore el diagrama de secuencias equivalente a los diagramas de colaboración requeridos en los anteriores problemas. Capítulo 3 Patrones generales de software para asignar responsabilidades 3.1 Cuestiones CUESTIÓN 3.1: ¿Qué contraindicación tiene el GRASP ? CUESTIÓN 3.2: ¿Qué contraindicación tiene el GRASP ? CUESTIÓN 3.3: ¿Qué contraindicación tiene el GRASP ? CUESTIÓN 3.4: Comente al menos tres mecanismos propuestos para la protección de alguna variación. CUESTIÓN 3.5: Discuta sobre los otros nombres que ha recibido el GRASP . CUESTIÓN 3.6: Discuta sobre si el acoplamiento es o no una propiedad no deseable. CUESTIÓN 3.7: CUESTIÓN 3.8: ¿Qué sabe sobre la conocida como “Ley de Demeter”? ¿Qué entiende Craig Larman por principios evaluativos? Indique al menos dos ejemplos de dichos principios. CUESTIÓN 3.9: ¿Qué sabe acerca de la medición del grado de cohesión de una clase? CUESTIÓN 3.10: Justifique razonadamente su opinión sobre si es posible sistematizar la asignación de responsabilidades durante el diseño. 6 Capítulo 3. Patrones generales de software para asignar responsabilidades CUESTIÓN 3.11: ¿Qué entiende por punto de variación y de evolución? ¿Qué GRASP trata de manera más directa con ambos puntos y qué otros nombres recibe dicho GRASP? CUESTIÓN 3.12: ¿Qué sabe sobre el conocido como ”principio de sustitu- ción de Liskov”? 3.2 Problemas PROBLEMA 3.1: En un sistema de gestión ferroviaria debe mantenerse la información relativa a trayectos y trenes que los realizan. La información relacionada está estructurada según el diagrama de clases de la figura 3.1. Dos de las operaciones del sistema son: establecer nuevos trayectos y suprimir trayectos. La definición de dichas funciones son: ! " #$ donde y son referencias a la estación de origen y destino respectivamente, y las horas de salida y llegada, y una lista de referencias a estaciones de tránsito y la hora de dicho tránsito. Esta operación debe buscar un tren que esté disponible e incluir el nuevo trayecto en el sistema según el diagrama de clases propuesto. % $ donde y son referencias a la estación de origen y destino respectivamente, y y las horas de salida y llegada. Esta operación debe: (1) buscar el trayecto en cuestión, (2) suprimir tanto su origen como su destino, (3) suprimir todos los tránsitos, y (4) liberar al tren que realizaba el trayecto. A) Justifique brevemente en lenguaje natural los GRASP que considera aplicables para asignar las responsabilidades que se derivan de realizar ambas operaciones. B) El diagrama de clases resultante de asignar las responsabilidades que se derivan de realizar ambas operaciones. C) El diagrama de colaboración correspondiente a la operación de establecer un trayecto. D) El diagrama de secuencias correspondiente a la operación de suprimir un trayecto. 3.2. Problemas 7 ofrece 1 Compañía Ferroviaria 1..* 1 1..* 1 Tren * realiza posee Trayecto * * * Partida Destino Horario Horario 1 1 Estación * Figura 3.1: Dominio de información sobre gestión ferroviaria. Tránsito Horario 8 Capítulo 3. Patrones generales de software para asignar responsabilidades Capítulo 4 Patrones de diseño 4.1 Cuestiones CUESTIÓN 4.1: ¿Un paquete con clases para construir ventanas de diálogo es un framework o una biblioteca? CUESTIÓN 4.2: ¿Qué entiende por idiom? ¿Qué relaciones encuentra entre idiom y patrón de diseño? CUESTIÓN 4.3: ¿Cuál es la diferencia entre un toolkit y un framework? ¿y entre un framework y un patrón de diseño? CUESTIÓN 4.4: Describa lo más detalladamente posible los aspectos a tener en cuenta cuando se trata de implementar el PD Singleton en JAVA. CUESTIÓN 4.5: Justifique mediante un ejemplo o contraejemplo si existe o no en JAVA alguna posibilidad de extender en una clase derivada el comportamiento de un método definido como & en su clase base. CUESTIÓN 4.6: ¿Qué condición debe cumplirse para considerar que un método es un método plantilla? CUESTIÓN 4.7: Uno de los inconvenientes del PD Estrategia es que el cliente de la estrategia está obligado a conocer las clases que implementan las diferentes estrategias. Si el número de estrategias y de criterios de decisión es elevado ¿existe alguna manera de facilitar el uso de estrategias por parte del cliente? CUESTIÓN 4.8: Uno de los inconvenientes potenciales del PD Estrategia es la creación innecesaria de objetos estrategias. Proponga el diseño de al menos 10 Capítulo 4. Patrones de diseño dos alternativas para resolverlos indicando las ventajas e inconvenientes de cada una de ellas. CUESTIÓN 4.9: Describa lo más detalladamente posible alguna situación en la que resulte claramente ventajoso aplicar el PD Adaptador haciendo uso de herencia en lugar de composición. CUESTIÓN 4.10: Discuta sobre si le parece contradictoria o no la expresión ”nuevo patrón de diseño”. CUESTIÓN 4.11: Describa la relación, si es que existe, entre patrón de diseño y GRASP. CUESTIÓN 4.12: Discuta razonadamente sobre las ventajas e inconvenientes de aplicar el PD Singleton cuando se aplica el PD Factoría. CUESTIÓN 4.13: Indique la motivación, la estructura estática y un ejemplo de uso por parte del JDK de JAVA del PD Adaptador. 4.2 Problemas En esta sección se presentan algunos problemas propuestos en examenes de la asignatura Ingeniería del Software II de Ingeniería Informática. La mayoria de sus apartados pueden ser realizados con los conocimientos impartidos en Ingeniería del Software de Gestión II de Ingeniería Técnica en Informática de Gestión. PROBLEMA 4.1: [ISW2-nov02] Se desea construir un módulo para conver- tir documentos escritos con el procesador de textos de la empresa ACME. La lista de formatos de salida que debe contemplar la aplicación no se conoce en su totalidad, aunque se sabe que deberá incluir los formatos PDF (Portable Document Format) y PS (PostScript). En el caso de la conversión a PS se dispone de un programa externo (%'() que realiza la conversión de un archivo en formato ACME a un archivo en formato PS. Proponga un diseño basado en patrones para dicho módulo respetando el principio abierto/cerrado y garantizando que con dicho módulo no sea posible realizar dos conversiones al mismo tiempo. A) Indique el diagrama de clases UML de su diseño teniendo presente que: ¯ La instrucción para utilizar el programa % sigue el formato: % )' )' . 4.2. Problemas 11 ¯ El formato ACME considera que un archivo tiene dos tipos de elementos: palabra y comando ¯ Utilice notas para indicar la responsabilidad de cada clase y la signatura completa de sus métodos ¯ Debe documentar los aspectos de implementación más relevantes (esto es, los que se han destacado en las clases de teoría) B) Indique el diagrama de secuencias correspondiente a una conversión a formato PS. C) Indique el fragmento en lenguaje JAVA correspondiente a la invocación (desde el cliente) de dos conversiones consecutivas: una del archivo *)+,' a PS y otra del archivo *)+-' a PDF. PROBLEMA 4.2: [ISW2-feb03] A partir del código indicado se le pide que: a) Indique su diagrama de clases asociado. b) Indique el diagrama de objetos asociado a la ejecución del método de la clase . c) Indique la salida del programa por la consola. d) Indique en lenguaje natural la responsabilidad, que en su opinión, tiene cada una de las clases. e) Indique justificadamente los patrones de diseño de los que, en su opinión, se está haciendo uso. f) ¿Qué papel juega en su opinión la clase ... ? Discuta sobre las consecuencias de su eliminación. / +''0 '0 & 1 2 3 4/$ 3 4/% $ 5 & 1 42 1 % 1 $ 1 % $ 5 12 Capítulo 4. Patrones de diseño & 16 ( 1 1 425 6 16 2 + 4 7 8 )4$ + % &7 99 3 4/ $ 2 4/&$ 5 3 4/ % $ 2 1 3 7 1 $ '$ 7 '4/$ $ 5 1 % $ 2 1 $ ' $ 5 1 % 1 $ 2 1 $ ' $5 5 2 $25 + %"# $ 2 1 &7 8 $ 1 7 1 $ &'4/9*9$ ' $ 1 :7 1 $ &'4/9;19$ :' $ 6 &7 8 6 $ 1 7 1 $ &'4/9*9$ ' $ 1 :7 1 $ &'4/9;19$ :' $ 1 7 1 $ &'4/9*<=9$ & 77$ % ''9>? 8 9$ 1 -7 1 $ &'4/9*<=9$ -' $ &- 77 $ % ''9> )+ 8 & 9$ % ''91& ) +) &9$ 5 5 / '0 344@*!'0 & 1 2 + $ 5 4.2. Problemas 13 1 2 % &7 9*9 3 4/ $ 2 4/&$ 3 4/ % $ 2 3 & 'A 9*9$$ 7 8 * $ 7 8 ;1 $ 5 5 6 ( 6 2 6 $ 2 9*91 $ 8 * $$ 9;191 $ 8 ;1 $$ 9*<=91 $ 8 *<= $$ 5 5 ;1 1 2 ;1 $2% ''9 ;1 9$5 + $2% ''9 '''9$5 5 *<= 1 2 *<= $2% ''9 *<= 9$5 + $2% ''9 '''9$5 5 * 1 2 14/ * $2 7 8 4/ $ % ''9 * 9$ 5 + $2 % ''9 '''9$ '9* 9B$ '* 9%,' 99%,' 9$ '* 9,'(99,'(9$ ' $ 5 5 * 1 2 3 4/$2 1 $ 8 * $5 3 4/% $ 2 1 $ 8 * $5 5 ;1 1 2 3 4/$2 4/99$5 14 Capítulo 4. Patrones de diseño 3 4/% $ 2 8 ;1 $5 5 *<= 1 2 + 3 7 3 4/$2 C1 99$5 3 4/% $ 2 C1 $5 5 ): 3 C1 % $2 & 77$ 7 8 *<= $ 5 + $ 2 &D7 $ 7 5 PROBLEMA 4.3: [ISW2-feb03] En la biblioteca de .NET existe una clase de nombre 61& que proporciona acceso a la información de un directorio. De acuerdo con la especificación del fabricante, dicha clase no proporciona ningún método para obtener los archivos que cuelgan de dicho directorio y de todos sus subdirectorios. Dado que dicha funcionalidad es estrictamente necesaria para nuestra aplicación y queremos mantener un estilo de programación orientada a objetos. Proponga una solución con la que se consiga definir una clase de nombre con un método de nombre E) y todos los métodos que ofrece 61&, teniendo en cuenta que: ¯ La clase 61& no puede ser extendida, es decir, que no pueden definirse clases que deriven de ella. ¯ Debe respetarse el principio abierto/cerrado y mantener el máximo grado de desacoplamiento. Estructure la solución en los siguientes apartados: A) Diagrama de clases. B) Implementación de los métodos relevantes de la clase de acuerdo a la siguiente definición: 5 & 61&2 61& ) $ FF ) A FF & ( $ FF ++ ) ( FF & ' ''' 4.2. Problemas 15 C) Ejemplo en JAVA de cómo comprobar si existe una determinada carpeta o directorio. D) Diagrama de objetos o de interacción asociado a dicho ejemplo. E) Indicación de los patrones de diseño utilizados. (Sólo si procede) PROBLEMA 4.4: [ISW2-jun03] Se necesita diseñar un módulo para comprimir archivos en diferentes formatos. Los formatos que debe soportar son ZIP y RAR, pero es más que probable que en el futuro se necesite desarrollar una nueva versión del módulo que soporte otros formatos. El módulo debe ofrecer métodos para que los clientes soliciten la creación de objetos de un subtipo de 1 (ver apartado A) de acuerdo al formato solicitado por el cliente. En esta solicitud, se debe poder indicar que se desea el registro de todas las peticiones de compresión realizadas por el cliente. Proponga un diseño basado en patrones para dicho módulo respetando el principio abierto/cerrado y buscando el mayor rendimiento y la máxima reutilización de su implementación. A) Indique el diagrama de clases UML (con la signatura completa de sus métodos) de dicho diseño teniendo presente que: ¥ La definición en JAVA de la interfaz 1 es: & 1 2 + % &G$ 5 ¥ Existe una clase de objetos de nombre que proporcionan la funcionalidad necesaria para registrar mensajes en un archivo de log. Dicho clase implementa la interfaz 1 cuya definición en JAVA es & 1 2 + % $ 5 ¥ Debe documentar los aspectos de implementación más relevantes (esto es, los que se han destacado en las clases de teoría) B) Defina en JAVA una clase de nombre ( que muestre las posibilidades de uso de dicho módulo por un cliente que desea comprimir el archivo de nombre '. 16 Capítulo 4. Patrones de diseño PROBLEMA 4.5: [ISW2-mar04] Se necesita diseñar un framework para facilitar el desarrollo de ventanas de diálogo de autenticación. Deberá contemplar que el procedimiento de acceso a la información sobre las cuentas de usuario podrá variar para cada aplicación construida a partir del framework y que una misma aplicación podrá necesitar utilizar diferentes mecanismos de acceso. También deberá contemplar que el comportamiento ante una autentificación fallida podrá variar entre aplicaciones y que éste debería poderse seleccionar en tiempo de ejecución. Proponga el diseño de una aplicación de ejemplo que a partir del framework permita: ¯ el acceso de usuarios con cuentas en H)'I y usuarios con cuentas almacenadas en un fichero local. ¯ seleccionar el comportamiento ante autentificaciones fallidas: permitir un máximo de tres reintentos o un número ilimitado de intentos en el que el tiempo de respuesta se duplique por cada reintento. A) Indique el diagrama de clases UML (con la signatura completa de sus métodos) de dicho diseño teniendo presente que: ¥ La interfaz de las clases que implementan el mecanismo de autenticación es: & 1 8)/ 2 )/% % 8$ 5 ¥ El método )/J de la clase 4( es responsable de autenticar a los usuarios de Hotmail, y su contrato sintáctico es: )/J % % 8$ donde representa al nombre de la cuenta sin el dominio. Por ejemplo, el login del usuario K)' sería ¥ La clase base para construir ventanas de autenticación es !6. Su método )8 es responsable de su visualización en pantalla y su método abstracto ) será invocado cada vez que se solicite la autenticación al pulsar el botón de aceptar (no es relevante para el problema en cómo será invocado). Su contrato sintáctico es: + ) % % 8$ ¥ La interfaz de las clases que implementan el comportamiento ante fallos es: & 1*)<+ 2 4.2. Problemas 5 17 + )% % 8$ ¥ Debe documentar los aspectos de implementación más relevantes (esto es, los que se han destacado en las clases de teoría) B) Muestre el diagrama de secuencias asociado a un escenario en el que un usuario se identifica en el sistema con su cuenta en ' PROBLEMA 4.6: [ISW2-sep04] Se necesita diseñar de un módulo para resolver sistemas de ecuaciones teniendo en cuenta los siguientes condicionantes: 1 El método de resolución a emplear dependerá del sistema a resolver. La relación de métodos de resolución no se conoce a priori 2 La interfaz de las clases que implementan algún método de resolución debe ser: & 1%+ ! %+% $ donde el método %+ debe devolver una de las posibles soluciones del sistema como una lista de valores. El orden de dicha lista se corresponde con el orden lexicográfico de sus incógnitas. Por ejemplo, para el sistema formado por L7M y N7,, se obtendría un objeto del tipo ! del JDK con los valores 3 y 2. 3 Para resolver sistemas lineales, debe utilizar objetos de la clase < !*4, que tiene un contrato semántico equivalente al de 1%+, pero con un contrato sintáctico diferente: +% ! $ donde representa a la clase del JDK que implementa la interfaz ! 4 Para conocer el tipo de un sistema, debe usar el singleton 64), más concretamente su método % %$ % % A) Justifique brevemente en lenguaje natural los patrones de diseño que considera aplicables en el diseño de este módulo. B) Ilustre con diagrama de clases UML el diseño propuesto para el modulo solicitado, haciendo uso de anotaciones para explicar la semántica de los métodos más relevantes. Se recomienda un diagrama apaisado. C) Defina una clase de nombre Example que muestre el uso del módulo para resolver el sistema formado por L7M y N7,. 18 Capítulo 4. Patrones de diseño D) Justifique brevemente en lenguaje natural los patrones de diseño que considera aplicables al diseño del apartado B y las modificaciones necesarias para que el módulo pudiera registrar el tiempo invertido en solucionar un sistema de ecuaciones. PROBLEMA 4.7: [ISW2-dic04] Se necesita diseñar un módulo del sistema de gestión de una tienda que permita calcular el precio final de cada venta realizada, teniendo en cuenta que: ¯ La política de precios puede variar a lo largo del tiempo. Durante un período podría aplicar un descuento del 10% si el importe de la venta es superior a un determinado valor umbral. En otro período podría ser el 10% independientemente del importe. ¯ El módulo deberá estar protegido de la incorporación de nuevas políticas de precios. ¯ El módulo deberá permitir que el administrador del sistema pueda variar la política de precios en cualquier momento. ¯ Uno de los posibles clientes del módulo está representado por una clase de objetos de nombre cuyo método %6 devuelve el precio sin descuento de una venta y cuyo método devuelve el precio resultante de aplicar el correspondiente descuento. A) Justifique brevemente en lenguaje natural los GRASP y patrones de diseño que considera aplicables en el diseño de este módulo. B) Ilustre con diagrama de clases UML el diseño propuesto para el modulo solicitado, haciendo uso de anotaciones para explicar la semántica de los métodos más relevantes (se recomienda un diagrama apaisado). C) Defina una clase de nombre que muestre el uso del módulo para obtener el precio final de un producto cuyo valor supera el umbral para aplicar el 10% de descuento D) Elabore el diagrama de secuencias asociado a la operación de obtener precio final del ejemplo anterior. Incluya las interacciones entre los objetos del módulo. E) Justifique brevemente en lenguaje natural los GRASP y/o patrones de diseño que considera necesarios para modificar el modulo anterior a fin dar la posibilidad de que existan diferentes políticas de precios al mismo tiempo y que el cálculo del precio final de cada venta sea el mejor para el cliente o el mejor para la tienda según lo decida el vendedor. Respuestas CUESTIÓN 1.1: Un requisito indispensable para considerar una profesión como tal es que ésta cuente con un cuerpo de conocimiento generalmente aceptado. CUESTIÓN 1.2: Se corresponde con Software Engineering Body of Knowledge. ACM/IEEE. CUESTIÓN 1.3: En el interés en desarrollar productos a tiempo y de acuerdo a un presupuesto. También, aunque en menor medida, en la necesidad de utilizar métodos y técnicas procedentes de otras disciplinas. CUESTIÓN 2.2: La agregación en UML puede ser compartida (rombo hueco) y no compartida (rombo relleno), ésta última también conocida como agregación de composición o simplemente composición. El calificativo de no compartida subraya la exigencia de que la parte de la agregación sea miembro de un único objeto conpuesto, en otras palabras, que no esté compartida. CUESTIÓN 3.6: El acoplamiento entre clases es estrictamente necesario, de otro modo, tendríamos que codificar cualquier programa orientado a objetos en una única clase. El acoplamiento deja de ser deseable en el momento en el que alguna de las clases que intervien es inestable, pues los cambios en la sintaxis o semántica de esta requerirán modificar las clases desde las que se utiliza. PROBLEMA 4.3: A) La figura 4.a muestra el diagrama de clases de una posible solución. B) La implementación de los métodos relevantes de la clase se encuentra en las notas de la figura 4.a: 20 Respuestas C) El siguiente fragmento de código JAVA ilustra como utilizar la clase para saber si existe la carpeta “c://temp”. determinada carpeta o directorio. 2 + $ 2 &7 8 HFFI$ & &'( $$ % ''H /I$ % ''HI$ 5 5 D) La figura 4.b, muestra el diagrama de secuencias correspondiente al ejemplo de la sección anterior. E) Si se considera que la clases 61& ofrece una interfaz que sólo puede ser utilizada por el cliente si ésta se extiende, está claro que estamos ante un problema donde resulta aplicable el PD Adapter. Dado que la clase a adaptar no puede ser extendida, estamos obligados a realizar una adaptación por delegación. PROBLEMA 4.4: A) La figura 5 muestra el diagrama de clases propuesto. B) La definición en JAVA de la clase ( es la siguiente: ( 2 + $ 2 1 &7 '1 $ FF )+ H 'I & ;1 7 &' H;1I$ ' H 'I$ FF )+ & <*< FF A 7 &' H<*<I$ ' H 'I$ 5 5 Aunque no se pedía en el enunciado, la figura 6, ilustra el diagrama de secuencias asociado al ejemplo de uso de la clase (. Respuestas 21 (a) Diagrama de clases. (b) Diagrama de secuencias. Figura 1: Diagrama de clases y de secuencias del problema 4.3. 22 Figura 2: Diagrama de clases del problema 4.4. Respuestas Respuestas Figura 3: Diagrama de secuencias del problema 4.4. 23 24 Respuestas This document was typeset on // using RC–BOO K « . for LATEX¾¯ . Should you want to use this document class, please send mail to [email protected].