PEC Disenio 19 20 Soluciones
PEC Disenio 19 20 Soluciones
PEC Disenio 19 20 Soluciones
Con esta red de sensores, el sistema HidroGest monitoriza las medidas recibidas
durante una ventana temporal (tanto la frecuencia de muestreo como la amplitud de la
ventana son configurables) mediante un conjunto de Reglas de supervisión y con la
colaboración de un motor de razonamiento o Sistema Experto externo. Al final de
cada día se almacena, de forma persistente, la última medida recogida, durante ese
día, en cada Presa.
Página 2 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 3 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
1. (0’5 puntos) Represente, en un diagrama UML de casos de uso, los casos de uso
primarios más importantes, sus actores principales y de apoyo y las interacciones
correspondientes, para la aplicación HidroGest.
Notas:
Los Casos de Uso no son orientados a objetos. En la construcción
progresiva del Modelo de Casos de Uso inicialmente se utilizan elementos
que no son software (ni código, ni clases ni sus relaciones), sino que se
refieren a cómo se usa la aplicación y qué información se necesita para ello.
No es hasta la implementación del funcionamiento de cada caso de uso (en
el diseño, en la pregunta 4.1 y siguientes), cuando aparecerán las clases y
cómo colaboran sus instancias para describir ese funcionamiento.
En este diagrama, la aplicación HidroGest delimita la principal
funcionalidad que contiene (sus casos de uso primarios). Fuera de ella, se
representan los actores primarios, su interacción (mediante la que los
actores manejan determinados casos de uso) y los actores de apoyo que,
mediante su interacción correspondiente, necesita cada caso de uso para
cumplir con su funcionalidad.
Página 4 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Solución propuesta:
Consiste en agregar toda la información necesaria relativa a una presa nueva: nombre,
capacidad, cuenca a la que pertenece y sensor asociado que realiza las medidas.
Página 5 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Nótese que cada Presa tiene asociado un Sensor (o grupo de ellos) que provea
sus medidas. Se considera, por tanto, que el alta de una Presa requiere el alta del
Sensor correspondiente (por conveniencia, en otro caso, podría no ser así); cuya
información es: fabricante, marca, modelo, características de funcionamiento y
medida, estado y número de serie.
No escriba un encabezamiento demasiado elaborado del caso de uso (es decir, omita
propósito, resumen, antecedentes...); en su lugar, afronte directamente el transcurso
típico de los acontecimientos.
Notas aclaratorias:
Recuerde que la escritura del caso de uso es un relato de la secuencia
ordenada de ‘lo que hace el actor’ y ‘la respuesta que obtiene’ (la que ve él
y, como mucho, algún hito importante en el cumplimiento de su objetivo de
uso) al utilizar la aplicación.
Tenga en cuenta que el actor, aunque tenga la voluntad de conseguir su
objetivo, no va a realizar ninguna acción a no ser que el sistema la presente
como la única alternativa para conseguir ese objetivo. Por tanto, es el
sistema (sin voluntad, pero con una programación determinista en su
comportamiento) el que guía las acciones del actor.
En el relato de esta secuencia, olvídese de lo que hace la IU, la capa del
negocio, los actores de apoyo externos o su repercusión en ellos. Considere
lo que no es el actor principal como una caja negra y limítese a describir la
secuencia de lo que pasa entre él y dicha caja negra.
Solución propuesta:
Caso de uso: AgregarNuevaPresa
Página 6 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
(Opcional)
8. El sistema ofrece la posibilidad de
asignar un sensor a la nueva presa y, si
no existe, su creación (otros 2 casos de
uso).
9. El usuario acepta realizar un nuevo 10. El sistema solicita los datos que
registro, esta vez, de un nuevo sensor. caracterizan el nuevo sensor
(fabricante, marca, modelo,
características de funcionamiento y
medida, estado y número de serie).
11. El usuario aporta los datos solicitados. 12. El sistema muestra un resumen de los
datos del nuevo sensor, incluyendo su
identificador, que señala su registro
persistente.
13. El usuario confirma los datos registrados. (Opcional, por simetría con la presa.
Ficticio)
14. El sistema solicita que se indique a qué
presa se asigna el nuevo sensor.
(Ficticio. La presa es la recién creada) (Ficticio. El sensor ya se ha asignado a la
presa recién creada)
15. El usuario selecciona una presa existente.
16. El sistema muestra el nombre de la
presa a la que se ha asignado el sensor.
(Ficticio. El sensor ya se ha asignado a la presa
recién creada)
17. El usuario acepta los datos de la
asignación.
Notas aclaratorias:
La descripción y el contenido del caso de uso son muy artificiales. Tras
reflexionar sobre sus necesidades procedimentales, se podrían identificar 3
usos que, para el manejo general del caso de uso primario CRUD de la
aplicación, deberían ser independientes y cuyos límites están marcados con
una línea en el paso correspondiente:
• Alta de una presa. Incluye su asignación a una cuenca. Pasos 1 a 7.
• Alta de un sensor. Pasos 9 a 13.
• Asignación de un sensor a una presa. Pasos 14 a 17. En este caso,
esta operación está implícita en las otras 2.
Alternativas
Página 7 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
8 Tal como se describe la marcha del caso de uso, este paso está implícito por lo que debería considerarse
como un flujo alternativo.
14 a 17 Lo mismo ocurre con los pasos 14) a 17), que no tienen razón de ser según se enuncia el caso de
uso de trabajo.
Notas aclaratorias:
La escritura del caso de uso es el primer paso para diseñar su
funcionamiento mediante el código. Su objetivo es obtener una secuencia
de operaciones, o acciones, visibles entre el actor y el sistema. Sin embargo,
dicho objetivo está supeditado a un horizonte final que consiste en que el
código funcione como se pide en la descripción y, además, sea
funcionalmente independiente.
Es decir, la escritura del caso de uso es un elemento constructivo inicial del
diseño y su utilidad está en hacernos reflexionar y comprender los requisitos
funcionales del caso de uso.
Con ese análisis, y el objetivo final de la independencia funcional, se
identifican 3 operaciones que claramente deberían diferenciarse e
independizarse, en aras de la coherencia en el funcionamiento del caso de
uso primario (CRUD) y de la aplicación en general, porque:
• Dada la significación y los datos que contienen las entidades que se
están manejando (objetos conceptuales), no es lo mismo crear una
presa que crear una región o que crear un sensor.
• Ya que hay distintas entidades implicadas en el caso de uso de
trabajo, la vinculación entre ellas también está diferenciada y afecta
al funcionamiento: en el caso de una presa, está implícita la necesidad
de que esté vinculada a una cuenca determinada; mientras que, en el
caso de un sensor, la vinculación a una presa es opcional.
Por tanto, la conclusión de que hay 3 operaciones diferenciadas en la
descripción del caso de uso y de la conveniencia de independizarlas entre
sí, nos lleva a plantearlo así desde el principio, es decir, como operaciones
independientes en la escritura del caso de uso. Si se elabora la secuencia
de acciones mediante una interpretación literal de la descripción del caso de
uso, y se elabora el diseño basándose en ello, es prácticamente imposible
obtener la independencia funcional y la flexibilidad que se están buscando
o, para remediarlo, requeriría una reingeniería y refactorización muy
costosas.
Éste es el motivo por el que se ha planteado el flujo principal del caso de
uso como una secuencia de 3 subfunciones independientes. Así el
comportamiento pedido se puede obtener, con facilidad, mediante la labor
de un controlador que dirija el flujo de trabajo enlazando adecuadamente
las 3 subfunciones.
Página 8 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 9 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
a. Que reflejen con fidelidad las relaciones que existen entre los
datos, pero sólo aquellas que se necesiten para el
funcionamiento del caso de uso. Esto es importante. Hay casos
en los que existe una gran variedad de categorías en los datos
que se manejan y, sin embargo, esas diferencias son
irrelevantes para el funcionamiento del caso de uso. En esas
situaciones, es mejor utilizar una colección de elementos única,
lineal.
b. Es fundamental que esas estructuras sean independientes, que
estén desacopladas.
Con esas condiciones, la estructura propuesta, tanto para las
operaciones CRUD como para las consultas, es esta:
Página 10 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 11 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 12 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Solución propuesta:
Página 13 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Notas aclaratorias:
Siguiendo las conclusiones del análisis, se va a implementar el
funcionamiento de 3 operaciones independientes:
• Creación de una presa nueva. Incluye su asignación a una cuenca
existente.
• Creación de un sensor nuevo.
• Asignación de un sensor a una presa.
Con esta premisa, el diseño obtenido es totalmente compatible con el
comportamiento pedido para el caso de uso ya que, al haberlo construido
evitando el acoplamiento (tanto en los datos como en las funciones) y con
esa independencia funcional, cada bloque se puede concatenar con el otro
sin más modificación que la del gobierno adecuado del controlador al invocar
las funciones que los componen.
• Nótese que hay un gran número de procedimientos o maniobras, que
se repiten constantemente (búsqueda de un elemento, añadirlo a una
lista o a una colección, etc.). Su repetición también persiste en todos
los ejercicios y exámenes, por lo que se recomienda
encarecidamente que se entiendan y se aprendan: son los
elementos constructivos de todos los diseños.
• A excepción de la asignación a una cuenca, el esquema de los
procedimientos en la operación de AltaSensor tiene una acusada
simetría con el de AltaPresa.
• Es importante darse cuenta de que, entre AltaPresa y el elemento del
catálogo correspondiente, se produce una asociación; pero no porque
el controlador RegistroVentas inyecte, en LíneaDeVenta, el
elemento EspecificaciónDelProducto encontrado, como en la
Venta de PdV, sino que (en el sentido contrario) son los datos que
aporta el actor (AltaPresa) los que el controlador inyecta en el
catálogo para que éste pueda realizar su labor. Esa asociación entre
AltaPresa y EspecPresa ya se había representado en el modelo de
dominio. Pero el hallazgo del diseño está en la asociación entre el
controlador, GestorAltas, y ese elemento EspecPresa. El
acoplamiento es tolerable porque se limita a un elemento
EspecPresa y queda restringido al controlador GestorAltas (no
tiene propagación u otra repercusión en otros objetos).
• Así mismo, el aislamiento de la aplicación, respecto a los datos y otros
sistemas externos, la preserva de tener que ocuparse de manipularlos
directamente, de gestionar la organización o mantener la consistencia
de esos datos. Por la misma razón, también está incapacitada para
crear, ahí, elementos persistentes por sí sola y asignarles un
identificador que los distinga de los demás. De eso se ocupa el sistema
externo, que gestiona el almacenamiento de esos datos e interactúa
con la aplicación a través de su fachada (del lado del sistema externo)
y del adaptador del correspondiente subsistema de persistencia (en la
capa de acceso a los datos, del lado de la aplicación).
Página 14 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 15 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 16 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 17 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
4.2. (1 punto) A partir de este DS, escriba y desarrolle los contratos de las operaciones
‘AltaPresa’ y ‘AltaSensor’. Recuerde que es imprescindible utilizar una sintaxis
específica en estas descripciones.
Solución propuesta:
Contrato CO1: altaPresa
Operación: altaPresa(), que incluye:
asignarPrACu(cuencaID), introducirPr(nomPresa, capacidad) y
confirmarAltaPr().
Referencias cruzadas: Caso de Uso: AgregarNuevaPresa.
Precondiciones: ̶ Hay una sesión activa, en la que se ha llegado a la opción CRUD para el
‘Alta’ de una presa en la colección cPrs, de CatDePresas. Para ello, hay
una instancia de GestorAltas, altasMng.
̶ Hay una instancia del catálogo CatDeCuencas, cCuens, inicializada y
asociada a altasMng, de tipo GestorAltas.
̶ Hay una colección HashMap (multiobjeto) de EspecCuenca, especsCu,
asociada al catálogo cCuens de CatDeCuencas.
̶ Hay una instancia del catálogo CatDePresas, cPrs, inicializada y asociada a
altasMng, de tipo GestorAltas.
̶ Hay una colección HashMap (multiobjeto) de EspecPresa, especsPr,
asociada al catálogo cPrs de CatDePresas.
̶ Hay una instancia del adaptador AdaptadorBD-RecuH,
servicioObtenciónPr, inicializada y asociada al catálogo cPrs.
Postcondiciones: ̶ Asociada a altasMng, se ha creado una instancia de la clase EspecCuenca,
especCu, e inicializado con los valores del elemento encontrado en el
HashMap del catálogo cCuens, especsCu, en virtud del valor cuencaID,
de Cuenca, aportado por el actor.
̶ Asociada a altasMng, se ha creado una instancia ArrayList (multiobjeto),
presasCca, e inicializado con los elementos del atributo presasCu,
también ArrayList, de la instancia especCu, cuya clase es EspecCuenca.
̶ Se ha creado la instancia especNewPr, de EspecPresa, e inicializado
parcialmente con los valores aportados por el actor. Dicha instancia se ha
asociado a altasMng, de GestorAltas.
̶ especNewPr, de EspecPr, se ha asociado al catálogo cPrs.
̶ especNewPr, de EspecPr, se ha asociado a servicioObtenciónPr, de
AdaptadorBD-RecuH.
̶ Asociada a servicioObtenciónPr, de AdaptadorBD-RecuH, se ha
creado la instancia especPr, de clase EspecPresa, e inicializado
completamente con los valores de especNewPr, de EspecPresa, junto con los
obtenidos de la base de datos. El contenido de especPr ha quedado
almacenado de manera persistente.
̶ La instancia especPr, de EspecPresa, se ha asociado al catálogo cPrs, de
CatDePresas.
̶ Se ha agregado la instancia especPr, de clase EspecPresa, al HashMap
especsPr (multiobjeto), componente del catálogo CatDePresas, cPrs.
̶ La instancia del catálogo cPrs, especPr, de EspecPresa, se ha asociado a
altasMng, de GestorAltas.
̶ Se ha creado la instancia presaID, de Presa, inicializada con el valor del
atributo presaID, de clase Presa, de la instancia EspecPresa, especPr. La
nueva instancia presaID ha quedado asociada a altasMng, de
GestorAltas.
̶ Se ha agregado la instancia presaID al ArrayList de Presa (multiobjeto)
presasCca.
Página 18 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 19 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 20 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 21 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Página 22 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
7. (1 punto) Elabore un diagrama de clases para el caso de uso que se está tratando
<<AgregarNuevaPresa>> (DCD), centrado en la clase que va a implementar la
responsabilidad más característica del caso de uso, la que mejor defina la naturaleza
de lo que se hace en él (Alta). Represente los nombres de todos los atributos,
asociaciones (con la navegabilidad) y métodos de esa clase (excepto ‘setters’ y
‘getters’ irrelevantes) y de las que estén directamente involucradas con ella en el caso
de uso.
Solución propuesta:
Página 23 de 24
SOLUCIONES PRUEBA DE EVALUACIÓN CONTINUA 2020
Notas aclaratorias:
• En el DCD sólo se representan las clases software que intervienen
significativamente en el funcionamiento del caso de uso. Dicho
funcionamiento consiste en crear 2 elementos pertenecientes al
modelo de datos, por lo que se ha decidido que esas tareas se realicen
en el controlador del caso de uso y en los objetos que manejan las
colecciones en el modelo de datos. Por este motivo, las clases
AltaPresa, AltaSensor y AsignacionSenAPr no tienen relevancia
funcional, al limitarse a recoger los datos que aporta el actor, y no
aparecen en este diagrama. De igual forma, tampoco se representa
la interacción entre estos objetos software y los actores externos
(entre ellos, el actor principal del caso de uso).
• Además de gran parte de los objetos software del modelo de dominio,
en este diagrama sí se incluyen todas las clases puramente software
que posibilitan el funcionamiento diseñado. Precisamente por la
premisa de restringir el funcionamiento del caso de uso al dominio del
negocio, y a mantenerlo desacoplado de cualquier manipulación de
los elementos externos, se hace imprescindible utilizar un mecanismo,
como el de los adaptadores (AdaptadorBD-RecuH), para
implementarlo.
• Otra de las diferencias con otros diagramas (como el modelo de
dominio) es que aquí se incluyen las asociaciones obtenidas en la
elaboración del diseño dinámico del funcionamiento (pregunta 4, 5 y
6). Esas asociaciones se han dibujado con una línea punteada en rojo
en el diagrama, y significan un acoplamiento adicional a las que
representan las relaciones de inclusión o de composición del diagrama
del modelo de dominio.
Página 24 de 24