Examen_Supuestos_Resuelto

Anuncio
Departamento de Informática y Automática
INGENIERÍA DEL SOFTWARE
PARTE II: CONCEPTOS TEÓRICOS Y PRÁCTICOS
DNI _____________
Apellidos y nombre ______________________________ ________________
1. Responde a las siguientes cuestiones (2 puntos):
a) Cita y comenta brevemente los grados de acoplamiento. Clasifícalos y ordénalos en orden
creciente al nivel de acoplamiento asociado.
1. Normal (nivel bajo): Dos módulos A y B están normalmente acoplados sí: un módulo
A llama a otro B, y B retorna el control a A.
2. De datos (nivel bajo): Lo módulos se comunican mediante el paso de parámetros
(unidad elemental de datos).
3. Por estampado (nivel bajo): Dos módulos están acoplados por estampado si ambos
hacen referencia a la misma estructura (no global). Normalmente se pasa como
parámetro y sólo se usan parte de los elementos de la misma.
4. De control (nivel débil/moderado): Paso de parámetros de control entre módulos.
Influencia de un módulo en la ejecución del otro.
5. Externo (nivel débil/moderado): Los módulos están ligados a un entorno externo al
software (p. ej.: dispositivos de entrada/salida).
6. Común (nivel alto): Los módulos acceden a datos en un área de datos global. Se
violan los principios básicos de encapsulamiento y modularidad.
7. De contenido (nivel alto-inceptable): Un módulo hace uso de datos o información de
control mantenidos dentro de los límites de otro módulo.
b) Cita y comenta brevemente uno de los patrones de creación de Gang of Four del temario.
Representa gráficamente la solución aplicada a un escenario particular.
1. Nombre: Fábrica abstracta (abstract factory) también conocido como Kit.
2. Contexto: Proporciona una interfaz para crear familias de objetos relacionados o que
dependen entre sí, sin especificar sus clases concretas.
3. Aplicabilidad:
o Un sistema debe ser independiente de cómo se creen, se compongan y se
representen sus objetos.
o Un sistema debe ser configurado con un producto de múltiples familias de
productos
o Una serie de productos relacionados están diseñados para usarse
conjuntamente, queriéndose reforzar esta característica
o Se quiere distribuir una biblioteca de clases que implementa un determinado
producto, queriéndose revelar sólo sus interfaces, no sus implementaciones
4. Solución:
<<estereotipo>>
CLIENTE
<<estereotipo>>
FactoríaAbstracta
{abstracta}
<<estereotipo>>
ProductoAbstracto
{abstracta}
+CrearProducto():ProductoAbstracto{abstracto}
<<estereotipo>>
FactoríaConcreta
<<estereotipo>>
Producto
+CrearProducto():ProductoAbstracto
#Producto()
5. Ventajas:
o Aísla los clientes de las implementaciones, ya que sólo usan la interfaz
o Las dependencias se aíslan en las fabricas concretas
o Facilita el cambio de familias de productos, ya que la clase de familia
concreta sólo aparece una vez y es fácil cambiarla
o Favorece la consistencia entre productos, ya que favorece que sólo se use una
familia de productos a la vez
6. Inconvenientes:
o El soporte de nuevos productos se complica porque afecta a la interfaz de la
fábrica abstracta y por consiguiente de todas sus subclases
~2~
2. Realizar un diagrama de clases que contenga las clases conceptuales necesarias para
soportar el siguiente escenario. Las clases incluirán los atributos que se consideren necesarios
y las relaciones estarán lo suficientemente adornadas para garantizar una comprensión del
modelo lo más satisfactoria posible (6 puntos)
Una empresa decide informatizar su nómina. Del resultado del análisis realizado, se obtienen las
siguientes informaciones:
A cada empleado se le entregan múltiples justificantes de nómina a lo largo de su vida
laboral en la empresa y al menos uno mensualmente.
A cada empleado se le asigna un número de matrícula en el momento de su incorporación a
la empresa, y éste es el número usado a efectos internos de identificación. Además, se
registran el NIF del empleado, nombre, número de hijos, porcentaje de retención para
Hacienda, datos de cuenta corriente en la que se le ingresa el dinero (entidad bancaria,
sucursal y número de cuenta) y departamentos en los que trabaja.
Un empleado puede trabajar en varios departamentos y en cada uno de ellos trabajará con
una función (que puede ser distinta).
De un departamento se mantiene el nombre y cada una de sus posibles sedes.
Son datos propios de un justificante de nómina el ingreso total percibido por el empleado y
el descuento total aplicado. La distinción entre dos justificantes de nómina se hará, además
de mediante el número de matrícula del empleado, mediante el ejerció fiscal y número de
mes al que pertenece y con un número de orden en el caso de varios justificantes de nómina
recibidos el mismo mes.
Cada justificante de nómina consta de varias líneas (al menos una de ingresos) y cada línea
se identifica por un número de línea del correspondiente justificante. Una línea puede
corresponder a un ingreso o a un descuento. En ambos casos, se recoge la cantidad que
corresponde a la línea (en positivo si se trata de un ingreso o en negativo si se trata de un
descuento); en el caso de los descuentos, se recoge la base sobre la cual se aplica y el
porcentaje que se aplica para el cálculo de éstos.
Toda línea de ingreso de un justificante de nómina responde a un único concepto retributivo.
En un mismo justificante, puede haber varias líneas que respondan al mismo concepto
retributivo. De los conceptos retributivos se mantiene un código y una descripción.
De cara a la contabilidad de la empresa, cada línea de un justificante de nómina se imputa al
menos a un elemento de coste. Al mismo elemento de coste pueden imputársele varias
líneas. Para cada elemento de coste, se recoge un código, una descripción y un saldo.
Entre los elementos de coste se establece una jerarquía, en el sentido de que un elemento de
coste puede contener a otros elementos de coste, pero un elemento de coste sólo puede estar
contenido en, a lo sumo, otro elemento de coste.
~3~
~4~
3. Representa por medio de un diagrama de secuencia la comunicación que se produce entre
los objetos que intervienen en un proceso típico de autentificación de un usuario en un sistema
informático cualquiera teniendo en cuenta el uso del patrón DAO para el acceso a los datos y
sabiendo además que el almacenamiento subyacente no va a cambiar (2 puntos).
Dado que el almacenamiento subyacente no va a cambiar no es necesario la implementación de una
Factoría para los DAO. Por esta razón nos limitarnos exclusivamente a la utilización de un simple
patrón DAO.
ControlSession: Objeto controlador (de la sesión de usuario) que recibe la orden de cambio
de password. Este objeto manda el mensaje 1: changePassword(newPassword) al objeto de
negocio (UsuarioBO) encargado de la gestión de usuarios. Este objeto retornará el control al
Controlador una vez haya finalizado.
UsuarioBO: Objeto de negocio encargado del tratamiento con usuarios. Primero crear el
correspondiente DAO y a continuación obtiene los datos completos del perfil de usuario por
medio del mensaje 4: getUserByLogin(loginID), para garantizar entre otras cosas la
existencia del mismo y para contrastar la contraseña actual (que en este caso hemos saltado).
UsuarioDAO: Objeto para el acceso a los datos de Usuarios. Obtiene los datos de la fuente,
5: getData(), y a continuación los guarda en el objeto valor UsuarioVO (previa creación del
mismo, 7: <<create>>).
UsuarioVO: Objeto Valor o Data Transfer Object utilizado para el intercambio o transporte
de datos de Usuarios entre capas de la aplicación. Se utiliza tanto para recuperar los datos de
la fuente hacia UsuarioBO como para almacenar los datos desde el DAO correspondiente,
pasos 13 y 15.
DataSource: Implementación del Origen o Fuente de Datos.
Una mejora que no supone excesivo trabajo y permite un menor acoplamiento entre la lógica de
negocio (Objetos BO) y el acceso a datos es utilizar una Factoría DAO, por ejemplo a través de un
Abstract Factory y con Factory Method como método para la instanciación tanto de la factoría
concreta como de los correspondientes DAO. De igual forma, tanto la estrategia que proporciona el
objeto factoría abstracta como la concreta suelen llevar implícito un patrón Singleton que garantiza
una instancia única.
~5~
~6~
Descargar