Vista previa del material en texto
Introducción al Lenguaje de Modelado UML Prof. Roxana Giandini LIFIA - Facultad de Informática - UNLP Orientación a Objetos I - 2017 Diagramas de Interacción Prof. R. Giandini Octubre 2017 Definición: Un diagrama de interacción describe una interacción, que consta de un conjunto de objetos y sus relaciones, incluyendo los mensajes que se pueden enviar, para realizar un comportamiento. Diagramas de Interacción •Diagramas de Colaboración: •Diagramas de Secuencia: Diagramas de Interacción: tipos Prof. R. Giandini Octubre 2017 •Objetos •Enlaces •Mensajes • Pueden contener: ▪notas y restricciones. Diagramas de Interacción: contenido Prof. R. Giandini Octubre 2017 •Los objetos que participan en una interacción son o bien elementos concretos o bien elementos prototípicos. •Ejemplos :Cuenta cuenta:Cuenta Instancia anónima Instancia con nombre Diagramas de Interacción: objetos Prof. R. Giandini Octubre 2017 •Un enlace es una conexión semántica entre objetos. •Ejemplos Persona +calcularCompensacion() +asignar(d:Departamento) Empresa 1..* empleado * patrón p:Persona :Empresa clase clase asociación operaciones enlaceobjeto con nombre objeto anónimo Diagramas de Interacción: enlaces Prof. R. Giandini Octubre 2017 Diagramas de Interacción Diagramas de Secuencia Diagrama de Secuencia •Definición: Un diagrama de secuencia destaca la ordenación temporal de los mensajes. Prof. R. Giandini Octubre 2017 Diagrama de Secuencia •Cada objeto cuenta con una línea de vida, que muestra el tiempo de vida del mismo. •La activación de un objeto representa la ejecución de una operación que realiza el mismo, a través del envío de un mensaje. •Notación: objetoA:ClaseA objeto tiempo de vida activación Prof. R. Giandini Octubre 2017 Mensajes objetoA:ClaseA :ClaseB Invocación Local Mensaje Sincrónico Mensaje Asíncrono Linea de Retorno (opcional) Prof. R. Giandini Octubre 2017 Mensajes Mensaje sincrónico •Sintaxis: [expresión iteración] [valor de retorno :=] nombre del mensaje (parámetros) •Puede indicarse el fin de su ejecución con una línea punteada del objeto receptor al emisor: Línea Retorno/ Resultado Esta línea es OPCIONAL (en caso que se especifique correctamente la Activación del objeto Receptor). •El Resultado o Valor de Retorno también puede especificarse a izquierda del nombre del mensaje, en una asignación (ver Sintaxis), en caso que No se haya especificado la línea Retorno. Prof. R. Giandini Octubre 2017 Diagrama de Secuencia: construcción •Primer Paso: Se colocan los objetos que participan en la interacción en la parte superior del diagrama. •Ejemplo a:AyudaPlanificación :Cliente Prof. R. Giandini Octubre 2017 Diagrama de Secuencia: construcción •Segundo Paso: se colocan los mensajes que estos objetos envían y reciben, en orden de sucesión en el tiempo, desde arriba hasta abajo. •Ejemplo a:AyudaPlanificación :Cliente :AgenteViaje notificar() objeto establecerItinerario() calcularRuta() mensaje destrucción <<destroy>> retorno <<create>> creación mensaje mensaje (invocación local) Prof. R. Giandini Octubre 2017 •Se encierra en un rectángulo y se le agrega una etiqueta con sd seguido del nombre. borra() sd Nombre :Objeto1 :Objeto2 crea() mensaje() autodelegación Diagrama de Secuencia: notación Prof. R. Giandini Octubre 2017 •Definición: mecanismo a través del cual se puede realizar la especificación de bloques repetitivos, opcionales, alternativos, entre otros. •Operadores más utilizados: - opt alt loop Diagrama de Secuencia: fragmentos (frames) Prof. R. Giandini Octubre 2017 Fragmento: alternativa •Notación: se encierra en un rectángulo (frame), se le agrega una etiqueta con el operador alt y se colocan las guardas. [guard 1] sd Nombre :Clase1 :Clase2 Mensaje4 alt Mensaje3 Mensaje2 Mensaje1 [guard 2] Prof. R. Giandini Octubre 2017 •Notación: se encierra en un rectángulo (frame), se le agrega una etiqueta con el operador loop y la cantidad de iteraciones (opcional). Fragmento: bucle :Clase1 :Clase2 Mensaje1 Mensaje2 Mensaje3 Mensaje4 Loop [repetición] sd Nombre Prof. R. Giandini Octubre 2017 Prof. R. Giandini Octubre 2017 Ejemplo: Depósito bancario :Banco unaCuenta: CuentaBancaria depositar(unMonto:Number) depositar(unMonto:Number, unaCuenta:CuentaBancaria) Prof. R. Giandini Octubre 2017 Ejemplo: Transferencia bancaria :CuentaBancaria otraCuenta: CuentaBancaria extraer(unMonto:Number) depositar(unMonto:Number) transferir(unMonto:Number, otraCuenta:CuentaBancaria) Prof. R. Giandini Octubre 2017 Otro Ejemplo: Extracción con registro de movimiento El diagrama describe siempre un escenario de uso, no es necesario que represente todas las posibilidades Prof. R. Giandini Octubre 2017 Otro Ejemplo: Calculo del saldo disponible Considerando los movimientos de la CuentaBancaria Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Qué es el registro de movimientos de una CuentaBancaria??? Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Prof. R. Giandini Setiembre 2017 Diagrama de clases – Ejemplo ya presentado Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Crear el registroDeMovimientos para Cuentas Bancarias CuentaBancaria>>initialize:unNumero self numeroCuenta: unNumero. …. movimientos:= OrderedCollection new. Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática • Supongamos que queremos distinguir la forma en que se imprime cada tipo de movimiento • Crear subclases de la clase Movimiento – Cada subclase de Movimiento se imprime a su manera – Cada objeto CuentaBancaria conoce una colección de movimientos heterogénea. – En cada transacción se crea el movimiento correspondiente – El movimiento se agrega a la colección de movimientos Registrar Movimientos de Extracción y Depósito Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática depositar(mo CuentaBancaria>>depositar: unMonto self incrementarSaldo: unMonto. self movimientos add: (MovDeposito new inicializar:Date today monto:unMonto) Banco * cuentas Registrar Movimientos de Extracción y Depósito MovExtraccion MovDeposito Movimiento depositar: mdepositar(.) CuentaBancaria CajaAhorro CuentaCorriente CuentaBancaria CajaAhorro CuentaCorriente Imprimir() Imprimir() No usamos v.i. tipo. movimientos * Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Emitir resumen de todas las cuentas del banco Banco>> emitirResumen self cuentas do:[:c| c emitirResumen] CuentaBancaria>>emitirResumen self movimientos do:[:m| m imprimir] •De qué clase son los objetos de la colección cuentas? •De que clase son los objetos de la colección movimientos? •Donde está presente el polimorfismo? Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Retornar el último movimiento realizado en una cuenta CuentaBancaria>>ultimoMovimiento ^(self movimientosasSortedCollection:[:m1 :m2 |m1 fecha > m2 fecha]) first Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Reuso de Código Herencia vs. Composición Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Herencia de Clases • Herencia total: debo conocer todo el código que se hereda -> Reutilización de Caja Blanca • Usualmente debemos redefinir • Los cambios en la superclase se propagan automáticamente a las subclases • Herencia de Estructura vs. Herencia de comportamiento • Es útil para extender la funcionalidad del dominio de aplicación Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Composición de Objetos • Los objetos se componen en forma Dinámica -> Reutilización de Caja Negra • Los objetos pueden reutilizarse a través de su interfaz (sin conocer el código) • A través de las relaciones de composición se pueden delegar responsabilidades entre los objetos Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Un simple ejemplo: Clase Cola • Cola es una estructura de datos con comportamiento específico. • Implementaría Cola como subclase de OrderedCollection? • Tiene sentido heredar todo el comportamiento de OrderedCollection? • Habria que anular o redefinir demasiado comportamiento? • Cola se compone de una OrderedCollection para mantener sus elementos? Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Un simple ejemplo: Clase Cola Cola como subclase de Object Cola>>initialize +push:() +Pop() +Top() + isEmpty() -elementos Cola elementos := OrderedCollection new. Cola>> push: unObjeto elementos addLast: unObjeto Cola>> pop ^ elementos removeFirst Cola>> top ^ elementos first Cola>> isEmpty ^ elementos isEmpty Orientación a Objetos I Universidad Nacional de La Plata Facultad de Informática Un simple ejemplo: ColaDoble y Pila • Una ColaDoble es una secuencia de elementos a la que se puede agregar y sacar elementos por ambos extremos. • Como implementaría la clase ColaDoble usando la clase Cola? • Como implementaría la clase Pila usando ColaDoble? • Ejercicio para la casa….