Ejemplo de Análisis Orientado a Objetos

Requisitos

Explican lo que se desea que haga el sistema, ya sea en lenguaje natural, o en forma de casos de uso a la Jacobson.

Ejemplo:

Se desea diseñar el software necesario para una red bancaria provista de cajeros automáticos (ATM, automatic teller machines), que serán compartidos por un consorcio de bancos. Cada banco dispone de su propio ordenador, provisto de software propio, que lleva la información sobre sus cuentas y procesa las transacciones que actúan sobre dichas cuentas. A este ordenador están conectadas las estaciones de cajero, que son propiedad del banco y en las que operan cajeros humanos, que pueden crear cuentas e introducir transacciones sobre ellas.

Los cajeros automáticos aceptan tarjetas de crédito, interaccionan con el usuario, se comunican con un ordenador central para llevar a cabo las transacciones, entregan dinero en efectivo al usuario e imprimen recibos. El sistema llevará correctamente el registro de las transacciones efectuadas, cumplirá características aceptables de seguridad y manejará correctamente accesos concurrentes a la misma cuenta.

El coste de desarrollo de la parte compartida del sistema se dividirá entre los bancos que forman parte del consorcio en función del número de clientes provistos de tarjetas de crédito.

Expresar los requisitos como Casos de Uso

Preparar escenarios detallados. Primero los normales. Después se añaden los problemas que pueden surgir. En el ejemplo de los cajeros automáticos:

Modelo de objetos

Consta de los siguientes pasos:

Identificar objetos y clases

Consta de los siguientes pasos:

Resultado: Preparar diccionario de clases

En el ejemplo de los cajeros automáticos:

Resultado. Del análisis anterior, resultan seleccionadas las siguientes clases (11):

Cajero automático, Consorcio de bancos, Banco, Ordenador del banco, Cuenta bancaria, Transacción, Estaciones de cajero, Cajero humano, Tarjeta de crédito, Ordenador central, Cliente.

El diccionario de clases contiene la definición detallada de todas estas clases en lenguaje natural. Ejemplo:

Identificar y depurar relaciones

Consta de los siguientes pasos:

En el ejemplo de los cajeros automáticos:

Identificar atributos de objetos y relaciones

Consta de los siguientes pasos:

En el ejemplo de los cajeros automáticos:

Añadir herencia

Introducimos clases nuevas (virtuales) que contienen información común a dos o más clases preexistentes. Procurar evitar la herencia múltiple, a menos que sea estrictamente necesaria.

Resultado: Primer diagrama de clases

En el ejemplo de los cajeros automáticos:

Comprobar los casos de uso (iterar)

Para localizar fallos que deben corregirse fijarse en:

En el ejemplo de los cajeros automáticos:

Modularizar

Agrupar clases en módulos.

En el ejemplo de los cajeros automáticos. Posibles módulos:

Añadir y simplificar métodos

Modelo dinámico

Consta de los siguientes pasos:

Identificar sucesos

Los sucesos se extraen de los casos de uso (escenarios). Pueden ser de los siguientes tipos:

Resultados: Diagramas de secuencia (trazas de eventos) y diagramas de colaboración (diagramas de flujo de eventos).

Los casos de uso (escenarios) se convierten en diagramas de secuencia. Estas se compactan en diagramas de colaboración.

En el ejemplo de los cajeros automáticos:

El cliente introduce la contraseña define un evento de entrada que el objeto Cliente envía al objeto Cajero automático. El cajero automático entrega el dinero al cliente es un evento que el objeto Cajero automático envía al objeto Cliente.

Agrupar los eventos equivalentes: El cliente introduce la contraseña es el mismo evento independientemente de la contraseña introducida. El cajero automático entrega el dinero al cliente es el mismo evento independientemente de la cantidad entregada.

No agrupar los eventos no equivalentes: El banco autoriza la transacción es distinto evento que El banco rechaza la transacción.

Construir diagramas de estados

Uno por clase.

En el ejemplo de los cajeros automáticos centrarse en las clases dinámicas, que cambian de estado:

No hace falta construir diagramas de estado de las clases pasivas, que no cambian de estado de modo significativo:

Tampoco hace falta considerar a fondo los objetos externos, que no forman parte del sistema informático:

Añadir métodos

Los eventos son métodos. Es preciso decidir de qué clase de objetos.

Las acciones y actividades realizadas en los estados son métodos.

Modelo funcional

Consta de los siguientes pasos:

Identificar valores de entrada/salida

Son los que pasan información desde los objetos externos al sistema de software propiamente dicho.

En el ejemplo de los cajeros automáticos son objetos externos:

Los valores de entrada/salida serán:

Construir diagramas de flujo de actividad

Relacionan los valores de entrada con los de salida. Suele dividirse en varias capas o niveles.

En el ejemplo de los cajeros automáticos:

Describir funciones

Descripción de cada una de las funciones de nivel mínimo que aparecen en los diagramas de flujo de actividad. La descripción puede ser:

En el ejemplo de los cajeros automáticos:

Descripción de la función "actualizar cuenta":

  actualizar cuenta (cuenta, cantidad, tipo de transacción)
  -> efectivo, recibo, mensaje
    Si es una retirada de efectivo:
      Si la cantidad a retirar excede el saldo,
        rechazar la transacción y no entregar dinero
      En caso contrario:
        Restar la cantidad del saldo y entregar dinero
    Si es un depósito:
      Aumentar el saldo de la cuenta y no entragar dinero
    Si es una petición de información:
      Escribir saldo y no entregar dinero
    En cualquier caso:
      El recibo incluye:
        - número del cajero automático
        - fecha y hora
        - número de la cuenta
        - tipo de transacción
        - cantidad movida
        - nuevo saldo

Identificar restricciones y dependencias funcionales entre objetos

En el ejemplo de los cajeros automáticos:

Definir criterios de optimización (iterar)

En el ejemplo de los cajeros automáticos:

Añadir métodos

Las funciones del modelo funcional pueden ser simples transferencias de información, o corresponder a un método de algún objeto (operaciones interesantes). En este caso hay que asignarlos y añadirlos al modelo de objetos.

En el ejemplo de los cajeros automáticos, son interesantes:

Se añadirán otros métodos, no relacionados con ninguna de las cuestiones anteriores, procedentes de nuestro conocimiento del tema: