Administrativos
Unidad 1.1
Análisis y Diseño OO
UML y el Proceso
de Desarrollo de Software
Desarrolladores
Expertos del dominio
Usuarios
Analistas
¿Para qué sirven los modelos?
visualizar
especificar
construir
documentar
los artefactos de un
sistema.
¿Dónde Usamos UML?
Usamos UML
en todas las
etapas del
proceso de
desarrollo
¿Para qué sirve UML?
UML permite:
– Definir los límites del sistema y sus principales funciones,
mediante Casos de Uso y actores.
Scenario State
Scenario State
Diagrams de
Diagramas Diagrams de
Diagramas
Diagrams Diagrams
Comunicacion Modelo Componentes
Scenario Component
Scenario Component
Diagrams
Diagramas de
Diagrams de
Diagramas Diagrams
Diagrams
Estados Diagramas de Despliegue
Actividad
Diagrama de Casos de Uso
<<include>>
Reintegro Cuenta Corriente
<<include>>
1 0..*
1..*
EjemplarLibro
Items 0..* pertenecen
numero
cantidad
1 precio
1..* tiene
1
Lib ro
isbn
Autor
titulo esta esc rit o p or
editorial nomb re
soporte 1.. * 1..* ape llido
categoria
prestar(video, socio)
verificar situación socio
registrar préstamo
entregar recibo
:Video
5: entregar recibo
: Encargado 4: registrar préstamo
:Préstamo
estado
pres tar devol ver [ núm ero_p rést amo s = 1 ]
c on prés tam os
pres tar
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
Diagrama de Actividad
Buscar Bebida [ no hay café ] [ no zumo ]
[ hay café ]
[ hay zumo ]
Poner filtro
en máquina
Encender
máquina
/ cafetera.On
Café en
preparación
indicador de fin
nodo
Servidor Central Control y Análisis
comunicación
Acceso a BD Comment
Comment
Rutinas de Coneccion
Comment
Terminal de Consulta
Interfaz de Terminal
Rutinas de Coneccion
Comment Comment
Punto de Venta
Rutinas de Coneccion
Comment
Comment Comment
UML no es un proceso...
Proceso
Unificado
El Proceso Un
Proceso Unificado (PU)
<<include>>
Reintegro Cuenta Corriente
• Centrado en la Arquitectura
opcionEntrega
tiene
1..*
• Iterativo e Incremental
EjemplarLibro
Items 0..* pertenecen
numero
cantidad
1 precio
1..* tiene
1
Lib ro
isbn
Autor
titulo esta esc rit o p or
editorial nomb re
soporte 1.. * 1..* ape llido
categoria
El Proc
Dirigido por Casos de Uso
• Los casos de uso
representan los requisitos Reintegro Cuenta Corriente
<<include>>
funcionales y guían el
diseño, la implementación Cliente
<<include>>
Verificar Operación
1 0..*
CarritoCompra
implementación que
Ord enCom pra
es de
numero
1
tarjeta
1 1 direccionEntrega
opcionEntrega
tiene
1..* tiene
uso
1
Lib ro
isbn
Autor
titulo esta esc rit o p or
editorial n omb re
soporte 1.. * 1..* a pe llido
categoria
Centrado en la Arquitectura
• La arquitectura es una vista de
diseño con las características más
importantes, dejando los detalles ClienteOcacional ClienteEspecializado
profesion
del sistema
te n umer o
1
Car rito Com pra 1 1 1
1..*
Ca teg ori a
tipo
estáticos y dinámicos
Ite ms
EjemplarLibro
cantidad 0..* pertenecen 1
nume ro
pertenec e
crear() 1 1..*
darPrecio()
subtotal() 1..*
tiene
1 Lib ro
Au tor isbn
1..* 1..* titulo
ConsultarLibro()
evolucionan en paralelo
Iterativo e Incremental/1
• Desarrollo iterativo:
El P
Ciclo de desarrollo
• Construcción: implementación
iterativa del resto de requisitos de
El P
menor riesgo
• Objetivos
Actividades
• 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
Auto evaluación/1
• Disciplinas / Fases
• Fase de inicio
• Fase de elaboración
• Fase de construcción
• Fase de transición
• Desarrollo iterativo e incremental
El Pr
Iterat
Auto evaluación/2
Comprendí los conceptos más importantes de la unidad 2.1, si
Iterativo e
Primera Cliente
<<include>>
Verificar Operación
ETAPA DE
INICIO
Describimos
los casos de uso con
mayor detalle.
<<include>>
Reintegro Cuenta Corriente
<<include>>
El Proceso
Reintegro Cuenta de Crédito
Escenario principal
Iterativo e
El cliente ingresa a la pagina Web de CVLI
Primera iteración El cliente ingresa a la opción “registración “
El sistema solicita ingreso de los datos personales
ETAPA DE El sistema evalúa el país….
…..
ELABORACIÓN
Creamos los diagramas
de secuencia de sistemas
para cada caso de uso.
: SISTEMA
: cliente
ingresarSistema()
ingresarDatosPersonales ()
El Proceso
ingresarTarjetaCredito()
ingresarPreferenciasEnvio()
ingresarClaveContraseña()
DSS
"Registrarse
al sistema"
Iterativo e
Escenario principal
Primera iteración
El cliente ingresa a la pagina Web de CVLI
ETAPA DE El cliente ingresa a la opción “registración “
El sistema solicita ingreso de los datos personales
ELABORACIÓN El sistema evalúa el país.
…..
Creamos el modelo
del dominio: CLASES,
ASOCIACIONES,
ATRIBUTOS
El Proceso
profesion
Client e
n ombre
a pellido
1 tiene OrdenCompra
d ireccion 0..*
te n umer o
1
Car rito Com pra 1 1 1
1
Tarjeta DireccionCompra OpcionEntrega
agregarItem() tipo
n ombre calle
Iterativo e
v enta() n umero numero
1
tiene
Ca teg ori a
Ite ms
cantidad 0..* pertenecen
EjemplarLibro
nume ro
tipo
1
pertenec e
crear() 1 1..*
darPrecio()
subtotal()
ETAPA DE
1..*
tiene
1 Lib ro
Au tor isbn
nombre 1..* 1..* titulo
escrito por
ELABORACIÓN
apellido editorial
ConsultarLibro()
Asignamos
responsabilidades
a las clases, asistidos
por los patrones de
ASIGNACION DE
RESPONSABILIDADES
El Proceso
: CarritoCompra
CarritoCompra
1: crear( parametros )
: Items
Iterativo e
venta()
Primera iteración
1
tiene
1..*
ETAPA DE
EjemplarLibro
Items
0..* pertenecen numero
cantidad
precio
1
ELABORACIÓN subtotal()
darPrecio()
Transformamos el
modelo de clases a
un modelo de
datos y luego al
modelo relacional
cod_ord
El Proceso
cod_cli
CLIENTE ORDENCOMPRA
1 N
1 1
cod_carro
1
1
CARRITOCOMPRA
Iterativo e
num_ejemp
N
N 1
Primera iteración
ITEMS EJEMPLARLIBRO
N
num_item
cod_autor cod_libro
ETAPA DE AUTOR
N N
1
LIBRO
ELABORACIÓN
Codificamos y
probamos.
Mostramos el ejecutable
al usuario
El Proceso
public class AdaptadorFigura extends Figura
{
Iterativo e
private int x;
Primera iteración public AdaptadorFigura()
{ variables
ETAPA DE x = 0; }
ELABORACIÓN }
Comenzamos una
nueva iteración
trabajando con
nuevos casos de
uso (o mejorando
los anteriores)
El Proceso
Segunda iteración
ETAPA DE
ELABORACIÓN
Iterativo e
Fin
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
Introducción
Consideraciones Generales
EL paradigma OO se impuso por…
• Uso de patrones
Análisis, Diseño, Implantación
Se visualizan en el describe
modelo de dominio:
• Clases conceptuales Articulo
• Asociaciones entre clases conceptuales nroSerie
• Atributos de las clases conceptuales
Responsabilidades
• Una responsabilidad es un contrato u obligación de una clase
HACER
Agregar un estudiante ESTUDIANTE
Figura
Editor
dibujar()
mover()
dibujar()
unCirculo.dibujar();
dibujar() dibujar()
mover()
mover() mover() UnTriangulo.dibujar();
unRectangulo.dibujar();
Enfoque OO
La transición del análisis al diseño es un refinamiento
Enfoque Estructurado
En la transición del análisis al diseño
pasamos del DFD al DE mediante un proceso heurístico no trivial
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
• 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
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
Auto evaluación/2
Comprendí los conceptos más importantes de la unidad 1, si
• Entiendo la diferencia entre análisis, diseño e implementación y que es lo que realizo en cada una de estas actividades
• ¿En qué que hacen énfasis cada una de las fases del UP?
actor 2 <<extend>>
caso d e uso 2
caso de uso 1
<<include>> actor 1
caso de uso 4
caso de us o 3
caso de uso
Actor
Casos de Uso - actores
<< actor>>
TARJETA DE
0..1 CREDITO
0..*
secundario
Cliente
CVLI << actor>>
secundario
GESTOR
DE LIBROS
0..1
0..1
secundario << actor>>
TARJETA DE
0..1 CREDITO
0..*
secundario
Cliente
CVLI << actor>>
secundario
GESTOR
DE LIBROS
0..1
0..1
secundario << actor>>
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
Colaboración
hacer pedido
Caso de uso
gestion de Pedidos
Realización
Caso de Uso - asociación
Una dependencia es una relación de uso que declara que un caso de uso
utiliza información y servicios de otro
<<include>>
<<extend>>
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.
<<extend>>
Procesar Venta
• 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 P
un ejemplo...
Consultar libro
Cliente
un ejemplo...
<<include>> <<include>>
Consultar libro
buscar libros
comprar libro
Cliente
Comenzamos con el caso práctico...
Compañía de Ventas de Libros por Internet (CVLI)
(Descripción sintética del Sistema)
• Cliente (primario)
• Administrador del sistema (primario)
• Tarjeta de crédito (secundario)
• Gestor de libros (secundario)
• Gestor de envío (secundario)
Diagrama de Contexto
<< actor>>
TARJETA DE
0..1 CREDITO
0..*
secundario
Cliente
CVLI << actor>>
secundario
GESTOR
DE LIBROS
0..1
0..1
secundario << actor>>
Cliente
Registrarse al sistema
Consultar libro
Comprar libro
Establecer preferencias de envío y empaquetado
Registrarse al sistema
Gestor de Lib ros
Consultar libro
Tarjeta de Credito
Cliente
Gestor de Libros
Consultar libro
Cliente
<<include>>
Tarjeta de Credito
Comprar libro
<<extend>>
Establecer preferencias
de envío y em paqueta do
Desarrollo de un Caso de Uso
Nombre de caso de uso: Registrarse al sistema
Fecha de creación:
Fecha de actualización:
Versión:
• Entiendo qué es una colaboración y vinculo este concepto con la realización de un caso de uso
Una clase es una descripción de un conjunto de objetos que comparten los mismos
atributos, operaciones, relaciones y semántica.
imprimirNombre() … }
Atributos y Operaciones
Un atributo es una propiedad de una clase
que es compartida por todos los
elementos de esa clase
Atributo
Calentador
Operación
temperatura : Integer = 0
Clase Usuario
¿Cómo se grafican los
objetos?: Usuario
dos puntos, nombre de la
clase, subrayado
:CLASE Objetos Usuario
: Usuario : Usuario
Clases abstractas
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
Figura
calcularSuperficie()
Cuadrado
Triangulo
calcularSuperficie()
Interfaz/1
Una interfaz es una colección de operaciones que especifican un servicio de una clase o un
componente
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
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
Realización
Vector MatrizCuadrada
Cada clase la
implementa imprimir() imprimir()
como
corresponde
Relaciones/1
• Las clases no se encuentran aisladas, existen tres tipos principales
de relaciones:
dependencia
Ventana
abrir() Evento
cerrar()
mover()
dibujar() asociación
generalización
Asociación
Agregación
Composición
Generalización
Dependencia
Realización
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
PeliculaDeVideo
nombre
Canal
reproducirEn(c : Canal)
iniciar()
parar()
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
Nombre de rol
Asociación unaria
Asociaciones – nombre de rol
Nombre 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
dirige A >
Asociaciones – multiplicidad de rol/1
Multiplicidad: define cuántas instancias de una clase A pueden asociarse con
una instancia de una clase B
Tienda Articulo
1 1..*
1
Exactamente
Uno:
A B
0..1
Cero o Uno:
A B
0..*
Cero o Muchos: A B
1..*
Uno o Más: A B
Número Exacto: A B
0..1,3..5,7..9
Lista: A B
Rango: 3..6
A B
Asociaciones - Agregación
• Este tipo especial de asociación
Todo
modela una relación
TODO/PARTE
Parte
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
• Hay una pertenencia fuerte. Se puede decir que el objeto contenido es parte constitutiva
y vital del que lo contiene
Computadora
1
1 1
CPU Monitor Teclado
Clase Asociación
Una asociación puede representarse por medio de una clase que permite
añadir, por ejemplo, atributos y operaciones
empleador
empresa 1..* empleado
1..* empleado
cargo
nombre
sueldo
emp3 : empleado
(emp2, em)
Dirección de
navegación
Usuario Clave
1 *
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
dibujar()
mover() subclases
• 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
Paquetes/2
¿Cuáles son las ventajas de utilizar Paquetes?
Soporte 1..*
situadoEn 1
1..*
registradoEn escritaPor
1..* 1
Ejemplar
1..* obra estaEditadoEn
numero
titulo
1 1..*
Libro Vi deo colocar()
1..* Prestamo
prestadoA fecha
duracion
1..*
Socio
nombre
apellido
ObraInterpretada ObraNoInterpretada direccion
prestar()
1..*
interpretadaPor
1..*
Interprete
Sugerencias
En la descripción de las clases del dominio del problema
• 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
Auto evaluación/2
Comprendí los conceptos más importantes de la unidad 3.2, si
• 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 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
Implementación básicas de las
abstracciones
Clases, clases abstractas, generalización
B
b
public class B extends A{
// definición de atributos b1()
private tipo b;
// definición de operaciones
public void b1() {}
}
Interfaz
public interface A{
// definición de operaciones
<<Interface>>
void operación();
A
}
operacion()
B // definición de atributos
private tipo b;
b
// definición e implementación
operacion() // de operaciones
public void operacion() {}
}
Asociación 1..1
A -rol-b B
a b
1 1
A B
a b
1..* 1..*
A B
public class A{
a b
1..* 1.. * // definición de atributos
private tipo a;
C // referencia al conjunto de objetos C
c
// mediante un arreglo
private C c[] = new C[n];
}
A C B
a c b
1 1..* 1..* 1
public class C{
// definición de atributos
public class B{
private tipo c;
// definición de atributos
// referencia al objeto C
private tipo b;
// mediante atributos
// referencia al conjunto de objetos C
private B b;
// mediante un arreglo
private A a;
private C c[]= new C[n];
}
}
FIN
Análisis de Sistemas
Administrativos
Unidad 3.3 - 3.4
Diagrama de Secuencia y Comunicación
• ¿Cuál es la diferencia conceptual entre agregación y composición y que ambas son tipos
especiales de asociaciones?
• ¿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?
• DIAGRAMA DE
COMUNICACIÓN: enfatiza
la organización estructural de
los objetos inst1 : ClaseA inst2 : ClaseB
1: mensaje1
• DIAGRAMA DE
SECUENCIA: hace énfasis en 2: mensaje2
la ordenación temporal
Relación entre diagrama de clases y de
interacción
clase B
clase A
metodoA() Diagrama de secuencia
Diagrama de clases : clase A : clase B
1: metodoA( )
Sintaxis de mensaje
Retorno:= mensaje(parametro:tipoParametro):tipoRetorno
Ejemplo
valor:= pago(cantidad:integer):integer
Diagrama de Secuencia
Diagrama de Secuencia/1
Definición:
Un diagrama de secuencia destaca la ordenación temporal de los mensajes.
Sintaxis:
Envió
sincrónico
objeto
(Emisor
mensaje bloqueado)
destinatario
Periodo de
actividad emisor
Mensaje al mismo
objeto
Iteración
v: Vendedor :LíneaProducto
*[1..8] verificarLínea()
Sintaxis:
* [expresión-iteración ]
mensaje
Creación de objetos
Mensaje de creación
de objetos
: Registro : Venta
1: realizarPago( )
2: create( ) : Pago
Ejemplo de diagrama de secuencia
Diagrama de Secuencia de Sistema (DSS)
• Los diagramas de secuencia de sistema se utilizan en la etapa de análisis
para documentar casos de uso
Identifico mensajes
hacia el sistema
en el caso de uso
Diagrama de Secuencia del Sistema
• Muestra, para un escenario específico de un caso de uso, los
eventos que generan los actores externos
A los mensajes
los extraemos
del caso de uso
Se puede mostrar,
opcionalmente, la
Los mensajes los respuesta del
nombramos sistema
independientemente de
la implementación
Seguimos con el ejemplo
• El sistema (si estuviera compuesto por una sóla clase) podría tener, por
ahora, las siguientes operaciones ...
Operaciones que
SISTEMA serán asignados
ingresarSistema() a las clases en la
ingresarDatosPersonales() etapa de diseño
ingresarTarjetaCredito()
ingresarPreferenciasEnvio()
ingresarClaveContraseña()
: cliente ingresarSistema()
ingresarSistema() ingresarDatosPersonales()
ingresarTarjetaCredito()
ingresarPreferenciasEnvio()
ingresarDatosPersonales () ingresarClaveContraseña()
ingresarTarjetaCredito()
ingresarPreferenciasEnvio()
ingresarClaveContraseña() Cliente
nombre
apellido
direccion
te
1 prof esion 1
DSS usa tiene
"Registrarse
1 0..*
al sistema"
CarritoCompra Ord enCom pra
es de
numero
1
tarjeta
1 1 direccionEntrega
opcionEntrega
tiene
con los criterios que nos darán los patrones de 1..* tiene
asignación de responsabilidades 1
Lib ro
isbn
Autor
titulo esta esc rit o p or
editorial n omb re
soporte 1.. * 1..* a pe llid o
categoria
Diagramas de Comunicación
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])
Diagramas de Comunicación/2
• Muestra las interacciones organizadas en torno a los objetos y los enlaces entre
ellos
• Un enlace es una
conexión entre objetos,
indica que es posible
inst1 :
alguna forma de ClaseA
1: mensaje1
navegación o visibilidad enlace
1: *st:=getSubtotal
: Venta : LineaDeVenta
Sintaxis:
* [expresión-iteración ] mensaje
Ejemplo:
• 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
• Diagrama de comunicación
• Diagrama de secuencia
• Enlace
• Menaje
• Itera ración
Auto evaluación/2
Comprendí los conceptos más importantes de la unidad 3.3, 3.4, si
• Entiendo la diferencia entre enlace y asociación y cómo se visualiza el enlace en los diagramas de iteración
• Entiendo que debo hacer un diagrama de secuencia de sistema por cada escenario del caso de uso
• FIN
Análisis de Sistemas
Administrativos
Unidad 4.1 OCL
• ¿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 enlace y asociación y cómo se visualiza el enlace en los diagramas de
iteración?
• ¿Debo hacer un diagrama de secuencia de sistema por cada escenario del caso de uso o solamente
para el flujo principal?
Bibliografía usada para el curso
Jos Warmer
Anneke Kleppe
http://www.omg.org/
OCL
¿Por qué utilizar OCL?
• 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)
¿Qué no es OCL?
• NO es un lenguaje de programación
Sirve para:
Avion
id_avion : Integer
+avion Tipo_Avión
Vuelo +tipo
1 1..* tipo : String
id_vuelo : Integer
serie : String
origen : String 1..* 1 cant_de_asientos : Integer
destino : String
cant_de_tripulantes : Integer
*
*
+pasajeros
1..* Pasajeros
id_pasajero : Integer
+tripulantes pasaporte : String
1..*
<<Invariant>>
Persona
edad > 18 context Persona
nombre: String
inv: edad > 18
edad: Integer
....
Persona
nombre: String
edad: Integer
Tipo contextual
....
context Persona
Instancia
contextual
etiqueta
Accediendo a
propiedades de objetos
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
self.mEdad >= 17
self.obtenerprecio()
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
Cliente
mNombre: String
mApellidos: String
mEdad: Integer
lim_max_mov:Integer
colección->operaciónDeColeccion()
Navegaciones
Habitación
Huésped
número_piso : Integer
* nombre : String
número_habitación : Integer
edad : Integer
número_de_camas : Integer
sexo : {hombre, mujer}
tipo : {A, B}
+huéspedes
Navegaciones
context Habitación
Habitación
Huésped
número_piso : Integer
* nombre : String
número_habitación : Integer
edad : Integer
número_de_camas : Integer
sexo : {hombre, mujer}
tipo : {A, B}
+huéspedes
Habitación
Huésped
número_piso : Integer
* nombre : String
número_habitación : Integer
edad : Integer
número_de_camas : Integer
sexo : {hombre, mujer}
tipo : {A, B}
context Habitación
inv: self.Huesped->size() <= self.número_de_camas
Propiedad: extremos finales de asociaciones
A 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
context Compañia
inv: self.empleados->notEmpty()
+gerente
Persona 1
Compañia
nombre : String
edad : Integer nombre : String
esDesocupado : Boolean * +empleados
En self.empleados->notEmpty() estamos accediendo a la propiedad notEmpty en el
conjunto self.empleados
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.
Compañia
context Persona inv: empleado
0..* nombre : String
cantidadDeEmpleados : Integer
self.empleador empleador
0..*
Si la multiplicidad del extremo es *, es una colección
Context Person inv:
self.employer ... (una colección)
Si la multiplicidad del extremo es 0 ó 1, es un
objeto
Context Company inv: Self.manager...
(Un objeto)
Combinando propiedades
Las propiedades se pueden combinar para escribir
expresiones más complejas.
context Cliente
Invariantes
Pre/post-condiciones
Valores iniciales
Valores derivados
De consulta
otros
Invariantes
Un invariante es una condición que debe ser verdadera para
todas las instancias de un tipo específico en cualquier
momento.
context h: Habitación
result = self.salario
Pre y postcondiciones
En una postcondición, nos podemos referir a los valores de cada
propiedad de un objeto en dos momentos en el tiempo:
result = self.salario
Expresiones para valores iniciales y
derivados
Una expresión OCL puede ser utilizada para indicar el valor
inicial (o derivado) de un atributo o un extremo de asociación.
1..* Pasajeros
id_pasajero : Integer
+tripulantes pasaporte : String
1..*
Navegaciones a clases de
asociación
context Persona
Persona
Compañia
nombre : String +empleado +empleador nombre : String
edad : Integer
numerodeEmpleados : Integer
esDesocupado : Boolean 0..* 0..*
Job
titulo : String
diaComienzo : Date
salario : Integer
Navegaciones desde clases de
asociación
Es posible navegar desde la clase de asociación a los objetos que
participan en la asociación.
context Job
Persona
Compañia
nombre : String +empleado +empleador nombre : String
edad : Integer
numerodeEmpleados : Integer
esDesocupado : Boolean 0..* 0..*
Job
titulo : String
diaComienzo : Date
salario : Integer
El metamodelo de OCL
size() : Integer
includes(object : T) : Boolean
excludes(object : T) : Boolean
count(object : T) : Integer
includesAll(c2 : Collection(T) : Boolean
excludesAll(c2 : Collection(T) : Boolean
collection isEmpty() : Boolean
– Bag (Bolsa)
– Sequences (Secuencias)
Navegaciones y colecciones
• Tipos Básicos:
– Boolean: true, false
– Real: *, +, -, /, etc.
context Persona
Persona <<enumeration>>
nombre : String Genero
edad : Integer masculino
genero : Genero femenino
Navegaciones que resultan en un Set
Las 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()
+gerente
Persona 1
Compañia
nombre : String
edad : Integer nombre : String
esDesocupado : Boolean * +empleados
.... self.gerente->size() = 1
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
+asociados +trabaja +obras_sociales
Medico ObraSocial +afiliados Afiliado
context Medico
...
self.trabaja.afiliados
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.
+asociados +trabaja +obras_sociales
Medico ObraSocial +afiliados Afiliado
Obra1 af1
med1
af2
Context Medico obra2
af3
...
self.trabaja.afiliados
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.
+asociados +trabaja +obras_sociales
Medico ObraSocial +afiliados Afiliado
Obra1 af1
med1
af2
obra2
Context Medico
af3
... self.trabaja.afiliados->asSet()
Colecciones y
operaciones de colección
Operaciones de colección
collection
context Cliente
mCuentas
Cuenta
0..*
mTitulares /msaldo: Real
1..*
Cliente
mNombre: String
mApellidos: String
mEdad: Integer
Sexo: Genero
Operación Select
Permite obtener un subconjunto específico de una colección.
context Proyecto
context Proyecto
context Proyecto
collection->reject( v | expresión-booleana-utilizando-v )
collection->select( v | not (expresión-booleana-utilizando-v ) )
Operador collect
El 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.
self.empleados->collect( fechaNacimiento )
Empleado
nombre : String
Proyecto
apellido : String
nombre : String
edad : Integer
* +participa * presupuesto : Integer
esCasado : Boolean
+trabaja_en
diaNacimiento : Date
Operación ForAll
Este 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)
Empleado
nombre : String
Proyecto
apellido : String
nombre : String
edad : Integer
* +participa * presupuesto : Integer
esCasado : Boolean
+trabaja_en
diaNacimiento : Date
Operación ForAll
El 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
Empleado
nombre : String
Proyecto
apellido : String
nombre : String
edad : Integer
* +participa * presupuesto : Integer
esCasado : Boolean
+trabaja_en
diaNacimiento : Date
mCuentas
Cuenta
0..*
mTitulares /msaldo: Real
1..*
Cliente
mNombre: String
mApellidos: String
mEdad: Integer
context Cuenta
Sexo: Genero
inv: self.mTitulares->exists(c:Cliente|
c.mEdad>=18)
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
Persona <<enumeration>>
nombre : String +esposa Genero
edad : Integer masculino
genero : Genero 0..1
0..1 femenino
+marido 0..1
0..1
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
if esDesocupado then
context Cuenta
mCuentas
inv: saldo > 0 Cuenta 0..*
0..*
mTitulares /msaldo: Real
1..*
Cliente
mNombre: String Movimiento
mApellidos: String 0..*
mImporte: Real
mEdad: Integer mConcepto: String
Sexo: Genero mMovs
mFecha: Fecha
Operadores Lógicos/1
b not b
• Operador not
false true
True false
• Operador and
b1 b2 B1 and b2
(bi and b2) = (b2 and b1) false false false
• Operador or b1 b2 b1 or b2
false false false
• Operador xor
b1 b2 b1 xor b2
(bi xor b2) = (b2 xorb1) false false false
b1 implies b2
Si b1 es true, entonces b2 debe ser true (si b1 es false, nada puede decirse de b2)
• Expresión if
Context LoyaltyAccount::points
init :0
context LoyaltyProgram
inv minServices: partners.deliveredServices -> size() >=1
context Customer
inv sizesAgree: programs ->size() =
card -> select(valid = true)->size()
context LoyaltyProgram
inv: participants -> forAll (age() <= 70)
context LoyaltyProgram
inv: self.participants -> forAll (c1, c2 |
c1 <> c2 implies c1.name <> c2.name)
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)
• Fin
Análisis de Sistemas
Administrativos
Unidad 5.1 Patrones de Diseño
• ¿Cómo se específica una propiedad (atributo, operación, nombre de rol) en un diagrama de clases?
dibujar()
mover()
Triangulo
3DFigura 3DAdapt ador Circulo
dibujar()
3Ddibujar() dibujar() dibujar() mover()
3Dmover() mover() mover()
La interacciones entre
objetos se escriben según los
términos de las
Esfera Paralelepipedo Piramide especificaciones definidas en
las superclases
3Ddibujar() 3Ddibujar() 3Ddibuj ar()
3Dmover() 3Dmover() 3Dm over()
Asignación de
Responsabilidades a las
Clases
Hasta ahora hemos llegado hasta acá …
Escenario principal
<<include>>
Reintegro Cuenta Corriente
1 0..*
: SISTEMA
CarritoCompra Ord enCom pra
es de
numero
1
tarjeta
: cliente
ingresarSistema() 1 1 direccionEntrega
opcionEntrega
tiene
ingresarDatosPersonales ()
1..*
EjemplarLibro
Items 0..* pertenecen
ingresarTarjetaCredito() cantidad
numero
1 precio
1
Lib ro
ingresarClaveContraseña() isbn
Autor
titulo esta esc rit o p or
editorial n omb re
soporte 1.. * 1..* a pe llid o
DSS categoria
"Registrarse
al sistema"
¿Cómo sigo?
“Una responsabilidad es un
contrato u obligación de una clase”
• hacer
• conocer .
Responsabilidades
1 0..*
1..*
EjemplarLibro
Items 0..* pertenecen
cantidad
numero
1 precio
1..* tiene
1
Lib ro
isbn
Autor
titulo esta esc rit o por
editorial n omb re
soporte 1.. * 1..* a pellid o
categoria
El Patrón “Experto” [Larman]
Nombre: Experto.
Ejemplo: ¿quién es el
responsable de conocer el total Nota: buscamos inicialmente en las
de una venta?. clases del modelo de dominio
t iene
1..n
EjemplarLibro
Items 0..n pertenecen numero
can tidad
El objeto que conoce esto es 1 precio
CarritoCompra
El Patrón “Experto”
tiene
1..*
EjemplarLibro
Items
0..* pertenecen numero
cantidad
precio
1
subtotal()
darPrecio()
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.
<<create>>
1: crear( parametros )
: CarritoCompra : Items
<<create>>
1: crear( parametros ) : Items
Llamada a un constructor
El Patrón “Creador”
CarritoCompra
Desde el punto de vista del patrón
Creador, deberíamos buscar una agregarI tem()
v enta ()
clase que agregue, contenga, y
realice otras operaciones sobre este 1
1 ..*
Items
cantid ad
Cada vez que hago
una compra, cre ar( )
subtotal( )
agrego un nuevo
Item
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
Envío el mensaje
agregarI tem()
agregarItem() a v enta ()
CarritoCompra
1
<<create>> tiene
1: agregarItem() 2: crear() 1 ..*
cre ar( )
subtotal( )
Envío el mensaje
crear() a Items Normalmente se invoca al
constructor de la clase
El Patrón “Bajo acoplamiento”
El acoplamiento es la medida de la fuerza con que un elemento está
conectado con otros.
Una clase con baja cohesión hace muchas cosas no relacionadas y adolece
de los siguientes problemas:
Regla empírica: una clase con alta cohesión tiene un número relativamente
pequeño de métodos con funcionalidad altamente relacionada
El Patrón “Alta cohesión”
(Un evento del sistema de entrada es un evento generado por un actor externo)
– Si no hay muchos eventos al sistema puedo usar una única clase controlador
de fachada
El Patrón “Controlador” un ejemplo
Análisis Diseño
ProcesarVenta
Sistema finalizarVenta()
introducirArticulo()
introducirArticulo() crearNuevaVenta()
realizarPago() realizarPago()
crearNuevaVenta()
finalizarVenta()
crearNuevaDevolucion()
introducirArticuloDevuelto()
Asignación de operaciones
en la etapa de diseño
utilizando controladores
Operaciones del sistema
descubiertas en la etapa de
análisis
GestionarDevoluciones
introducirArticuloDevuelto()
crearNuevaDevolucion()
El Patrón “Controlador”
La capa de interfaz no maneja eventos del sistema
: Controlador
Controlador, asume la
Capa de Dominio responsabilidad de manejar
las operaciones del sistema
2: crearLineaVenta(ID, cant)
: CarritoCompra
• Use los patrones de diseño para decidir en qué clases van qué operaciones
• Antes de aplicar los patrones, estudie bien el uso que se hace de ellos en la
bibliografía
Auto evaluación/1
• 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
Auto evaluación/2
Comprendí los conceptos más importantes de la unidad 5.1, si
• Vinculo el concepto de realización de una colaboración en los casos de uso con el de diseño
utilizando patrones
• Comprendo que normalmente utilizo más de un patrón para asignar responsabilidades a las
clases
FIN
Análisis de Sistemas
Administrativos
Unidad 6.1 Persistencia de Objetos
• En el modelo de datos
tenemos:
¿Cómo se puede hacer – Entidades
corresponder un modelo de – Interrelaciones
objetos con un modelo de – Atributos
datos? – Identificadores
¿Cómo hago las transformaciones?
¿Todas las clases se transformarán en entidades? Alumno
?
Nota ?
¿Cómo hago las transformaciones?/2
Materia
¿y con los atributos de las
clases?
nombre
año ?
Materia
nombre
darNombre()
darAño() ?
Transformación Básica - Clases
• Todas las clases se transforman
en entidades
Creo el Atributo
identificador
direccion apellido
• Las asociaciones se
transforman en
Empresa 1 1..* Empleado
interrelaciones
• Las relaciones de
Factura Linea
composición NroFact ura nroItem
fecha cantidad
1..*
El “todo” se transforma en
entidad fuerte y la
“parte” y se transforman FACTURA
(1, 1) (1, n)
LINEA
en entidad débil
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
(1, n)
Empleado Empresa FechaIngreso
AUTOMOVIL
CAMION
(desaparece la superclase)
subclases a la superclase (y
peso tipoCombustible
cntidadPasajeros
desaparecen aquellas)
Un ejemplo
superclase
Transformación del
ALUMNO PROFESOR
modelo de clases al
* modelo de datos
* *
*
1
NOTA *
CURSO nota MATERIA
fecha
supeclase
cod_alum
conocida... NOTA
1 fecha M
M
cod_mat
CURSO MATERIA
cod_cur
Otro ejemplo...
Cliente
nombre
apellido cod_cli cod_ord
direccion
te
1 prof esion 1 CLIENTE ORDENCOMPRA
usa tiene 1 N
1 1 1
0..*
CarritoCompra
Ord enCom pra
cod_carro
agregarItem() es de
1
numero 1
v enta() tarjeta
1 direccionEntrega 1
1 opcionEntrega CARRITOCOMPRA
tiene
1
1..*
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))
Otro ejemplo
ConceptualModel ERModel
body
1..1
1..1
illustration
1..1
1..n
1..
* IDqa answer
Q&A Q&A
question
-question
-answer
Sugerencias
• Transformación de
– Clases
– Asociaciones
– Composiciones
– Generalizaciones
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 por qué por a cada clase transformada, además de los atributos, debo
añadirle, en el modelo de datos, un identificar único
FIN