44622246-as-a-2008

342
Análisis de Sistemas Administrativos Unidad 1.1 Análisis y Diseño OO Facultad de Tecnología Informática UAI Mg. Carlos Gerardo Neil 2008

Upload: elvis-henry-guzman-aquije

Post on 10-Aug-2015

27 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 1.1 Análisis y Diseño OO

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 2: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 2.1

UML y el Proceso de Desarrollo de Software

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 3: 44622246-As-a-2008

Programa de la Asignatura1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 4: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Cuál la diferencia entre el análisis y diseño Estructurado y el OO?

• ¿Cuál es la diferencia entre análisis, diseño e implementación y que es lo que realizo en cada una de estas actividades?

• ¿Vinculo la etapa de análisis con la descripción del modelo de dominio de la aplicación?

• ¿Comprendo cual es el uso de las tarjetas CRC?

• ¿Cuál es el objetivo de la abstracción y el encapsulamiento?

• ¿Cuál es la diferencia entre mensajes, operaciones y método?

• ¿Qué diferencia existe entre asociación, agregación y composición?

• ¿Cuál es la diferencia entre generalización y herencia?

Page 5: 44622246-As-a-2008

UML

• ¿Qué son los modelos?• ¿Para qué sirven los modelos?• Tipos de modelos y perspectivas

¿Cuáles son los modelos de UML?

¿Se usan todos...?

Page 6: 44622246-As-a-2008

¿Qué son los modelos?

• Un modelo es una representación que capta los aspectos más importantes de lo que estamos modelando y simplifica u omiten el resto

• Es la representación de una abstracción

• Un modelo de un sistema software está construido en un lenguaje de modelado. Tiene semántica y notación. Incluye gráficos y texto

• El modelo es la columna vertebral de un lenguaje utilizado por todos los integrantes del equipo:

Desarrolladores Expertos del dominio Usuarios Analistas

Page 7: 44622246-As-a-2008

¿Para qué sirven los modelos?

Ayudan a la comprensión de sistemas complejos

Indican QUÉ hará el sistema pero NO CÓMO lo hará

Ayuda a la corrección de errores

Ayuda a la evolución y reuso

Esencial para la comunicación entre miembros de un equipo

Page 8: 44622246-As-a-2008

Tipos de modelos y perspectivas

Usando la misma notación (UML) se pueden considerar tres perspectivas:

• Esencial o conceptual: los diagramas describen cosas del mundo real o dominio de interés

• De especificación: los diagramas describen abstracciones software independientes de la implantación

• De implantación: los diagramas describen implementaciones software en un lenguaje particular

Page 9: 44622246-As-a-2008
Page 10: 44622246-As-a-2008

Orígenes de UMLA mediados de los noventa existían muchos métodos de Análisis y Diseño OO

Los mismos conceptos se representaban con distinta notación Existía mucha confusión No existía un lenguaje líder de modelado

En 1994 deciden unificar sus métodos:

Unified Modeling Language (UML)

El proceso de estandarización promovido por OMG comenzó en 1997

G. Booch (Método Booch) J. Rumbaugh (OMT) I. Jacobson (Proceso Objectory)

Page 11: 44622246-As-a-2008
Page 12: 44622246-As-a-2008

¿Qué es UML?

UML es un lenguaje estándar para:

visualizar

especificar

construir

documentar

los artefactos de un sistema.

Page 13: 44622246-As-a-2008

¿Dónde Usamos UML?

Usamos UML en todas las etapas del proceso de desarrollo

Page 14: 44622246-As-a-2008

¿Para qué sirve UML?

UML permite:

– Definir los límites del sistema y sus principales funciones, mediante Casos de Uso y actores.

– Ilustrar el funcionamiento de un caso de uso mediante Diagramas de Interacción

– Representar la estructura de un sistema mediante Diagramas de Clases.

– Modelar el comportamiento de los objetos mediante Diagramas de Máquinas de Estados.

Page 15: 44622246-As-a-2008

¿Cómo extendemos UML?

UML incluye tres construcciones principales de extensión:

Restricciones: una declaración textual de una relación semántica expresada en un cierto lenguaje formal (OCL) ó en lenguaje natural.

Estereotipos: una nueva clase de elemento del modelo, ideada por el modelador, y basada en un tipo existente de elemento del modelo.

Valores etiquetados: una porción de información con nombre, unida a cualquier elemento del modelo.

Page 16: 44622246-As-a-2008

Diagramas UML

Use CaseDiagramsUse Case

DiagramsDiagramas de Casos de Uso

ScenarioDiagramsScenario

DiagramsDiagramas deComunicacion

StateDiagramsState

DiagramsDiagramas deComponentes

ComponentDiagramsComponent

DiagramsDiagramas deDespliegue

StateDiagramsState

DiagramsDiagramas de Objetos

ScenarioDiagramsScenario

DiagramsDiagramas deEstados

Use CaseDiagramsUse Case

DiagramsDiagramas deSecuencia

StateDiagramsState

DiagramsDiagramas deClases

Diagramas deActividad

Modelo

Page 17: 44622246-As-a-2008

Diagrama de Casos de Uso

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

Muestra las distintas operaciones que se esperan de un sistema y cómo se relacionan con su entorno

Page 18: 44622246-As-a-2008

Diagrama de Clases

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

Muestra las distintas las clases atributos, métodos y relaciones entre ellas

Page 19: 44622246-As-a-2008

Diagramas de Secuencia (objetos)

: Encargado:WInPréstamos :Socio :Video :Préstamo

prestar(video, socio)

verificar situación socio

verificar situación video

registrar préstamo

entregar recibo

Muestra la interacción de un conjunto de objetos en una aplicación a través del tiempo

Page 20: 44622246-As-a-2008

Diagrama de Comunicación (objetos)

: Encargado

:WInPréstamos

:Socio

:Video

:Préstamo

1: prestar(video, socio)

2: verificar situación socio

3: verificar situación video

4: registrar préstamo5: entregar recibo

Muestra la forma de representar interacciones entre objetos,

Page 21: 44622246-As-a-2008

Diagrama de Estados

con préstamos

sin préstamos

alta baja

prestar devolver[ número_préstamos = 1 ]

prestar

devolver[ número_préstamos > 1 ]

número_préstamos = 0

número_préstamos > 0

Muestra el conjunto de estados por los cuales pasa un objeto durante su vida en una aplicación, junto con los cambios que permiten pasar de un estado a otro

inicio

fin

estado

transición

Page 22: 44622246-As-a-2008

Diagrama de Actividad

Buscar Bebida [ no hay café ]

Poner café en filtro

Añadir agua al depósito

Coger taza

Poner filtro en máquina

Encender máquina

Café en preparación

/ cafetera.On

Servir café Beber

Coger zumo

[ hay café ]

indicador de fin

[ hay zumo ]

[ no zumo ]

Muestran transiciones internas, sin hacer mucho énfasis en transiciones o eventos externos.

Page 23: 44622246-As-a-2008

Diagrama de Componentes

Interfaz de Terminal

Gestión de Cuentas Rutinas de conexión Acceso a BD

Control y Análisis

Muestra las dependencias lógicas entre componentes software

Módulos

Elementos físicos

por ejemplo Archivos, bibliotecas

dependencias

Servicios ofrecido por otros componentes

Page 24: 44622246-As-a-2008

Diagrama de Despliegue

Punto de Venta

Servidor Central

Terminal de Consulta

Gestión de Cuentas

Comment

Interfaz de Terminal

Comment

Rutinas de Coneccion

Comment

Rutinas de Coneccion

Comment

Interfaz de Terminal

Comment

Rutinas de Coneccion

Comment

Acceso a BD

Comment

Control y Análisis

Comment

Muestran la organización de los componentes del sistema

nodo

comunicación

Page 25: 44622246-As-a-2008

Proceso de Unificado de Desarrollo

Page 26: 44622246-As-a-2008

Proceso Unificado de desarrollo

UML no es un proceso...

...UML es una notación

Por lo tanto precisa de un proceso de desarrollo (ciclo de vida) que especifique la secuencia de actividades que deben realizarse

Page 27: 44622246-As-a-2008

Proceso Unificado de desarrollo/2

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Ciclo de vida en cascada

Ciclo de vida en espiral

Proceso Unificado

Page 28: 44622246-As-a-2008

Proceso Unificado (PU)

Proceso de Desarrollo de Software

Conjunto de actividades para transformar los requisitos del usuario en un sistema software

Proceso Unificado (UP)

• Dirigido por Casos de Uso• Centrado en la Arquitectura• Iterativo e Incremental

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Page 29: 44622246-As-a-2008

Dirigido por Casos de Uso

• Los casos de uso representan los requisitos funcionales y guían el diseño, la implementación y la prueba

• Basándose en los casos de uso los desarrollares crean modelos de diseño e implementación que llevan a cabo los casos de uso

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

Page 30: 44622246-As-a-2008

Centrado en la Arquitectura

• La arquitectura es una vista de diseño con las características más importantes, dejando los detalles de lado. Describe diferentes vistas del sistema

• Constituyen la “forma del sistema”, incluye aspectos estáticos y dinámicos

• La arquitectura y los casos de uso evolucionan en paralelo

Autor

nombreapellido

ClienteOcacional ClienteEspecializado

profesion

DireccionCompra

callenumero

OpcionEntrega

tipo

Tarjeta

nombrenumero

OrdenCompra

numero

IngresarPref erencias()

1

1

1

1

1

1

1

1

1

1

1

1

Cliente

nombreapellidodireccionte

ingresarDatos()

0..*1 0..*1 tiene

CarritoCompra

agregarItem()v enta()

1

1

1

1

es de

1

1

1

1

usa

Items

cantidad

crear()subtotal()

1..*

1

1..*

1

tiene

EjemplarLibro

numero

darPrecio()1

0..*

1

0..* pertenecen

Categoria

tipo

Libro

isbntituloeditorial

ConsultarLibro()

1..* 1..*1..* 1..*escrito por

1..*

1

1..*

1

tiene

1

1..*

1

1..*

pertenece

Page 31: 44622246-As-a-2008

Iterativo e Incremental/1

• Desarrollo iterativo:

El desarrollo se organiza en una serie de mini proyectos de duración fija, llamados iteraciones (2 a 6 semanas)

• El resultado de cada uno es un sistema que puede ser probado, integrado y ejecutado.

• Cada iteración incluye sus propias actividades de: análisis de requisitos, diseño, implementación y prueba

Page 32: 44622246-As-a-2008

Iterativo e Incremental/2

• El sistema crece incrementalmente a lo largo del tiempo, iteración tras iteración.

• El resultado de cada iteración es un sistema ejecutable, pero incompleto

• En general, cada iteración aborda nuevos requisitos y amplia el sistema incrementalmente

• La salida de una iteración NO es un prototipo desechable, es un subconjunto de calidad del sistema final

Page 33: 44622246-As-a-2008

Disciplinas y fases

Disciplina: conjunto de actividades y artefactos vinculados en una área determinada: requisitos, diseño, implementación, etc.

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Fases: periodo de tiempo entre dos hitos principales de un proceso de desarrollo

Page 34: 44622246-As-a-2008

Ciclo de desarrollo

punto en donde han de tomarse decisiones importantes

Sistema en ambiente de producción

Page 35: 44622246-As-a-2008

Fases del Proceso Unificado

• Inicio: visión aproximada, incluye: análisis del negocio, alcance, estimaciones imprecisas

• Elaboración: visión refinada, implementación iterativa del núcleo central de la arquitectura, resolución de riesgos altos, identificación de más requisitos

• Construcción: implementación iterativa del resto de requisitos de menor riesgo

• Transición: pruebas beta

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Page 36: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Fase de inicio

Page 37: 44622246-As-a-2008

Fase de inicio/1

Actividades a realizar (una o algunas)

• Visión y análisis del negocio (objetivos y restricciones de alto nivel)

• Modelo de casos de uso (requisitos funcionales y no funcionales relacionados)

• Especificaciones complementarias (otros requisitos)

• Listas de riesgos (del negocio, técnicos, etc.)

• Prototipos (para clarificar la visión)

• Plan de iteración (qué hacer en la primera iteración)

Page 38: 44622246-As-a-2008

Fase de inicio/2

No se entendió la fase de inicio si...

• La duración es mayor a unas pocas semanas

• Se intenta definir la mayoría de los requisitos

• Se espera que los planes y la estimación sea fiable

• Se define la arquitectura

• No se identifican la mayoría de de los nombres de los casos de uso y los actores

• Se escribieron todos los casos de uso en detalle

Page 39: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Fase de elaboración

Page 40: 44622246-As-a-2008

Fase de elaboración/1

Actividades a realizar

• Se descubren y estabilizan la mayoría de los casos de uso

• Se reducen o eliminan los riesgos importantes

• Se implementan y prueban los elementos básicos de la arquitectura

• Duración: 2 a 4 iteraciones con una duración de 2 a 6 semanas (dependiendo de la duración del proyecto)

Page 41: 44622246-As-a-2008

Fase de Elaboración/2

Artefactos de la fase de elaboración

• Modelo del dominio (entidades del dominio)• Modelo de diseño (diagramas de clases, de iteración.

etc)• Modelo de datos• Modelo de pruebas• Modelos de implementación

El producto resultante no es un prototipo desechableEl código y el diseño son de calidad y se integran al sistema

final

Page 42: 44622246-As-a-2008

Fase de Elaboración/3

No se entendió la fase de elaboración si...

• Sólo comprende una iteración

• La mayoría de los requisitos se definieron antes de la elaboración

• NO hay programación de código ejecutable

• Se intenta llevar a cabo un diseño completo antes de la codificación

• Los usuarios no se involucran en la evaluación

Page 43: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Fase de construcción

Page 44: 44622246-As-a-2008

Fase de Construcción

• Objetivos

• Terminar de construir la aplicación

• Realizar pruebas alfa

• Preparar pruebas beta (para la transición)

• Preparación de guías de usuario

• Preparación de materiales de aprendizaje

Page 45: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Fase de transición

Page 46: 44622246-As-a-2008

Fase de Transición

Objetivo: poner el sistema en producción

Actividades

• Realización de pruebas beta

• Reaccionar a la retroalimentación a partir de las pruebas beta

• Conversión de datos

• Cursos de entrenamiento

Page 47: 44622246-As-a-2008

Bibliografía Básica

Larman C. UML y patrones. Una introducción al Análisis y Diseño Orientado a Objetos y al Proceso Unificado. 2ª ed. Madrid: Prentice-Hall; 2003.

Jacobson I. Booch G. Rumbaugh J. El Proceso de Desarrollo Unificado. Addison-Wesley. 2000

Page 48: 44622246-As-a-2008

Sugerencias

• Recuerde que cada fase, si bien pasa por todas las disciplinas (análisis, diseño, etc.) pone énfasis en algunas de ellas más que en otras

• Valore la importancia de los casos de uso (unidad 3.1). A partir de ellos se crean todos los demás modelos del sistema

• Tenga en cuenta que después de cada iteración (que corresponde aproximadamente a un ciclo de vida en cascada) se va definiendo un sistema ejecutable, pero incompleto, que debe corroborar con el usuario

• Recuerde que inicio no es igual a requisitos, elaboración no es igual a análisis y construcción no es igual a diseño, etc

• Recuerde que cada iteración tiene un duración fija de 2 a 6 semanas aproximadamente dependiendo de la magnitud del proyecto

Page 49: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 2.1 si puedo definir y dar ejemplos de:

• Disciplinas / Fases

• Fase de inicio

• Fase de elaboración

• Fase de construcción

• Fase de transición

• Desarrollo iterativo e incremental

• Interpreto en el gráfico que significan las “montañitas”

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Page 50: 44622246-As-a-2008

Auto evaluación/2Comprendí los conceptos más importantes de la unidad 2.1, si

• Conozco por qué usamos modelos y no directamente codificamos

• Entiendo en qué etapas del proceso de desarrollo utilizo UML

• Entiendo la diferencia entre el ciclo de vida en cascada y el UP

• Comprendo la relación que existe entre disciplinas de UP y el ciclo de vida en cascada

• Entiendo qué tienen en común el ciclo de vida en espiral y el UP

• Comprendo en qué hacen énfasis cada una de las fases del UP

• Entiendo cuál es el producto final de cada iteración

Page 51: 44622246-As-a-2008

2º parte

Proceso de desarrollo “simplificado”

Page 52: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE INICIO

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

Comenzamos con los casos de uso.Inicialmente el nombre y una descripción

Page 53: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

Describimos los casos de uso con mayor detalle.

Escenario principal

El cliente ingresa a la pagina Web de CVLIEl cliente ingresa a la opción “registración “El sistema solicita ingreso de los datos personalesEl sistema evalúa el país….…..

Page 54: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Creamos los diagramasde secuencia de sistemas para cada caso de uso.

Escenario principal

El cliente ingresa a la pagina Web de CVLIEl cliente ingresa a la opción “registración “El sistema solicita ingreso de los datos personalesEl sistema evalúa el país.…..

: SISTEMA

: cliente ingresarSistema()

ingresarDatosPersonales()

ingresarTarjetaCredito()

ingresarPreferenciasEnvio()

ingresarClaveContraseña()

DSS "Registrarse al sistema"

Page 55: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Creamos el modelo del dominio: CLASES, ASOCIACIONES, ATRIBUTOS

Autor

nombreapellido

ClienteOcacional ClienteEspecializado

profesion

DireccionCompra

callenumero

OpcionEntrega

tipo

Tarjeta

nombrenumero

OrdenCompra

numero

IngresarPref erencias()

1

1

1

1

1

1

1

1

1

1

1

1

Cliente

nombreapellidodireccionte

ingresarDatos()

0..*1 0..*1 tiene

CarritoCompra

agregarItem()v enta()

1

1

1

1

es de

1

1

1

1

usa

Items

cantidad

crear()subtotal()

1..*

1

1..*

1

tiene

EjemplarLibro

numero

darPrecio()1

0..*

1

0..* pertenecen

Categoria

tipo

Libro

isbntituloeditorial

ConsultarLibro()

1..* 1..*1..* 1..*escrito por

1..*

1

1..*

1

tiene

1

1..*

1

1..*

pertenece

Page 56: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Asignamos responsabilidadesa las clases, asistidos por los patrones de ASIGNACION DERESPONSABILIDADES

CarritoCompra

venta()

1..*

11

tiene

1..*

Items

cantidad

subtotal()

0..* pertenecen

1

0..*

1

EjemplarLibro

numeroprecio

darPrecio()

: Items : CarritoCompra1: crear( parametros )

Page 57: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Transformamos el modelo de clases a un modelo dedatos y luego al modelo relacional

CLIENTE

EJEMPLARLIBRO

cod_cli

num_ejemp

1

1

ORDENCOMPRA

1

1

1

cod_carro

cod_ord

AUTOR LIBRO

cod_librocod_autor

ITEMS

num_item

CARRITOCOMPRA

1

N

N

N 1

1

N

N N

Page 58: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Primera iteración

ETAPA DE ELABORACIÓN

Codificamos y probamos.

Mostramos el ejecutable al usuario

public class AdaptadorFigura extends Figura{private int x;

public AdaptadorFigura(){ variables

x = 0; }}

Page 59: 44622246-As-a-2008

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Segunda iteración

ETAPA DE ELABORACIÓN

Comenzamos una nueva iteración trabajando con nuevos casos de uso (o mejorando los anteriores)

Page 60: 44622246-As-a-2008
Page 61: 44622246-As-a-2008

Fin

Page 62: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación . 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software. 2º parte

Page 63: 44622246-As-a-2008

Introducción

Consideraciones Generales

Page 64: 44622246-As-a-2008

EL paradigma OO se impuso por…

• Conceptos comunes de modelado a lo largo de todo el ciclo de vida

• Reducción de la brecha entre el mundo de los problemas y el mundo de los modelos

• Aumento de complejidad de los sistemas

• Aumento de la necesidad de reutilización

• Uso de patrones

Page 65: 44622246-As-a-2008

Análisis, Diseño, Implantación

• El análisis OO pone énfasis en la investigación del problema y los requisitos, en vez de ponerlo en la solución

• El diseño pone énfasis en una solución conceptual, que satisface los requisitos, en vez de ponerlo en la implantación

• La implantación es la traducción de la solución a un lenguaje de programación determinado

Page 66: 44622246-As-a-2008

Análisis OO vs. Diseño OO

• Durante el análisis OO se presta especial atención a encontrar y describir los objetos (conceptos) del dominio del problema

• Durante el diseño OO se presta atención a la definición de los objetos software y en como colaboran para satisfacer los requisitos

Clientenombreapellido

Cliente

concepto del dominio

visualizacion de los conceptos del dominio

representacion en un lenguaje de programación

public class Cliente

{ private String nombre

private String apellido

public void imprimirNombre()

…….. }

Page 67: 44622246-As-a-2008

Análisis OO

• La finalidad del análisis OO es crear una descripción del dominio desde una perspectiva de clasificación de objetos: identificación de conceptos, atributos e interrelaciones significativas

• El modelo del dominio NO es una descripción de los objetos software, es una visualización de los conceptos del mundo real y sus vinculaciones (se representan mediante diagrama de clases, sin operaciones)

Page 68: 44622246-As-a-2008

Abstracción y Encapsulamiento

La abstracción es la propiedad que permite representar las características esenciales de un objeto, sin preocuparse de las restantes características (no esenciales).

El Encapsulamiento es la propiedad que permite asegurar que el contenido de la información de un objeto está oculta al mundo exterior .

 El encapsulamiento, al separar el comportamiento del objeto de su implantación, permite la modificación de éste sin que se tengan que modificar las aplicaciones que lo utilizan

Page 69: 44622246-As-a-2008

Clases conceptuales

• Una clase conceptual se puede considerar en términos de:

• Símbolo: palabras o imágenes que representan la clase conceptual

• Intensión: la definición de la clase conceptual

• Extensión: el conjunto de ejemplos a los que se aplica la clase conceptual

Una venta representa una transacción de compra

venta 1

venta 2

venta 3

Ventafechahora

Page 70: 44622246-As-a-2008

Modelo del dominio

Análisis = descomposición de un dominio de interés en clases conceptuales

Modelo del dominio = representación visual de las clases conceptuales del mundo real

Se visualizan en el modelo de dominio:

• Clases conceptuales• Asociaciones entre clases

conceptuales• Atributos de las clases

conceptuales

ArticulonroSerie

Especificaciondescripcionprecio

describe

Page 71: 44622246-As-a-2008

Responsabilidades

• Una responsabilidad es un contrato u obligación de una clase

• Una clase puede tener cualquier numero de responsabilidades, pero una clase bien estructurada debería tener al menos una y como mucho unas pocas (alta cohesión)

• Las responsabilidades se describen inicialmente con texto libre

• Al ir refinando los modelos, las responsabilidades se traducirán en el conjunto de atributos y operaciones que satisfagan esas responsabilidades

(ver guía 5.1 Patrones de Diseño para Asignación de Responsabilidades)

Page 72: 44622246-As-a-2008

Tarjetas CRC (Colaboración-Responsabilidad-Clase)

Por cada clase describimos:

El nombre de la clase y su descripciónLa responsabilidad de la clase

– Conocimiento interno de la clase– Servicios brindados por la clase

Los colaboradores para las responsabilidades– Un colaborador es una clase cuyos servicios son necesarios para una

responsabilidad

Usaremos una adaptación de las tarjetas CRC como primera aproximación para luego refinar las clases en la etapa de diseño

Page 73: 44622246-As-a-2008

Tarjetas CRC

El nombre de la clase: es importante que el nombre refleje la esencia de lo que hace la clase

Las responsabilidades de la clase: determinan qué debe hacer. Estas responsabilidades pertenecen, esencialmente, a dos categorías: hacer y conocer

HACERHacer algo uno mismo.Iniciar una acción en otros objetos.Controlar y coordinar actividades en otros objetos

CONOCERConocer los datos privados encapsulados.Conocer los objetos relacionados.Conocer las cosas que se pueden derivar o calcular.

Las colaboraciones de la clase especifican con qué otras clases interactúan

Page 74: 44622246-As-a-2008

Tarjetas CRC (adaptación)

Ejemplo

RESPONSABILIDADES COLABORACIONES

Agregar un estudiante ESTUDIANTE

Conocer los prerrequisitos

Conocer cuándo el curso es dado

Conocer dónde es dado el curso

Nombre de la clase: CURSO Descripción: específica el curso….

HACER

CONOCER

Page 75: 44622246-As-a-2008

Diseño OO

• La finalidad del diseño OO es definir los objetos software y sus colaboraciones (se utilizan en esta etapa diagramas de interacción: comunicación y secuencia)

• A diferencia del modelo del dominio, este modelo no muestra conceptos del mundo real, sino clases software, con atributos operaciones y asociaciones

Page 76: 44622246-As-a-2008

Objetos

“Un objeto es cualquier cosa real o abstracta, acerca de la cual almacenamos datos y las operaciones que controlan dichos datos”

 

Se opone al análisis estructurado donde los datos y el comportamiento están débilmente relacionados

Tenemos que olvidarnos del modelo estructurado...

Page 77: 44622246-As-a-2008

Propiedades de los Objetos

“El estado de un objeto abarca todas las propiedades (normalmente estáticas) del mismo, más los valores actuales (normalmente dinámicos) de cada una de esas propiedades”

“El comportamiento nos muestra como actúa y reacciona un objeto, en términos de sus cambios de estado y paso de

mensajes”

“La identidad es aquella propiedad de un objeto que lo distingue de todos los demás objetos”

Page 78: 44622246-As-a-2008

Clases

Una clase especifica una estructura de datos y las operaciones permisibles que se aplican a cada uno de sus objetos.

Los objetos se vinculan mediante enlaces enviando mensajes a operaciones que activan los métodos

• Mensaje: es una solicitud para que se lleve a cabo la operación indicada y se produzca el resultado.

• Operaciones: es una función o transformación que se aplica a un objeto de una clase

• Métodos: es la implementación de una operación

“Un objeto es una instancia de una clase”

 

Page 79: 44622246-As-a-2008

Relaciones de Asociación

“Se descompone (clases) para comprender, se une (asociación) para contruir”

• Los enlaces entre objetos son instancias de la asociación entre sus clases

• La asociación representa un acoplamiento débil, la Agregación y la Composición expresa un acoplamiento más fuerte en clases

Page 80: 44622246-As-a-2008

Relaciones de Jerarquía

• La generalización consiste en factorizar los elementos comunes de un conjunto de clases en una clase más general llamada superclase

• La herencia es una técnica de los lenguajes de programación para construir una clase a partir de una o varias clases, compartiendo atributos y operaciones

Page 81: 44622246-As-a-2008

Polimorfismo/1Permite la posibilidad de desencadenar operaciones diferentes en

respuesta a un mismo mensaje

el polimorfismo permite referirse a objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma operación de

diferentes formas, según sea el objeto que se referencia en ese momento.

Circulo

dibujar()mover()

Rectangulo

dibujar()mover()

Triangulo

dibujar()mover()

Figura

dibujar()mover()

Editor

Page 82: 44622246-As-a-2008

Polimorfismo/2

Circulo

dibujar()mover()

Rectangulo

dibujar()mover()

Triangulo

dibujar()mover()

Figura

dibujar()mover()

Editor

La interacciones entre objetos se escriben según los términos de las especificaciones definidas en las superclases

El método dibujar() no es igual para cada figura

Redefino en las subclases el método dibujar()

Cada vez que se invoque el método dibujar() dependerá de la

clase a la pertenece el objeto

unCirculo.dibujar();

UnTriangulo.dibujar();

unRectangulo.dibujar();

Page 83: 44622246-As-a-2008

Análisis Estructurado vs. Análisis Orientado a Objetos

El enfoque tradicional del análisis y diseño estructurados, se descompone el problema en funciones o procesos y estructuras de datos

En un enfoque OO se busca descomponer el problema, no en funciones, sino en unidades más

pequeñas denominadas objetos,

Page 84: 44622246-As-a-2008

Beneficios del Enfoque OO

Disminución del bache semántico entre análisis y diseño proveyendo una representación consistente en todo el ciclo de

vida 

Enfoque OOLa transición del análisis al diseño es un refinamiento

Enfoque EstructuradoEn la transición del análisis al diseño

pasamos del DFD al DE mediante un proceso heurístico no trivial

 

Page 85: 44622246-As-a-2008

Sugerencias• Cuando realice el análisis ponga énfasis en la investigación del problema y los requisitos

• Cuando realice el diseño ponga énfasis en una solución conceptual del problema

• En la etapa de análisis se realiza el Modelo del dominio (representación visual de las clases conceptuales del mundo real)

• Realice una tarjeta CRC para comenzar a entender la clase propuesta (esta será refinada posteriormente en la etapa de diseño)

• Si bien son conceptos vinculados, tenga presente la diferencia entre mensaje, operación y método

• Recuerde que la composición y la agregación son tipos particulares de asociaciones

• Tenga en cuenta que la generalización es un concepto que permite organizar estructuralmente las abstracciones y la herencia es una técnica de los lenguajes de programación que permite implementarla

Page 86: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 1.1 si puedo definir y dar ejemplos de:

• Análisis OO / Diseño OO• Modelo de dominio de la aplicación• Abstracción / Encapsulamiento• Estado / Comportamiento / Identidad • Tarjetas CRC• Mensaje / Operación / Método • Asociación / Agregación / Composición • Generalización / Herencia / Polimorfismo

Page 87: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 1, si

• Comprendo la diferencia entre el análisis y diseño Estructurado y el OO

• Entiendo la diferencia entre análisis, diseño e implementación y que es lo que realizo en cada una de estas actividades

• Vinculo la etapa de análisis con la descripción del modelo de dominio de la aplicación

• Comprendo cual es el uso de las tarjetas CRC

• Entiendo cual es el objetivo de la abstracción y el encapsulamiento

• Entiendo la diferencia entre mensajes, operaciones y método

• Comprendo la diferencia entre asociación, agregación y composición

• Entiendo la diferencia entre generalización y herencia

Page 88: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 3.1 Casos de Uso

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 89: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 90: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Por qué usamos modelos y no directamente codificamos?

• ¿En qué etapas del proceso de desarrollo utilizo UML?

• ¿Cuál es la diferencia entre el ciclo de vida en cascada y el UP?

• ¿Cuál es la relación que existe entre disciplinas de UP y el ciclo de vida en cascada?

• ¿Qué tienen en común el ciclo de vida en espiral y el UP?

• ¿En qué que hacen énfasis cada una de las fases del UP?

• ¿En qué termina cada iteración?

Page 91: 44622246-As-a-2008

Casos de Uso

Page 92: 44622246-As-a-2008

Ingeniería de Requisitos

• La Ingeniería de Requisitos direcciona el proceso de elicitación, definición, modelado, análisis, especificación y validación de los requisitos de un sistema y de su software, basado en un enfoque sistemático, separando el "qué" del "cómo" del diseño.

Page 93: 44622246-As-a-2008

¿Qué es un Requisito?

• Flujo de trabajo fundamental cuyo proposito esencial es orientar el desarrollo hacia el sistema correcto

• Esto se lleva a cabo mediante la descripcion de los requisitos del sistema de forma tal que se pueda llegar a un acuerdo entre el cliente (usuario) y los desarrolladores del sistema, acerca de lo que el sistema debe hacer y lo que no

• El conjunto de todos los requisistos forman la base para el desarrollo del sistema o el componente de sistema

Page 94: 44622246-As-a-2008

Tipos de Requisitos

• Funcionales: especifica una acción que debe ser capaz de realizar el sistema, sin considerar restricciones físicas

• No funcionales: especifica restricciones físicas sobre un requisito funcional (rendimiento, plataforma, fiabilidad)

Page 95: 44622246-As-a-2008

Requisitos y Casos de Uso

• Los casos de uso son una técnica para la especificación de requisitos funcionales propuesta inicialmente por Jacobson (1992)

• Los casos de uso presentan una ventaja sobre la descripción textual de los requisitos funcionales

• Los casos de uso son, ante todo, requisitos funcionales

• A pesar de ser una técnica ampliamente aceptada, existen múltiples propuestas para su realización

Page 96: 44622246-As-a-2008

¿Qué es un caso de uso?

• Los casos de uso son una técnica que se utiliza para documentar los requerimientos funcionales de un sistema desde el punto de vista de los usuarios

• Los casos de uso responden a la pregunta: ¿Qué se supone que el sistema debe hacer para los usuarios?

• Un caso de uso es un texto muy simple con cierto formato que describe cómo se debería comportar un sistema ante la interacción con uno o más usuarios

Los casos de uso no son “orientados a objetos”

Page 97: 44622246-As-a-2008

Ventajas de los casos de uso

• Los casos de uso sirven como una forma de comunicación entre personas de uno o varios equipos de trabajo, estimulando la discusión acerca del comportamiento del sistema en cuestión

• Los casos de uso sirven, por su simpleza, para validar los requerimientos directamente con los (futuros) usuarios del sistema

Page 98: 44622246-As-a-2008

Diagrama de Casos de Uso

actor 2

actor 1

caso de uso 2

caso de uso 1

<<extend>>

caso de uso 3

caso de uso 4

<<include>>

El valor de los casos de uso está en su descripción detallada (no en el dibujo…)

Page 99: 44622246-As-a-2008

Casos de Uso

Describe tanto lo que hace el actor como lo que hace el sistema cuando interactúa con él

Están acotados al uso de una determinada funcionalidad, claramente diferenciada, del sistema

Un caso de uso realiza cierto trabajo cuyo efecto es tangible para un actor

Actorcaso de uso

Page 100: 44622246-As-a-2008

Casos de Uso - actores

Un actor es alguien o algo que interactúa con el sistema (una persona, una organización, un programa o sistema de hardware o software)

Un actor estimula al sistema con algún evento o recibe información del sistema

Un actor es externo al sistema

Un actor cumple un rol definido (Ej.: Cliente, Banco, empleado)

Page 101: 44622246-As-a-2008

Diagrama de Contexto

Permite determinar las fronteras del sistema

CVLI

Cliente

Administrador Sistema

<< actor>>

TARJETA DECREDITO

<< actor>>

GESTORDE ENVIO

<< actor>>

GESTORDE LIBROS

0..*

0..1

0..1

0..1

0..1

secundario

secundario

secundario

Page 102: 44622246-As-a-2008

Tipo de Actores

Actores primarios: utilizan las funciones principales del sistema

Actores secundarios: efectúan tareas administrativas o de mantenimiento

CVLI

Cliente

Administrador Sistema

<< actor>>

TARJETA DECREDITO

<< actor>>

GESTORDE ENVIO

<< actor>>

GESTORDE LIBROS

0..*

0..1

0..1

0..1

0..1

secundario

secundario

secundario

Page 103: 44622246-As-a-2008

¿Cómo encontrar actores?

• ¿Quién usa el sistema?• ¿Quién instala o mantiene al sistema?• ¿Qué otros sistemas utilizan al sistema?• ¿Quién recibe información del sistema?• ¿Quién le provee información al sistema?

Una buena técnica para encontrar posibles actores es responder las siguientes preguntas:

Page 104: 44622246-As-a-2008

Caso de uso y Escenarios

Un caso de uso no trivial describe un conjunto de secuencias, no una única secuencia. Es conveniente separar el flujo principal

de los flujos alternativos

Por ejemplo: el caso de uso Contratar Empleado podría tener variantes: contratar externos (Escenario más frecuente) , traslado dentro de la misma empresa, contratar extranjeros. Cada una de estas variantes se puede expresar en una secuencia diferente

Cada secuencia específica del caso de uso se denomina Escenario

Un escenario es una secuencia específica de acciones entre los actores y el sistema (es una instancia de un caso de uso)

Page 105: 44622246-As-a-2008

Caso de Uso y Colaboraciones Un caso de uso captura el comportamiento esperado del sistema sin tener que

especificar cómo se implementará

Es importante separar el análisis (que especifica un comportamiento) de la implementación (que especifica cómo se lleva a cabo ese comportamiento)

De todas maneras, un caso de uso deberá implantarse y esto lo hará mediante una sociedad de clases (incluyendo su estructura estática y dinámica) que se modela como una colaboración

Una realización especifica un contrato entre el caso de uso y su colaboración

Caso de uso

Colaboración

hacer pedido

gestion de Pedidos

Realización

Page 106: 44622246-As-a-2008

Caso de Uso - asociación

Muestra la relación entre los actores y los casos de uso

Los actores sólo se pueden conectar a los casos de uso a través de asociaciones que indican que el actor y el caso de uso se comunican entre sí y que pueden enviar y recibir mensajes

• El actor inicia la comunicación

• El actor recibe la comunicación del caso de uso

Page 107: 44622246-As-a-2008

Relación <<include>>

Una relación de inclusión entre casos de uso especifica que un caso de uso base incorpora explícitamente el comportamiento de otro caso de uso en el lugar establecido en el caso de uso base

Una relación de inclusión se representa como una dependencia

Una dependencia es una relación de uso que declara que un caso de uso utiliza información y servicios de otro

Caso de Uso A Caso de Uso B

<<include>>

El caso de uso A incluye en su funcionalidad el caso uso B

Page 108: 44622246-As-a-2008

¿Cuándo se utiliza include?

Cuando un caso de uso incorpora explicitamente el comportamiento de otro caso de uso

Para evitar repeticiones de descripción de flujos de eventos

Cuando distintos casos de uso poseen un conjunto de eventos con la misma funcionalidad, estos eventos se pueden factorizar en un nuevo caso de uso, el cual se relacionará con los anteriores mediante la relación de inclusión

Cuando un caso de uso es muy extenso y difícil de leer

Se entiende que algunos de los pasos en una situación dentro de un Caso de Uso son los mismos que los de otro Caso de Uso, y en lugar de listar

los mismos pasos, tan sólo indicamos el Caso de Uso de donde provienen

Page 109: 44622246-As-a-2008

Relación <<extend>>Una relación de extensión entre casos de uso especifica que un caso de

uso base incorpora implícitamente el comportamiento de otro caso de uso en el lugar especificado por el caso de uso base que extiende. Se representa mediante una dependencia

La funcionalidad de un caso de uso incluye un conjunto de pasos que ocurren sólo en algunas oportunidades 

La excepción consiste en interrumpir el caso de uso B y pasar a ejecutar otro caso de uso A

Caso de Uso ACaso de Uso B

<<extend>>

El caso de uso B (caso de uso base) incluye en su funcionalidad (opcionalmente) el caso uso A

Page 110: 44622246-As-a-2008

Relación <<extend>>

En la relación de extensión, existe un caso de uso base el cual puede se extendido por otro caso de uso

La extensión se realiza a partir de los puntos de extensión y éste caso de uso es utilizado en esos puntos si se cumple una condición

El caso de uso base no necesita nombrar al o a los casos de uso que lo extienden

El caso de uso que extiende, nombra al caso de uso base, nombra al o a los puntos de extensión e incluye la condición que determina si se toma o no la extensión.

Se entiende que se agregan pasos a un Caso de Uso existente, y esto se hace creando un nuevo Caso de Uso, que enriquece al existente, pero no lo

modifica.

Page 111: 44622246-As-a-2008

¿Cuándo se utiliza extend?

Se puede utilizar para:

Cuando se desea describir una variación del comportamiento normal de un caso de uso.

Para conjuntos de eventos que son ejecutados solamente en ciertos casos.

Cuando la sección de flujos alternativos de un caso de uso se torna muy grande y difícil de leer, es conveniente crear nuevos casos de usos a partir de estos flujos alternativos que extiendan al caso de uso original.

Page 112: 44622246-As-a-2008

Ejemplo/1

Pago con Vale Regalo

Procesar Venta

<<extend>>

Caso de uso base

caso de uso que extiende

El caso de uso base no necesita nombrar a el o a los casos de uso que lo extienden

El caso de uso que extiende, nombra al caso de uso base, nombra a el o a los puntos de extensión e incluye la condición que determina si se toma o no la extensión.

Page 113: 44622246-As-a-2008

Ejemplo/2

Caso de uso PROCESAR VENTAPunto de extensión: pago, paso 7Escenario principal

1. el cliente llega al puesto de venta con mercaderías para comprar….….7. El cliente paga y gestiona el pago

Caso de uso PAGO CON VALE REGALO

Condición: el cliente quiere pagar con vale regaloPuntos de extensión: pago en PROCESAR VENTAEscenario principal

1. el cliente le da el vale regalo al cajero2. …

Caso de uso base

Caso de Uso que extiende

condición

Puntos de extensión

Page 114: 44622246-As-a-2008

Pre y Post Condiciones

Pre condiciones: establece lo que siempre debe cumplirse antes de comenzar un caso de uso. No se prueban en el caso de uso, se asumen que son verdaderas

Post condiciones: establece qué debe cumplirse cuando el caso de uso se completa con éxito

Page 115: 44622246-As-a-2008

Plantilla básico para descripción de CdeU

• Nombre de caso de uso• Resumen• Actores• Fecha de creación: • Fecha de actualización:• Versión• Pre condición• [Punto de extensión] (si fuera necesario)• [Condición] (si fuera necesario)

• Escenario principal• Flujo alternativo• Post condición

Page 116: 44622246-As-a-2008

Los Casos de uso y las fases en el UP

• En la fase de inicio se reconocen las mayoría de los casos de uso, pero no su descripción detallada

• En la fase de elaboración, se refinan en las sucesivas iteraciones

• En la fase de construcción, se escriben casos de uso menores

• En la fase de transición, no se describen casos de uso

El Proceso UnificadoIterativo e incremental

Iter

#n

------------Iter#2

prueba

Iter#n-1

------Iter#1

Implementación

Diseño

Análisis

Requisitos

TransiciónConstrucciónElaboracióninicioFases

disciplinas

Page 117: 44622246-As-a-2008

un ejemplo...

Consultar libros en general

Consultar novedades Consultar ofertas

Cliente

Consultar libro

<<extend>><<extend>>

<<extend>>

Page 118: 44622246-As-a-2008

un ejemplo...

Consultar libros en general

Consultar novedades Consultar ofertas

comprar libro

Cliente

buscar libros

Consultar libro

<<extend>>

<<extend>><<extend>>

<<include>><<include>>

Page 119: 44622246-As-a-2008

Comenzamos con el caso práctico...

Page 120: 44622246-As-a-2008

Compañía de Ventas de Libros por Internet (CVLI) (Descripción sintética del Sistema)

• El cliente accede a la información sobre los libros a través de la Web• El cliente elegirá un nombre de usuario y una clave como método de

autentificación para efectuar las transacciones• El cliente podrá realizar búsquedas por autor, título o ISBN• El cliente debe estar previamente registrado• El cliente puede establecer preferencias de envío• El cliente puede introducir opciones de empaquetado• La librería deberá recoger los datos de los pedidos• La librería deberá rearmar en uno único los pedidos aislados que estén

dentro del plazo de 90 minutos• La empresa puede realizar envíos parciales en función de la disponibilidad

de los ítems

Page 121: 44622246-As-a-2008

Identificación de los actores

• Cliente (primario)

• Administrador del sistema (primario)

• Tarjeta de crédito (secundario)

• Gestor de libros (secundario)

• Gestor de envío (secundario)

Page 122: 44622246-As-a-2008

Diagrama de Contexto

Permite determinar las fronteras del sistema

CVLI

Cliente

Administrador Sistema

<< actor>>

TARJETA DECREDITO

<< actor>>

GESTORDE ENVIO

<< actor>>

GESTORDE LIBROS

0..*

0..1

0..1

0..1

0..1

secundario

secundario

secundario

Page 123: 44622246-As-a-2008

Identificación de los Casos de Uso

ClienteRegistrarse al sistemaConsultar libroComprar libroEstablecer preferencias de envío y empaquetado Administrador del sistemaArmar pedidosRearmar pedidos

Page 124: 44622246-As-a-2008

Diagrama de Casos de Uso

Armar pedidos

Rearmar pedidos Administrador del Sistema

Establecer preferencias de envío y empaquetado

Consultar libro

Cliente

Gestor de Libros

Comprar libro

Registrarse al sistema

Tarjeta de Credito

Page 125: 44622246-As-a-2008

Descripción de los Casos de Uso

Nombre de caso de uso: Registrarse al sistema

Resumen: el cliente, antes de realizar una primera transacción de compra o búsqueda de libros, debe introducir todos sus datos por única vez, los cuales serán guardados por el sistema y éste le ofrecerá la posibilidad de tener una clave y contraseña que utilizará para cada transacción que realice posteriormente, el cliente tendrá la posibilidad de hacer cambios en los datos introducidos, incluso en su clave y contraseña

Actores: cliente (primario), tarjeta de crédito (secundario)

Page 126: 44622246-As-a-2008

Descripción de los Casos de Uso

Titulo: Consultar libro

Resumen: el cliente, una vez ingresado al sistema, podrá navegar por el mismo en búsqueda de libros, novedades, ofertas, etc.

Actores: cliente (primario), gestor de libros (secundario)

Page 127: 44622246-As-a-2008

Descripción de los Casos de Uso

Titulo: Comprar libro

Resumen: el cliente, una vez ingresado al sistema, podrá realizar compras de libros, eligiéndolo de una lista ofrecida por la empresa, cada libro elegido, se sumará a una carrito de compra, etc. El cliente informará el número y tipo de tarjeta de crédito para realizar el pago. Deberá especificar dirección de envió y forma de pago

Actores: cliente (primario), gestor de libros (secundario), tarjeta de crédito (secundario)

Page 128: 44622246-As-a-2008

Refinamiento: include y extend

Establecer preferencias de envío y empaquetado

Consultar libros en general

Consultar novedades Consultar ofertas

Cliente

Gestor de Libros

Tarjeta de Credito

Consultar libro

<<extend>><<extend>>

<<extend>>

Comprar libro

<<include>>

<<extend>>

Page 129: 44622246-As-a-2008

Desarrollo de un Caso de UsoNombre de caso de uso: Registrarse al sistema

Resumen: el cliente, antes de realizar una primera transacción de compra o búsqueda de libros, debe introducir todos sus datos por única vez, los cuales serán guardados por el sistema y éste le ofrecerá la posibilidad de tener una clave y contraseña que utilizará para cada transacción que realice posteriormente, el cliente tendrá la posibilidad de hacer cambios en los datos introducidos, incluso en su clave y contraseña

Actores: cliente (primario), tarjeta de crédito (secundario)

Fecha de creación: Fecha de actualización:Versión:

Pre condición: el cliente ingresa al sistema por primera vez

Page 130: 44622246-As-a-2008

Escenario principal

1. El cliente ingresa a la pagina Web de CVLI2. El cliente ingresa a la opción “registración “3. El sistema solicita ingreso de los datos personales: nombre y apellidos, dirección, localidad, código postal,

país4. El cliente ingresa los datos personales5. El sistema evalúa el país de origen y solicita ingreso de los datos de la tarjeta de crédito: tipo de tarjeta,

número, fecha límite de validez6. El cliente ingresa datos de la tarjeta de crédito7. El sistema chequea el número de la tarjeta de crédito8. El sistema (teniendo en cuenta el país de origen) solicita la opción de preferencia de envío por omisión,

esta opción puede modificarse en cada envío9. El cliente ingresa preferencia de envío10. El sistema solicita, para finalizar, el ingreso de la clave de acceso y la contraseña11. El cliente ingresa clave y contraseña12. El sistema solicita reingreso de contraseña13. El cliente reingresa contraseña14. El sistema informa que la transacción se realizo correctamente

Page 131: 44622246-As-a-2008

Flujo alternativo A1 Ingreso incorrecto de los números de los datosLa secuencia comienza en el punto 4 del escenario principal

5. El sistema informa que los datos ingresados son incorrectos 6. El sistema pide ingreso de números nuevamente

El escenario vuelve al punto 5 A2 Ingreso incorrecto de los números de la tarjeta de créditoLa secuencia comienza en el punto 7 del escenario principal

7. El sistema informa que los números ingresados son incorrectos 8. El sistema evalúa si la cantidad de veces que ingreso el numero de tarjeta en forma incorrecta es menor a 39. El sistema pide ingreso de números nuevamente

El escenario vuelve al punto 8 Poscondición: el cliente está registrado en el sistema

Page 132: 44622246-As-a-2008

Sugerencias• Utilice la plantilla modelo de casos de uso. Ayuda a entender las partes

componentes

• Recuerde que los casos de uso son texto, el gráfico sólo nos brinda una visión general

• Piense al caso de uso como una comunicación entre el actor y el sistema (no en cómo resolverá el sistema el problema planteado)

• Los flujos alternativos pueden ser errores o excepciones (no relaciones de extensión)

• Utilice las relaciones de extensión e inclusión en una etapa posterior de refinamiento. Al principio céntrese en comprender bien el caso de uso

• Describa el flujo de eventos lo suficientemente claro para que alguien externo al sistema lo pueda entender

• Amplíe la funcionalidad del caso de uso en cada iteración del proceso de desarrollo

Page 133: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 3.1 si puedo definir y dar ejemplos de:

• Requisitos funcionales y no funcionales• Escenarios • Escenario principal• Flujo alternativo• Colaboraciones• Relación de inclusión• Relación de extensión • Pre y post condiciones

Page 134: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 3.1, si:

• Entiendo que lo más importante de los casos de usos es la descripción detallada de la interacción actor-sistema. No el gráfico

• Comprendo qué es un escenario y lo vinculo con las relaciones de extensión e inclusión

• Entiendo qué es una colaboración y vinculo este concepto con la realización de un caso de uso

• Entiendo qué describe una pre y una post condición

• Comprendo cuándo usar una relación de inclusión y cuándo una extensión

• Comprendo que las relaciones de extensión e inclusión corresponden a una etapa de refinamiento

Page 135: 44622246-As-a-2008

• FIN

Page 136: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 3.2 Diagrama de Clases

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 137: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de colaboración. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 138: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Qué es un escenario y cómo lo vinculo con las relaciones de extensión e inclusión?

• ¿Qué es una colaboración y cómo vinculo este concepto con la realización de un caso de uso?

• ¿Qué describe una pre y una post condición?

• ¿Cuándo debo usar una relación de inclusión y cuándo una extensión?

• ¿Comprendo que las relaciones de extensión e inclusión corresponden a una etapa de refinamiento?

Page 139: 44622246-As-a-2008

Clases

Las clases representan los bloques de construcción más importantes de cualquier sistema orientado a objetos.

Una clase es una descripción de un conjunto de objetos que comparten los

mismos atributos, operaciones, relaciones y semántica.

Los lenguajes de programación OO soportan directamente el concepto de clase

public class Cliente

{ private String nombre;

private String apellido;

public void imprimirNombre() { };

… }

Clientenombreapellido

imprimirNombre()

Page 140: 44622246-As-a-2008

Atributos y Operaciones

Un atributo es una propiedad de una clase que es compartida por todos los elementos de esa clase

Una clase puede tener cualquier número de atributos o no tener ninguno

Una operación es una abstracción de algo que se puede hacer a un objeto y que es compartido por todos los objetos de la clase

Una clase puede tener cualquier numero de operaciones o ninguna

Nombre de Clase

atributo 1atributo 2atributo n

operacion 1()operacion 2()operacion n()

Compartimiento para atributos

Compartimiento para operaciones

Compartimiento para nombre de clase

Page 141: 44622246-As-a-2008

Visibilidad de Atributos y Operaciones

• Visibilidad pública (Public +): cualquier clase externa puede utilizar la característica

• Visibilidad privada (Private -): solo la propia clase puede utilizar la característica

• Visibilidad protegida (Protected #): cualquier descendiente de la clase puede utilizar la característica

• Visibilidad de paquete (package ~) solo los que estén declarados dentro del paquete pueden utilizar la característica

Nombre de Clase

atributo 1atributo 2atributo n

operacion 1()operacion 2()operacion n()

(-) visibilidad privada(#) visibilidad protegida(+) visibilidad pública(~) visibilidad paquete

Page 142: 44622246-As-a-2008

Descripción de atributos y operaciones

Atributo

Visibilidad [/] nombre : tipo = valor inicial

ejemplo - temperatura : integer = 0

Operación Visibilidad nombre (lista parámetros ) : tipo de

expresión retornada

ejemplo +BuscarValor (n: integer) : integer

Calentadortemperatura : Integer = 0

BuscarValor(n : integer) : Integer

Page 143: 44622246-As-a-2008

Instancias de clases: objetos

Una instancia es la manifestación concreta de una abstracción a la que se le pueden aplicar un conjunto de operaciones y posee un estado que almacena el efecto de las operaciones

: Usuario : Usuario

Usuario

Clase Usuario

Objetos Usuario

¿Cómo se grafican los objetos?:

dos puntos, nombre de la clase, subrayado

:CLASE

Page 144: 44622246-As-a-2008

Clases abstractas

Son clases que no pueden ser instanciadas, se utilizan en jerarquías de generalización. Las clases abstractas tienen, al menos, una operación abstracta.

Una operación abstracta tiene que ser implementada por algún método en un nivel más bajo de abstracción

Nombre en cursiva

Triangulo

Figura

calcularSuperficie()

Cuadrado

calcularSuperficie()

Page 145: 44622246-As-a-2008

Interfaz/1

Una interfaz es una colección de operaciones que especifican un servicio de una clase o un componente

Específica el comportamiento visible externamente de la clase

Una interfaz define un conjunto de especificaciones de operaciones (su signatura) pero no su implementación

La interfaz es parecida a la clase abstracta, ninguna de las dos pueden tener instancias directas, no obstante una clase abstracta puede tener operaciones concretas.

Una interfaz es como una clase abstracta donde todas las operaciones también son abstractas

Page 146: 44622246-As-a-2008

Interfaz/2

La realización es una relación entre clasificadores

La realización se emplea para especificar la relación que existe entre una interfaz y la clase que proporciona la operación

Permite “simular” herencia múltiple

Defino la operación imprimir para muchas clases

Cada clase la implementa como corresponde

MatrizCuadrada

imprimir()

Imprimible

imprimir()

<<Interface>>

Vector

imprimir()

Matriz

Realización

Page 147: 44622246-As-a-2008

Relaciones/1

• Las clases no se encuentran aisladas, existen tres tipos principales de relaciones:

– Dependencias: relaciones de uso entre clases– Asociaciones: relaciones estructurales entre clases – Generalizaciones: conectan clases generales con sus

especializaciones

Ventana

abrir()cerrar()mover()dibujar()

VentanaDeConsola

Evento

VentanaDE Dialogo Control

dependencia

generalizaciónasociación

Page 148: 44622246-As-a-2008

Relaciones/2

Asociación Agregación

Composición

Generalización

Dependencia

Realización

Page 149: 44622246-As-a-2008

Dependencias

• Una dependencia es un relación de uso que declara que un elemento utiliza información de otro elemento

• En general se utilizan el contexto de las clases para indicar que una clase utiliza las operaciones de otra o utiliza variables o parámetros cuyo tipo viene dado por la otra clase

• En los diagramas de clase, se utilizan para describir la visibilidad entre clases que no es de tipo atributo

la operacion reproducirEn utiliza un parametro del tipo Canal

PeliculaDeVideonombre

reproducirEn(c : Canal)iniciar()parar()

Canal

Page 150: 44622246-As-a-2008

Asociaciones

• Una asociación es una relación estructural que específica que los objetos de una clase están conectados con objetos de otra (que puede ser la misma)

• Son relaciones entre clases que indica alguna conexión significativa que deseamos preservar durante algún tiempo

EmpresaPersona

*1..* *

patron

1..*

empleado

trabaja Para >1..*

1

dirige A >

jefe

operario1..*

1

Asociación binaria

Asociación unaria

Nombre de rol

multiplicidad

Page 151: 44622246-As-a-2008

Asociaciones – nombre de rolNombre de rol: cada objeto juega un rol específico en la asociación

por ejemplo, en la asociación binaria trabaja Para, un objeto Persona, juega el rol de empleado

En la asociación unaria dirige A, un objeto Persona puede jugar el rol de operario o de jefe

EmpresaPersona

*1..* *

patron

1..*

empleado

trabaja Para >1..*

1

1..* operario

1

jefe

dirige A >

Page 152: 44622246-As-a-2008

Asociaciones – multiplicidad de rol/1

Multiplicidad: define cuántas instancias de una clase A pueden asociarse con una instancia de una clase B

Representa un rango de enteros que especifican el tamaño posible del conjunto de objetos relacionados (v gr.: 0..1; 1..1; 0..*; 1..*)

El valor de la multiplicidad indica cuántas instancias se pueden asociar con otras en un momento concreto

una tienda puede tener uno o muchos artículos

Un artículo se vende en una tienda

Tienda Articulo

1..*11 1..*

Page 153: 44622246-As-a-2008

Asociaciones – multiplicidad de rol/2

A

A

A

A

A

A

B

B

B

B

B

B

1

0..1

0..*

1..*

3

0..1,3..5,7..9

A B3..6

Exactamente Uno:

Cero o Uno:

Cero o Muchos:

Uno o Más:

Número Exacto:

Lista:

Rango:

Page 154: 44622246-As-a-2008

Asociaciones - Agregación

• Este tipo especial de asociación modela una relación TODO/PARTE

• Es un tipo de asociación más fuerte

• Es una relación no simétrica entre clases donde uno de los extremos cumple un rol dominante

Computadora

Impresora

0..1

0..*0..*

Todo

Parte

Page 155: 44622246-As-a-2008

Asociaciones - Composición• La composición es una forma de agregación con una fuerte relación de pertenencia y

vidas coincidentes de la parte con el todo

• Dependencia existencial. El elemento dependiente desaparece al destruirse el que lo contiene

• Hay una pertenencia fuerte. Se puede decir que el objeto contenido es parte constitutiva y vital del que lo contiene

• Los objetos contenidos no son compartidos

Computadora

CPU Monitor Teclado1 1

1

Page 156: 44622246-As-a-2008

Clase Asociación

Una asociación puede representarse por medio de una clase que permite añadir, por ejemplo, atributos y operaciones

empresa empleado1..*

1..*

cargo

nombresueldo

empleador

empleado1..*

1..*

Por ejemplo, debido a la multiplicidad, el nombre del cargo y el sueldo no pueden pertenecer a la empresa o al empleado; son atributos de la asociación

Page 157: 44622246-As-a-2008

Instancia de Asociación: enlace

empleado empresa

11..*trabaja para

empleadorempleado

1..* 1

emp1 : empleado

emp2 : empleado

em : empresa

emp3 : empleado

asociación

enlace

(emp3, em)

(emp1, em)

(emp2, em)

cada instancia de una asociación (enlace) es una tupla de referencias a objetos

Page 158: 44622246-As-a-2008

Asociaciones – navegación

La navegación indica que en una asociación es posible navegar de los objetos de un tipo a los de otro. Esto es debido a que el objeto inicial almacena alguna referencia del objeto navegable

La navegación es el enunciado del conocimiento de una clase respecto a otra

Usuario Clave

*11 *

Dirección de navegación

Page 159: 44622246-As-a-2008

Asociaciones – visibilidad de rol

Dada una asociación entre clases, los objetos de una clase pueden ver y navegar hasta los objetos de otra a menos que se restringa específicamente

La visibilidad privada indica que los objetos de ese extremo no son accesibles a ningún objeto externo a la asociación

por ejemplo, un objeto Clave es accesible a un objeto Usuario pero no a un objeto GrupoUsuarios

GrupoUsuarios Usuario** Clave*1

+usuario +propietario -clave

* * 1 *

Page 160: 44622246-As-a-2008

Generalización

Rectangulo

dibujar()mover()

Circulo

dibujar()mover()

Triangulo

dibujar()mover()

Figura

color

dibujar()mover()

superclase

subclases

La generalización es una relación entre un elemento general (llamado superclase o padre ) y un tipo más específico de ese elemento (llamado subclase o hijo)

El hijo puede añadir nueva estructura y comportamiento o modificar el comportamiento del padre

La generalización consiste en factorizar los elementos comunes de un conjunto de clases en una clase más general llamada superclase

Page 161: 44622246-As-a-2008

Paquetes/1• Un paquete es un mecanismo de propósito general para organizar el modelo de

manera jerárquica

• Ayudan a organizar los elementos de modelado con el fin de comprenderlos. Los paquetes pueden tener dentro otros paquetes

• Los paquetes tienen un nombre que los identifica, el nombre puede ser simple o calificado (cuando le precede el nombre del paquete donde se encuentra)

Cliente Departamento::Cliente

Page 162: 44622246-As-a-2008

Paquetes/2

¿Cuáles son las ventajas de utilizar Paquetes?

– Evitar conflictos de nombres.

– Facilitar el reconocimiento y búsqueda de elementos de acuerdo a una funcionalidad específica.

– Controlar el acceso a sus contenidos.

– Todos los mecanismos de extensibilidad de UML se aplican a los paquetes.

Page 163: 44622246-As-a-2008

ejemplo

Prestamo

fechaduracion

ObraNoInterpretada

Socio

nombreapellidodireccion

prestar()

Ubicacion

estanteriaestantetramo

Interprete

ObraInterpretada

1..*

1..*

1..*

1..*

Autor

nombreapellidofechaNacimiento

Ejemplar

numero

colocar()

1..*

1..*

1..*

1..*

1

1

1

1

Soporte

obra

titulo

1..*

1..*

1..*

1..*

1..*1 1..*1

1..*

1..*

1..*

1..*

Libro Video

estaEditadoEn

registradoEn

prestadoA

situadoEnescritaPor

interpretadaPor

Page 164: 44622246-As-a-2008

Sugerencias

En la descripción de las clases del dominio del problema

– Identificar las clases y sus asociaciones más importantes– Incluir los atributos más importantes– No preocuparse inicialmente por las operaciones (corresponde a la etapa

de diseño)– No pensar en jerarquías (al principio...)

En una etapa de refinamiento (ver proceso de desarrollo) incluir

– Relaciones de jerarquía Clase/subclase– Agregaciones y composiciones– Patrones de diseño Larman– Patrones de diseño Gamma (opcional)– Restricciones OCL (opcional)

Page 165: 44622246-As-a-2008

Auto evaluación/1Comprendí los conceptos más importantes de la unidad 3.2. si puedo

definir y dar ejemplos de:

• Clase

• Clase abstracta

• Interfaz

• Operación y atributos de clases

• Dependencias

• nombre de rol y multiplicidad

• Asociación / agregación / composición

• Generalización

• Paquetes

Page 166: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 3.2, si

• Entiendo las diferencias entre clase, clase abstracta e interfaz

• Comprendo cuál es el objetivo de establecer una visibilidad determinada en atributos y operaciones y lo relaciono con el concepto de encapsulamiento

• Entiendo la diferencia conceptual entre agregación y composición y que ambas son tipos especiales de asociaciones

• Comprendo que el concepto de objeto y enlace son análogos

• Comprendo cómo y para qué utilizo las clases abstractas en las relaciones de generalización

• Entiendo cómo una clase hijo puede ampliar y/o modificar el comportamiento establecido en la clase padre

• Comprendo cómo usar los paquetes para organizar los elementos de modelado

Page 167: 44622246-As-a-2008

Implementación básicas de las abstracciones

Page 168: 44622246-As-a-2008

Clases, clases abstractas, generalización

public abstract class A{

// definición de atributos

private tipo A;

// definición de operaciones

public void b1() {}

}

public class B extends A{

// definición de atributos

private tipo b;

// definición de operaciones

public void b1() {}

}

Bb

b1()

Aa

a1()

Page 169: 44622246-As-a-2008

Interfaz

public interface A{

// definición de operaciones

void operación();

}

public class B implements A{

// definición de atributos

private tipo b;

// definición e implementación

// de operaciones

public void operacion() {}

}

A

operacion()

<<Interface>>

Bb

operacion()

Page 170: 44622246-As-a-2008

Asociación 1..1

public class A{

// definición de atributos

private tipo a;

// referencia a B mediante un atributo

// del tipo B

private B rol-b;

}

Aa

Bb

11

-rol-b

11

public class B{

// definición de atributos

private tipo b;

}

Page 171: 44622246-As-a-2008

Asociación 1 a muchos

Aa

Bb

1..*1

-rol-b

1..*1

public class A{

// definición de atributos

private tipo a;

// * opción 1 *

// referencia al conjunto de objetos B

// mediante un vector

private Vector rol-b = new Vector();

}

public class B{

// definición de atributos

private tipo b;

}

public class A{

// definición de atributos

private tipo a;

// * opción 2 *

// referencia al conjunto de objetos B

// mediante un arreglo

private B rol-b[] = new B[n];

// “n” valor a definir

}

Page 172: 44622246-As-a-2008

Asociación muchos a muchos(tienen problemas de integridad a resolver mediante código)

Aa

Bb

1..*1..*1..* 1..*

public class B{

// definición de atributos

private tipo b;

// referencia al conjunto de objetos C

// mediante un arreglo

private A a[]= new A[n];

}

public class A{

// definición de atributos

private tipo b;

// referencia al conjunto de objetos C

// mediante un arreglo

private B a[] = new B[n];

}

Page 173: 44622246-As-a-2008

Clase asociación (una versión) (tienen problemas de integridad a resolver mediante código)

Aa

Bb

1..*1..* 1..*1..*

Cc

public class A{

// definición de atributos

private tipo a;

// referencia al conjunto de objetos C

// mediante un arreglo

private C c[] = new C[n];

}

public class B{

// definición de atributos

private tipo b;

// referencia al conjunto de objetos C

// mediante un arreglo

private C c[]= new C[n];

}

public class C{

// definición de atributos

private tipo c;

// referencia al objeto C

// mediante atributos

private B b;

private A a;

}

Aa

Bb

Cc

1..*1 1..* 11..* 1..*1 1

Page 174: 44622246-As-a-2008

FIN

Page 175: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 3.3 - 3.4 Diagrama de Secuencia y Comunicación

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 176: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 177: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Cuáles son las diferencias entre clase, clase abstracta e interfaz?

• ¿Cuál es el objetivo de establecer una visibilidad determinada en atributos y operaciones y lo relaciono con el concepto de encapsulamiento?

• ¿Cuál es la diferencia conceptual entre agregación y composición y que ambas son tipos especiales de asociaciones?

• ¿Porqué el concepto de objeto y enlace son análogos ?

• ¿Cómo y para qué utilizo las clases abstractas en las relaciones de generalización ?

• ¿Cómo una clase hijo puede ampliar y/o modificar el comportamiento establecido en la clase padre?

• ¿Cómo uso los paquetes para organizar los elementos de modelado?

Page 178: 44622246-As-a-2008

Diagramas de interacción

Muestran el modo en que los objetos se comunican entre sí,

enviándose mensajes

• DIAGRAMA DE COMUNICACIÓN: enfatiza la organización estructural de los objetos

• DIAGRAMA DE SECUENCIA: hace énfasis en la ordenación temporal

inst1 : ClaseA inst2 : ClaseB

1: mensaje1

2: mensaje2

inst1 : ClaseA

inst2 : ClaseB

1: mensaje1

2: mensaje2

Page 179: 44622246-As-a-2008

Relación entre diagrama de clases y de interacción

clase Aclase B

metodoA()

: clase A : clase B

1: metodoA( )

: clase B : clase A1: metodoA( )

Si un objeto envía un mensaje a otro objeto, quiere decir que sus clases respectivas están relacionadas en el diagrama de clases (asociación o dependencia) y debe haber visibilidad de una hacia la otra

Diagrama de clases

Diagrama de secuencia

Diagrama de Comunicación

Page 180: 44622246-As-a-2008

Notación general

Empleado : Empleado

clase Instancia nombrada

instancia

Retorno:= mensaje(parametro:tipoParametro):tipoRetorno

valor:= pago(cantidad:integer):integer

Sintaxis de mensaje

Ejemplo

e1 : Empleado

Page 181: 44622246-As-a-2008

Diagrama de Secuencia

Page 182: 44622246-As-a-2008

Diagrama de Secuencia/1

Definición: Un diagrama de secuencia destaca la ordenación temporal de los

mensajes.

Sintaxis:

[Número de secuencia] [condición] * [expresión iteración] [valor de retorno :=] nombre del mensaje (parámetros)

Page 183: 44622246-As-a-2008

Diagrama de Secuencia/2 • Muestran interacciones entre objetos según un punto de vista temporal.

• Representa una interacción entre objetos poniendo énfasis en la cronología de los envíos de mensajes

objeto

mensaje

emisor

destinatarioPeriodo de actividad

Envió sincrónico (Emisor bloqueado)

Mensaje al mismo objeto

Page 184: 44622246-As-a-2008

Iteración

v: Vendedor :LíneaProducto *[1..8] verificarLínea()

Sintaxis:

* [expresión-iteración ] mensaje

Page 185: 44622246-As-a-2008

Creación de objetos

: Registro : Venta

: Pago

1: realizarPago( )

2: create( )

Mensaje de creación de objetos

Page 186: 44622246-As-a-2008

Ejemplo de diagrama de secuencia

Page 187: 44622246-As-a-2008

• Los diagramas de secuencia de sistema se utilizan en la etapa de análisis para documentar casos de uso

• El actor genera eventos sobre el sistema, normalmente solicitando alguna operación como respuesta

• Deberíamos hacer un DSS por cada escenario…

Diagrama de Secuencia de Sistema (DSS)

Actor del Caso de uso

Sistema representado como un sólo objeto(caja negra)

Identifico mensajes hacia el sistema en el caso de uso

Page 188: 44622246-As-a-2008

Diagrama de Secuencia del Sistema

• Muestra, para un escenario específico de un caso de uso, los eventos que generan los actores externos

• Los sistemas se tratan como cajas negras

• Muestran los mensajes que podrían ser traducidos a operaciones dentro del sistema

(y serán distribuidos, en la etapa de diseño, a los objetos del sistema)

Page 189: 44622246-As-a-2008

Ejemplo de DSS

A los mensajes los extraemos del caso de uso

Los mensajes los nombramos independientemente de la implementación

Se puede mostrar, opcionalmente, la respuesta del sistema

Page 190: 44622246-As-a-2008

Seguimos con el ejemplo

• El sistema (si estuviera compuesto por una sóla clase) podría tener, por ahora, las siguientes operaciones ...

SISTEMA

ingresarSistema()ingresarDatosPersonales()ingresarTarjetaCredito()ingresarPreferenciasEnvio()ingresarClaveContraseña()

Operaciones que serán asignados a las clases en la etapa de diseño

•Esto nos brinda una primera aproximación de las posibles operaciones, no implica necesariamente que serán ellas las operaciones del sistema (estamos en una epata inicial...)

Page 191: 44622246-As-a-2008

Resumiendo…

SISTEMA

ingresarSistema()ingresarDatosPersonales()ingresarTarjetaCredito()ingresarPreferenciasEnvio()ingresarClaveContraseña()

: SISTEMA

: cliente ingresarSistema()

ingresarDatosPersonales()

ingresarTarjetaCredito()

ingresarPreferenciasEnvio()

ingresarClaveContraseña()

DSS "Registrarse al sistema"

Los operaciones de la “clase sistema”, deberán estar distribuidas entre todas las clases del sistema con los criterios que nos darán los patrones de asignación de responsabilidades

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

Page 192: 44622246-As-a-2008

Diagramas de Comunicación

Page 193: 44622246-As-a-2008

Diagramas de Comunicación/1

Definición:

Un Diagrama de Comunicación destaca la organización estructural de los objetos participantes y el envío de mensajes.

Sintaxis:Número de secuencia [condición] *[expresión iteración]: [valor de retorno :=]

nombre del mensaje ([parámetros])

Page 194: 44622246-As-a-2008

Diagramas de Comunicación/2• Muestra las interacciones organizadas en torno a los objetos y los enlaces entre

ellos

• Lo utilizamos en la fase de diseño para asignar responsabilidades a las clases (definir dónde ubicar las operaciones)

Page 195: 44622246-As-a-2008

Enlaces

• Un enlace es una conexión entre objetos, indica que es posible alguna forma de navegación o visibilidad entre los objetos

• Un enlace es una instancia de una asociación

inst1 : ClaseA

inst2 : ClaseB

1: mensaje1

2: mensaje2

enlace

Page 196: 44622246-As-a-2008

Representación de los Mensajes

Page 197: 44622246-As-a-2008

Representación de los Mensajes

Page 198: 44622246-As-a-2008

Iteración sobre una colección

: Venta : LineaDeVenta1: *st:=getSubtotal

Envió de mensajes a cada objeto de

la colección

Page 199: 44622246-As-a-2008

Iteración

Sintaxis:

* [expresión-iteración ] mensaje

Ejemplo:

v:Vendedor :LíneaProducto1 *[1..8]: verificarLínea()

Page 200: 44622246-As-a-2008

Ejemplo de Diagrama de Comunicación

Page 201: 44622246-As-a-2008

Sugerencias

• Recuerde que para que un objeto se pueda comunicar con otro deben tener algún tipo de relación (asociación o dependencia) entre ellos

• El diagrama de secuencia de sistema (DSS) lo utilizamos en la etapa de análisis, conjuntamente con los casos de uso, para la identificación de los mensajes

• Los diagramas de Comunicación lo utilizamos en la etapa de diseño, conjuntamente con los patrones para asignación de responsabilidades, para la distribución de operaciones en las clases

Page 202: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 3.3 – 3.4 si puedo definir y dar ejemplos de:

• Diagrama de comunicación

• Diagrama de secuencia

• Enlace

• Menaje

• Itera ración

Page 203: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 3.3, 3.4, si

• Entiendo que el diagrama de comunicación muestra lo mismo que el diagrama de secuencia

• Comprendo qué enfatiza el diagrama de secuencia y qué el de colaboración

• Comprendo el concepto de “caja negra” en los diagrama de secuencia de sistema

• Comprendo la diferencia entre un diagrama de secuencia (UML) y un diagrama de secuencia de sistema

• Entiendo la diferencia entre enlace y asociación y cómo se visualiza el enlace en los diagramas de iteración

• Comprendo cómo se visualiza la secuencia de mensajes en cada uno de los diagramas

• Entiendo que debo hacer un diagrama de secuencia de sistema por cada escenario del caso de uso

Page 204: 44622246-As-a-2008

• FIN

Page 205: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 4.1 OCL

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 206: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO

2.1. Proceso de desarrollo de software. 1º parte

3.1. Casos de uso

3.2. Diagramas de clases.

3.3. Diagramas de comunicación.

3.4. Diagramas de secuencia.

4.1. Lenguaje de restricción de objetos.

5.1. Patrones de Diseño.

6.1. Transformación del Modelo de Clases al Modelo ER

7.1. Proceso de desarrollo de software 2º parte

Page 207: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Qué muestran el diagrama de comunicación y el diagrama de secuencia?

• ¿Qué enfatiza el diagrama de secuencia y qué el de colaboración ?

• ¿Cuál es el concepto que se quiere representar con la “caja negra” en los diagrama de secuencia de sistema?

• ¿Cuál es la diferencia entre un diagrama de secuencia (UML) y un diagrama de secuencia de sistema?

• ¿Cuál es la diferencia entre enlace y asociación y cómo se visualiza el enlace en los diagramas de iteración?

• ¿Cómo se visualiza la secuencia de mensajes en cada uno de los diagramas?

• ¿Debo hacer un diagrama de secuencia de sistema por cada escenario del caso de uso o solamente para el flujo principal?

Page 208: 44622246-As-a-2008

Bibliografía usada para el curso

The Object Constraint Languaje Second EditionGetting Your Models Ready for MDA

Jos WarmerAnneke Kleppe

Object Constraint Language Versión 2.0

http://www.omg.org/

Page 209: 44622246-As-a-2008

OCL

Page 210: 44622246-As-a-2008

¿Por qué utilizar OCL?

• Un modelo es un conjunto consistente y coherente de elementos de la realidad que tienen características y restricciones

• Un modelo gráfico como UML no es suficiente para una especificación no ambigua

• Existe la necesidad de establecer restricciones adicionales sobre el modelo

• Muchas veces las restricciones se escriben en lenguaje natural

¿Qué problemas surgen con este tipo de especificaciones?

Page 211: 44622246-As-a-2008

¿Por qué utilizar OCL?

• Una solución: LENGUAJES FORMALES

– Problemas: necesidad de usuarios con una fuerte formación matemática

• Una alternativa: OCL

– Lenguaje de características formales

– Fácil de leer

– Fácil de escribir

Page 212: 44622246-As-a-2008

Características generales de OCL

• OCL es un lenguaje declarativo: establece qué debe ser hecho pero no cómo debe ser hecho

• El estado del sistema no cambiará como consecuencia de una expresión OCL

• Cuando una expresión OCL es evaluada, simplemente devuelve un valor

• OCL es un lenguaje tipado, por lo tanto cada expresión OCL tiene un tipo, por consiguiente todos los tipos deben concordar (no es posible comparar enteros con literales)

Page 213: 44622246-As-a-2008

¿Qué no es OCL?

• NO es un lenguaje de programación

• NO es posible escribir lógica de programación

• NO es posible invocar operaciones que no sean una consulta

• NO considera aspectos de implementación

Page 214: 44622246-As-a-2008

¿Para que sirve OCL?

Sirve para:

• Especificar reglas de negocio

• Definir la semántica de UML

• Especificar PIM para MDA

• Especificar modelos precisos y completos a partir de la construcción de modelos UML/OCL combinados

Page 215: 44622246-As-a-2008

Un ejemploUn ejemplo

<<Invariant>>

self.pasajeros->size() <= self.avion.tipoavion.cant_de_asientos

Restricción: la cantidad de pasajeros de un vuelo debe ser menor o igual a la cantidad de asientos del tipo de avión que realiza el vuelo

Tipo_Avióntipo : Stringserie : Stringcant_de_asientos : Integercant_de_tripulantes : Integer

Avionid_avion : Integer

1

1..* +tipo

1

1..*

Pasajerosid_pasajero : Integerpasaporte : String

Vueloid_vuelo : Integerorigen : Stringdestino : String

1

1..*

+avion

1

1..*

1..*

*

+pasajeros

1..*

1..*

*

+tripulantes

1..*

*

*

Page 216: 44622246-As-a-2008

Tipo contextual e instancia contextualTipo contextual e instancia contextual

El tipo contextual de una expresión OCL se corresponde con la entidad del modelo para la cual se define la expresión OCL.

Utilizaremos un término de UML estandard, denominado Clasificador (classifier) para indicar con él que nos referimos a una clase, una interfaz, un tipo de dato o un componente.

El tipo contextual de una expresión OCL, se escribe luego de la palabra reservada context.

Una expresión OCL se evalúa para un único objeto, el cual es siempre una instancia del tipo contextual (instancia contextual).

A veces es necesario referirnos explícitamente a la instancia contextual, por ello utilizamos la palabra self

Page 217: 44622246-As-a-2008

Contexto de una expresiónContexto de una expresión

Las expresiones se pueden mostrar en un diagrama UML o no

El vínculo entre una entidad en un diagrama UML y una expresión OCL se denomina definición de contexto de una expresión OCL

<<Invariant>>

edad > 18PersonaPersona

nombre: Stringnombre: String

edad: Integeredad: Integer

........

context Persona

inv: edad > 18

Page 218: 44622246-As-a-2008

Contexto y tipo de expresiónContexto y tipo de expresión

context Persona

inv: self.edad > 18

PersonaPersona

nombre: Stringnombre: String

edad: Integeredad: Integer

........

Instancia Instancia contextualcontextual

Tipo contextualTipo contextual

etiquetaetiqueta

Page 219: 44622246-As-a-2008

Accediendo a propiedades de objetos

Page 220: 44622246-As-a-2008

propiedades• Una propiedad es:

• Un atributo

• Un extremo de asociación

• Una operación/método libre de efectos laterales

Una operación o método se define como libre de efectos laterales si no modifica el estado del sistema

• Notación “Punto”: El valor de una propiedad en un objeto se especifica en una expresión OCL con un punto seguido del nombre de la propiedad

self.mEdad >= 17

self.obtenerprecio()

Page 221: 44622246-As-a-2008

Propiedad: Atributo

Por ejemplo, la siguiente expresión OCL: “la edad de cliente es mayor o igual a 17 años”:

context Cliente

inv: self.mEdad >= 17

El valor de la subexpresión self.mEdad es el valor de mEdad en la instancia particular de Cliente identificada por self.

El tipo de la subexpresión self.mEdad es el tipo del atributo mEdad, que es un tipo Integer estándar.

ClientemNombre: StringmApellidos: StringmEdad: Integerlim_max_mov:Integer

Page 222: 44622246-As-a-2008

Propiedad: Operaciones

Para referirnos a una operación, también se utiliza la notación punto

Por ejemplo:

context Producto

Inv: self.obtenerprecio() > 0

Producto

obtenerprecio()

Page 223: 44622246-As-a-2008

Operaciones de coleccionesOCL define muchas operaciones en tipos de colección. Estas operaciones permiten contar con una manera flexible y poderosa de proyectar nuevas colecciones desde colecciones existentes.

Notación flecha “->”:

colección->operaciónDeColeccion()

Page 224: 44622246-As-a-2008

NavegacionesNavegaciones

Las navegaciones nos permiten hacer referencia a objetos que están asociados con la instancia contextual

Hay dos tipos de navegaciones: simples y combinadas

Huésped

nombre : Stringedad : Integersexo : {hombre, mujer}

Habitación

número_piso : Integernúmero_habitación : Integernúmero_de_camas : Integertipo : {A, B}

+huéspedes

*

Page 225: 44622246-As-a-2008

NavegacionesNavegaciones

Requerimiento: la cantidad de huéspedes de una habitación no debe superar la cantidad de camas de la habitación.

context Habitación

inv: self.huespedes->size() <= self.número_de_camas

Se utiliza el nombre de rol (del extremo opuesto de una relación) que vincula la clase donde se define la expresión con otra clase del diagrama.

Huésped

nombre : Stringedad : Integersexo : {hombre, mujer}

Habitación

número_piso : Integernúmero_habitación : Integernúmero_de_camas : Integertipo : {A, B}

+huéspedes

*

Page 226: 44622246-As-a-2008

NavegacionesNavegaciones

Si se omite el nombre de rol, se usa como tal el nombre de la clase

context Habitación inv: self.Huesped->size() <= self.número_de_camas

Huésped

nombre : Stringedad : Integersexo : {hombre, mujer}

Habitación

número_piso : Integernúmero_habitación : Integernúmero_de_camas : Integertipo : {A, B}

*

Page 227: 44622246-As-a-2008

Propiedad: extremos finales de asociacionesA partir de un objeto específico, es posible navegar una asociación en el diagrama de clase para referirnos a otros objetos y sus propiedades.

objeto.nombredelextremoFinal

El valor de la subexpresión es un objeto o conjuntos de objetos, dependiendo de la multiplicidad del extremo final de la asociación.

context Compañia

inv: self.gerente.esDesocupado = false

inv: self.empleados->notEmpty()

En self.empleados->notEmpty() estamos accediendo a la propiedad notEmpty en el conjunto self.empleados

Persona

nombre : Stringedad : IntegeresDesocupado : Boolean

Compañia

nombre : String* +empleados*

1+gerente

1

Page 228: 44622246-As-a-2008

Extremo de Asociación y Navegación

Comenzando desde un objeto en particular, podemos navegar una asociación en un diagrama de clases para referirnos a otro objeto y a sus propiedades.

El valor de esta expresión es el conjunto de objetos que están del otro lado de la asociación nombreDeRol

Para hacerlo, navegamos la asociación usando su extremo opuesto:

context Persona inv: self.empleador

Persona

esCasado : BooleanesDesocupado : Booleanedad : IntegeresFeliz : Boolean

Compañia

nombre : StringcantidadDeEmpleados : Integer

0..*

1

compañiaGerenciada

gerente

0..*

0..*

0..*

1

empleador

0..*

0..*empleado

Page 229: 44622246-As-a-2008

Si la multiplicidad del extremo es *, es una colección

Context Person inv:

self.employer ... (una colección)

Page 230: 44622246-As-a-2008

Si la multiplicidad del extremo es 0 ó 1, es un objeto

Context Company inv: Self.manager... (Un objeto)

Page 231: 44622246-As-a-2008

Combinando propiedadesLas propiedades se pueden combinar para escribir expresiones más complejas.

Una regla importante es que una expresión OCL siempre se evalúa a un objeto específico de un tipo especifico. Luego de obtener el resultado, es posible aplicar otra propiedad para obtener un nuevo resultado.

Cada expresión OCL puede ser leída y evaluada de izquierda a derecha

context Cliente

inv: self.lim_max_mov >= self.cuentas.mMovs->size()ClientemNombre: StringmApellidos: StringmEdad: Integerlim_max_mov:Integer

MovimientomImporte: RealmConcepto: StringmFecha: Date

Cuenta/msaldo: RealmTitulares

mMovs

0..*0..*

1..* cuentas

Page 232: 44622246-As-a-2008

Tipos de expresiones OCLTipos de expresiones OCL

Invariantes

Pre/post-condiciones

Valores iniciales

Valores derivados

De consulta

otros

Page 233: 44622246-As-a-2008

InvariantesInvariantes

Un invariante es una condición que debe ser verdadera para todas las instancias de un tipo específico en cualquier momento.

Su tipo contextual es un clasificadorcontext Habitación

inv: self.número_de_camas <= 10

context Habitación

inv: número_de_camas <= 10

context h: Habitación

inv: h.número_de_camas <= 10

Habitación

número_piso : Integernúmero_habitación : Integernúmero_de_camas : Integertipo : {A, B}

Page 234: 44622246-As-a-2008

Pre y postcondicionesPre y postcondiciones

Una precondición /postcondición es una condición que debe ser verdadera antes /después de la ejecución de una operación.

La instancia contextual self es una instancia del tipo que es dueño de la operación.

La declaración incluye la palabra context, seguida del contexto y de la declaración de la operación y el tipo.

Las etiquetas pre y post declaran si se trata de una pre/postcondición.

context Empleado::aumentarsalario( cantidad: Real ): Real

pre: salario > 0

post: self.salario = self.salario@pre + cantidad and

result = self.salario

Page 235: 44622246-As-a-2008

Pre y postcondicionesPre y postcondiciones

En una postcondición, nos podemos referir a los valores de cada propiedad de un objeto en dos momentos en el tiempo:

El valor de la propiedad al comienzo de la operación o método (utilizamos el postfijo @pre)

El valor de la propiedad una vez que la operación o método se ha ejecutado.

Nota: ‘@pre’ solo se permite en expresiones del tipo postcondicion !

context Empleado::aumentarsalario( cantidad: Real ): Real

pre: salario > 0

post: self.salario = self.salario@pre + cantidad and

result = self.salario

Page 236: 44622246-As-a-2008

Expresiones para valores iniciales y Expresiones para valores iniciales y derivadosderivados

Una expresión OCL puede ser utilizada para indicar el valor inicial (o derivado) de un atributo o un extremo de asociación.

La expresión debe ser conforme al tipo resultante del atributo, ó

En el caso que el contexto es un extremo final de asociación la expresión debe ser conforme con el clasificador en tal extremo final

context Persona:: salario : Integer

init: 500

context Persona:: salario : Integer

derive: 500 + (50 * antigüedad)

Persona

salario : Integerantiguedad : Integer

Page 237: 44622246-As-a-2008

Navegaciones CombinadasNavegaciones Combinadas

Las navegaciones no se limitan a una única asociación. Las expresiones OCL pueden estar encadenadas navegando un conjunto de asociaciones

context Vuelo

inv: self.avion.tipo.cant_de_asientos >= self.pasajeros->size()

Tipo_Avióntipo : Stringserie : Stringcant_de_asientos : Integercant_de_tripulantes : Integer

Avionid_avion : Integer

1

1..* +tipo

1

1..*

Pasajerosid_pasajero : Integerpasaporte : String

Vueloid_vuelo : Integerorigen : Stringdestino : String

1

1..*

+avion

1

1..*

1..*

*

+pasajeros

1..*

1..*

*

+tripulantes

1..*

*

*

Page 238: 44622246-As-a-2008

Navegaciones a clases de Navegaciones a clases de asociaciónasociación

Para especificar la navegación a clases de asociación, OCL utiliza un punto y el nombre de la clase de asociación

context Persona

inv: self.job ....

Persona

nombre : Stringedad : IntegeresDesocupado : Boolean

Compañia

nombre : StringnumerodeEmpleados : Integer

+empleado

0..*0..*

Jobtitulo : StringdiaComienzo : Datesalario : Integer

+empleador

0..* 0..*

Page 239: 44622246-As-a-2008

Navegaciones desde clases de Navegaciones desde clases de asociaciónasociación

Es posible navegar desde la clase de asociación a los objetos que participan en la asociación.

context Job

inv: self.empleado.edad > 21

Persona

nombre : Stringedad : IntegeresDesocupado : Boolean

Compañia

nombre : StringnumerodeEmpleados : Integer

+empleado

0..*0..*

Jobtitulo : StringdiaComienzo : Datesalario : Integer

+empleador

0..* 0..*

Page 240: 44622246-As-a-2008

El metamodelo de OCL

En el metamodelo de OCL se define la jerarquía de colecciones de OCL y las operaciones de colección

collection

set sequencebagorderedset

Collection

size() : Integerincludes(object : T) : Booleanexcludes(object : T) : Booleancount(object : T) : IntegerincludesAll(c2 : Collection(T) : BooleanexcludesAll(c2 : Collection(T) : BooleanisEmpty() : Boolean

Page 241: 44622246-As-a-2008

ColeccionesColecciones

• El tipo Collection es un tipo abstracto, con tipos de colección concretos como sus subtipos.

– Set (Conjunto)

– OrderedSet (Conjunto ordenado)

– Bag (Bolsa)

– Sequences (Secuencias)

Page 242: 44622246-As-a-2008

Navegaciones y coleccionesNavegaciones y colecciones

Los tipos de colecciones juegan un importante rol en las expresiones OCL !

– Una única navegación resulta en un conjunto (Set),

– navegaciones combinadas en un Bag,

– navegaciones sobre asociaciones adornadas con {ordered} resultan en un OrderedSet.

Page 243: 44622246-As-a-2008

Tipos Básicos

Page 244: 44622246-As-a-2008

Tipos BásicosTipos Básicos

• En OCL, se definen un número de tipos básicos, los cuales están disponibles para el modelador en todo momento. Estos tipos son valores predefinidos y son independientes de cualquier modelo de objetos.

• Tipos Básicos:

– Boolean: true, false

– Integer :1, -5, 2, 34, 26524, ...

– Real: 1.5, 3.14, ...

– String: ‘esto es un string‘

– Colecciones (definidas anteriormente)

• Operaciones definidas en los tipos

– Integer: *, +, -, /, abs(), etc.

– Real: *, +, -, /, etc.

– Boolean: and, or, xor, not, implies, if-then-else-endif

– String: concat(), size(), substring()

Page 245: 44622246-As-a-2008

Tipos BásicosTipos Básicos

Cada expresión OCL se escribe en el contexto de un modelo UML.

En UML un clasificador (classifier) es una clase, o una interfaz, un tipo de dato.

Todos los clasificadores de un modelo UML son tipos que pueden ser utilizados en las expresiones OCL que estén asociadas a dicho modelo.

Page 246: 44622246-As-a-2008

Tipos EnumeradosTipos Enumerados

Las enumeraciones son tipos de datos en UML y tienen un nombre. Una enumeración define un número de literales, que son valores posibles de la enumeración.

En OCL podemos referirnos a los valores de una enumeración.

context Persona

inv: genero = Genero::masculino

Genero

masculinofemenino

Persona

nombre : Stringedad : Integergenero : Genero

<<enumeration>>

Page 247: 44622246-As-a-2008

Navegaciones que resultan en un SetLas navegaciones simples resultan en un Set

El valor de una navegacion simple es un objeto o conjuntos de objetos, dependiendo de la multiplicidad del extremo final de la asociación.

context Compañia

inv: self.gerente.esDesocupado = false

inv: self.empleados->notEmpty()

.... self.gerente->size() = 1

Persona

nombre : Stringedad : IntegeresDesocupado : Boolean

Compañia

nombre : String* +empleados*

1+gerente

1

Page 248: 44622246-As-a-2008

Navegaciones que resultan en Sets o Bags

W&K: When you navigate through more than one association with multiplicity greater than 1, you end up with a bag.

OCL specification: combined navigations results in a Bag

context Medico

... self.trabaja.afiliados

Medico ObraSocial

1..*1..*

Afiliado

1..*1..*

+trabaja+asociados+afiliados+obras_sociales

1..*1..* 1..*1..*

Page 249: 44622246-As-a-2008

Navegaciones que resultan en Sets o Bags

Que sucede si queremos obtener el número de potenciales pacientes de un médico, pero quisiéramos contar tantas veces a un afiliado como obras sociales éste tenga.

Medico ObraSocial

1..*1..*

Afiliado

1..*1..*

+trabaja+asociados+afiliados+obras_sociales

1..*1..* 1..*1..*

med1Obra1

obra2

af1

af2

af3Context Medico

... self.trabaja.afiliados

Page 250: 44622246-As-a-2008

Navegaciones que resultan en Sets o Bags

Que sucede si queremos obtener el número de potenciales pacientes de un médico, y pero NO quisiéramos contar tantas veces a un afiliado como obras sociales éste tenga.

Medico ObraSocial

1..*1..*

Afiliado

1..*1..*

+trabaja+asociados+afiliados+obras_sociales

1..*1..* 1..*1..*

med1Obra1

obra2

af1

af2

af3Context Medico

... self.trabaja.afiliados->asSet()

Page 251: 44622246-As-a-2008

Colecciones y operaciones de colección

Page 252: 44622246-As-a-2008

Operaciones de coleccióncollection

set sequencebagorderedset

union=intersection-includingexcludingsymmetricDifferencecountflattenasSetasOrderedSetasSequenceasBag

appendprepend

insertAtsubOrderedSetatindexOffirstlast

union=intersection-includingexcludingcountflattenasSetasOrderedSetasSequenceasBag

appendprepend

insertAtsubSequenceatindexOffirstlastincludingexcluding

asSetasOrderedSetasSequenceasBag

count=unionflatten

Page 253: 44622246-As-a-2008

Operación Size()

La operación predefinida size() nos permite obtener la cantidad de elementos de una colección.

context Cliente

inv: self.mCuentas->size() < 10

ClientemNombre: StringmApellidos: StringmEdad: IntegerSexo: Genero

Cuenta/msaldo: Real

mCuentas

mTitulares 0..*

1..*

Page 254: 44622246-As-a-2008

Operación SelectPermite obtener un subconjunto específico de una colección.

select es una operación sobre una colección y es especificada utilizando la sintaxis de flecha:

collection->select( expresión booleana)

El resultado es una colección que contiene todos los elementos de la colección origen para los cuales es verdadera la expresión booleana.

Para encontrar el resultado de esta operación, se evalúa la expresión para cada elemento de la colección. Si el resultado de la evaluación es verdadero para un elemento, este se incluye en la colección resultante.

Page 255: 44622246-As-a-2008

Operación Select (cont.)

El contexto de la expresión en el argumento select es el del elemento de la colección en el cual el select es invocado.

context Proyecto

inv: self.participa -> select (edad > 50) ->notEmpty()

context Proyecto

inv: self.participa-> select (e: Empleado | e.edad > 50) ->notEmpty()

context Proyecto

inv: self.participa-> select (e | e.edad > 50) ->notEmpty()

Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 256: 44622246-As-a-2008

Operador reject

El operador reject permite obtener un subconjunto de todos los elementos de una colección para el cual la expresión se evalúa a falso.

context Proyecto

inv: self.participa -> reject ( esCasado ) ->isEmpty()

... colección de las personas que no están casadas es vacía.Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 257: 44622246-As-a-2008

Select y rejectLa operación reject está disponible en OCL por conveniencia, debido a que cada reject se puede escribir como un select con la expresión booleana negada.

collection->reject( v | expresión-booleana-utilizando-v )collection->select( v | not (expresión-booleana-utilizando-v ) )

Page 258: 44622246-As-a-2008

Operador collectEl operador collect se utiliza cuando queremos derivar una nueva colección a partir de otra, pero que contiene objetos diferentes de la colección original.

Por ejemplo: deseamos obtener una colección de las fechas de cumpleaños de los empleados de la compañía:

self.empleados->collect( fechaNacimiento )

self.empleados->collect( emp : Empleado | emp.fechaNacimiento )

Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 259: 44622246-As-a-2008

Operación ForAllEste operador permite especificar una expresión booleana que debe ser verdadera para todos los elementos de una colección.La exp. forAll tiene como resultado un valor booleano.

context Proyecto

inv: self.participa->forAll( p: Empleado | p.edad <= 65)

Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 260: 44622246-As-a-2008

Operación ForAllEl operador forAll tiene una variante extendida en el cual se utiliza más de un iterador. Ambos iteradores iterarán sobre la colección completa. Efectivamente esto constituye el operador forAll en el producto cartesiano de la colección.

context Proyecto

inv: self.participa-> forAll (e1, e2: Empleado |

e1<> e2 implies e1.apellido <> e2.apellido)

Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 261: 44622246-As-a-2008

Operación ExistsMuchas veces es importante saber si al menos para un elemento de una colección se verifica una condición:

context Proyecto

inv: self.participa->exists( p | p.nombre = ‘Jack’)

ClientemNombre: StringmApellidos: StringmEdad: IntegerSexo: Genero

Cuenta/msaldo: Real

mCuentas

mTitulares 0..*

1..*

context Cuenta

inv: self.mTitulares->exists(c:Cliente| c.mEdad>=18)

Proyectonombre : Stringpresupuesto : Integer

Empleadonombre : Stringapellido : Stringedad : IntegeresCasado : BooleandiaNacimiento : Date

**+trabaja_en

*+participa*

Page 262: 44622246-As-a-2008

notEmpty()En el caso de una asociación con multiplicidad 0..1 es útil verificar si existe un objeto o no cuando navegamos la asociación

context Persona

inv: self.esposa->notEmpty() implies self.esposa.genero = Genero::femenino

0..1

0..10..1+marido

0..1

+esposa Genero

masculinofemenino

Persona

nombre : Stringedad : Integergenero : Genero

<<enumeration>>

Page 263: 44622246-As-a-2008

Operación count()

self-> count(object)

El número de veces que la colección (self) incluye el objeto “object”

Bag{1, 2, 3, 2, 4, 2}->count(2) = 3

Diferencia entre count() y size()

Page 264: 44622246-As-a-2008

Let y expresiones <<definition>>

Page 265: 44622246-As-a-2008

Expresiones LetA veces una subexpresión es utilizada más de una vez en una restricción. La expresión let nos permite definir una variable la cual puede ser utilizada en una restricción.

context Persona

inv: let sueldo : Integer = self.job.salario->sum() in

if esDesocupado then

sueldo < 100

else

sueldo >= 100

endif

Persona

nombre : Stringedad : IntegeresDesocupado : Boolean

Compañia

nombre : StringnumerodeEmpleados : Integer

+empleado

0..*0..*

Jobtitulo : StringdiaComienzo : Datesalario : Integer

+empleador

0..* 0..*

Page 266: 44622246-As-a-2008

expresiones <<definition>>

context Cuenta

def: msaldo : real = self.mMovs.mImporte->sum()

context Cuenta

inv: saldo > 0

ClientemNombre: StringmApellidos: StringmEdad: IntegerSexo: Genero

Cuenta/msaldo: Real

mCuentas

mTitulares 0..*

1..*

MovimientomImporte: RealmConcepto: StringmFecha: Fecha

mMovs

0..*

0..*

Page 267: 44622246-As-a-2008

Operadores Lógicos/1

• Operador not

• Operador and

(bi and b2) = (b2 and b1)

b not b

false true

True false

b1 b2 B1 and b2

false false false

false true false

true false false

true true True

Page 268: 44622246-As-a-2008

Operadores Lógicos/2

• Operador or

(bi or b2) = (b2 orb1)

• Operador xor

(bi xor b2) = (b2 xorb1)

b1 b2 b1 or b2

false false false

false true true

True false true

True true true

b1 b2 b1 xor b2

false false false

false true true

True false true

true true false

Page 269: 44622246-As-a-2008

Operadores Lógicos/3• Operador implies

b1 implies b2

Si b1 es true, entonces b2 debe ser true (si b1 es false, nada puede decirse de b2)

context Person inv: self.wife->notEmpty implies self.wife.age>=18 and self.husband->notEmpty implies self.husband.age>=18

• Expresión if

if b then e1 else e2 endif

b es una expresión booleana y e1 y e2 son expresiones OCL

if (count <= 100) then x/2 else 0 endif

Page 270: 44622246-As-a-2008

Un ejemplo práctico

Page 271: 44622246-As-a-2008

Earning

Color

silvergold

Date

now : Date

isBefore(t : Date) : BooleanisAfter(t : Date) : BooleanfromYMD(t : Date) : Dateopname2()

Burning

ProgramPartners

numOfCustomers : Integername : String

LoyaltyProgramname : String

enroll(c : Customer)getServices() : Set(Services)

1..*

1..*

LoyaltyAccount

points : Integernumber : Integer

earn(i : Integer)burn(i : Integer)isEmpty() : Boolean

ServiceLevelname : String

1

1..*

Service

condition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : StringserviceNr : Integer

calcPoints() : Integer

1

0..*

0..1

1

Transaction

points : Integerdate : Dateamount : Real

program() : LoyaltyProgram

1

0..*

1

0..*

Customername : Stringtitle : StringisMale : BooleandateOfBirth : Date/ age : Integer

age() : Integer

0..*

0..*+programs

1..*

+partners 1..*

+program 1

+levels1..*

+participants

0..*+programs0..*

Membership0..*

1

0..*

+currentLevel

1

1

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : Color/ printedName : String

0..*

1

0..*+card

+owner 1

+cards

0..*

+partners

+delivered Services 0..*

1

+level 1

+available Services

0..1

+account1

+account

+transactions 0..*

1

+card

+transactions

0..*+generatedBy

+transactions

1

0..*

Page 272: 44622246-As-a-2008

Sistema que administra programas de lealtad.

• Programas de Lealtad (LoyaltyProgram): Contiene los programas de lealtad.

• Socios del Programa (ProgramPartners): Representa a las compañías que ofrece a sus clientes ser miembros de un programa de lealtad.

• Los clientes que pertenecen a un programa de lealtad pueden aprovechar los servicios que ofrece cualquier compañía participante del programa al cual pertenece el cliente.

• Todo cliente de un socio de programa puede pertenecer a un programa de lealtad completando un formulario y obteniendo una tarjeta de membresía.

• La tarjeta de membresía, representada por la clase CustomerCard, se emite a una persona. La mayoría de los programas permite a sus clientes obtener puntos.

• Cada socio de programa decide de que forma se acumulan puntos y cuantos puntos deben ser acumulados por una compra (servicios de los socios del programa).

• Los puntos pueden ser utilizados para obtener servicios específicos de uno de los socios del programa. Para que un cliente acumule puntos, toda membresía puede estar asociada con una cuenta de lealtad.

• Existen transacciones para obtener puntos y para gastar puntos.• Existen distintos niveles de servicio en cada programa de lealtad.

Page 273: 44622246-As-a-2008

Ejercicios / 1

• La cantidad de puntos (points) iniciales de la cuenta (LoyaltyAccount) debe ser 0

Context LoyaltyAccount::points

init :0

• La edad de los participantes debe ser mayor a 18

Context Customer inv ofAge:

Age >= 18

Page 274: 44622246-As-a-2008

Ejercicios / 2

• el programa debe ofrecer, al menos, un servicio a los clientes

Context LoyaltyProgram inv minServices:

Partners.deliveredServices -> size() >= 1

Page 275: 44622246-As-a-2008

Ejercicios / 3• La cantidad de tarjetas validas por cada usuario debe ser

igual al numero de programas en el que el usuario participa

Context Customer inv sizesAgree:

programs -> size() = cards -> select(valid = true) -> size()

Page 276: 44622246-As-a-2008

Ahora a trabajar…

Page 277: 44622246-As-a-2008

Earning

Color

silvergold

Date

now : Date

isBefore(t : Date) : BooleanisAfter(t : Date) : BooleanfromYMD(t : Date) : Dateopname2()

Burning

ProgramPartners

numOfCustomers : Integername : String

LoyaltyProgramname : String

enroll(c : Customer)getServices() : Set(Services)

1..*

1..*

LoyaltyAccount

points : Integernumber : Integer

earn(i : Integer)burn(i : Integer)isEmpty() : Boolean

ServiceLevelname : String

1

1..*

Service

condition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : StringserviceNr : Integer

calcPoints() : Integer

1

0..*

0..1

1

Transaction

points : Integerdate : Dateamount : Real

program() : LoyaltyProgram

1

0..*

1

0..*

Customername : Stringtitle : StringisMale : BooleandateOfBirth : Date/ age : Integer

age() : Integer

0..*

0..*+programs

1..*

+partners 1..*

+program 1

+levels1..*

+participants

0..*+programs0..*

Membership0..*

1

0..*

+currentLevel

1

1

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : Color/ printedName : String

0..*

1

0..*+card

+owner 1

+cards

0..*

+partners

+delivered Services 0..*

1

+level 1

+available Services

0..1

+account1

+account

+transactions 0..*

1

+card

+transactions

0..*+generatedBy

+transactions

1

0..*

Page 278: 44622246-As-a-2008

Escribir el enunciado…

context LoyaltyPrograminv minServices: partners.deliveredServices -> size() >=1

context Customerinv sizesAgree: programs ->size() =

card -> select(valid = true)->size()

context LoyaltyPrograminv: participants -> forAll (age() <= 70)

context LoyaltyPrograminv: self.participants -> forAll (c1, c2 |

c1 <> c2 implies c1.name <> c2.name)

Page 279: 44622246-As-a-2008

Escribir el enunciado…

context LoyaltyProgram

inv: points>0 implies transactions->exist(t | t.points > 0)

context LoyaltyAccount

inv: transactions -> collect (points)->exist(

p : Integer | p = 500)

context LoyaltyAccount

inv: transactions.points -> exist(

p : Integer | p = 500)

Page 280: 44622246-As-a-2008

• Fin

Page 281: 44622246-As-a-2008
Page 282: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 5.1 Patrones de Diseño

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 283: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño Para Asignación de Responsabilidades. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 284: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Cómo puedo complementar los modelos UML con sentencias OCL?

• ¿Cuál es la ventaja de usar OCL en lugar de un lenguaje informal?

• ¿Qué significa que OCL es un lenguaje declarativo?

• ¿Qué es un invariante en una clase?

• ¿Cómo se específica una propiedad (atributo, operación, nombre de rol) en un diagrama de clases?

• ¿Cómo navegar una asociación a partir de los nombres de rol?

• ¿Cómo sé si hago referencia a un conjunto o un objeto a partir de la multiplicidad del extremo opuesto de una asociación?

• ¿Cuál es la diferencia entre los distintos tipos de colecciones?

Page 285: 44622246-As-a-2008

Patrones de Diseño: otra forma de reutilización...

Diseñar software orientado a objetos es difícil, más aún diseñar software orientado a objetos reutilizables.

• Se deben encontrar las clases y relaciones apropiados entre ellas

• Se deben definir jerarquías de herencia y de interfaces y establecer relaciones entre ellas.

• El diseño debe satisfacer las necesidades actuales del usuario, además de contemplar futuros problemas o requerimientos.

Page 286: 44622246-As-a-2008

Patrones de Diseño

El término patrón se utilizó inicialmente en el campo de la arquitectura, por Christopher Alexander, a finales de los 70s.

Este conocimiento fue transportado al ámbito del desarrollo de software orientado a objetos y aplicado al diseño.

el libro que inicio el camino fue:

“Design Patterns: Elements of Reusable Object-Oriented Software” Gamma

Page 287: 44622246-As-a-2008

Patrones de Diseño

Los patrones de diseño permiten la reutilización exitosa de diseños y arquitecturas más rápidamente

Ayuda a elegir alternativas de diseño que hace a los sistemas reutilizables.

Un patrón es un par problema/solución con nombre que se puede aplicar a nuevos contextos con consejos de cómo aplicarlo

Aprovechar las experiencia de los desarrolladores

Page 288: 44622246-As-a-2008

Patrones de Diseñoelementos esenciales

El nombre del patrón: se usa para describir un problema de diseño, su solución y las consecuencias, en una o dos palabras.

El problema: describe cuándo aplicar el patrón, explica el problema y su contexto

La solución: describe los elementos que hacen al diseño, sus relaciones, responsabilidades y colaboraciones

Las consecuencias: establecen los costos y beneficios de aplicar el patrón

Page 289: 44622246-As-a-2008

Ejemplo: Patrón Adaptador

Convierte la interfaz de una clase en la interfaz que el cliente espera.

“Un objeto Adaptador provee la funcionalidad prometida por una interfaz, sin tener que asumir qué clase es usada para

implementar la interfaz”.

Permite trabajar juntas a dos clases con interfaces incompatibles.

Interfaz: colección de operaciones que son utilizadas para especificar un servicio de una clase

Page 290: 44622246-As-a-2008

Ejemplo: Patrón Adaptador

Clase que llama a un método de otra clase a través de una interfaz, sin asumir que el objeto que implementa el método al que llama, pertenezca a una clase específica.

Esta interfaz declara el método que una clase Client llama

Esta clase implementa el método que el cliente llama, haciendo un llamado a un método de la clase Adaptee, la cual no implementa la interfaz.

Esta clase no implementa el método de la interfaz, pero tiene algún método que la clase cliente quiere llamar

Page 291: 44622246-As-a-2008

Ejemplo: editor de gráficos

Circulo

dibujar()mover()

Rectangulo

dibujar()mover()

Triangulo

dibujar()mover()

EditorFigura

dibujar()mover()

Esfera

3Ddibujar()3Dmover()

Paralelepipedo

3Ddibujar()3Dmover()

Piramide

3Ddibujar()3Dmover()

3DAdaptador

dibujar()mover()

3DFigura

3Ddibujar()3Dmover()

La interacciones entre objetos se escriben según los términos de las especificaciones definidas en las superclases

Page 292: 44622246-As-a-2008

Asignación de Responsabilidades a las

Clases

Page 293: 44622246-As-a-2008

Verificar Operación

Reintegro Cuenta Corriente

Cliente

Reintegro Cuenta de Crédito

<<include>>

<<include>>

Comenzamos con los casos de uso.Inicialmente el nombre y una descripción

Describimos los casos de uso con mayor detalle.

Escenario principal

El cliente ingresa a la pagina Web de CVLIEl cliente ingresa a la opción “registración “El sistema solicita ingreso de los datos personalesEl sistema evalúa el país….…..

Hasta ahora hemos llegado hasta acá …

Page 294: 44622246-As-a-2008

Creamos los diagramasde secuencia de sistemas (DSS)Para cada escenario de cada caso de uso.

Escenario principal

El cliente ingresa a la pagina Web de CVLIEl cliente ingresa a la opción “registración “El sistema solicita ingreso de los datos personalesEl sistema evalúa el país.…..

: SISTEMA

: cliente ingresarSistema()

ingresarDatosPersonales()

ingresarTarjetaCredito()

ingresarPreferenciasEnvio()

ingresarClaveContraseña()

DSS "Registrarse al sistema"

Creamos el modelo del dominio: CLASES, ASOCIACIONES, ATRIBUTOS

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

Hasta ahora hemos llegado hasta acá …

Page 295: 44622246-As-a-2008

¿Cómo sigo?

¿En qué clases ubico a las operaciones que resuelven la funcionalidad de cada caso de uso?

¿Qué criterios uso para tomar esas decisiones?

Page 296: 44622246-As-a-2008

Asignación de responsabilidades a las clases

“Despues de la identificación de los requisitos de los usuarios y de la creación del modelo del dominio, añada operaciones en las clases de software y defina el paso de mensajes entre los

objetos para satisfacer los requisitos …”

Decisiones poco acertadas sobre la asignación de responsabilidades de cada clase, dan origen a sistemas y componentes frágiles y difíciles de mantener, entender,

reutilizar o extender

Page 297: 44622246-As-a-2008

Responsabilidades

“Una responsabilidad es un contrato u obligación de una clase”

Las responsabilidades se relacionan con las obligaciones de un objeto respecto de su comportamiento.

La responsabilidad no es lo mismo que un método, pero los métodos se implementan para llevar a cabo las responsabilidades

Estas responsabilidades pertenecen, esencialmente, a dos categorías:

• hacer• conocer .

Page 298: 44622246-As-a-2008

Responsabilidades

Entre las responsabilidades de un objeto relacionadas con el hacer se encuentran:

• Hacer algo uno mismo.

• Iniciar una acción en otros objetos.

• Controlar y coordinar actividades en otros objetos.

Page 299: 44622246-As-a-2008

Responsabilidades

Entre las responsabilidades de un objeto relacionadas con el conocer se encuentran:

• Conocer los datos privados encapsulados.

• Conocer los objetos relacionados.

• Conocer las cosas que se pueden derivar o calcular.

“las responsabilidades relevantes de conocer a menudo se pueden inferir a partir del modelo del dominio”

Page 300: 44622246-As-a-2008

Un ejemplo... (ver caso práctico)

tiene

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Autor

nombreapellido

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

1..*

1

1..*

1

tiene

Items

cantidad

1..*

1

1..*

1

1

0..*

1

0..* pertenecen

Page 301: 44622246-As-a-2008

El Patrón “Experto” [Larman]

Nombre: Experto.

Problema: ¿Cuál es el principio fundamental en virtud del cual se asignan las responsabilidades en el diseño orientado a

objetos?

Solución: Asignar una responsabilidad al experto en información: la clase que cuenta con la información necesaria

para cumplir la responsabilidad.

Page 302: 44622246-As-a-2008

El Patrón “Experto”

Desde el punto de vista del patrón Experto, deberíamos buscar la clase de objetos que posee información sobre los Items vendidos

Nota: buscamos inicialmente en las clases del modelo de dominio

CarritoCompra

EjemplarLibro

numeroprecio

Items

cantidad

1..n

1

1..n

1

tiene

1

0..n

1

0..n pertenecen

El objeto que conoce esto es CarritoCompra

Ejemplo: ¿quién es el responsable de conocer el total de una venta?.

Page 303: 44622246-As-a-2008

El Patrón “Experto”

¿Qué información hace falta saber para determinar la cantidad de Items vendidos y el precio para

saber la venta total? CarritoCompra

EjemplarLibro

numeroprecio

Items

cantidad

1..n

1

1..n

1

tiene

1

0..n

1

0..n pertenecen

cantidad de items vendidosItems.cantidad precio del libro

ejemplarLibro.precio

La cantidad de Items vendidos está en la clase Items y el precio, en EjemplarLibro, ambos tienen la información necesaria para realizar la responsabilidad

Page 304: 44622246-As-a-2008

Seguimos con el ejemplo...

: CarritoCompra : Items

2 *: s := subtotal()1: venta()

: EjemplarLibro

3: p := darPrecio()

CarritoCompra

venta()

1..*

11

tiene

1..*

Items

cantidad

subtotal()

0..* pertenecen

1

0..*

1

EjemplarLibro

numeroprecio

darPrecio()

Envío el mensaje venta() a CarritoCompra

Envío el mensaje subtotal() a Items

Envío el mensaje darPrecio() a EjemplarLibro

*

El * indica que es iteración sobre una colección

Page 305: 44622246-As-a-2008

El Patrón “Creador” [Larman]

El patrón Creador guía la asignación de responsabilidades relacionadas con la creación de objetos, tarea muy frecuente en los sistemas

orientados a objetos.

El objetivo de este patrón es encontrar un creador que debemos conectar

con el objeto producido en cualquier evento

: Items : CarritoCompra1: crear( parametros )

<<create>>

Estereotipo que indica que es un

mensaje de creación

Llamada a un constructor Variables de inicialización

Page 306: 44622246-As-a-2008

El Patrón “Creador”

Problema: ¿Quién debería ser responsable de crear una nueva instancia de alguna clase?

La creación de objetos es una de las actividades más frecuentes en un sistema orientado a objetos. En consecuencia, conviene contar con un principio general para asignar las responsabilidades concernientes a

ella.

: Items

: CarritoCompra

1: crear( parametros )

Llamada a un constructor

Variables de inicialización

<<create>>

Page 307: 44622246-As-a-2008

El Patrón “Creador”

Solución: Asignarle a la clase B la responsabilidad de crear una instancia de la clase A en uno de los siguientes casos:

· B agrega los objetos de A.· B contiene los objetos de A.· B registra las instancias de los objetos de A.· B tiene los datos de inicialización que serán enviados a A cuando este objeto sea creado (B es un experto respecto a la creación de A).

Beneficios: Se brinda apoyo a un bajo acoplamiento, lo cual supone menos dependencias respecto al mantenimiento y mejores oportunidades de reutilización.

Page 308: 44622246-As-a-2008

El Patrón “Creador”

Ejemplo: En la aplicación ¿quién debería encargarse de crear una instancia de items?

CarritoCompra

agregarItem()v enta()

1..*

11

tiene

1..*

Items

cantidad

crear()subtotal()

CarritoCompra contiene uno o más Items

Cada vez que hago una compra, agrego un nuevo Item

Desde el punto de vista del patrón Creador, deberíamos buscar una clase que agregue, contenga, y realice otras operaciones sobre este tipo de instancias.

Page 309: 44622246-As-a-2008

El Patrón “Creador”

Un CarritoCompra contiene (agrega) muchos objetos Items. Es por esto que el patrón Creador sugiere que CarritoCompra es la clase idónea

para asumir la responsabilidad de crear las instancias de Items.

: CarritoCompra : Items

2: crear()1: agregarItem()

CarritoCompra

agregarItem()v enta()

1..*

11

tiene

1..*

Items

cantidad

crear()subtotal()

Envío el mensaje agregarItem() a CarritoCompra

Envío el mensaje crear() a Items Normalmente se invoca al

constructor de la clase

<<create>>

Page 310: 44622246-As-a-2008

El Patrón “Bajo acoplamiento”

El acoplamiento es la medida de la fuerza con que un elemento está conectado con otros.

Un alto acoplamiento implica que:

• Los cambios en las clases relacionadas fuerzan cambios en las clases locales

• Son difíciles de entender de manera aislada

• Son difíciles de reutilizar, debido a que su uso requiere la presencia adicional de las clases de las que depende

Page 311: 44622246-As-a-2008

El Patrón “Bajo acoplamiento”

Problema: ¿cómo soportar bajas dependencias, bajo impacto en el cambio e incremento en la reutilización?

Solución: asignar las responsabilidades a las clases de manera de mantener el acoplamiento bajo

Beneficios: las clases son más independientes, lo que reduce el impacto al cambio

Page 312: 44622246-As-a-2008

El Patrón “Alta cohesión”

La cohesión es una medida de la especificidad de una responsabilidad

Una clase con baja cohesión hace muchas cosas no relacionadas y adolece de los siguientes problemas:

Difíciles de entender, reutilizar y mantener

Regla empírica: una clase con alta cohesión tiene un número relativamente pequeño de métodos con funcionalidad altamente relacionada

Page 313: 44622246-As-a-2008

El Patrón “Alta cohesión”

Problema: ¿como mantener la complejidad manejable?

Solución: asignar las responsabilidades de manera que las cohesión permanezca alta

Beneficios: se incrementa la claridad, se simplifica el mantenimiento y las mejoras, implica generalmente bajo acoplamiento

Page 314: 44622246-As-a-2008

El Patrón “Controlador”

Problema: ¿Quién debe ser el responsable de gestionar un evento de entrada al sistema?

(Un evento del sistema de entrada es un evento generado por un actor externo)

Solución: asignar la responsabilidad de recibir o manejar un mensaje de evento del sistema a una clase que:

a) represente el sistema global

b) represente un escenario de caso de uso donde tiene lugar el evento

Page 315: 44622246-As-a-2008

El Patrón “Controlador”

Durante el análisis, las operaciones del sistema pueden asignarse a la clase “Sistema”, eso no significa que una clase software “Sistema” las lleve a cabo

Sistema

introducirArticulo()realizarPago()

Durante el diseño, se le asignan las responsabilidades de las operaciones del sistema a una clase controlador (la clase controlador no es una clase del dominio de la aplicación)

ProcesarVenta

introducirArticulo()realizarPago()

Page 316: 44622246-As-a-2008

El Patrón “Controlador”• Un objeto controlador no pertenece a la capa de interfaz

• Generalmente no hace trabajo, lo delega a otros objetos

• El controlador es una especie de fachada sobre la capa de dominio para la capa de interfaz

• Durante el diseño se asignan a una o más clases controlador las operaciones del sistema que se identifican durante el análisis

– Normalmente se utiliza una misma clase controlador para los eventos del sistema de un caso de uso

– Si no hay muchos eventos al sistema puedo usar una única clase controlador de fachada

Page 317: 44622246-As-a-2008

El Patrón “Controlador” un ejemplo

Sistema

introducirArticulo()realizarPago()crearNuevaVenta()final izarVenta()crearNuevaDevolucion()introducirArticuloDevuelto()

ProcesarVenta

finalizarVenta()introducirArticulo()crearNuevaVenta()realizarPago()

GestionarDevoluciones

introducirArticuloDevuelto()crearNuevaDevolucion()

Operaciones del sistema descubiertas en la etapa de análisis

Asignación de operaciones en la etapa de diseño utilizando controladores

Análisis Diseño

Page 318: 44622246-As-a-2008

El Patrón “Controlador”

: Controlador

: Ventana

: CarritoCompra

1: IntroducirArticulo(ID,cant)

2: crearLineaVenta(ID, cant)

Capa de Interfaz

Capa de Dominio

Mensaje de evento del sistema

Controlador, asume la responsabilidad de manejar las operaciones del sistema

Clase del dominio

La capa de interfaz no maneja eventos del sistema

Page 319: 44622246-As-a-2008

Sugerencias

• Use los patrones de diseño para decidir en qué clases van qué operaciones

• Tómese el tiempo necesario para decidir la ubicación de las operaciones. Marcaran la calidad del diseño

• Antes de aplicar los patrones, estudie bien el uso que se hace de ellos en la

bibliografía

Page 320: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 5.1 si puedo definir y dar ejemplos de:

• Patrón de diseño

• Responsabilidades

• Patrón de asignación de responsabilidades

• Patrón experto

• Patrón creador

• Patrón alta cohesión

• Patrón bajo acoplamiento

• Patrón controlador

Page 321: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 5.1, si

• Entiendo cuál es el objetivo de usar un patrón para asignación de responsabilidades

• Entiendo en que disciplina del UP los utilizo

• Vinculo el concepto de realización de una colaboración en los casos de uso con el de diseño utilizando patrones

• Comprendo la vinculación de los diagramas de secuencia de sistema (DSS) con el uso de patrones de asignación de responsabilidades

• Entiendo por qué uso los patrones controladores

• Comprendo que normalmente utilizo más de un patrón para asignar responsabilidades a las clases

Page 322: 44622246-As-a-2008

FIN

Page 323: 44622246-As-a-2008

Análisis de Sistemas Administrativos

Unidad 6.1 Persistencia de Objetos

Facultad de Tecnología Informática UAI

Mg. Carlos Gerardo Neil 2008

Page 324: 44622246-As-a-2008

Programa de la Asignatura

1.1. Análisis y diseño OO 2.1. Proceso de desarrollo de software. 1º parte3.1. Casos de uso 3.2. Diagramas de clases. 3.3. Diagramas de comunicación. 3.4. Diagramas de secuencia. 4.1. Lenguaje de restricción de objetos. 5.1. Patrones de Diseño Para Asignación de Responsabil. 6.1. Transformación del Modelo de Clases al Modelo ER 7.1. Proceso de desarrollo de software 2º parte

Page 325: 44622246-As-a-2008

Clase anterior – repaso general

• ¿Cuál es el objetivo de usar un patrón para asignación de responsabilidades?

• ¿En qué disciplina del UP utilizo los patrones de diseño?

• ¿Cómo se vincula el concepto de realización de una colaboración en los casos de uso con el de diseño utilizando patrones para asignacion de responsabilidades?

• ¿Cómo se vinculan los diagramas de secuencia de sistema (DSS) con el uso de patrones de asignación de responsabilidades

• ¿Para qué uso los patrones controladores?

Page 326: 44622246-As-a-2008

Modelo de Clases vs. Modelo de Datos

• En el modelo de clases tenemos:– Clases– Asociaciones– Clases Asociaciones– Generalizaciones– Atributos

• En el modelo de datos tenemos:– Entidades– Interrelaciones – Atributos– Identificadores

¿Cómo mantengo la persistencia de los objetos...?

...Mediante una base de datos

¿Cómo se puede hacer corresponder un modelo de objetos con un modelo de datos?

Page 327: 44622246-As-a-2008

¿Cómo hago las transformaciones?

¿Todas las clases se transformarán en entidades?

¿Qué pasará con las asociaciones?

¿...y las clases asociaciones?

Alumno

Alumno Materia

Nota

Alumno Materia

?

?

?

Page 328: 44622246-As-a-2008

¿Cómo hago las transformaciones?/2

¿... Qué pasará con las generalizaciones?

¿y con los atributos de las clases?

¿Y con las operaciones?

Materianombreaño

Materianombreaño

darNombre()darAño()

?

?

vehiculo

camion automovil

?

Page 329: 44622246-As-a-2008

Transformación Básica - Clases

• Todas las clases se transforman en entidades

Alumnonombreapellidodireccion

ALUMNO

nombre

apellido

direccion

codAlu

Creo el Atributo identificador

el modelo de datos NO hay operaciones

Los atributos de la clase pasan a ser atributos de la entidad

Se crean nuevos atributos identificadores para cada entidad (los objetos no precisan Identificador único.)

Page 330: 44622246-As-a-2008

Transformación Básica – Asociaciones

• Las asociaciones se transforman en interrelaciones

EMPRESA EMPLEADO(1, n)(1, 1)

EmpleadoEmpresa 1 1..*1 1..*

Se mantiene, en el modelo de datos, la misma multiplicidad de la asociación

Page 331: 44622246-As-a-2008

Transformación Básica – Composición

FacturaNroFacturafecha

LineanroItemcantidad1..*1..*

• Las relaciones de composición

El “todo” se transforma en entidad fuerte y la “parte” y se transforman en entidad débil FACTURA LINEA

(1, n)(1, 1)

Page 332: 44622246-As-a-2008

Transformación Básica – Clase Asociación

• La clase asociación se transforma en interrelación

– La multiplicidad es de M:N

– Los atributos de la clase asociación pasan a ser atributos de la interrelación

Empleado Empresa

1..*1..* 1..*1..*

PuestofechaIngresosueldo

EMPRESA

EMPLEADO

(1, n)

(1, n)

sueldo

FechaIngreso

PUESTO

Page 333: 44622246-As-a-2008

Transformación Básica – Generalización

• Las relaciones de clasificación (tres opciones)

1. Se transforman en relaciones de clases y subclases en el modelo

entidad interrelación, o

vehiculotipoCombustiblepeso

automovilcantidadPasajeros

camioncapacidad

AUTOMOVIL

peso

cntidadPasajeros

tipoCombustible

codAut

Tengo que agregar el atributo identificador

2. Se pasan los atributos de la superclase a las subclases (desaparece la superclase)

3. Se pasan los atributos de las subclases a la superclase (y desaparecen aquellas)

VEHICULO

peso

cntidadPasajeros

tipoCombustible

codAut

capacidad

CAMION

peso tipoCombustible

codAut

capacidad

Page 334: 44622246-As-a-2008

Un ejemplo

Page 335: 44622246-As-a-2008

ALUMNO

CURSO MATERIA

cod_alum

cod_cur

cod_mat

N

1

PROFESOR

NOTA

M

NN

M

nota

fecha

cod_prof

supeclase

superclase

NOTA

notafecha

PROFESOR

CURSO

ALUMNO

1

*

MATERIA*

*

*

*

*

*

*

*

*

1

Transformación del modelo de clases al

modelo de datos

La transformación al modelo relacional es la

conocida...

Page 336: 44622246-As-a-2008

Otro ejemplo...

Autor

nombreapellido

OrdenCompra

numerotarjetadireccionEntregaopcionEntrega

Cliente

nombreapellidodireccionteprof esion

0..*

1

0..*

1

tiene

Libro

isbntituloeditorialsoportecategoria

1..*1..* 1..*1..*

esta escrito por

CarritoCompra

agregarItem()v enta()

1

1

1

1es de

1

1

1

1

usa

EjemplarLibro

numeroprecio

darPrecio()

1..*

1

1..*

1

tiene

Items

cantidad

crear()subtotal()

1..*

1

1..*

1

tiene

1

0..*

1

0..* pertenecen

CLIENTE

EJEMPLARLIBRO

cod_cli

num_ejemp

1

1

ORDENCOMPRA

1

1

1

cod_carro

cod_ord

AUTOR LIBRO

cod_librocod_autor

ITEMS

num_item

CARRITOCOMPRA

1

N

N

N 1

1

N

N N

Page 337: 44622246-As-a-2008

El modelo Relacional Asociado

Cliente(cod_cli, ...)

OrdenCompra(cod_ord, ..., cod_cli(Cliente))

CarritoCompra(cod_carro, ..., cod_cli(Cliente), cod_ord(OrdenCompra))

Items(num_item, ..., cod_carro(CarritoCompra), num_ejem(EjemplarLibro))

EjemplarLibro(num_ejem, ..., cod_libro(Libro))

Libro(cod_libro, ...)

Autor(cod_autor, ...)

LibroAutor(cod_libro(Libro), cod_autor(Autor))

Page 338: 44622246-As-a-2008

Otro ejemplo

Story

-title-date-summary

Interview

Q&A

-question-answer

1..1

*

dateIDst title

1..n

1..1

body

part

Person

-name-address-email

1..1

Q&A

1..1

IDqa

Essay

-illustration

1..*

PersonStory

InteviewEssay

part

body name

emailsummary

answer

IDpr

question

1..n

1..1

1..n

1..n 1..1

illustration

address

1..*1..*

1..*

1..1

1..1

author

participant

ConceptualModel ERModel

participant

author

Page 339: 44622246-As-a-2008

Sugerencias

• El modelo de datos es una consecuencia del modelo de clases, por lo tanto se diseña después de este

• La transformación es del modelo de clases al modelo conceptual (DER) y de éste al modelo lógico (relacional) – ver OED –

• Tenga en cuenta costos y beneficios de mantener en el modelo de datos conceptual, las relaciones de generalización

• Existen otros mapeos entre el diagrama de clases y el modelo de datos (ver bibliografía específica)

Page 340: 44622246-As-a-2008

Auto evaluación/1

Comprendí los conceptos más importantes de la unidad 6.1 si puedo definir y dar ejemplos de:

• Transformación de – Clases

– Asociaciones

– Composiciones

– Generalizaciones

Page 341: 44622246-As-a-2008

Auto evaluación/2

Comprendí los conceptos más importantes de la unidad 6.1, si

• Entiendo por qué utilizo una base de datos relacional y no, como parecería lógico, una base de datos OO

• Entiendo por qué derivo el modelo de datos del modelo de clases y no a la inversa

• Comprendo que la transformación propuesto no es la única posible

• Entiendo por qué solo transformo datos y no operaciones

• Comprendo por qué por a cada clase transformada, además de los atributos, debo añadirle, en el modelo de datos, un identificar único

Page 342: 44622246-As-a-2008

FIN