2009-08-02 12 views
5

Digamos que desea crear un modelo de cuenta bancaria en su aplicación. Puede crear una Cuenta bancaria de clase que haga lo que hace una cuenta bancaria típica. Pero si se le pregunta cuál es la responsabilidad de la clase, ¿cuál es la respuesta? '¿Comportarse como una cuenta bancaria?' Eso no es muy concreto. Estoy un poco confundido sobre la relación entre el modelado y la responsabilidad. Muchos objetos del "mundo real" no parecen tener una responsabilidad clara.modelización y responsabilidad

¿Cuál es la mejor manera de comenzar a modelar tales conceptos y mantener responsabilidades bien definidas?

Respuesta

5

Desmontar lo "comportarse como una cuenta bancaria "significa. Una cuenta bancaria puede ser que necesite ser capaz de:

  • no perder de vista la cantidad de dinero que hay en ella pantalla
  • esa información para alguien que tiene los privilegios correctos (el propietario de la cuenta, o un empleado del banco)
  • recibir depósitos
  • mantener un registro de cuándo ocurrió un depósito
  • proporcionan el depositante con la confirmación de que el depósito se ha procesado correctamente (con diferentes niveles de privilegio - el propietario de la cuenta puede obtener el nuevo total y un número de confirmación, una tercera la fiesta solo puede obtener una confirmación nu mbre)
  • dar dinero a (es decir, los retiros de proceso para) un usuario autenticado correctamente
  • no perder de vista cuando una retirada pasó
  • no dar dinero cuando el saldo es insuficiente
  • retirar dinero automáticamente de una cuenta de copia de seguridad para la protección de sobregiro
  • y así sucesivamente ...

a partir de este, puede abstractas (Refactor) algunas de estas tareas (responsabilidades) en modelos más generales, p. "una entidad que puede ser autenticada en diferentes niveles de privilegio", "una entidad que puede comunicarse con otras entidades de su tipo en el nivel de privilegio apropiado", "una entidad que puede registrar cuándo cambia su estado y qué cambio se produjo", y así.

Averiguar cuáles son las tareas para qué son las historias de usuario, en el modelo de desarrollo Agile. Sin embargo, no es necesario beber el kool-aid ágil para usar esta técnica; es simplemente una manera sensata de averiguar cuáles son los requisitos de un proyecto. Examinar críticamente cómo los usuarios interactuarán con su software, y definir de manera concreta cuáles serán esas interacciones do, es el primer paso en la arquitectura del software.

1

ejemplos de responsabilidad de la cuenta bancaria, la parte superior de mi cabeza:

  • mantener la titular de la cuenta información
  • lista de transacciones mantienen
  • proporcionan saldo actual
+0

parece una sólida lista de responsabilités. Pero eso significa al menos 3 objetos. ¿Estás diciendo que 'Cuenta bancaria' es un modelo demasiado general para empezar y el código del cliente debería interactuar con objetos como TransactionList, Balance, etc.? Entonces, ¿todo el paquete de clases es un modelo de cuenta bancaria? – koen

+0

No, no es así. una cuenta bancaria es un solo objeto que tiene tres responsabilidades. Casi todos los objetos tienen más de una responsabilidad. La cuenta bancaria puede usar una lista de transacciones (por ejemplo) para implementar algunas de las responsabilidades. –

0

"... Muchos objetos del 'mundo real' no parecen tener una responsabilidad clara ..."

Recuerde, cuando se escribe el software de modelado estás el mundo real. Los modelos pueden ser simples o complejas, con mayor o menor fidelidad a las cosas que observamos. Lo importante es capturar el comportamiento que usted está tratando para inyectar en tu sistema de software. Puedes dejar de lado las funciones que no avanzan en tus objetivos. También puedes "modificar" las funciones que no tienen análogos físicos.

Los modelos en física también son a juzgar por su capacidad para explicar los fenómenos y predecir el comportamiento en nuevas áreas. El éxito o el fracaso de un modelo de software es su capacidad para simular el comportamiento deseado y aceptar cambios en el futuro con elegancia.

Recuerde, hay muchas formas de modelar cualquier sistema en el software. No hay una sola respuesta correcta.

1

he llegado a una conclusión durante el diseño de programación orientada a objetos, y eso es que no siempre paga a pensar demasiado duro sobre el modelado, ya que le puede llevar lejos de resolver el problema.

Las ventajas de un buen modelo son principalmente legibilidad, extensibilidad y reutilización.

Primero piense en lo que necesita hacer al final, luego intente aplicar estos principios a su modelo sobre la marcha. No intentes demasiado, si necesitas hacer un poco de refactorización más tarde, que así sea. Podría perder demasiado tiempo valioso envolviendo su cabeza con el modelo "perfecto".

En cuanto a la cuenta bancaria, piénselo de esta manera, si usted fuera un banquero, ¿qué esperaría de una cuenta real? Luego intente actualizar un objeto u objetos vacíos para acomodar los requisitos lentamente.

Puede pensar en un modelo exactamente como eso: una formación abstracta con un comportamiento definido. Sus responsabilidades son parte de ese comportamiento, generalmente la parte visible para el mundo exterior.

De la manera en que lo veo, solo usted puede decidir cuál es el modelo correcto al diseñarlo.

Bueno, mis dos centavos de todos modos.

0

El problema con su pregunta, koen, es que lo está preguntando después de crear la clase, cuando de hecho esta es una de las preguntas fundamentales que debe hacerse al intentar crear una nueva clase.

En cualquier caso, respetuosamente no estoy de acuerdo con nuestros colegas de arriba. Las respuestas de Meredith y Neil definen contratos de clase, no son responsabilidades. Una responsabilidad de clase se define como cualquier servicio público que la clase ofrece sin tener en cuenta una implementación en particular. Reemplaza la noción de funcionalidad y esencialmente describe muy sucintamente cada uno de los métodos públicos de la clase. Así ejemplos de la responsabilidad de la clase, podría ser:

  • Fetch primer elemento en una lista
  • Ordenar lista de deudas
  • Notificar clase Observador

Un contrato de clase, por el contrario es definido por la suma de las responsabilidades de clase. Y los ejemplos son dados por Meredith y Neil.

+0

Los ejemplos que Meredith y yo dimos son responsabilidades según lo definido por esa técnica OO clásica, CRC. Parece que le está dando un nombre diferente a la misma cosa. –

+0

Consulte la bibliografía sobre el tema. Lo siento, pero confío en mi respuesta. Sugiero quizás títulos como Design by Contract de Meyers, Responsibility and Dependable Systems de Dewsbury y Dobson, Conceptual modeling - ER 2000 de Laender et al. Usted ha definido los contratos de clase. Lo cual está bien. Pero no son responsabilidades en el contexto y la semántica de OOP. Lo siento. –

0

Mantenga el pensamiento simple & piense en voz alta. regla de oro para la identificación de responsabilidades (comienzo de un conjunto de acciones simples):

hacer las siguientes preguntas (de hecho muchas preguntas) en el objeto modelado:

  • ¿Puede el objeto venido a vivir ¿por sí mismo? ¿O es un instrumento para una transacción? ¿Tiene sentido solo cuando se trabaja con otros objetos? (Factor de dependencia)

  • ¿Qué puede hacer el objeto por sí mismo?

  • ¿Qué acciones pueden realizarse en el objeto por otros objetos?

  • ¿Qué se puede hacer con el objeto, con sus datos o con su estado?

(es decir) una cuenta no puede debitarse/acreditarse. eso simplemente no tiene sentido. Pero puede usarse como el instrumento que el sistema, el banquero o el cliente deben cargar o abonar.

Identifique las acciones mirando desde diferentes perspectivas, según quién utilizará este objeto y con qué propósito (es decir, un objeto de cuenta de los ojos de un banquero, de los ojos de un cliente, desde los ojos de un sistema - etc.)

"una cuenta bancaria actúa como un instrumento común para la transacción entre el cliente y el banco, ambos utilizan desde diferentes perspectivas. El banco lo utiliza como una clave para administrar el dinero de los clientes mientras el el cliente lo usa como un instrumento para realizar transacciones ".

Lo que es un depósito/retiro a un cliente es un débito/crédito para el banco. Y el banco usaría la cuenta para varios fines internos (por ejemplo, notificar al cliente sobre su crédito de salario con una alerta) mientras que las acciones del cliente para la cuenta son limitadas.

Intenta formar oraciones simples, fuera de los objetos que colaboran con los demás, si son significativos, eres bueno. si no, reconsidere.

cuenta

un banco,

  1. es propiedad de un cliente - que puede posiblemente
    • depositar dinero
    • retirar dinero
    • consultar el saldo
    • puede emitir un cheque de su cuenta
    • puede transferir cantidades a otras cuentas
    • puede pagar las facturas
    • puede conseguir su salario acreditados en la cuenta
    • puede obtener los descubiertos
  2. pertenece al banco - que puede posiblemente
    • utilizar la cuenta como un instrumento para realizar un seguimiento el dinero y las transacciones de la cuenta
    • almacena y mantiene toda la información & de dinero
    • restringe el acceso al titular de la cuenta & proporciona seguridad para su dinero
    • etc.


aplausos
-sundar

Cuestiones relacionadas