Está en la página 1de 13

ISI/DSS Septiembre 2005

Examen Resuelto Planes 93/2001.

Duración: 70 minutos.

Normas a seguir:
Los apellidos, nombre y DNI se deben escribir en todas las hojas.
Se debe entregar cada pregunta en hojas separadas.
La primera pregunta se debe entregar a los 20 minutos del
comienzo del examen.
Debéis indicar si sois alumnos ERASMUS o si estáis en 5ª/6ª convocatoria.
No olvidéis entregar las preguntas en el montón correspondiente a
vuestro plan de estudios

Fecha publicación notas provisionales: 22 Septiembre web del DLSI


Fecha y lugar revisión: 27 Septiembre 09:00 a.m. Sala de Juntas del
DLSI (2º piso)
Publicación notas definitivas: 29 Septiembre en el CV. Por favor,
REVISAD las notas provisionales antes de esa fecha para evitar errores en
vuestro expediente, más difíciles de subsanar.

Pregunta 1 (2.5 ptos)

Los siguientes diagramas presentan tres versiones de una parte aferente encargada
de la lectura y validación de un NIF. En esta rama se comprueba el DNI y la letra.
Señala los problemas que presenta cada versión e indica cuál te parece la más
conveniente.
Nota: Sin justificación de la respuesta no se dará por válida aunque sea la correcta

a)
NIF valido

Letra val
DNI val

Letra val

DNI val
ok

ok
ok

Letra
DNI

Letra
ok

DNI

ok

ok

ok

b)
NIF valido
DNI val
Cadena

Letra
Letra

ok

ok

ok
DNI

Letra

DNI
ok

ok

c)

Error
Obtener NIF

Mostrar
error

Obtener DNI Obtener letra


Validar DNI y
valido valida
letra

Error

Leer Validar formato Leer


Mostrar error Validar letra Mostrar error
DNI DNI Letra

Solución
1. La opción B no realiza una correcta edición por niveles de las 3 validaciones existentes,
mientras la opción A sí.
2. Los módulos “Obtener Dni válido” y “Obtener letra” de la opción A no llaman al módulo de
“Mostrar error”. Esto provoca que la cohesión de estos módulos no sea funcional. Además,
por esa razón, aparecen dos datos “ok” vagabundos. La opción B no tiene estos problemas.
3. La solución sería simplemente añadir el módulo “Mostrar error” a “Obtener Dni válido” y
“Obtener letra” y eliminar los datos “ok” vagabundos. Lo que implica que la c) es la correcta
Pregunta 2 (2.5 ptos)

GestiónPistas
PLAN 93
En la entrevista con el administrativo del club de tenis, nos ha contado lo siguiente:
“… Los socios llaman al club para reservar pistas. Esa reserva prevista puede fallar por
varios motivos: porque el socio la anule, porque se detecte algún problema en la pista
y tenga que ser cerrada para que entre el equipo de mantenimiento o porque,
simplemente, el socio no aparezca. Si el socio no aparece debe pagar el PrecioNoUso
establecido por el club. Si anula con menos de 24 horas de antelación también debe
pagar el PrecioAnulación establecido por el club...”

Añade al diagrama de clases las operaciones que consideres necesarias para soportar
este comportamiento, y dibuja el diagrama de estados correspondiente a la clase
Reserva.

Solución

Vamos a suponer que la clase que maneja los cambios de estado es la clase Club (ya
que la clase reserva no puede hacerlo, puesto que cada cambio de estado supone su
destrucción y nueva creación).

Las operaciones necesarias serían aquellas que sirven para cambiar dicho estado:
Club::anularMant(Reserva r, Fecha f)
Club::anularCliente(Reserva r, Fecha f)
Club::usar(Reserva r)
Club::isNoUsada(Reserva r)

Otra alternativa es que las operaciones usar y anularCliente sean responsabilidad del
socio.

Nota: omitimos todos los constructores y destructores, q obviamente tb serían necesarios.

anularMant()
AnuladaMant
anularCliente()

AnuladaCliente

Prevista
usar()
Usada

después: [noUsada() and fechaReserva<fechaActual]


NoUsada
PLAN 2001

Dado el diagrama de clases y el diagrama de casos de uso adjuntos,


realizad un posible particionado de dominio del sistema y diseñad el
diagrama de paquetes correspondiente. Indicad qué relaciones entre clases
inducen cada una de dependencias detectadas en dicho diagrama.

Administra
ción

Gestión
Reservas
Pistas

Facturación
Las dependencias vienen inducidas por:

Facturación -> Administración: clase Socio


Facturación -> Reservas: clase Reserva
Reservas -> Administración: clase Persona
Reservas -> Gestión Pistas: clases Pista e Intervalo
Gestión Pistas Æ Reservas: clase Reserva

Pregunta 3 (3 puntos)
Responded BREVEMENTE a las siguientes cuestiones:

PLAN 93
1.- (1 punto) ¿Qué diferencias hay entre un diagrama de secuencia y un
diagrama de colaboración?
Tanto diagramas de secuencia como diagramas de colaboración son
diagramas de interacción, cuyo objetivo es mostrar en detalle cómo
interaccionan los objetos de la aplicación para realizar una determinada
tarea. Ambos diagramas muestran casi la misma información. La diferencia
estriba en los aspectos en que cada diagrama pone el énfasis: mientras el
modo de dibujar los diagramas de secuencia dirigen la atención hacia la
secuenciación de llamadas (aspecto temporal), el diagrama de colaboración
la dirige hacia los objetos que están interactuando en la resolución de esa
funcionalidad/caso de uso, y los enlaces que deben existir entre ellos.

Nota: hay información que sólo se puede reflejar en uno de los dos
diagramas. E.g. el tiempo que tarda un mensaje en llegar al receptor, o el
tiempo durante el que permanece activo un objeto como respuesta a un
mensaje es información exclusiva del diagrama de secuencia

2.- (1 punto) ¿Cuáles son los posibles constructores de un diagrama de


actividad?

Los diagramas de actividad describen cómo se coordinan las actividades.


Sus principales elementos son:

Actividades: rectángulos que reflejan estados que se abandonan cuando


se termina la actividad que representan.

Transiciones: flechas que se activan (normalmente) ante la finalización


de la actividad origen de la transición. Pueden tener asociada una
condición de guarda y un conjunto de acciones paralelas que
desencadena la activación de esa transición. Aunque una transición
también puede incluir un evento, esto no es lo habitual.

Barras de sincronización (fork-join): La barra inicial permite definir


actividades que pueden ejecutarse en paralelo. La barra final determina
que hasta que no se terminen todas las actividades que van a parar a ella
no se puede desencadenar la transición subsiguiente.
Diamantes de decisión: muestran ‘ifs’. Las condiciones de guarda
asociadas a cada transición determinan los ‘elses’

Marcadores de inicio/fin de diagrama

Swimlanes: permiten definir qué objeto es el responsable de realizar cada


actividad

Flujos de objetos: permite indicar qué objetos son necesarios/afectados


en cada actividad.

3.- (1 punto) ¿En qué consiste la inversión de autoridad en un diagrama de


estructura?

Existen dos tipos de flags: flags descriptivos y flags de control. Cuando un


flag DE CONTROL va de padre a hijo se dice que hay un acoplamiento por
control (se viola el ppio de encapsulación, ya que el módulo que recibe el
mensaje deja de ser visto como una caja negra). Cuando ese flag no va de
padre a hijo sino de hijo a padre, además de dicho mal acoplamiento se
viola el ppio que dice que son siempre los padres los que organizan el
trabajo de los hijos. A este nuevo problema se le llama inversión de
autoridad.

PLAN 2001
1.- (1,5 puntos) ¿Qué patrones podríais aplicar al Diagrama de Clases de la
Fig. 1? Describe brevemente las ventajas que aportarían al diseño.

a.- Patrón singleton (sobre clase Club)


VENTAJAS
- Proporciona un acceso controlado a la única instancia del objeto, ya
que la clase encapsula el objeto
- El espacio de nombres no se extiende de manera innecesaria con
variables globales

b.- Patrón state (sobre clase Reserva)


La clase reserva tiene ya una jerarquía de herencia definida sobre ella,
pero daos cuenta de cómo esta jerarquía no es flexible: cada vez que un
objeto cambia de estado hay que destruir la instancia de reserva (reflejada
como instancia de la subclase correspondiente al estado anterior) y crear
una nueva reserva como instancia de la subclase correspondiente al nuevo
estado. Por el contrario la jerarquía del patrón state se define sobre una
nueva clase ESTADO. Con esta nueva clase vamos creando/destruyendo
objetos de tipo estado, que asociamos al mismo objeto reserva. De hecho,
los objetos instancia de NoUsada, Usada y Prevista pueden incluso ser
asociados a varios objetos de tipo Reserva, ya que al no tener atributos
propios no van a causar ningún problema. Dicho de manera más genérica,
las principales ventajas del patrón State son:

Ventajas del patrón State:


- El comportamiento está localizado y el comportamiento para los
distintos estados está separado. Eso facilita cualquier mejora del
comportamiento de estado, y particularmente la adición de nuevos
estados.
- Las transiciones de estado se hacen explícitas. El objeto de estado
que está activo en la actualidad indica el estado actual del objeto de
contexto
- Donde un estado no tiene atributos relevantes a un objeto de
contexto específico, se pueden compartir los objetos de estado entre
los objetos de contexto, de manera que cada subestado se convierte
en Singleton!!

2.- (1 punto) ¿Qué tareas fundamentales se llevan a cabo durante el


diseño de sistemas?

• Aspectos Arquitecturales q afectan a todo el sistema


• Identificación de subsistemas y componentes principales:
ARQUITECTURA SW
• Identificación de posibilidades de concurrencia
• Asignación de procesos a procesadores (ARQUITECTURA HW)
• Elección de una estrategia de tratamiento de datos
• Establecimiento de estándares
• Elección de estrategia y estándares para interacción hombre-
máquina
• Especificación de estándares para la codificación
• Diseño del trabajo
• Planificación de aspectos de control de la aplicación
• Producción de planes de testeo
• Establecimiento de prioridades para el establecimiento de
compromisos
• Identificación de requisitos de implementación

3.- (0,5 puntos) ¿Cuáles son las fases principales del USDP?
• Recordemos que una fase en el USDP es Intervalo de tiempo
entre dos hitos importantes del proceso, cuando se cumplen un
conjunto de objetivos bien definidos (milestones), se completan
los artefactos (e.g. Modelos) y se toman las decisiones sobre si
pasar a la siguiente fase.
• El USDP define cuatro fases: inception, elaboration,
construction, transition
• Fase de Inception
• Define ámbito del proyecto
• Desarrolla el modelo de negocio del sistema
• Establece la factibilidad del sistema (puede apoyarse en
prototipos)
• Fase de Elaboración
• Captura los requisitos funcionales/no funcionales del
sistema
• Crea la arquitectura del sistema
• Fase de Construcción
• Donde se construye el producto. Completa el análisis del
sistema, realiza la mayoría del diseño y la
implementación.
• Fase de Transición
• Implantación y mantenimiento del sistema
Examen ISI/DSS Septiembre 2005
Test OCL. Solución.

Instrucciones del test:


Tiempo de realización: 25 minutos
Puntuación: 0.2 puntos por pregunta. 2 preguntas mal restan una bien.
Debéis marcar la mejor respuesta (sólo una)

Vuelo
i d_vuelo : Integ er Avion
tipo_vuelo : String +avion tipo_avion : String
clase : Integ er capacidad_pasajeros : Integer
edad_permitida_pilotos : Integer 1

+pilotos
+pertenece_a
1 1..*
Compañia
Tripulante
nom bre : String +asis tent es_del_vuelo n ombre : String
1..*
edad : Integer
e s_med ico : Bo olea n

Coorporacion_de_Lineas
nombre_corporacion : String
cantidad_de_lineas_aereas : Integer

context Vuelo
inv: self.tipo_vuelo = ‘trasatlantico’ implies (self.pilotos-> size() = 3 and self.avion.tipo_avion =
‘boing’)
and self.avion.capacidad_pasajeros >= 70
and self.pilotos ->forAll (h | h.edad >= self.edad_permitida_pilotos)

1. ¿A cuántas clases (distintas) se ha navegado a partir de la expresión? Indique el número y el nombre de


esas clases a las cuales se ha navegado:
a) 1 clase: Vuelo
b) 2 clases: Tripulantes, Avion
c) 1 clase: Avión.
2. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) Si el tipo de avión es boing y la cantidad de pilotos del vuelo es igual a 3, el tipo de vuelo es
trasatlántico.
b) Los aviones de tipo boing tienen 3 pilotos y hacen vuelos trasatlánticos.
c) Si el tipo de vuelo es trasatlántico, el tipo de avión es boing y los pilotos del vuelo deben ser 3.

3. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) La capacidad de pasajeros del vuelo debe ser siempre superior (o igual) a 70 pasajeros.
b) La capacidad de pasajeros del avión de todo vuelo trasatlántico, es igual a 70 (o superior) pasajeros
c) La capacidad de pasajeros del avión de un vuelo es igual a 70 (o superior) pasajeros.

4. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) Los pilotos de un vuelo deben ser mayores de edad.
b) La edad de los pilotos de un vuelo no debe ser inferior a la edad permitida para pilotos para ese
vuelo.
c) Los pilotos de un vuelo deben tener una edad mayor que la antigüedad mínima del vuelo.

5. Se requiere rescribir la expresión OCL de tal forma que sean válidos los siguientes requerimientos:
- La capacidad de pasajeros del avión de todo vuelo debe ser inferior a 450 pasajeros.
- Si el tipo de vuelo es ‘cabotaje’ entonces la cantidad de ‘asistentes del vuelo’ debe ser menor a 5 y el
tipo de avión no debe ser ‘boing’.
- Una de las personas del conjunto de ‘asistentes del vuelo’ es médico.
¿Cuál de las siguientes es válida?

a) context Vuelo
inv: self.tipo_vuelo = ‘cabotaje’ implies (self.asistentes_del_vuelo-> size() < 5 and
self.avion.tipo_avion <> ‘boing’)
and self.avion.capacidad_pasajeros < 450
and self.asistentes_del_vuelo ->exists (es_medico)

b) context Vuelo
inv: self.tipo_vuelo = ‘cabotaje’ implies (self.piloto-> size() < 5 and self.avion.tipo_avion <>
‘boing’)
and self.avion.capacidad_pasajeros-> size() < 450
and self.asistentes_del_vuelo ->exists (es_medico)

b) context Vuelo
inv: self.tipo_vuelo = ‘cabotaje’ implies (self.asistentes_del_vuelo-> size() < 5 and
self.avion.tipo_avion <> ‘boing’)
and self.avion.capacidad_pasajeros < 450
and self.asistentes_del_vuelo = es_medico
Banco
nombre_banco : String

+banco
1

TarjetaTitular
id_tarjeta : Integer TarjetaExtension
l im ite_m ax_ perm iti do : Real +extensiones limite_permitido : Real
limite_min_permitido : Real nom bre_im preso : String
tien e_extensiones : Boolean 0. .*

1..*
+resumenes

ResumenMensual
id_res umen : Integer
total_m ensual : Real +titular
importe_minimo_a_pagar : Real 1
1 +poseedor
+garantia
Persona
nombre : String
tipo_seguro_de_vida : Integer

context TarjetaTitular inv:


((self.banco.nombre_banco = ‘Galicia’ and self.tiene_extensiones = true)
implies (self.extensiones->size() < 6) )
and self.titular.tipo_seguro_de_vida >= 3
and self.resumenes ->forAll(a | a.total_mensual <= self.limite_max_permitido )

6.¿A cuántas clases (distintas) se ha navegado a partir de la expresión? Indique el número y el nombre de
esas clases a las cuales se ha navegado:
a) Se navego a 4 clases distintas: Banco, TarjetaExtensión, Persona, ResumenMensual
b) Se navego a 4 clases distintas: Banco, TarjetaTitular,, TarjetaExtensión, Perosna
c) Se navego a 3 clases distintas: Banco, TarjetaTitular,, TarjetaExtensión

7. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) Si la tarjeta de crédito del titular tiene menos de 6 extensiones, la tarjeta pertenece al banco Galicia.
b) Si la tarjeta de crédito del titular tiene extensiones y pertenece al banco Galicia, entonces la cantidad de
extensiones no es superior a 5
c) El banco Galicia permite hasta 6 extensiones de una tarjeta de crédito del titular.

8. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) El tipo de seguro de vida es igual a 3 o superior.
b) El titular de toda tarjeta de crédito titular tiene un tipo de seguro de vida igual a 3 o inferior.
c) El titular de una tarjeta de crédito titular tiene un tipo de seguro de vida superior a 2.
9. Alguna parte de la expresión OCL enunciada anteriormente significa alguna de las siguientes expresiones
escritas en Lenguaje Natural. ¿Cuál de las siguientes opciones es verdadera?
a) Todos los resúmenes de todas las tarjetas de crédito titulares tienen un importe total que no supera el
limite máximo.
b) Todos los resúmenes de una tarjeta de crédito titular tienen un importe total que no supera el limite
máximo permitido para esa tarjeta.
c) Todos los resúmenes de una tarjeta de crédito titular tienen un importe total que es inferior estrictamente
al límite máximo permitido para la tarjeta.

10. Se requiere rescribir la expresión OCL de tal forma que sean válidos los siguientes requerimientos:
- Si la tarjeta pertenece al banco galicia y no tiene extensiones, entonces la cantidad de extensiones es
cero.
- El tipo de seguro de vida de la persona garantía de una tarjeta titular, es superior a 3.
- Todos los resúmenes de una tarjeta de crédito tienen un ‘importe mínimo a pagar’ que es igual a la
mitad de su importe total.

Seleccione cuál cree que sería la reescritura más correcta:

a) context TarjetaTitular
inv: ((self.banco.nombre_banco = ‘Galicia’ and self.tiene_extensiones = false)
implies (self.extensiones->isEmpty()) )
and self.garantia.tipo_seguro_de_vida-> size()>3
and self.resumenes ->forAll(a | a.importe_minimo_a_pagar = (a.total_mensual /2) )

b) context TarjetaTitular
inv: ((self.banco.nombre_banco = ‘Galicia’ and self.tiene_extensiones = false)
implies (self.extensiones->isEmpty()) )
and self.garantia.tipo_seguro_de_vida > 3
and self.resumenes ->forAll(a | a.importe_minimo_a_pagar = (a.total_mensual /2) )

c) context TarjetaTitular
inv: ((self.banco.nombre_banco = ‘Galicia’ and self.tiene_extensiones = false)
implies (self.extensiones->isEmpty()) )
and self.garantia.tipo_seguro_de_vida -> size()>3
and self.resumenes ->set (a | a.importe_minimo_a_pagar = (a.total_mensual /2) )

También podría gustarte