Objetos 1 DISEO DETALLADO Diseo de objetos Modelo de objetos del diseo Especifica las clases que conforman al componente e ilustra la estructura de las clases Diseo del comportamiento Modelo de comportamiento del diseo Especifica la colaboracin de los objetos dentro de un componente. Se utilizan escenarios para refinar el diagrama de clases, produce declaraciones de mtodos y establece las conexiones entre las clases 2 DISEO DETALLADO Consideremos la aplicacin Terminal Bancario, con los siguientes requisitos:
1.El usuario puede seleccionar cualquiera de sus cuentas
2.El usuario puede revisar el saldo de cualquiera de sus cuentas
3.El usuario puede pagar deudas desde cualquiera de sus cuentas
3 MODELO DE OBJETOS
Usuario Cuenta Banco * 1 1 est en relacin de negocio con posee * * paga *
Deuda 4 DILOGOS DE LA APLICACIN E(x)it Terminal Bancario Saldo: Cuenta: Seleccionar una cuenta ... Pagar una deuda ... Seleccin de Cuenta OK Cancel $ 3540.00 204620-123456 204620-123456 204620-873899 23443-2338338 328762-192888 Pago de deudas Cdigo: Fecha: Shell Oil: 23476-23987 19.06.1994 Monto: $ 170.00 Aplicar Cerrar Esta usted seguro ? Confirmar SI NO 5 Cada dilogo es implementado como una clase vista
La vista sabe como presentar las cosas al usuario y como recibir sus acciones
La vista no decide sobre qu hacer con las acciones de los usuarios; se las pasa al controlador
La vista contiene elementos de la interfaz grfica del usuario, tal como widgets, y mtodos conectados con los elementos de la interfaz
6 DILOGOS DE LA APLICACIN DILOGOS DE LA APLICACIN Una vista comprende tres categoras principales de mtodos:
Mtodos de manipulacin (MM: Manipulation Methods): mtodos (callback) que capturan acciones de los usuarios
Mtodos de retroalimentacin (FM: FeedBack Methods): presentan cosas al usuario
Mtodos de consultas (QM:Query Methods): son diseados para que algn controlador pueda investigar el estado de la vista. 7 DILOGOS DE LA APLICACIN Ejemplos de mtodos de la vista del terminal bancario:
Mtodo de manipulacin: BotnSeleccinDeCuentaPresionadoMM():Inform a que el botn indicado ha sido presionado
Mtodo de retroalimentacin: MuestreSaldoFM(int s): Muestra en un campo el valor s correspondiente al saldo de una cuenta
Mtodo de consulta: ObtengaCuentaSeleccionadaQM(): Devuelve el nmero de la cuenta seleccionada por el usuario 8 COMPONENTES DE VISTA Tpicamente cada dilogo del diagrama de dilogos forma una clase de la vista
Si un dilogo es extremadamente simple, se puede unir a otra clase de la vista formando un componente de vista
Un componente de vista puede ser un dilogo o parte de un dilogo implementado mediante una clase reutilizable independiente, sin controlador propio 9 COMPONENTES DE VISTA Los mtodos controladores de los componentes de vista se codifican dentro de la clase vista que controla al componente de vista.
Ejemplo tpico: dilogo de confirmacin. Aqu, el controlador de la vista pregunta directamente a la vista la respuesta del usuario, por ejemplo, llamando a un mtodo de retroalimentacin
vistaPagoDeDeuda->confirmarFM()
El objeto vista usa el objeto confirmacin (componente de vista) para obtener la respuesta del usuario. 10 CONJUNTO DE CLASES DE LA VISTA textoSaldo vistaPrincipal botnOk vistaSeleccinDeCuenta botnCancelar bOkPresionadoMM: nCuenta bCancelarPresionadoMM textoCuenta botnSalir botnSeleccionarCuenta botnPagarDeuda bSalirPresionadoMM bPagarPresionadoMM listaDeCuentas componenteDeVistaCuenta muestraFM(NCuentas,cuenta) demeCuentaSeleccQM: nCuenta textoDeConsulta vistaConfirmacin bSiConfirmadoMM bNoConfirmadoMM consultarFM(textoConsulta) textoDeMonto vistaPagoDeDeuda textoDeCdigo bAplicarPresionadoMM bCerrarPresionadoMM confirmarFM:respuesta demeMontoQM:valor demeCdigoQM:texto botnSi botnNo textoFechaDePago botnAplicar botnCerrar demeFechaDePago bSeleccionarPresionadoMM mostrarSaldoFM(valor) mostrarCuentaFM(nCuenta) demeCuentaSeleccQM:nCuenta La vista Confirmacin acta como un componente de vista Componente de vista Clases de tipo vista 11 EL CONTROLADOR El controlador no slo sabe lo que (la aplicacin) el modelo y la vista deben hacer sino cmo deben hacerlo
El controlador no conoce la estructura o la implementacin del modelo o de la vista
En algunos casos los subcontroladores deben informar al controlador principal lo que hacen cuando esa informacin es requerida por otros objetos controladores 12 VISTA-CONTROLADOR DEL TERMINAL BANCARIO 13 CONTROLADOR-MODELO DEL TERMINAL BANCARIO 14 COMPONENTE CONTROLADOR A veces puede ser necesario conectar cierta funcionalidad externa (reutilizable) a una clase componente de vista.
En tal caso es adecuado agregar un objeto componente controlador
El componente controlador trabaja en conjunto con un objeto componente de vista tal como lo hace un controlador con un objeto de la vista
Ejemplo: El componente de interfaz Lista es capaz de mostrar cualquier lista de texto e informar a la aplicacin del elemento seleccionado 15 16 EJEMPLOS EN C++ //Clase vista Class vistaPagoDeDeuda{ Public vistaPagoDeDeuda(controladorPagoDeDeuda *c) { miControlador=c; ... } int demeMontoQM() { char *strMonto = XmTextGetString(monto) int intMonto = atoi(strMonto); XtFree(strMonto); return intMonto; } 17 EJEMPLOS EN C++ void limpiarCamposFM() { //limpia todos los campos } private void bAplicarPresionadoMM() { miControlador->efectuarPago(); } void bCerrarPresionadoMM() { miControlador->cerrarDialogoDePago(); } ... controladorPagoDeDeuda *miControlador; ... Widget bAplicar;//elemento de IU Widget bCerrar;//elemento de IU Widget monto, codigo, fechaDePAgo; //elemento de IU } 18 EJEMPLOS EN C++ //Clase Controlador Class controladorPagoDeDeuda{ Public controladorPagoDeDeuda (controladorPrincipal *cP, Cuenta *cA) { miVista= new vistaPagoDeDeuda(this); miControlador = cP; cActual = cA; //crea clase modelo dActual= new Deuda(); } //continua... 19 EJEMPLOS EN C++ void efectuarPago() { cActual->asignarMonto(miVista->demeMontoQM()); cActual->asignarCdigo(miVista->demeCodigoQM()); cActual->asignarFechaDePago(miVista- >demeFechaDePago()); miControlador->pagoHecho();//Informa al controlador principal miVista->limpiarFM(); miVista->OcultarDialogoFM(); } //continua...
20 EJEMPLOS EN C++ void cerrarDialogoDePago() { miControlador->pagoNoHecho(); miVista->limpiarFM(); miVista->ocultarDialogoFM(); } private: vistaPagoDeDeuda *miVista; controladorPrincipal *miControlador; Cuenta *cActual; Deuda *dActual; };//Fin clase controladorPagoDeDeuda 21