Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Análisis y Diseño Orientado Al Objeto
Análisis y Diseño Orientado Al Objeto
OBJETO
A P U N T E S D E M O D E L A M I E N T O D E SI ST E M A S U S A N D O U M L Y U P
TABLA DE CONTENIDO
INTRODUCCIN ........................................................................................... 7
RESUMEN EJECUTIVO ................................................................................................................ 8
AGREDECIMIENTOS ................................................................................................................... 8
GLOSARIO ............................................................................................................................. 50
MODELO DE DOMINIO ............................................................................................................ 51
Conceptos Bsicos ......................................................................................................... 51
Dominio ................................................................................................................................. 51
Clases Conceptuales .............................................................................................................. 52
Proceso .................................................................................................................................. 52
MODELO DE COMPORTAMIENTO............................................................................................... 64
Conceptos Bsicos ......................................................................................................... 64
Evento.................................................................................................................................... 64
Contrato ................................................................................................................................ 64
3
Estado .................................................................................................................................... 64
Glosario ......................................................................................................................... 80
Modelo de Dominio ...................................................................................................... 81
Diagrama de Actividades ....................................................................................................... 81
Diagrama de Clases Conceptuales......................................................................................... 82
INTRODUCCIN
RESUMEN EJECUTIVO
Este documento contiene una compilacin de clases y apuntes del curso de Diseo Orientado al
Objeto dictado por el profesor Andrs Muoz O. durante 3 aos seguidos a alumnos de quinto
semestre de la carrera de Ingeniera en Computacin en Informtica del Instituto Profesional La
Araucana.
Los contenidos principales se dividen en 4 unidades:
El contenido de este documento puede ser utilizado como apuntes de curso, material de apoyo
para otros profesores como tambin de alumnos de carreras a fines o similares, solo con la debida
citacin del autor.
Cualquier colaboracin para mejorar este apunte, por favor enviarla a andmunoz@gmail.com.
AGREDECIMIENTOS
Agradezco profundamente a mis alumnos del instituto de los aos 2007, 2008 y 2009, quienes
recibieron este apunte clase a clase, y por supuesto fueron informando todo tipo de errores e
inconsistencias que encontraban.
Adems, agradecer el apoyo y confianza de los profesores Ral Rojas y Nelson Carvallo, quienes me
dieron la oportunidad de lograr desarrollar este ramo. Tambin al profesor Daniel Muoz G., quien
tambin utiliz en su curso esta informacin, validando la aplicabilidad de este contenido
desarrollado.
Y por ltimo, a mi esposa quin fue comprensiva cuando trabajaba dedicadamente en estos
apuntes en la comodidad de mi hogar.
A todos, muchas gracias.
Profesor Andrs Muoz O.
DE
OPERACIONES
CON
LAS
CUALES
SE
PUEDE
INTERACTUAR.
En A/DOO lo que interesa es el comportamiento del objeto. De esta forma, al disear la estructura
de la informacin incorporaremos objetos para representar cada entidad o elemento que
interacta dentro del sistema.
Por ejemplo, una Factura es un objeto ya que posee un cdigo de factura, informacin de a quien
se le est entregando esa factura, la informacin del emisor de dicha factura, el detalle de los
servicios o productos, los montos por esos productos, un total, etc. A pesar de que todas las
facturas que conocemos poseen esta informacin, el objeto se refiere a una de ellas en particular
como individuo nico dentro de su especie.
CLASE
El ser humano posee una capacidad innata de clasificar. Gracias a esta capacidad entendemos que
todos los objetos son de cierto tipo, lo que normalmente lo representamos con un nombre
genrico de dicho tipo. Es as como definimos que:
UNA CLASE ES UNA CLASIFICACIN ABSTRACTA, BAJO LA CUAL
AGRUPAMOS UN CONJUNTO DE OBJETOS QUE POSEEN EL MISMO
TIPO DE CARACTERSTICAS Y LAS MISMAS OPERACIONES.
Cuando hablamos del mismo tipo de caractersticas, queremos decir que las clases definen todos
aquellos objetos que podemos definirlos con la misma plantilla.
10
Por ejemplo, la clase Perro es una clasificacin que hacemos para definir los animales que tiene 4
patas, 2 orejas, que ladran, jadean y que son utilizados como compaa del ser humano por su
fidelidad al amo. De esta forma, estamos agrupando a todos los perros del mundo bajo este
concepto de perro. Sin embargo, cada uno de los perros que conocemos son un objeto en
particular de aquella clase porque posee caractersticas que lo hacen nico entre sus pares: color
de pelo, largo de pelo, talla, peso, frecuencia de ladrido, etc.
INSTANCIAS
La distincin que hacemos entre una clase y un objeto generalmente no es fcil de digerir, pues en
muchos casos tienden a confundirse. Sin embargo, definiremos el concepto de instancia para
hacer ms notoria la diferencia. Es as como decimos que:
UNA INSTANCIA ES UNA REFERENCIA QUE SE HACE A UNO Y SOLO
UNO DE LOS OBJETOS DE CIERTA CLASE.
Cuando en OO hablamos de instancia generalmente nos referimos a la relacin que existe entre
una clase y un objeto. De esta forma escucharemos cosas como por ejemplo: el objeto es una
instancia de una clase o la clase posee como instancias a un conjunto objetos diferentes.
Por ejemplo, podemos decir que el alumno Rodrigo Vera es una instancia de la clase Alumno.
ATRIBUTOS Y OPERACIONES
Las clases poseen cierta estructura la cual define a todas sus instancias. Estas estructuras se
construyen a travs de atributos y operaciones. De esta forma, definiremos que:
UN
ATRIBUTO
ES
UN
DATO
QUE
PERMITE
DEFINIR
UNA
Tal cual como se define, los atributos son variables entre instancias diferentes o a travs del
tiempo. De esta forma, dos objetos de la misma clase podran tener diferente informacin en
ellos, o simplemente el objeto podra ir variando su atributo a medida que su ciclo de vida vaya
avanzando.
Por ejemplo, toda Persona posee caractersticas como Talla, Peso y Edad. Estos tres atributos van
variando a travs del tiempo y tambin son distintos para diferentes instancias de Persona. As,
Mara Eliana tiene 26 aos, mide 1 metro 64 centmetros y pesa 58 kilgramos, en cambio, Pedro
tiene 47 aos, mide 1 metro 82 centmetros y pesa 75 kilgramos. El prximo ao ambos
cambiaran su edad, d forma que Mara Eliana tendr 27 aos y Pedro 48.
Por otro lado, decimos que:
11
Las operaciones son definidas en la clase, y los objetos automticamente adhieren esa accin a su
ADN, lo que nos permite interactuar con ellos directamente (nosotros solo interactuamos con los
objetos y no con las clases).
Por ejemplo, la Cuenta Corriente posee un atributo de saldo. Cuando de una instancia de la cuenta
corriente hacemos la operacin de Giro o Depsitos, el saldo de la cuenta vara.
MENSAJES
Es importante relacionarse con los objetos de alguna manera estandarizada, de esta forma, se
definen algunas solicitudes que nos permiten interactuar con ellos. Con esta premisa, podemos
definir que:
UN MENSAJE ES LA FORMA CON QUE SE PUEDE INTERACTUAR CON
UN OBJETO.
An cuando esta definicin es muy bsica (y casi abstracta), la lgica de mensajes en el A/DOO
tiene la misma simplicidad, es decir, los mensajes son solo el medio de interaccin que los objetos
ocupan para comunicarse entre s y con el medio ambiente.
ENCAPSULAMIENTO
Dentro del diseo OO es muy importante tener en cuenta que nuestros sistemas no interactan
directamente con los atributos de los objetos. Por lo que definimos un nuevo concepto como:
ENCAPSULAMIENTO
ES
LA
CAPACIDAD
DE
OCULTAR
LA
Con esta herramienta, no necesitamos conocer la definicin interna de un objeto, sino que es
importante saber cules son las operaciones con las cuales se puede interactuar.
HERENCIA
Otro concepto muy utilizado es la herencia. An cuando no tenga nada que ver con dinero de
algn familiar, la herencia es, por decirlo as, la capacidad de entregar atributos y operaciones
entre clases de cierto parentesco. De esta forma definiremos:
12
Con esta definicin encontraremos diferentes soluciones a problemas similares, ya que nos abre
una serie de posibilidades sin restriccin.
Por ejemplo, si hablamos de la clase Telfono. Esta clase posee atributos que son conocidos:
De la misma manera podemos identificar algunas operaciones que se pueden realizar con l:
Hablar con una persona que est al otro lado del telfono
An as, y tal como hemos visto anteriormente, estoy hablando de todos los telfonos que existen.
Sin embargo, podemos subdividir esta clase en dos grupos: Telfonos Fijos y Telfono Celulares.
Ambos grupos comparten los atributos y operaciones anteriormente mencionadas porque son
todos del tipo Telfono, pero cada uno puede tener algunas otras caractersticas que lo hace
diferente con respecto al otro.
ABSTRACCIN
Como parte del diseo OO, este concepto es una verdadera herramienta en el modelamiento. As,
para entender ms el trmino, definimos:
LA ABSTRACCIN ES LA REPRESENTACIN DE LAS CARACTERSTICAS Y
FUNCIONALIDADES ESENCIALES DE UN OBJETO, DESDE EL PUNTO DE
VISTA DEL OBSERVADOR, SIN DETALLAR NI ESPECIFICAR SU
IMPLEMENTACIN INTERNA.
Este concepto tiene por fin el descomplejizar el diseo, con respecto a la implementacin futura.
En efecto, cuando estamos diseando nuestros sistemas es muy importante tener en cuenta que,
lo que nos interesa, es el comportamiento de los objetos desde el punto de vista del sistema y
no importa mucho la implementacin de cada uno hasta el momento en que los programadores
deban comenzar a implementarlos, utilizando herramientas e instrucciones predecibles segn
nuestra experiencia.
Por ejemplo, si consideramos a la clase Complejo bajo nuestro prisma de abstraccin podemos
mencionar algunas de sus funcionalidades:
13
Etc.
Administracin de Empleados
Emisin de Sueldos
Emisin de Reportes
Etc.
14
Ya con esta sencilla divisin obtenemos mdulos que son considerados independientes con
respecto a los dems. Sin embargo, esos mdulos pueden ser mucho ms especficos, por
ejemplo:
Modificacin de Empleado
Eliminacin de Empleado
Etc.
Administracin de Empleados
Emisin de Sueldos
Emisin de Reportes
Como pueden ver, los mdulos encontrados en el primer ejemplo fueron descompuestos en
este segundo ejemplo para mostrar que se pueden modularizar con distintos niveles de detalles.
Esto a su vez permite que los mdulos sean ms simples y sencillos de implementar, sin embargo,
aumenta la complejidad con respecto a las relaciones y mensajes que se deben utilizar para
integrar estas funcionalidades.
La receta de la modularidad en el diseo tiene que ver con la capacidad de reunir funcionalidades
o eventos del sistema que sean atmicos, de manera tal de independizar cada mdulo para que
integren un sistema como si fuera un verdadero lego.
REUTILIZACIN
Este concepto es uno de los ms importantes temas que resuelve un buen diseo OO, y a su vez,
es una consecuencia de una buena modularidad. Entonces, diremos que:
LA REUTILIZACIN ES EL MECANISMO O PROCEDIMIENTO A TRAVS
DEL CUAL ES POSIBLE UTILIZAR DEFINICIONES DE CLASES Y/O
MDULOS YA EXISTENTES, EN UN PROBLEMA NUEVO, DE MANERA
NTEGRA O CON ALGN NIVEL DE ADAPTACIN.
ntegra. Sin embargo, ese mismo mdulo intrprete puede ser usado en cualquiera de los
navegadores en forma transparente.
POLIMORFISMO
Recordando lo que conocemos desde la programacin, este concepto es ms o menos similar. As,
definiremos que:
EL POLIMORFISMO ES LA CAPACIDAD DE QUE UNA MISMA
OPERACIN PUEDA REALIZARSE DE FORMAS DISTINTAS EN CLASES
DISTINTAS.
Como podemos ver, el concepto es el mismo, desde el punto de vista del diseo, como de la
programacin, porque trata de explicar cmo la implementacin de las operaciones pueden variar
segn la utilidad y momento en la cual deben ser utilizadas.
Por ejemplo, si hablamos de una clase Polgono, podemos definir sus operaciones:
Sin entrar en terreno computacional vemos que la misma operacin definida desde el punto de
vista abstracto en la clase Polgono se ve enfrentado a diferentes frmulas, pero el
comportamiento sigue siendo el mismo (el calcular el permetro, rea y altura).
METODOLOGAS DE MODELAMIENTO
Para comenzar, debes entender que:
16
Anlisis. El analista construye un modelo del dominio del problema, mostrando sus
propiedades ms importantes. El modelo de anlisis es una abstraccin resumida y precisa
de lo que debe de hacer el sistema deseado y no de la forma en que se har. Los
elementos del modelo deben ser conceptos del dominio de aplicacin y no conceptos
informticos tales como estructuras de datos. Un buen modelo debe poder ser entendido
y criticado por expertos en el dominio del problema que no tengan conocimientos
informticos.
Diseo del Sistema. El diseador del sistema toma decisiones de alto nivel sobre la
arquitectura del mismo. Durante esta fase el sistema se organiza en subsistemas
basndose tanto en la estructura del anlisis como en la arquitectura propuesta. Se
selecciona una estrategia para afrontar el problema.
17
Probar las rutas de acceso usando escenarios e iterar los pasos anteriores segn sea
necesario.
MODELO DINMICO
EL MODELO DINMICO DESCRIBE LOS ASPECTOS DE UN SISTEMA
QUE TRATAN DE LA TEMPORIZACIN Y SECUENCIA DE OPERACIONES
(SUCESOS QUE MARCAN LOS CAMBIOS, SECUENCIAS DE SUCESOS,
ESTADOS QUE DEFINEN EL CONTEXTO PARA LOS SUCESOS) Y LA
ORGANIZACIN DE SUCESOS Y ESTADOS.
19
Los conceptos ms importantes del modelado dinmico son los sucesos, que representan
estmulos externos, y los estados, que representan los valores de los objetos. El diagrama de
estados va a representar los sucesos y los estados que se dan en el sistema.
El modelo de objetos describe las posibles tramas de objetos, atributos y enlaces que pueden
existir en un sistema. Los valores de los atributos y de los enlaces mantenidos por un objeto son lo
que se denomina su estado. A lo largo del tiempo, los objetos se estimulan unos a otros, dando
lugar a una serie de cambios en sus estados. Un estmulo individual proveniente de un objeto y
que llega a otro es un suceso. La respuesta a un suceso depende del estado del objeto que lo
recibe, y puede incluir un cambio de estado o el envo de otro suceso al remitente o a un tercer
objeto. La trama de sucesos, estados y transiciones de estados para una clase dada se puede
abstraer y representar en forma de un diagrama de estados. El modelo dinmico consta de
mltiples diagramas de estados, con un diagrama de estados para cada clase que posea un
comportamiento dinmico importante, y muestra la trama de actividad para todo el sistema.
En resumen, los aspectos del sistema que estn relacionados con el tiempo y con los cambios
constituyen el modelo dinmico.
La notacin del Modelo Dinmico se puede observar en la siguiente cartilla:
20
Identificar eventos entre objetos y preparar trazos de eventos para cada escenario.
Verificar que los eventos compartidos entre diagramas de estado sean consistentes y
correctos.
MODELO FUNCIONAL
EL MODELO FUNCIONAL DESCRIBE LAS TRANSFORMACIONES DE
VALORES
DE
DATOS
(FUNCIONES,
CORRESPONDENCIAS,
Este modelo muestra la forma en que se derivan los valores producidos en un clculo a partir de
los valores introducidos, sin tener en cuenta el orden en el cual se calculan los valores. Consta de
mltiples diagramas de flujo de datos, que muestran el flujo de valores desde las entradas
externas, a travs de las operaciones y almacenes internos de datos hasta las salidas externas.
Tambin incluyen restricciones entre valores dentro del modelo de objetos. Los diagramas de flujo
de datos no muestran el control ni tampoco informacin acerca de la estructura de los objetos;
todo esto pertenece a los modelos dinmico y de objetos.
El modelo funcional consta de mltiples diagramas de flujo de datos, que especifican el significado
de las operaciones y de las restricciones. Un diagrama de flujo de datos (DFD) muestra las
relaciones funcionales entre los valores calculados por un sistema, incluyendo los valores
introducidos, los obtenidos, y los almacenes internos de datos. Un diagrama de flujo de datos es
un grafo que muestra el flujo de valores de datos desde sus fuentes en los objetos mediante
procesos que los transforman, hasta sus destinos en otros objetos. Un diagrama de flujo de datos
no muestra informacin de control como puede ser el momento en que se ejecutan los procesos o
se toman decisiones entre vas de datos alternativas; esta informacin pertenece al modelo
dinmico. Un diagrama de flujo de datos no muestra la organizacin de los valores en objetos; esta
informacin pertenece al modelo de objetos.
Un diagrama de flujo de datos contiene procesos que transforman datos, flujos de datos que los
trasladan, objetos actores que producen y consumen datos, y de almacenes de datos que los
almacenan de forma pasiva.
Para la construccin del Modelo Funcional, es necesario realizar las siguientes actividades:
21
Identificar restricciones.
22
La duracin de una iteracin es variable, a pesar de que cada una siempre es un tiempo corto, este
tiempo puede ser desde das como algunas semanas. Entre ms largas son las iteraciones ms
complejos son los mini-proyectos, por lo que se complejiza ms el desarrollo. Los expertos dicen
que una duracin adecuada va entre 2 a 6 semanas. Sin embargo, la duracin de cada iteracin
depende directamente de los objetivos de la misma.
Requerimientos
Diseo
Requerimientos
Tiempo
Diseo
Implementacin
Implementacin
Integracin &
Pruebas
Iteracin
Integracin &
Pruebas
Mientras se va avanzando en el proyecto, cada vez que hacemos una nueva iteracin, el producto
final va incrementando su tamao, lo que lo convierte en un proceso incremental. Los miniproyectos se van repartiendo de forma tal de comenzar con un producto muy simple y de poca
envergadura, para luego ir creciendo junto al sistema para llegar a un trmino en donde el sistema
cumpla con todos los requerimientos recogidos del sistema.
Esta estrategia se asemeja mucho a la prototipacin de algunos procesos de desarrollo, pero
difiere en que cada producto es parte del sistema final, y no un prototipo desechable. An as, es
probable que en algunas iteraciones de realicen prototipos, pero stos siempre los veremos
como parte del sistema final.
Cada producto debe ser un mini-sistema que sea utilizable, quiere decir, con el cual se puede
interactuar y comprobar los requerimientos solicitados. Sin embargo, eso lo hace algo voltil, ya
que si no se cumple algn requerimiento en particular, el cliente puede solicitar un cambio en el
desarrollo realizado convirtindose en un tiempo perdido. Este tiempo perdido, como suelen
llamarlo algunos, no lo es tal, pues es la parte que nos ayuda tener ms claro los requerimientos
reales y no los que nosotros creemos que el cliente quiere.
Las ventajas prcticas de que UP sea iterativo son:
23
Comprender el sistema
Fomentar la reutilizacin
Esta distincin nos hace nacer otras dudas: cmo se hace una arquitectura slida? Durante las
primeras iteraciones del UP se define esta arquitectura. Esta arquitectura se arma con todas las
vistas del sistema, a travs de metamodelos y con una comprensin general del mismo. Para
armar estos modelos se usan los Casos de Uso. De esta forma, diremos que:
LOS CASOS DE USO SON UN CONJUNTO DE ARTEFACTOS QUE NOS
PERMITEN MODELAR LOS REQUERIMIENTOS DESDE EL PUNTO DE
VISTA DEL USUARIO FINAL Y QUE NOS DAN LAS VISTAS DEL SISTEMA
COMPLETO.
De esta forma, a travs de los casos de uso podemos armar la arquitectura del sistema, de manera
tal que podamos entender y dar un panorama general de lo que se debe realizar en el resto del
proyecto. Generalmente estos casos de uso son generados con el cliente final y en un lenguaje
ms al alcance del usuario, ya que requeriremos una alta retroalimentacin para construir la base
del sistema.
LAS FASES DEL UP
Ahora que ya sabemos bajo qu principios se utiliza el UP, es hora de que veamos cules son las
fases que lo definen y comencemos a adentrarnos en el detalle de esas fases, indicando cules son
los modelos utilizados en el anlisis y diseo orientado al objeto.
Veamos el ciclo de desarrollo desde un punto de vista macro para luego comenzar a desarrollar
cada etapa:
Fase
Iteracin
...
Inicio
Elaboracin
Construccin
Transicin
Ciclo de Desarrollo
Como vemos en el diagrama, una fase puede estar constituida por una o ms iteraciones, y el ciclo
de desarrollo completo se compone de 4 fases:
25
1. Fase de Inicio (Inception): Tiene por objetivo tener una visin aproximada del sistema,
realizar el anlisis del negocio, definir el alcance del sistema y realizar estimaciones
imprecisas que sern refinadas en las siguientes fases.
2. Fase de Elaboracin (Elaboration): Tiene por objetivo definir una visin refinada del
problema, implementar iterativamente el ncleo central de la arquitectura, resolver los
riesgos altos, identificar ms requisitos y alcances del sistema y realizar estimaciones ms
realistas.
3. Fase de Construccin (Construction): Tiene por objetivo implementar en forma iterativa
el resto de los requerimientos de menor riesgo y elementos ms sencillos, adems de
preparar el despliegue del sistema en la siguiente fase.
4. Fase de Transicin (Transition): Tiene por objetivo realizar las pruebas del tipo beta y
adems de implementar el despliegue del sistema.
DISCIPLINAS DEL UP
Es importante destacar que las fases del proceso de desarrollo de software no definen en donde
se disea o en qu parte se programa, por el contrario, existe en cada iteracin un nmero de
disciplinas con las cuales se cruzan estas fases y que si incluyen metodologas de anlisis, diseo,
construccin y calidad. Estas disciplinas son:
a) Modelado del Negocio
b) Requisitos
c) Diseo
d) Implementacin
e) Prueba
f)
Despliegue
Entorno
En cada fase, los matices que se les da a cada disciplina es muy importante. Por ejemplo, un
diagrama muy interesante es el siguiente:
26
En este diagrama podemos ver como la carga de trabajo en cada disciplina va variando
dependiendo de las fases del proyecto, pero no significa en muchos casos que en etapas
posteriores (o anteriores) no exista, pero que es menos importante desde el punto de vista del
objetivo de la iteracin en cuestin. En particular, nosotros nos centraremos en las 3 primeras
disciplinas, ya que son parte del Anlisis y Diseo OO. El resto de las disciplinas son parte del
proyecto en otras reas del mismo.
OTROS CONCEPTOS ORIENTADOS A LA PLANIFICACIN
Para terminar la visin general del UP, debemos tener en cuenta que existen algunos conceptos
que van orientados a la planificacin, ms que al diseo, pero que son importantes clarificar desde
un punto de vista del proyecto de software.
Estos conceptos, se definen a continuacin:
PARA
ESPECIFICAR,
VISUALIZAR,
CONSTRUIR
Esta definicin formal, entregada por el Object Management Group (OMG), quien adopt a UML
como lenguaje estndar en 1997, define claramente qu es y para qu sirve. Es as como vemos
claros indicios de algo que ya habamos visto:
UML es un lenguaje, compuesto por una sintaxis, pero solo comprende de la notacin o
nomenclatura y no se hace cargo del proceso de desarrollo (para eso est el Proceso
Unificado que veremos ms adelante).
UML sirve para especificar, visualizar, construir y documentar nuestros sistemas a travs
de metamodelos que sirven en las diferentes etapas del proceso de desarrollo de
software.
UML documenta sistemas software y otros sistemas no software porque no solo aplica
el modelamiento a las componentes de software de un sistema, sino tambin es factible
modelar procesos y el mismo negocio a travs de los metamodelos que propone la
metodologa de desarrollo.
Como se puede ver, UML no es solo notacin aislada, sino que tambin tiene un potencial
maysculo cuando hablamos de acompaar al proceso de desarrollo de software. Sin embargo, las
disciplinas de anlisis y diseo que nos interesa estudiar no estn dadas por un manual de UML,
sino que, a travs del uso de este lenguaje, podremos plasmar en documentos o diagramas los
modelos que sean necesarios de realizar.
A continuacin, daremos un paseo por el UML, como lenguaje, y su aplicabilidad orientada en las
disciplinas de UP como parte del proceso de desarrollo de software.
QU ES UML?
UML se define a travs de dos elementos importantes: una Notacin y un Metamodelo. Diremos
entonces que:
28
Para esta definicin tenemos un mundo completo de preguntas. Cul sintaxis? En qu lenguaje?
Qu quiere decir? En realidad la respuesta es ms fcil de lo que parece, ya que la notacin, tal
cual como versa su significado textual, es un conjunto de elementos utilizados en los artefactos.
UN ARTEFACTO ES UN ELEMENTO DEFINIDO A TRAVS DE LA NOTACIN
DEL LENGUAJE Y QUE MUESTRA UN PUNTO DE VISTA DE LO QUE SE
REQUIERE MODELAR.
De esta manera, los artefactos utilizan la notacin de manera de poder dar una visin del
problema en cuestin. As, podemos definir diferentes artefactos dependiendo tambin del punto
de vista que se desea plantear.
Existen 2 tipos de artefactos:
Diagramas: Son aquellos artefactos que utilizan una notacin principalmente grfica o
visualmente esquemtica.
Documentos: Son aquellos artefactos que describen a travs de un lenguaje natural o
estructurado diferentes propiedades de la vista que se desea modelar.
En el segundo caso (documentos), UML provee plantillas que definen qu tipo de informacin se
debe describir, indicada por el artefacto respectivo, pero no define el idioma. Para esto se
recomienda que el lenguaje siempre sea el adecuado a la audiencia del mismo, de esta manera, si
es orientado al cliente, el lenguaje natural es ms adecuado. En cambio si es orientado al
programador, puede serlo un lenguaje estructurado o incluso un pseudocdigo.
Ahora, si seguimos con definiciones, decimos que:
EL METAMODELO ES UN CONJUNTO DE ARTEFACTOS AGRUPADOS PARA UN
OBJETIVO ESPECFICO.
Segn lo que aqu estamos planteando, entonces, para un metamodelo, requeriremos utilizar la
notacin (UML) necesaria que se ajuste al objetivo planteado a travs de un conjunto de
artefactos (diagramas o documentos) que tengan las vistas que cumplan con el objetivo.
Es as como UML tiene bien especificados los metamodelos necesarios en cada etapa del
desarrollo y la notacin en cada modelo que debe ser utilizada.
Ahora bien, si esto lo cruzamos con la metodologa UP que ya vimos la clase pasada, tenemos
que para cada una de las disciplinas que son parte esencial del UP podemos asociar uno o ms
modelos. Es as como se plantea una visin de los modelos en UML de la siguiente forma:
Como se puede observar, no es fcil separar el modelado del negocio del anlisis de
requerimientos, ya que con ambos podemos completar toda la informacin necesaria para realizar
un diseo de software. Adems, al no ser un proceso lineal, es probable que dentro del tiempo del
anlisis que se utiliza, el modelado del negocio pueda realizarse en forma paralela.
Veamos ahora qu son cada uno de los metamodelos planteados en esta grfica y cules son sus
objetivos.
MODELO DE DOMINIO
Este primer modelo lo podemos definir de la siguiente forma:
ES UNA REPRESENTACIN VISUAL (DIAGRAMA) DE LAS CLASES
CONCEPTUALES U OBJETOS DEL MUNDO REAL EN UN DOMINIO DE
INTERS.
30
La idea central de estos modelos es representar las clases conceptuales y no los componentes de
software, utilizando un lenguaje ms cercano al negocio o dominio en el cual est inmersa la
solucin en vez de centrarse en explicar desde el punto de vista tecnolgico el problema (para eso
est el Modelo de Diseo).
DIAGRAMAS DE CLASES CONCEPTUALES
La notacin que utilizan es muy similar a la que se usan en los Diagramas de Clase del modelo de
diseo, sin embargo a diferencia de estos diagramas, la representacin de las clases tiene ms que
ver con conceptos que con el modelamiento de objetos a travs de clases de software.
Es informacin relevante para el modelo de dominio todo lo que tiene que ver con los casos de
uso (Especificacin de Casos de Uso), ya que en ella se muestran los procesos elementales que se
desean resolver. De esta misma manera, el uso de la informacin modelada en este diagrama es
de gran utilidad para incorporar informacin para los Contratos de las Operaciones, Glosario y
para el Modelo de Diseo.
DIAGRAMAS DE ACTIVIDADES
Es una forma especial de diagrama de estado usado para modelar una secuencia de acciones y
condiciones tomadas dentro de un proceso. La especificacin del UML define un diagrama de
actividad como: una variacin de una mquina estados, lo cual los estados representan el
rendimiento de las acciones o subactividades y las transiciones se provocan por la realizacin de
las acciones o subactividades.
El propsito del diagrama de actividad es modelar un proceso de flujo de trabajo y/o modelar
operaciones (del negocio).
MODELO DE CASOS DE USO
Antes de mirar el objetivo del modelo, definamos algo ms bsico an y que es el trmino Caso de
Uso:
ES UNA COLECCIN DE ESCENARIOS RELACIONADOS, QUE DESCRIBE
A LOS ACTORES Y LA INTERACCIN QUE ELLOS REALIZAN CON EL
SISTEMA PARA CONSEGUIR Y SATISFACER UN OBJETIVO ESPECFICO.
Este concepto es el centro del modelo, ya que intenta explicar que, en otras palabras, un caso de
uso no es ms que el uso particular (escenario) que le puede dar el usuario final (actor) al sistema
para resolver su problema. Con este concepto claro, podemos definir que el modelo:
ES EL CONJUNTO DE TODOS LOS CASOS DE USO DEL SISTEMA, EN
DONDE SE DETALLA LA FUNCIONALIDAD Y EL ENTORNO DE STE.
Despus de esta definicin, podemos decir que en realidad el modelo de casos de uso no es ms
que un grupo de modelos que definen tanto las funcionalidades del sistema como de los detalles
tiles para el diseo de software.
31
Para entender mejor, expliquemos en forma separada los diferentes diagramas y artefactos que
son parte importante de este modelo.
ESPECIFICACIN DE CASOS DE USO
Una de las actividades principales que se deben realizar en la disciplina de anlisis de requisitos es
especificar el detalle de los requerimientos funcionales en casos de uso. De esta forma, este
artefacto es la documentacin detallada de dichos requerimientos, a travs de una estructura
completa que incluye objetivos de los actores, escenarios de xito, escenarios alternativos,
variantes tecnolgicas, restricciones, etc.
Este artefacto bsicamente es un documento y no es una grfica, como pasa con los diagramas,
sino que ms bien es un detalle (escrito en espaol) con cierta estructura fija que UML define.
La fuente de informacin necesaria para la especificacin deben ser los requerimientos
funcionales directamente obtenidos del cliente (con su lenguaje natural) y su resultado es parte
esencial para el resto de artefactos del modelo de casos de uso.
DIAGRAMA DE CASOS DE USO
Uno de los primeros artefactos grficos utilizados en el proceso de desarrollo es el diagrama de
casos de uso. Este artefacto tiene por objetivo el de organizar, en forma visual, cules son los
casos de uso del sistema, su contexto, los lmites y la relacin que tienen con respecto a los
actores del mismo.
La notacin que utilizan los diagramas de casos de uso por lo general es muy simple, con tipos de
relaciones bsicas y sin un detalle que muestre implementacin (como corresponde). Adems, es
importante recordar que la parte importante de los casos de uso es su especificacin y no el de
llenarse de diagramas que muestren su contexto.
GLOSARIO
Es un documento que pone en comn toda la terminologa y su utilizacin dentro del dominio de
anlisis. Su propsito es poder comprender mejor el negocio en el cual se va a disear el sistema
para que todos los actores involucrados mantengan un nivel de entendimiento similar.
MODELO DE ANLISIS
El modelo de anlisis o de comportamiento se puede definir de la siguiente forma:
ES UN CONJUNTO DE ARTEFACTOS QUE PERMITEN IDENTIFICAR EL
COMPORTAMIENTO DEL SISTEMA O PARTES DEL MISMO A TRAVS
DE LOS ESCENARIOS PRESENTADOS EN EL MODELO DE CASOS DE
USO Y EN FUNCIN DE LAS CLASES CONCEPTUALES.
Es claro identificar que este modelo es el que da pie a identificar los primeros elementos de diseo
del sistema. Sin embargo, la mayora de los anlisis se hacen a travs del concepto de caja negra
que nos permite abstraernos de la implementacin.
32
33
REUTILIZABLE Y MODULAR.
Es fcil ver que en este modelo, tambin conocido como Arquitectura de Software, se definir la
modularidad de nuestro sistema. A pesar de que en el proceso estricto, la arquitectura tiene ms
informacin que los mdulos del sistema, para efectos acadmicos solo veremos esa dimensin
del modelo2.
DIAGRAMA DE COMPONENTES
Un diagrama de componentes representa cmo un sistema de software es dividido en
componentes y muestra las dependencias entre estos componentes. Los componentes fsicos
incluyen archivos, cabeceras, libreras compartidas, mdulos, ejecutables, o paquetes. Los
diagramas de Componentes prevalecen en el campo de la arquitectura de software pero pueden
ser usados para modelar y documentar cualquier arquitectura de sistema.
Debido a que estos son ms parecidos a los diagramas de casos de usos estos son utilizados para
modelar la vista esttica de un sistema. Muestra la organizacin y las dependencias entre un
conjunto de componentes. No es necesario que un diagrama incluya todos los componentes del
sistema, normalmente se realizan por partes. Cada diagrama describe un apartado del sistema.
MODELO DE DISEO
El modelo de diseo lo podemos definir como:
EL PROCESO A TRAVS DEL CUAL SE DEFINEN LAS CLASES DE
SOFTWARE, SE LES AADEN ATRIBUTOS, OPERACIONES Y EL PASO DE
MENSAJES PARA SATISFACER LOS REQUISITOS DEL PROBLEMA.
Con esta definicin, podemos decir que el modelo de diseo define cmo lograr el objetivo del
sistema, incorporando las clases de diseo que se deben implementar y por supuesto entregando
detalles que van a apoyar el proceso de implementacin.
REALIZACIN DE CASOS DE USO Y DIAGRAMAS DE COLABORACIN
Una definicin formal de lo que es una realizacin dice que la realizacin describe el cmo se
realiza un caso de uso particular en el modelo de diseo, en funcin de los objetos que colaboran.
De esta forma, en el diseo, el concepto de realizacin de caso de uso en realidad no es ms que
una forma de relacionar los casos de uso analizados con el diseo de objetos que satisface los
requisitos.
34
Por otro lado, la forma de realizar los casos de uso es utilizando diagramas de colaboracin los
cuales grafican en forma visual cules son las operaciones e interacciones entre los diferentes
objetos del dominio.
La informacin necesaria para realizar los casos de uso es, principalmente, las especificaciones de
los casos de uso. Sin embargo, para aquellas operaciones que se hayan definido contratos, este
detalle nos especifica mayor informacin tambin para la realizacin.
DIAGRAMA DE CLASES DE DISEO
Es un tipo de diagrama esttico que describe la estructura de un sistema mostrando sus clases,
atributos y las relaciones entre ellos.
A pesar que la notacin es similar al usado en el modelo de dominio, el diagrama de clases de
diseo incorpora notacin adicional y por supuesto un detalle mayor desde el punto de vista de la
implementacin, ya que el objetivo es especificar con el mximo de detalle posible la estructura,
su composicin y la relacin de los objetos que componen el sistema.
La informacin usada en el DCD para la definicin de las clases y sus operaciones sale en su
mayora como parte de las realizaciones de casos de uso. En efecto, de los diagramas de
interaccin, podemos obtener de manera sencilla las operaciones de cada clase, ya que es fcil
encontrarlas como interacciones entre sus instancias de objetos.
MODELO DE IMPLEMENTACIN
Este modelo se define como:
UN CONJUNTO DE ARTEFACTOS DE IMPLEMENTACIN COMO EL
CDIGO FUENTE, DEFINICIONES DE BASES DE DATOS, PGINAS,
PROGRAMAS, ETC.
35
36
37
REQUERIMIENTO
REQUISITO
ES
UNA
NECESIDAD
Es muy importante comprender que se habla de una necesidad documentada, porque muchas
veces se confunden las necesidades con los requerimientos. De esta forma, podemos dejar muy en
claro que un requerimiento es la respuesta a la necesidad que un cliente busca satisfacer con
alguna funcionalidad o capacidad del sistema.
38
ESPECIFICACIN DE REQUISITOS
39
A pesar de que no es parte del UML, la formalizacin de los requerimientos es una gran ayuda
desde el punto de vista de claridad de lo que realmente necesita el cliente. Es por eso que aqu se
definen algunos artefactos recomendados para esta fase previa al anlisis3.
Existen otros artefactos que pueden detallar estos requerimientos, pero no sern abordados en el curso
40
Funcin: Se debe dar un nombre autoexplicativo que haga referencia a lo que sta realiza.
Descripcin: Se debe describir en forma sinttica y exacta la funcin que debe realizar el
sistema frente a las necesidades del usuario final.
Categora: Es necesario indicar un cierto nivel de prioridad clasificada por su significado y
que pueden consumir tiempo cuando no son formalizadas. Estas categoras son:
o Evidente: Debe realizarse y el usuario debera estar consciente de ello.
o Oculta: Debe realizarse, pero no necesariamente es visible para el usuario
(procesos de soporte, por ejemplo).
o Superflua: Son opcionales ya que su inclusin no repercute significativamente en
las otras funciones.
PASO 5: IDENTIFICAR LOS ATRIBUTOS DEL SISTEMA
Estos no son funciones, sino que valores que pueden abarcar algunas o todas las funciones del
sistema. Por lo general tienen que ver con aquellos requerimientos no funcionales. Se propone el
siguiente formato4:
Atributo
Detalles y Restricciones
Categora
Cada uno de los atributos tiende a tener un detalle que contiene valores discretos, confusos o
simblicos. Adems, podra tener restricciones de frontera, que son las condiciones obligatorias,
generalmente en un rango de valores, de un atributo. Por ltimo, se debe indicar qu tipo de
categora o de requerimientos estamos hablando (referido al FURPS+ por ejemplo).
Supongamos por un momento que el problema que se nos plantea resolver con un sistema es
hacer un aplicativo para administrar la caja de un supermercado, tambin conocido como Punto
de Venta (PDV). En una primera reunin se recogen algunos requerimientos:
La caja debe permitir el ingreso del cdigo de los productos en forma manual o a travs de
una pistola lectora de cdigos de barra.
Si la caja se cae por algn motivo (prdida de conectividad con el servidor, corte de
energa, error en el procesamiento del medio de pago o producto defectuoso, etc), el
sistema debe retomar el proceso inmediatamente despus del ltimo paso realizado.
Solo se aceptan pagos con efectivo, cheques y tarjetas bancarias.
El cajero debe identificarse siempre al principio de su jornada, de modo que podamos
llevar control de las ventas que realiz.
41
De esta manera, se puede definir un documento con la informacin de especificacin general del
sistema y sus funciones de la siguiente forma:
Nombre del Sistema:
Panorama:
Clientes:
Metas:
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
Ingreso de Cdigos
Recuperacin de la Venta
R2.1
Registrar los Productos de la Venta
La caja debe permitir que el cajero vaya registrando todos los productos que el
cliente traiga en su carro o canasto y asociarlos a la misma venta.
Evidente
Detalles y Restricciones
Categora
Debe ser manual o por pistola lectora de cdigos de
Usabilidad
barras.
Implementacin
Debe permitir recuperar una venta desde el punto
Fiabilidad
anterior a la cada.
# Ref:
Funcin:
Descripcin:
R2.2
Registrar el Pago de la Venta
La caja debe permitir que el cajero ingrese el pago de la venta con cualquier
medio de pago habilitado.
Categora:
Evidente
Atributo
Detalles y Restricciones
Categora
Medios de Pago Habilitados Solo se aceptan pagos con efectivo, cheque y tarjetas
Implementacin
bancarias.
ILUSTRACIN 10. PLANTILLA DE ESPECIFICACIN DE FUNCIONES PARA EL SPDV
42
Con esto, nos referimos en que el Modelo de Casos de Uso, definido en la disciplina de
Requerimientos del UP nos habla sobre las funcionalidades del sistema y cmo se comporta con el
entorno, bajo los distintos escenarios en los cuales se desenvuelve.
Es preciso destacar que el modelo de casos de uso siempre usa una visin externa, es decir la del
usuario que utiliza el sistema (usuario final).
CONCEPTOS BSICOS
Pero para entender cmo utilizar y construir los Modelos de Casos de Uso es importante
comprender algunos conceptos relacionados con el tema.
ACTOR
De manera informal, podemos decir que:
ACTORES
SON
ELEMENTOS
QUE
POSEEN
COMPORTAMIENTO
Antes de identificar los casos de uso que componen el modelo, se identifican los actores que van a
participar en este modelo. Pronto veremos cmo los representamos en UML, por ahora nos
quedamos solo con la definicin.
ESCENARIO
Al igual que lo que hicimos con el actor, podemos decir que:
ESCENARIO ES UNA SECUENCIA DE ACCIONES ENTRE LOS ACTORES Y
EL SISTEMA EN ESTUDIO.
Con esto nos referimos a una historia particular de uso del sistema, es decir, alguna serie de
eventos que pueden ocurrir en una ejecucin de nuestra aplicacin que estamos diseando. A
esto tambin se le conoce como Instancia de Caso de Uso.
CASO DE USO
Finalmente, y al parecer el concepto ms esperado, con el que decimos que:
43
UN
CASO
DE
USO
ES
UNA
COLECCIN
DE
ESCENARIOS
Al ver esta definicin podemos decir que el Caso de Uso define las relaciones y acciones de los
actores hacia el sistema, bajo el prisma de un objetivo especfico. En particular, podemos decir que
los Casos de Uso en realidad son requisitos, ante todo son requisitos funcionales (como la F de
los requisitos FURPS+) o de comportamiento. Sin embargo, en algunos casos, los otros
requerimientos aparecer como Casos de Uso tambin, pero ya es poco comn. Lo general es que
sean funcionales.
RESPONSABILIDAD
Lo primero es saber qu es una responsabilidad:
RESPONSABILIDAD ES UNA METFORA CON LA CUAL SE ESPECIFICA
LOS REQUISITOS FUNCIONALES.
Completo: Es donde se escriben todos los pasos y variaciones, con secciones de apoyo
como precondiciones y garantas de xito de los escenarios presentados.
Aqu podemos ver que las formas de especificar los casos de uso generalmente varan, y tambin
dependen de la situacin en la que se est trabajando. As en algunos casos nos conviene usar una
formalidad breve, en cambio en otras es una formalidad completa.
44
Diagramas de Casos de Uso: Diagrama que muestra el contexto de todos los casos de uso
del sistema en relacin a los actores del mismo.
Actores Principales: Son aquellos actores o personas externas al sistema que requieren un
servicio para cumplir sus objetivos especficos. Por ejemplo: El Cajero es un actor que
desea procesar una venta.
Actores de Apoyo: Son actores de segunda categora que prestan servicios de apoyo al
sistema, como otros sistemas (Sistema de Inventario, como por ejemplo para el sistema de
venta).
Actores Pasivos: Son actores que estn interesados en el comportamiento del caso de uso,
pero que no interacta con l. Por ejemplo: SII es un actor pasivo.
En la mayora de los casos, los actores principales son los que nos importaran, ya que ellos
interactan con el sistema a travs de los casos de uso para satisfacer sus objetivos.
PASO 3: IDENTIFICAR LOS OBJETIVOS DE LOS ACTORES
45
Con los actores, es fcil saber cul es su objetivo para utilizar el sistema, ya que ellos se
desprenden de la formalizacin de los requerimientos anteriormente vista. Es por eso, que se
recomienda que cuando se genere la lista de actores, inmediatamente poner al costado el o los
objetivos que tiene.
Una forma es en una tabla como la siguiente:
Actor
...
Objetivo
...
ILUSTRACIN 11. TABLA DE IDENTIFICACIN DE ACTORES Y OBJETIVOS
Los objetivos pueden ser ms de uno, ya que los actores tienen ms de una esperanza del sistema.
De esta forma iremos desarrollando el modelo.
Otra forma de encontrar los objetivos es a travs de eventos externos, los cuales son gatillados
como respuesta a estos objetivos. Por ejemplo, un evento externo es ingresar el producto a la lista
de compras, este evento lo realiza el Cajero cuando pasa el producto por el lector de barras y
corresponden a un grupo de eventos que llamamos procesar una venta. Este ltimo
corresponde a uno de los objetivos del Cajero.
PASO 4: DEFINIR LOS CASOS DE USO
Despus de este proceso, lo que se requiere es identificar cules son los casos de uso del
problema. Este paso puede durar desde minutos (solo descubrir cules son) hasta das (especificar
el detalle de ellos).
Generalmente definiremos los casos de uso por objetivo de cada actor principal. Por ejemplo, si el
objetivo es procesar una venta, entonces el caso de uso asociado ser Procesar Venta. Fjate
que el nombre comienza por un verbo en infinitivo, lo que indica que es una accin del sistema
que satisface el objetivo del actor.
ESPECIFICACIN DE CASOS DE USO
Existen 2 formas de describir los casos de uso dependiendo del detalle y la audiencia que van a
tener. As, los casos de uso sern los siguientes:
CASO DE USO DE ALTO NIVEL
El CU de Alto Nivel describe de manera muy general el objetivo del Caso de Uso y alguna
informacin adicional como los actores y el tipo. Su objetivo es solo mostrar, desde un punto de
vista simple, la funcionalidad sin entrar en el detalle.
La notacin propuesta para este tipo de especificacin es:
Caso de Uso:
Actores:
Tipo:
Descripcin:
ILUSTRACIN
46
El CU Expandido describe en detalle, paso a paso, cmo se cumple el objetivo de este CU. Esta
forma de describir el CU no se usa para todos los casos, sino que solo se utiliza para aquellos que
son los principales o aquellos que aportan mayor complejidad al problema.
La notacin propuesta para este tipo de especificacin es:
Caso de Uso:
Actores:
Propsito:
Resumen:
Tipo:
Ref. Cruzadas:
En el caso de los tipos de CU, adems de los ya vistos en el CU de Alto Nivel, son:
Real: Concretos y que utilizan la tecnologa real con la cual se desarrolla el CU.
Adems, la forma de describir los cursos, tanto normal como alternos, debe realizarse en un
formato especfico de modo de que se explique cmo se resuelve el CU.
En el caso del curso normal de eventos, se describe a 2 columnas: Una para las acciones o
interacciones del actor, y la otra para las respuestas del sistema:
1.
2.
4.
Por otro lado, los cursos alternos deben hacer referencia al paso del curso normal de eventos en
donde ocurre el evento y la descripcin de ste.
Paso 3.
1.
2.
3.
Accin alterna
Accin alterna
47
Respecto a las relaciones especficas entre CU, podemos encontrar las siguientes (segunda
columna):
o Inclusin: Define un subcaso, es decir, cuando el CU referenciado est dentro de
el caso general.
o Extensin: Define un caso que, adems de realizar todas las especificaciones del
caso original, define algunos pasos adicionales. Es equivalente a utilizar
especializacin.
48
o Equivalencia: Define cuando los casos de uso poseen los mismos flujos, pero son
realizados por actores diferentes.
o De Requisito: Define cuando un caso de uso debe ser completado antes de que
contine el referenciado.
o Semejanza: Define cuando los casos de uso son similares (en objetivos), pero
poseen actividades diferentes.
Por ejemplo, si continuamos con lo visto sobre el problema del SPDV, podemos disear y definir
un modelo de casos de uso claro con los artefactos mencionados. Vamos paso a paso tal como nos
ensea esta clase:
Nombre del Sistema:
Lmites:
Actores y Objetivos
Actor
Cliente
Cajero
SecurePay
Sistema de Inventario
Sistema de Finanzas
Administracin de inventario.
Objetivo
Realizar una compra de los productos seleccionados.
Pagar el monto de la compra.
Identificarse en el terminal.
Registrar los productos de la venta.
Obtener el valor total de la venta.
Registrar el pago de la venta.
Imprimir el recibo de la venta.
Recibir solicitudes de validacin de cheques.
Recibir transacciones con tarjetas de crdito y dbito.
Recibir notificaciones de los productos egresados de la tienda.
Recibir la informacin de cada venta realizada en un terminal de la tienda.
Caso de Uso:
Actores:
Tipo:
Descripcin:
49
En esta plantilla est el problema del SPDV parcialmente especificado (falta trabajo). De todas
maneras da una idea de cmo se vera la especificacin del problema despus del proceso de
anlisis.
Ahora bien, revisemos cmo se vera esto en un Diagrama de Casos de Uso:
System
CU1: Autenticar en el Sistema
Sistema de Inventario
CU2: Registrar Productos de una Venta
Cajero
GLOSARIO
El glosario tiene por objetivo poner en comn entre los diferentes lectores del A/DOO la
terminologa a utilizar, tanto del negocio como de la parte tcnica. Este artefacto tiene la
importancia que, gracias a su informacin, podemos comenzar a definir un diccionario de datos
antes de disear componentes.
No existe una tcnica para encontrar el glosario, pero es recomendable de comenzar a
especificarlo despus de descritas las funciones del sistema o incluso cuando se estn
especificando los casos de uso, ya que van a ir saliendo en forma natural los trminos no
reconocidos por el equipo.
Una estructura bsica (plantilla) se sugiere a continuacin para el glosario:
Trmino
Definicin
50
Por ejemplo, aqu est parte del glosario al problema que hemos visto durante las secciones
anteriores.
Glosario
Trmino
Punto de Venta
Caja
Medio de Pago
...
Definicin
Lugar del supermercado donde se deben registrar las ventas del local.
Dispositivo fsico que le permite al cajero ingresar datos de la venta.
Forma equivalente a dinero que sirve para realizar pagos sin tener efectivo.
...
ILUSTRACIN 18. GLOSARIO PARA EL PROBLEMA DEL SPDV
MODELO DE DOMINIO
Un paso importante en el anlisis y diseo OO es el modelo de dominio, el cual se utiliza como
inspiracin para el diseo y como entrada para otros artefactos de UP como del diagrama de
secuencia y los contratos. De esta forma, lo definimos como:
EL MODELO DE NEGOCIO, MODELO DE DOMINIO O MODELO
CONCEPTUAL ES UN CONJUNTO DE ARTEFACTOS QUE DEFINEN EL
DOMINIO DE ANLISIS A TRAVS DEL PROCEO Y DE LAS CLASES
CONCEPTUALES, DESCRIBIENDO SUS ASOCIACIONES Y ATRIBUTOS.
An cuando los modelos de dominio son propios de la disciplina de modelado del negocio y no del
anlisis como tal, son requisito del diseo y de otros artefactos del mismo anlisis, es por esa
razn que es importante estudiarlos. Adems, salta a la vista que las disciplinas de UP se van
entrelazando entre s dependiendo de lo que se va haciendo en el anlisis y diseo, como ahora,
que a pesar de que estamos analizando los requisitos funcionales y casos de uso, necesitamos
definir el modelo de dominio para poder continuar.
CONCEPTOS BSICOS
A continuacin algunos conceptos importantes que son necesarios de entender para este modelo.
DOMINIO
Se dice que:
EL DOMINIO O NEGOCIO ES EL ESPACIO EN EL CUAL SE EXTIENDE EL
PROBLEMA PRESENTADO.
Esta sencilla definicin nos permite enmarcar nuestro problema dentro de un ambiente
totalmente controlado. Por ejemplo, si hablamos del dominio sobre el problema del Punto de
Venta en un Supermercado, el dominio se enmarca solo en eso, lo que corresponde al entorno al
punto de venta, no ms ni menos, de manera de que todo lo que definamos tendr que ver con
ese contexto.
51
CLASES CONCEPTUALES
La base del modelo de dominio est primeramente en las clases conceptuales. Es por ello que se
define este concepto como:
UNA CLASE CONCEPTUAL ES UNA IDEA, COSA U OBJETO DEL
NEGOCIO DE ANLISIS Y QUE DEFINEN PARTE DE L A TRAVS DE SU
SMBOLO, INTENSIN Y EXTENSIN.
Como podemos ver, en esta definicin estamos definiendo parte de la notacin UML de las clases
conceptuales a travs de los elementos que la componen. Estos elementos son:
Smbolo: palabras o imgenes que representan una clase conceptual.
Intensin: la definicin de la clase conceptual.
Extensin: el conjunto de ejemplos a los que se aplica la clase conceptual.
Por ejemplo, si consideramos el evento de transaccin de compra de producto como una clase
conceptual, desde el punto de vista del sistema podramos bautizarlo como Venta. Desde el punto
de vista prctico en la construccin del modelo del dominio, solo el smbolo y la intensin suelen
tener la mayor importancia.
Es importante tener clara la diferencia entre estas clases y las clases de componentes de
software que veremos en el diseo, ya que pueden confundirnos, adems de que los modelos de
dominio no sirven en la implementacin.
De esta manera, debemos tener claro que un modelo de dominio no debe contener:
Artefactos de Software, como bases de datos, ventanas, a menos que en el dominio se
estn modelando componentes de software.
Responsabilidades o mtodos de las clases conceptuales, ya que no deben representar las
funcionalidades que tienen.
Una diferencia importante cuando realizamos el anlisis desde el punto de vista de objetos, en vez
de un proceso estructurado, es que centramos el modelo en los objetos y no en las funciones.
PROCESO
Una segunda derivada de este modelo es el anlisis del dominio a travs del proceso que se ve
impactado por el problema planteado, y para ello definiremos que:
UN PROCESO ES CONJUNTO DE ACTIVIDADES O EVENTOS QUE DEBEN
OCURRIR DENTRO DEL DOMINIO PARA SATISFACER EL OBJETIVO O
FIN DE LOS USUARIOS DE STE.
52
A pesar de que esta definicin es ms especfica que la que tiene la palabra original proceso es
porque la estamos especificando dentro del concepto del modelo. De esta manera,
consideraremos al proceso como una vista dinmica del dominio que estamos analizando, y que
ser necesario modelar, de manera de tener la visin completa de qu estamos afectando con
nuestro sistema.
53
Accin
Decisin / Merge
Nodo Inicial
Fork
Join
Flujo de Control
Nodo Conector
Objeto
Accin
Envo de Seal
Receptor de Seal
Objeto
Seal de Tiempo
Pines
Excepcin
Precondicin
Info
<<precondicion>>
(condicion)
Calle
<<postcondicion>>
(condicion)
Calle (Swimlane)
Postcondicin
Su utilizacin ser un poco ms especfica que respecto a los casos de uso ya identificados. Es
importante notar que, cuando definimos los CU es posible que hayamos encontrado algunos casos
en donde tengamos inclusin, dependencia o generalizacin, pero que desde el punto de vista del
EBP esto no es relevante.
Por ejemplo, en el caso de la caja de supermercado, podemos haber encontrado el siguiente
diagrama de casos de uso:
System
Cajero
CU3: Validar Medio de Pago
SecurePay
54
Podemos ver que CU2: Registrar Productos en la Venta no tiene conexin con el CU3: Validar
Medio de Pago ya que la importancia est en focalizar en que sean casos reusables. Sin embargo,
desde el punto de vista del proceso solo es necesario definir el Proceso de Venta, la cual si
incorpora la validacin y proceso pago.
De esta manera, cuando queremos confeccionar el diagrama de actividad del proceso de venta,
nos centraremos en todos los pasos necesarios para realizar una venta especfica:
Iniciar Venta
Ingresar Producto
Venta
[cod valido]
Obtener Informacin
[cod no valido]
Registrar Producto
Rechazar Cdigo
[hay mas productos]
[no hay mas productos]
Calcular Total
[cliente paga]
Registrar Pago
Pago
Imprimir Comprobante
55
La primera tcnica postula la utilizacin de una lista de categoras de clases conceptuales. Esta lista
comprende un conjunto de clases candidatas a ser conceptuales, acompaadas de ejemplos
tpicos para esas clases, dentro de dominios similares al que estamos analizando.
Estas categoras son:
Objetos tangibles o fsicos: Todos los objetos o elementos fsicos que participan
directamente en el dominio.
Especificaciones, diseos o descripciones de las cosas: Caractersticas o descripciones que
sean de vital importancia para el dominio.
Lugares: Espacios fsicos en donde el dominio toma sentido.
Lneas de la transaccin: Entradas necesarias para la ejecucin del dominio.
Roles de las personas: Roles que puede tomar la gente que participa en el dominio.
Contenedores de otras cosas: Elementos fsicos que sean agrupadores de otros
elementos.
Cosas en un contenedor: Objetos que pueden ser contenidos en un contenedor.
Otros sistemas externos: Sistemas que estn fuera del dominio pero que se requieren
para l.
Conceptos abstractos: Conceptualizaciones u objetos no fsicos que representan un valor
agregado al dominio.
Organizaciones: Secciones y organizaciones que participen en el dominio.
Hechos: Interacciones o eventos que entregan un valor o participan del dominio.
Procesos: Serie de acciones que sean parte del dominio de anlisis.
Reglas y polticas: Restricciones o intereses que puedan ser relevantes en algn proceso.
Catlogos: Contenedores lgicos de informacin.
56
Ejemplos
Registro
Caja
Producto
Boleta
Especificaciones, diseos o descripciones de las cosas
NombreDelProducto
Lugares
Tienda
Departamento
Lneas de la transaccin
LneaDeVenta
Roles de la gente
Cajero
Supervisor
Cliente
Contenedores de otras cosas
Tienda
CarroDeCompras
Cosas en un contenedor
Producto
Otros sistemas externos
SistemaPagoTransbank
SistemaInventario
Conceptos abstractos
ColaDeClientes
Organizaciones
DepartamentoDePersonal
ProveedorDeProductos
Hechos
Venta
Pago
Empaque
Procesos
Venta
ImpresinDeBoleta
EliminacinDeProducto
Reglas y polticas
ComisionesPorVenta
Catlogos
N/A
Registro de finanzas, trabajo, contratos, asuntos legales
Boleta
Factura
ContratoDeEmpleo
SolicitudDeReposicin
Instrumentos y servicios financieros
Stock
Manuales, documentos, artculos de referencia, libros
ListaDePrecios
CatastroDeCajeros
ILUSTRACIN 22.TABLA DE IDENTIFICACIN DE CLASES CONCEPTUALES SEGN CATEGORAS
Como podemos ver en el ejemplo, tenemos muchos candidatos a ser clases del dominio, sin
embargo, tal como dice su definicin, ellos son solo posibles clases conceptuales que debemos
determinar su validez dentro del dominio de anlisis.
57
Otra tcnica es identificar candidatas a clases conceptuales desde el escenario, utilizando las
frases nominales de ella. Esto se realiza haciendo un anlisis lingstico de las especificaciones de
los casos de uso del sistema en anlisis.
Por ejemplo, si tomamos el escenario principal de xito del caso de uso Procesar Venta del
ejemplo de la caja del supermercado, tenemos el siguiente escenario:
1.
2.
3.
4.
6.
7.
8.
9.
10. El Sistema registra la venta en el Sistema de Contabilidad, y la informacin de los productos vendidos en el
Sistema de Inventario.
11. El Sistema emite la boleta/recibo y cierra la venta.
12. El Cajero entrega el recibo al Cliente.
13. El Cliente se retira con el recibo y los productos comprados.
ILUSTRACIN 23.ANLISIS DE CLASES CONCEPTUALES POR FRASES NOMINALES
En este caso solo tomamos el escenario principal de xito a modo de ejemplo, sin embargo es
importante tomar tambin las extensiones del caso de uso, ya que pueden ser fuente de nuevas
clases conceptuales y que servirn en el diseo.
Ntese que hemos subrayado conceptos que despus pueden convertirse en clases conceptuales.
Sin embargo, dependiendo del lenguaje se puede llegar a conceptos diferentes para representar
clases conceptuales equivalentes.
Es por eso que la recomendacin que realizan algunos autores al respecto es que se mezcle esta
tcnica con la anterior de lista de categoras.
OTRAS RECOMENDACIONES PARA REFINAR EL MODELO
LineaDeVenta
1..*
Este ltimo detalle generalmente se excluye, porque basta mirar el modelo para darse cuenta de
la navegabilidad del mismo.
59
Por ltimo, en los extremos de las asociaciones van lo que se conoce como Roles. Estos elementos
definen cul es la relacin que se tiene con dicho objeto, por ejemplo, nmero de elementos
(multiplicidad) como veremos ms adelante.
MULTIPLICIDAD DE ASOCIACIONES
1..*
0..1
La definicin de las asociaciones corresponde a una labor muy delicada, ya que en un anlisis
podra aparecer que todo es relevante para todo, o que todas las clases poseen alguna relacin
con las otras. Es por eso que al momento de definir las asociaciones, es importante definir:
Asociaciones en donde es necesario conservar el conocimiento de la relacin por algn
tiempo.
Asociaciones comunes que son de alta prioridad (parte-de, contenida-en, registra-a).
Otras asociaciones comunes que cumplan con las especificaciones del dominio en anlisis.
No es recomendable poner muchas asociaciones o sobrecargar el modelo con asociaciones
redundantes, porque el beneficio es realmente marginal. Por otro lado, es ms importante definir
las clases conceptuales que las asociaciones (adems, nos daremos cuenta que saltan a la vista las
asociaciones a partir de las clases conceptuales).
El listado de las asociaciones ms comunes es:
A es una parte de B
A est contenido en B
60
A es una descripcin de B
A es una lnea de una transaccin o informe de B
A se conoce/registra/recoge/informa/captura en B
A es miembro de B
A es una subunidad organizativa de B
A utiliza/gestiona B
A se comunica con B
A est relacionado con una transaccin B
A es una transaccin relacionada con otra transaccin B
A est al lado de B
A es propiedad de B
A es un evento relacionado con B
PASO 3. AADIR ATRIBUTOS
Los atributos, en general, son valores de datos lgicos de los objetos. En el modelo de dominio, los
atributos se presentan solo con el nombre, y en algunos casos particulares, podran presentarse
tambin con sus tipos (pero eso es opcional y es poco usado en la prctica), indicndolo despus
del atributo con :.
Para agregar los atributos, debe especificar aquellos valores que son relevantes para entender el
modelo de dominio. Esto quiere decir, que cuando se estn definiendo los atributos, no ponga
todos los valores que se le vengan a la cabeza, sino que los ms importantes para el problema.
De esta forma, y considerando el ejemplo mencionado de Procesar Venta, podemos identificar los
atributos de las clases conceptuales descritas anteriormente. Estos son:
Tienda
Producto
Venta
Ntese que muchas clases conceptuales no las especificamos aqu, an cuando si las usaremos en
el ejemplo final. Solo hemos descrito aquellas a las que le agregaremos los atributos. Las dems,
no requieren algn atributo en particular.
Para concluir, todas las asociaciones y atributos deben ser agregado al diagrama parcial para
completarlo de manera tal que represente el dominio de anlisis.
61
-a
Metaclase
Asociacin
1..1
0..*
-a
Nombre
-atrib : byte
Agregacin
Clase
1..1
0..*
-a
Composicin
1
Objeto
0..*
Objeto/Instancia
Herencia/Generalizacin
interface
Interfaz
Interfaz
Implementacin de Interfaz
Interfaz
La notacin UML de estos diagramas es similar a la que se utiliza para los diagramas de clases,
porque en realidad eso son, pero sin definir operaciones y solo enumerando atributos. Sin
embargo, la gran diferencia es que las clases definidas en este diagrama son en realidad conceptos
del dominio y no clases de software. Por esta razn, a estas clases se las llama clases
conceptuales ya que son, en realidad una idea, cosa u objeto que representan en forma abstracta
los elementos que participan en dominio de inters.
De la misma manera como hicimos entonces con el Modelo de Casos de Uso, podemos continuar
el ejemplo con el Diagrama de Actividades. En este caso, este diagrama nos define el proceso de
venta, que comienza desde que el cliente llega a la caja, hasta que se retira de ella con los
productos comprados.
El proceso quedara de la siguiente forma:
62
Iniciar Venta
Ingresar Producto
[cod valido]
Obtener Informacin
[cod no valido]
Registrar Producto
Rechazar Cdigo
[hay mas productos]
[no hay mas productos]
Calcular Total
[cliente paga]
Registrar Pago
Imprimir Comprobante
Cliente
contiene
Venta
0..1
Pago
1 genera
0..*
1
registra
LineaDeVenta
1..*
1
0..*
registra
Producto
Caja
se-valida-en
informa
utiliza
Cajero
1
1..*
1..*
contiene
1
SecurePay
Catalogo
alberga
Tienda
1
1
genera
SistemaDeInventario
1
63
MODELO DE COMPORTAMIENTO
Segn lo que ya hemos dicho, el modelo de comportamiento lo podemos definir como:
UN CONJUNTO DE ARTEFACTOS QUE PERMITEN IDENTIFICAR EL
COMPORTAMIENTO DEL SISTEMA O PARTES DEL MISMO A TRAVS
DE LOS ESCENARIOS PRESENTADOS EN EL MODELO DE CASOS DE
USO Y EN FUNCIN DE LAS CLASES CONCEPTUALES.
Como podemos reafirmar, la idea ahora es analizar el sistema desde el punto de vista funcional
tomando en cuenta los requerimientos y conceptos del dominio como si fuera una o ms cajas
negras.
CONCEPTOS BSICOS
A continuacin algunos conceptos importantes que son necesarios de entender para este modelo.
EVENTO
Diremos que:
UN EVENTO ES UNA INTERACCIN QUE EXISTE ENTRE UN ACTOR
EXTERNO Y EL SISTEMA.
Esta definicin tan sencilla tiene su base en lo que ya hemos definido como mensaje al principio
del curso, pero con un matiz especial: no es una interaccin entre objetos sino que entre un actor
y el sistema.
CONTRATO
Una definicin enciclopdica nos indica que:
UN CONTRATO ES UN ACUERDO DE VOLUNTADES QUE GENERAN
DERECHOS Y OBLIGACIONES.
64
Como podemos ver el concepto es bastante amplio, ya que hace referencia a un estado en su
forma genera. Sin embargo, tambin podemos encontrar una definicin ms ad-hoc que dice que
es un conjunto particular de instrucciones las cuales sern ejecutadas en respuesta a la entrada de
la mquina.
Diagrama de Secuencia: Diagrama que muestra cules son los eventos del sistema a partir
de los escenarios descritos en los casos de uso.
Contratos de las Operaciones: Documentos que describen cada operacin del sistema
(eventos entre el actor principal y el sistema) como si fuera una mquina de estados de
tipo caja negra.
Diagrama de Estados: Diagrama que muestra una visin de mquina de estados para
objetos o procesos del dominio.
Todos los sistemas se ven como cajas negras, es decir, no entramos a mirar cul es su
implementacin o cmo funcionan, sino que interactuamos directamente con ellos.
65
Pero cmo y cundo hacer un diagrama de secuencia del sistema? La teora dice que el diagrama
debe ser hecho tanto para el escenario de xito como para los escenarios alternativos complejos o
frecuentes (por ejemplo, utilizando los medios de pago en nuestro modelo de caja de
supermercado).
Para hacer estos diagramas, se necesita entender algo de la anatoma de ellos. Es por eso que
definimos la notacin UML de los diagramas a continuacin:
Notacin Diagramas de Secuencia
Mensaje
:Objeto
Objeto (Actor/Sistema)
Mensaje o Interaccin
Mensaje
Lnea de Vida
Autodelegacin
Retorno
Activacin
Mensaje de Retorno
Mensaje
Nota / Restriccin
Mensaje Asncrono
Loop
Loop
[cond1]
[cond]
Ciclo
[cond2]
Flujos Alternos
Como es de esperar, existen tambin mensajes en los cuales se puedan crear nuevos objetos.
Estos mensajes se les dice de Creacin y se interpretan como una flecha a una caja de instancia
nueva (a la misma altura). Es decir, no todas las instancias del sistema se ven a la misma altura
(arriba) sino que algunas aparecen dependiendo se van creando.
: Caja
: Venta
2 : nuevo()
Otra particularidad son los llamados Autodelegacin, las cuales corresponde a una autollamada de
alguna actividad o mensaje que se realiza en el mismo objeto.
66
: Pago
5 : registrarPago()
A partir de toda esta notacin podemos generar los diagramas de secuencia a cualquier nivel del
proyecto, pensando en un anlisis inicial (como en el ejemplo), como as en un anlisis un poco
ms avanzado, con objetos y mensajes entre ellos.
Por ejemplo, el mismo ejemplo que ya habamos visto, lo podemos separar un poco con algunos
objetos conceptuales bien claros:
: Cajero
: Caja
: Venta
1 : iniciarVenta()
2 : nuevo()
4
Loop [p]
: Catalogo
5 : ingresarProducto()
6 : p := obtenerProducto()
8 : agregar()
9
10
11 : finalizarVenta()
12 : t := obtenerTotal()
13 : calcularTotal()
14
15
ILUSTRACIN 32. DIAGRAMA DE SECUENCIA PARA EL PROCESO DE VENTA (SIN PAGO) DEL TPDV.
Como podemos observar en el ejemplo, el flujo se parece mucho al que inicialmente habamos
planteado como solucin, con la diferencia en que incluimos un elemento llamado Venta y otro
67
Caja, en lo que representamos los principales elementos de la venta. En este caso, la caja
representa el aparato fsico con el cul interacta el Cajero y la Venta es un objeto que representa
el carro de compras que trae el Cliente y que permite calcular el valor de la compra y el detalle del
recibo.
CONTRATOS DE LAS OPERACIONES
Hasta ahora, nuestro anlisis se ha basado en una metodologa basada en los casos de uso, y esto
muchas veces es suficiente para describir el comportamiento del sistema que se est analizando.
Sin embargo, existen otro tipo de artefactos que, en casos particulares, nos sirven para describir
en detalle ciertas operaciones. De esta forma, definimos:
LOS CONTRATOS DE LAS OPERACIONES DEL SISTEMA DESCRIBEN EL
RESULTADO DE LA EJECUCIN DE LAS OPERACIONES DEL SISTEMA EN
FUNCIN DE LOS CAMBIOS DE ESTADO DE LOS OBJETOS DEL
DOMINIO.
Con esta definicin de libro podemos comenzar por preguntarnos cules son las operaciones del
sistema. Ahora bien, veamos primero la sintaxis del contrato antes de pasar al ejemplo de cmo se
describe uno.
Al igual que las especificaciones de los casos de uso, los contratos se escriben como textos bajo
cierta estructura o anatoma. Esta estructura se compone de las siguientes secciones:
Operacin: <Operacin del sistema>
Responsabilidad: <Objetivo de la operacin>
Veamos como ejemplo el CU1. Realizar Venta. El diagrama se secuencias de ese caso de uso sera
el siguente:
68
: Caja
: Catalogo
: Venta
1 : iniciarVenta()
2 : nuevo()
CO1
3
4
Loop [p]
5 : ingresarProducto()
CO2
6 : p := obtenerProducto()
8 : agregar()
9
10
11 : finalizarVenta()
12 : t := obtenerTotal()
13 : calcularTotal()
CO3
14
15
Como podemos ver hemos destacado los 3 posible contratos a travs de las operaciones del
sistema (las que vienen del mundo exterior). Utilicemos la operacin ingresarProducto de nuestro
diagrama de secuencia antes mostrado.
Operacin: CO2. ingresarProducto(cod : CodigoBarras, cant : Int)
Responsabilidad: Ingresar un producto representado por cod a la venta en
curso.
Tipo o Clase: Sistema
Ref. Cruzadas: CU1. Realizar Venta
Notas:
Excepciones: - Si cod no existe, error.
Salida:
69
Los parmetros exprselos en una forma simple, indicando un tipo primitivo o una clase
conceptual del modelo de dominio.
Identifique si los contratos pueden ser utilizados en otros casos de uso, ya que esto le
permitir reutilizar esta informacin en el diseo y mejor an, encontrar patrones
comunes entre los casos de uso.
Las precondiciones deben ser expresadas en verdades absolutas y no supuestos
condicionales, ya que en el contrato no se pone en duda su validez.
Las postcondiciones exprselas siempre como tiempo pasado, es decir, destaque que la
postcondicin es un resultado de una operacin que se realiza antes de que acabe la
ejecucin de la misma.
Para identificar las postcondiciones, realice el siguiente ejercicio mental: tome una
fotografa del escenario antes de la operacin, luego ejecute la operacin a ojos cerrados
como en una caja negra y saque otra nueva fotografa del escenario al finalizar. Compare
ambas fotografa y obtendr las postcondiciones expresadas como un cambio de estado
del escenario.
Por ltimo, no utilice los contratos como requisito de sus anlisis. Los contratos son tiles
cuando describen detalles que no se pueden inferir del modelo de casos de uso ya
desarrollado, por lo que debemos saber elegir cundo utilizarlos y cuando no.
LOS CONTRATOS Y LOS CAMBIOS AL MODELO CONCEPTUAL
Es normal, y tengan la certeza que se toparn con esta situacin, que a partir de los contratos sea
necesario interferir el modelo de dominio o conceptual definido. Es por eso que, cuando
describimos nuestros contratos, podemos encontrar algunos detalles que cambiar. Por ejemplo,
para el contrato de la operacin de finalizarIngreso() del diagrama que hemos estado estudiando
tenemos que hemos incorporado un flag de validacin que avisa cuando la venta es completa.
Este atributo debe estar indicado en el modelo conceptual, ya que desde el punto de vista del
anlisis es un detalle importante, por lo que en la clase Venta del modelo deberemos incorporarlo
como atributo de la clase con alguna notacin adicional:
esCompleta: ValorDeVerdad
esCompleta: Boolean
DIAGRAMAS DE ESTADO
Para complementar la el modelo de comportamiento, se puede definir:
EL DIAGRAMA DE ESTADO REPRESENTA LOS EVENTOS Y ESTADOS
INTERESANTES DE UN OBJETO Y EL COMPORTAMIENTO DE UN
OBJETO COMO REACCIN A UN EVENTO.
Con esta definicin, podemos inferir que los diagramas de estado cobran mucho sentido cuando
queremos ver el comportamiento de los objetos o del mismo caso de uso desde un punto de vista
de caja negra.
La notacin que utilizan los diagramas de estado es:
71
Estado
Actividad Regular
Estado
entry/accion
do/accion
exit/accion
Actividad de Estado
Estado Final
Estado de Trmino
Historial Superficial
Decisin
H*
Historial Recursivo
Estado
Compuesto No Ortogonal
Compuesto Ortogonal
En el caso de las acciones, stas pueden ser condicionadas (usando la misma nomenclatura del
diagrama de secuencia, con la condicin entre corchetes) y tambin automticas, las cuales se
representan sin ninguna accin sobre la flecha.
Entonces, cul es la utilidad de estos diagramas?.
La respuesta a esta pregunta no es fcil. Si nos vamos a ver directamente los artefactos UML que
participan en el UP, nos encontraremos que no existe un Modelo de Estados que represente algo
en particular. Los diagramas de estado ms bien son complementarios a los artefactos definidos
para cada disciplina, ya que permiten incorporar mayor detalle y entendimiento a algunos
procesos o clases complejas para el entendimiento del pblico objetivo.
De esta forma, para mantener el orden en el proceso unificado adaptado al curso, utilizaremos los
diagramas de estado para un uso muy particular: describir los estados y eventos para los objetos
principales del sistema identificados en el modelo de comportamiento.
Por ejemplo, para nuestro ejemplo de la caja de supermercado, podremos ver que a travs de los
contratos la Venta (o sea las instancias de Venta) son las que ms sufren cambios de estado. En
efecto, en el CO1 el objeto v es creado, en el CO2 se le agrega una instancia de LineaDeVenta
(tantas veces como se realiza esa operacin) y en el CO3 se cambia el estado y se deja como
cerrada.
Veamos el diagrama que define estos estados para un mayor entendimiento:
72
Creada
En Construccin
entry/fijarFecha
do/asociarLineaDeVenta
calcularTotal
Pagada
exit/asociarPago
exit/cambiarEstado
Calculada
registrarPago
exit/fijarTotal
Como se observa en el diagrama, los eventos saltan a la vista en el diagrama de estados como las
operaciones que los gatillan en el diagrama de secuencias, y las actividades de estado aparecen
como los cambios de estado que se describen en los contratos respectivos. Por otro lado, no todas
las transiciones tienen un evento definido, en ese caso no se requiere un evento, sino que es una
transicin automtica (una vez que es Creada, pasa automticamente a En Construccin).
Es importante, entonces, que los eventos se definan de la misma forma como fueron identificados
en los diagramas de secuencia y las actividades como fueron identificadas en los contratos de las
operaciones.
73
ESPECIFICACIN DE FUNCIONES
Vamos a realizar una clasificacin preliminar de los requerimientos tomando uno por uno de los
puntos indicados y revisando si podemos identificar de qu tipo son cada una de las situaciones
(segn FURPS+).
En un anlisis simple, podemos obtener que los requerimientos 1 al 6 son del tipo funcional y el
nmero 7 es una restriccin del sistema. Por otro lado, el requerimientos 4 tiene una componente
de interoperatividad con el sistema de agendamiento mdico.
Ahora, especifiquemos los 6 requerimientos funcionales con la tcnica de especificacin de
funciones.
74
# Ref:
Funcin:
Descripcin:
R1.1
Registro de un Paciente
El sistema debe permitir el registro de un paciente con los datos bsicos de ste
(nombre completo, rut, direccin, telfono de contacto y correo electrnico).
Evidente
Detalles y Restricciones
Categora
Categora:
Atributo
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
Informacin Segmentada
# Ref:
Funcin:
R1.2
Registro de Anamnesis
El sistema debe permitir que el mdico tratante ingrese el detalle de la atencin
en box incluyendo los procedimientos y medicamentos indicados.
Evidente
Detalles y Restricciones
Categora
R1.3
Registro de Observaciones en un Procedimiento
El sistema debe permitir que la enfermera o mdico a cargo ingrese las
observaciones durante el procedimiento mdico de un paciente.
Evidente
Detalles y Restricciones
Categora
R1.4
Registro de Resultados de un Procedimiento
El sistema debe permitir que el tecnlogo mdico ingrese los resultados y las
inferencias segn sea el caso de los procedimientos realizados por el paciente.
Evidente
Detalles y Restricciones
Categora
R2.1
Consulta de Historial del Paciente
El sistema debe permitir al profesional consultar sobre la historia reciente del
paciente registrada en su ficha.
Evidente
Detalles y Restricciones
Categora
La informacin debe ser segmentada segn el nivel de
Poltica
acceso del profesional consultante.
R2.2
Actualizacin de Agenda Mdica
75
Con esto ya tenemos gran parte del trabajo hecho, ya que hicimos la primera clasificacin de lo
obtenido de parte del cliente.
La administracin de la agenda
ACTORES
A partir de los clientes y del texto entregado, podemos decir que los actores del sistema son:
Actor
Recepcionista
Objetivo
Ser atendido
Agenda Mdica
Caso de Uso:
Actores:
Tipo:
Descripcin:
Caso de Uso:
Actores:
Tipo:
Descripcin:
Caso de Uso:
Actores:
Tipo:
Descripcin:
Caso de Uso:
Actores:
Tipo:
Descripcin:
Caso de Uso:
Actores:
Tipo:
Descripcin:
Caso de Uso:
Actores:
Tipo:
Descripcin:
77
1.
3.
5.
78
Caso de Uso:
Actores:
Propsito:
Resumen:
En este ltimo CU, en el Curso Alterno (3a) se menciona que debe existir un administrador del
sistema. Esto es porque no se ha mencionado que pasa con la conectividad y comunicacin entre
ambos sistema (SAM y SEFP), de modo que ha sido una sugerencia en los requerimientos. Es
importante validarlo con el cliente final antes de cerrar la iteracin y utilizar dicha informacin
para el anlisis del sistema.
79
Especialista
Agenda Mdica
<<include>>
CU7: Actualizar SAM
CU2: Consultar Ficha
Enfermera
CU4: Registrar Observaciones
El hecho de que aparezca el include entre el CU3 y el CU7 quiere explicar de que el CU7 est
siempre incluido en el CU3 (es un subproceso, pero en este caso es sobre otro sistema).
GLOSARIO
A continuacin, veamos un glosario para el problema:
Trmino
Ficha Mdica
Registro
Box
Anamnesis
Datos de la Inspeccin
Diagnstico
Procedimiento
Agenda Mdica (SAM)
Definicin
Registro electrnico (en este caso) en donde queda almacenada toda la historia
mdica de un paciente.
Proceso a travs del cual se guarda la informacin ingresada por un usuario.
Espacio fsico donde se realiza la anamnesis.
Proceso de revisin que realiza un especialista en un box de atencin a un
paciente.
Informacin que resulta de un examen fsico realizado por un especialista en un
box de atencin (peso, talla, temperatura y presin arterial).
Inferencia que realiza el especialista como resultado del examen fsico.
Cualquier tipo de examen fsico o psicolgico que puede solicitar el especialista.
Sistema externo necesario para registrar cuando un especialista cierra una
atencin mdica.
ILUSTRACIN 43. GLOSARIO PARA EL SEFP
80
Este glosario resumido (ya que podramos encontrar muchos ms trminos para este problema)
solo muestra un ejemplo de cmo van describindose las diferentes definiciones de, en este caso,
los conceptos del dominio.
MODELO DE DOMINIO
Para este modelo comenzaremos con los Diagramas de Actividades que representan los procesos
relacionados con el caso, y luego realizaremos un Diagrama de Clases Conceptuales que soporte el
dominio en cuestin.
DIAGRAMA DE ACTIVIDADES
El enfoque que utilizaremos ser el ver el diagrama de actividades global a partir de las
transiciones que tiene la ficha de un paciente desde su generacin y su uso posterior.
De esta manera, el diagrama nos muestra los diferentes carriles-de-nado para los actores y
entidades que utilizan la ficha o realizan actividades como resultado del uso de la ficha. As, el
diagrama comienza por el recepcionista (ya sea en el laboratorio como en la consulta mdica) el
cual registra la informacin bsica de la ficha (crear).
A continuacin hemos indicado un conector de decisin para diferenciar si el siguiente flujo (por
consulta mdica o por procedimiento). De esta manera diferenciamos el paso dependiendo del
actor principal. Cada uno de esos flujos termina en un conector con una X de manera de que
podamos volver al flujo principal en la decisin para el siguiente flujo.
Finalmente, notaremos que no tiene una actividad de trmino, ya que la ficha no se destruye en el
dominio, sino que una vez que el paciente ingresa al esquema, se mantendr desde ese momento
en adelante.
81
Especialista
Laboratorista
Realizar el Procedimiento
Realizar la Consulta
Ejemplos
InformeDeDerivacion
DetalleDeInforme
ResultadoProcedimiento
DetalleAnamnesis
CentroMedico
Recepcin
ConsultaMedica
BoxDeProcedimiento
Anamnesis
Procedimiento
Recepcionista
Especialista
Laboratorista
Lugares
Lneas de la transaccin
Roles de la gente
82
Ejemplos
Paciente
Contenedores de otras cosas
Cosas en un contenedor
Otros sistemas externos
AgendaMedica
Conceptos abstractos
Anamnesis
Procedimiento
FichaDePaciente
Organizaciones
Hechos
Procesos
Anamnesis
Procedimiento
Reglas y polticas
Catlogos
RegistroDeFichas
Registro de finanzas, trabajo, contratos, asuntos legales
Instrumentos y servicios financieros
Manuales, documentos, artculos de referencia, libros
InformeDeDerivacion
ILUSTRACIN 45. IDENTIFICACIN DE CLASES CONCEPTUALES SEGN CATEGORAS PARA EL SEFP
Note que aparecen las mismas clases en varias categoras. Veamos ahora las frases nominales de
los escenarios de casos de uso:
Caso de Uso:
9.
83
examen fsico.
12. Sistema registra informacin de la inspeccin y
solicita informacin sobre diagnstico del
paciente.
14. Sistema registra el diagnstico y solicita
informacin sobre procedimientos,
medicamentos e indicaciones.
16. Sistema registra informacin y cierra la atencin
mdica (CU7).
Como podemos ver, en los diferentes escenarios encontramos un lenguaje mixto, en donde nos
podemos referir de diferentes formas a los mismo conceptos, por lo que es importante no solo
tomar lo que dice, sino que formalizar tambin el concepto como tal, ya que en el diagrama de
clases conceptuales es donde debe quedar finalmente el concepto que ser utilizado finalmente
en el sistema.
Ahora, completemos con los otros 2 pasos de la tcnica el diagrama de clases conceptuales y
veamos el resultado final:
84
DetalleDeFicha
+rut
+nombre
+direccion
+telefono
+email
FichaDePaciente
es-descrita-por
Paciente
posee
1
0..1
crea
Recepcionista
1
contiene
+cotiene
0..*
Laboratorista
0..*
Procedimiento
1
1
es-descrita-por
ingresa
Especialista
Anamnesis
1
es-descrita-por
DetalleAnamnesis
DetalleProcedimiento
0..1
+datos_inspeccion
+observaciones
+indicaciones
+otros
+observaciones
0..1 +resultados
+diagnostico
ingresa
Este diagrama puede ser la primera aproximacin para el futuro diseo de clases y por supuesto
un insumo importante para los siguientes artefactos y modelos de anlisis y diseo.
MODELO DE COMPORTAMIENTO
En este caso comenzaremos con los Diagramas de Secuencia que representan los eventos que
ocurren en cada caso de uso, luego realizaremos los Contratos asociados a las operaciones
principales del sistema y por ltimo algunos Diagramas de Estado para los objetos principales del
sistema.
DIAGRAMAS DE SECUENCIA
Para especificar los diagramas de secuencia es importante hacerlos a travs de los escenarios
encontrados en los casos de uso. Segn lo expuesto en este problema, los escenarios alternos son
sencillos, as que, donde corresponda, se utilizarn los cursos alternos como parte del mismo
diagrama. Veamos el escenario del primer caso de uso:
85
: Recepcionista
Sistema
1 : validarRut()
CatalogoDePacientes
2 : pacienteExiste()
3 : ack
4
: DetalleDeFicha
5 : ingresarDetalle()
6 : nuevo()
7
8 : asociarDetalle()
10
Es posible observar en este diagrama que gran parte de la carga se la estara llevando el objeto
DetalleDeFicha (adelantndonos para cuando lleguemos a los diagramas de estado). Sigamos con
los dems CU y sus respectivos diagramas:
Funcionario
Sistema
1 : consultar()
CatalogoDePacientes
2 : buscar()
3
4
Al igual que en el caso anterior, este diagrama no es ms que una traduccin del escenario
realizado para el CU. Veamos el siguiente:
86
: Especialista
Sistema
CatalogoDePacientes
d : DetalleDeFicha
1 : consultar()
2 : buscar()
3:d
: DetalleAnamnesis
5 : registrarInformacin()
6 : crear()
7 : det
8 : registrarAnamnesis()
10
En este caso podemos ver que se complejiza un poco la lgica, sin embargo debemos destacar un
par de puntos.
1. Resumimos los 3 ingresos que existen en el escenario en 1 sola operacin (con la lgica de
que la filla se llena sin registrar la informacin hasta el final).
2. La creacin del objeto DetalleAnamnesis es porque segn el modelo de dominio,
DetalleDeFicha solo sabe registrar DetalleAnamnesis a travs de una Anamnesis (la cual
puede ser generad dentro de DetalleFicha como una lnea de transaccin).
3. Las operacines de consultar, en realidad es la misma utilizada en el CU2.
Sigamos con el siguiente CU:
87
: Laboratorista
Sistema
1 : consultar()
CatalogoDePacientes
d : DetalleDeFicha
2 : buscar()
3:d
4
: DetalleProcedimiento
5 : registrarInformacion()
6 : crear()
7 : det
8 : registrarProcedimiento()
10
En este caso vemos una similitud muy obvia con el CU3, tanto as que a estas alturas podramos
generalizarlo de manera de que sea ms reutilizable. Sin embargo, para efectos prcticos,
sigamos con el anlisis tal cual.
AgendaMedica
Sistema
: Especialista
1 : cerrarAtencin()
2 : cierreFicha()
3 : ack
En el ltimo CU analizado solo tenemos el hecho del cierre de la atencin mdica y en este caso
son operaciones hacia fuera del sistema, as que es poca la interaccin.
Con estos diagramas completamos el anlisis del comportamiento a travs de las secuencias, y
pasaremos a ver los contratos.
88
CO1. validarRut(rut)
Validar que el RUT exista dentro del catalogo de pacientes
Sistema
CU1
Si el RUT existe, se aborta el resto del CU
- Exista una instancia r de tipo CatalogoDePacientes
- No se haya encontrado una instancia f de FichaDePaciente
dentro de r que tenga asociada una instancia d de
DetalleDeFicha que tenga como atributo rut el valor del
parmetro rut.
Operacin:
Responsabilidad:
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
Salidas:
Precondiciones
Postcondiciones:
Operacin:
Responsabilidad:
CO3. consultar(rut)
Obtiene la informacin de la ficha del paciente a partir del
rut ingresado.
Sistema
CU2, CU3, CU5
Si la ficha no existe, devuelve un valor nulo.
- Exista una instancia r de CatalogoDePacientes
- Se haya encontrado una instancia p de DetalleDePaciente
cuyo atributo rut sea igual al valor del parmetros rut.
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
Salidas:
Precondiciones
Postcondiciones:
Operacin:
Responsabilidad:
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
CO4. registrarInformacion(objeto)
Registra en la ficha del paciente la informacin entregada en
forma de objeto.
Sistema
CU3, CU5
Objeto puede tomar valores de DetalleAnamnesis y
DetalleProcedimiento
-
89
Operacin:
Responsabilidad:
CO5. cerrarAtencion(especialista)
Enva una notificacin al sistema de agenda mdica
indicando el trmido de la atencin del especialista.
Tipo o Clase: Sistema
Ref. Cruzadas: CU7
Notas: Utiliza XML para construir la llamada al SAM.
Excepciones: Salidas: Un mensaje intersistemas para el SAM
Precondiciones Postcondiciones: ILUSTRACIN 53. CONTRATOS DE LAS OPERACIONES DEL SEFP
Como podemos ver en los contratos expuestos, se hicieron varias optimizaciones en las
operaciones, generalizando las que habamos originalmente encontrado en los diagramas. Esto
permitir un menor riesgo desde el punto de vista del diseo e implementacin futura.
DIAGRAMAS DE ESTADOS
Como ltima parte del anlisis vamos a realizar algunos diagramas de estados que nos permiten
identificar los cabios de estado de los objetos principales.
En particular, uno de los objetos que sufre cambios es la instancia de FichaDePaciente que
representa a un paciente particular. Veamos cmo queda el diagrama de estados en este caso
(considerando todos los contratos del modelo).
nuevo
Disponible
entry/fijarDetalleDePaciente
[es atendido]
En Llenado
do/asociarDetalle
Como podemos ver en el diagrama, los estados en realidad son pocos, ya que no pasa por muchos
cambios (solo se ven las asociaciones dadas por los contratos).
Es importante hacer notar que, a pesar de que este sea una visin del anlisis del comportamiento
no necesariamente es la nica. Esto es muy importante desde el punto de vista del problema final,
ya que si la consistencia es buena, no requiere mayor perfeccionamiento.
90
91
Adems, la arquitectura se basa en diferentes vistas de la arquitectura del sistema desde una
perspectiva dada. Cada vista es una ventana a travs de la cual se observa a la arquitectura para
identificar informacin relevante o ideas claves, ignorando todo lo que no sea parte del punto de
vista elegido. Se sugieren 6 tipos bsicos de vistas de la arquitectura:
Vista Lgica: Muestra la organizacin conceptual del software en funcin de las capas,
subsistemas, paquetes, frameworks, clases e interfaces ms importantes. Resume la
funcionalidad de los elementos del software importantes, como cada subsistema. Muestra
los escenarios de realizacin de casos de uso destacados que ilustran aspectos claves del
sistema. Esta vista utiliza diagramas de paquetes, diagramas de clases y diagramas de
interaccin en UML.
Vista de Despliegue: Muestra el despliegue fsico de los procesos y componentes sobre los
nodos de proceso y la configuracin de la red fsica entre los nodos. Esta vista utiliza
diagramas de despliegue en UML.
Vista de Casos de Uso: Muestra un resumen de los casos de uso ms significativos para los
requisitos no funcionales, es decir, aquellos casos de uso que, mediante la
implementacin, cubren parte significativa de la arquitectura o que influyen en muchos
elementos de ella. Esta vista utiliza diagramas de casos de uso en UML.
Todas estas vistas son opcionales, pero se sugiere encarecidamente documentar las vistas lgica,
de proceso, de casos de uso y de despliegue. En algunos casos es posible identificar otras vistas
como la de seguridad, por lo que en este caso se deja abierta la opcin de agregar las vistas
necesarias para definir la arquitectura del problema en estudio.
Es fcil ver que gran parte de la arquitectura de software es abarcado con el anlisis y diseo que
hacemos en este curso, pero depende mucho donde y cundo iremos describiendo eso. En
93
MODELO ARQUITECTNICO
El diseo arquitectnico pretende orientar al arquitecto en algunas lneas de trabajo, como las
siguientes:
A continuacin veremos algunos aspectos bsicos con los cuales debe trabajar el arquitecto antes
de llegar a obtener un diseo completo5.
CONCEPTOS BSICOS
A continuacin algunos conceptos importantes que son necesarios de entender para este modelo.
REFINAMIENTO
Podemos definir que:
EL REFINAMIENTO ES UN PROCESO DE ELABORACIN, EN DONDE SE
COMIENZA CON UN ALTO NIVEL DE ABSTRACCIN PARA LUEGO DAR
LA CAPACIDAD DE IR DETALLANDO MS Y MS CADA FUNCIN DEL
SISTEMA.
El refinamiento paso a paso es una estrategia de diseo descendente propuesta originalmente por
Niklaus Wirth.
En cada paso (del refinamiento), se descompone una o varias instrucciones del programa dado en
instrucciones ms detalladas. Esta descomposicin sucesiva o refinamiento de especificaciones
termina cuando todas las instrucciones se expresan en funcin de cualquier computadora
subyacente o de cualquier lenguaje de programacin. De la misma manera que se refinan las
tareas, los datos tambin se tienen que refinar, descomponer o estructurar, y es natural refinar el
programa y las especificaciones de los datos en paralelo.
En muchos casos, dentro del modelo arquitectnico tambin se incluye el modelamiento de datos, sin
embargo para la ingeniera de software son modelos diferentes.
94
Todos los pasos del refinamiento implican decisiones de diseo. Es importante que el
programador conozca los criterios subyacentes (para decisiones de diseo) y la existencia de
soluciones alternativas.
COMPONENTE
Diremos que:
UN
COMPONENTE
ES
UNA
PORCIN
DEL
SISTEMA
CUYO
Este concepto bsico, cuya descripcin tambin se le conoce como subsistema, es la unidad a
travs de las cuales vamos a ir refinando nuestro diseo.
Factores de la Arquitectura: Documento que describe cules son las influencias que tienen
los factores crticos en las variaciones en el sistema.
95
lo general, todo lo que tiene que ver con la usabilidad, rendimiento, fiabilidad, soporte y el resto
de las categoras no funcionales de requerimientos).
La sintaxis del documento es la siguiente tabla:
Factor
Medidas y Escenarios de
Calidad
Variabilidad
Impacto
Prioridad
para el Exito
Dificultad o
Riesgo
Medidas y Escenarios de Calidad: Indica cuales son las medidas en los cuales ese factor es
crtico para el sistema, indicando restricciones necesarias para eso.
Variabilidad: Indica la flexibilidad actual y la evolucin que puede tener el factor a travs
del tiempo.
Impacto: Indica el impacto que tiene el factor en las personas involucradas, arquitectura
del sistema y en otros factores.
Prioridad para el xito: Indica cul es la prioridad que tiene este factor para el xito del
sistema.
Dificultad o Riesgo: Indica el nivel de riesgo que tiene este factor si no es considerado.
Adems, los factores van agrupado por la categora FURPS+ a la cual pertenecen, de manera de
abordar cada uno de ellos con soluciones respectivas.
Por ejemplo, en el caso del problema del TPDV, la definicin de uno de los principales factores de
la arquitectura quedara de la siguiente forma.
Factor
Medidas y Escenarios de
Variabilidad
Impacto
Prioridad
Calidad
para el Exito
Factores de Implementacin
Lector de
Cuando un producto pasa
Debe tener ingreso
Bajo
Alta
Cdigos de
por la caja, el lector de
alternativo va teclado
Barras
cdigos debe leer
directamente el cdigo de
barras de la etiqueta
ILUSTRACIN 56. TABLA DE FACTORES DE LA ARQUITECTURA DEL SPDV
Dificultad o
Riesgo
Media
96
Es fcil ver que es importante dejar en un solo documento ambos artefactos, ya que son
complementarios. Desde el punto de vista acadmico los seguiremos viendo en forma separada.
DIAGRAMA DE COMPONENTES
El tercer artefacto, un poco independiente a los anteriores, define la visin ms cercana al diseo
de clases, que es la de definir los componentes del sistema.
Tal como dice su nombre, el modelo de componentes ilustra los componentes de software que se
usarn para construr el sistema, ya sean desde el punto de vista de organizacin de elementos del
diseo (clases) como tambin la identificacin de componentes reusables que no sea necesario
re-hacer.
De esta manera, este artefacto tiene dos objetivos bsicos:
La sintaxis es la siguiente:
En el proceso de desarrollo utilizado en el curso, este artefacto lo matizaremos de manera tal que
nos permita organizar nuestro sistema antes de desarrollar el modelo de diseo como tal. De esta
manera es importante determinar cmo vamos a identificar la componentes.
Para ello diremos que son componentes o paquete de clases:
97
El conjunto de clases que permiten acceder a los datos del sistema (clases que
representan temes y catlogos, por ejemplo).
El conjunto de clases que est relacionado con la interfaz del sistema (controladores).
Sin embargo a este nivel no tenemos que saber qu clases componen cada conjunto nombrado, ya
que solo lo estamos organizando de manera funcional. De esta manera, la regla general sera la
tercera de la lista, ya que podra cumplir con las otras anteriores fcilmente.
Adems, distinguimos entre paquete o componente solo conociendo el estilo de programacin
que usaremos. Por ejemplo, si usamos Java, podemos hacer nuestro diagrama considerando
paquetes de clases (con la notacin de paquete) y en el caso de usar ActiveX o libreras
compiladas, podemos hablar de componentes.
Con estas sencillas reglas, generalizando el problema del supermercado podramos determinar el
siguiente diagrama de componentes:
Como vemos en este diagrama, agrupamos por tipo de requerimientos dentro del supermercado:
lo que tiene que ver con la operacin de la tienda dentro del paquete Tienda, lo que tiene que ver
con la operacin de la bodega dentro del paquete Bodega, y lo que tiene que ver con las
operaciones financieras en el paquete Finanzas. Adems, se definieron unas interfaces que
casualmente representan los conceptos del dominio que nos enlazan con dichos paquetes
(CatlogoDeProductos y RegistroDeVentas), lo que por supuesto nos define el tipo de interaccin
que tendr Tienda con los paquetes vinculados (Bodega y Finanzas).
MODELO DE DISEO
El Modelo de Diseo es, por esencia, el principal modelo en la fase de diseo del UP, sin embargo
contiene varios artefactos y tcnicas necesarias para completar el diseo. Principalmente, y lo que
veremos en este curso, el Modelo de Diseo se centrar en 2 artefactos: Diagramas de
Colaboracin y Diagrama de Clases.
98
CONCEPTOS BSICOS
Veamos algunos conceptos bsicos con los que nos toparemos al desarrollar este modelo.
REALIZACIN DE CASO DE USO
Podemos decir que:
LA REALIZACIN DE UN CASO DE USO DESCRIBE CMO SE REALIZA EL
CASO DE USO PARTICULAR EN EL MODELO DE DISEO, EN FUNCIN
DE LOS OBJETOS DEL SISTEMA QUE COLABORAN ENTRE S.
En efecto, las responsabilidades nos definen ciertos parmetros de las obligaciones que poseen los
objetos dentro del modelo de diseo. En este contexto, se definen 2 tipos de responsabilidades:
Conocer: Con esta responsabilidad, el objeto tiene el conocimiento de los datos privados
encapsulados, objetos relacionados y cosas que puede derivar o calcular (ej: La Venta
conoce la fecha y la hora de la venta, las Lneas de Venta asociadas a la venta y el precio
total de la venta).
Hacer: Con esta responsabilidad, el objeto tiene el poder de hacer algo l mismo como
crear un objeto o realizar un clculo, iniciar una accin en otros objetos y controlar y
coordinar actividades en otros objetos (ej: La Venta es responsable de crear Lneas de
Venta y generar un descuento en el Inventario).
Las responsabilidades del conocer generalmente se pueden inferir desde el modelo de dominio,
ya que es fcil detectarlas con los atributos de las clases conceptuales.
99
Sin embargo, las responsabilidades no son lo mismo que los mtodos, an cuando tienen una
estrecha relacin: los mtodos se implementan para llevar a cabo responsabilidades. En efecto,
para que se cumplan las responsabilidades identificadas, es necesario implementarlas a travs de
uno o ms mtodos que actan solos o colaboran entre ellos. Por ejemplo, para cumplir con la
responsabilidad de la clase Venta que conoce el total de la venta, podemos definir un mtodo
getVenta, el cual utiliza los mtodos getSubtotal de la clase Lnea de Venta quien le entrega el
valor total de cada lnea de venta (precio x cantidad) para calcular el total de la venta.
PATRONES DE DISEO
En el contexto de la tecnologa de objetos, podemos definir que:
UN PATRN ES UN PAR PROBLEMA - SOLUCIN CON NOMBRE QUE
SE PUEDE APLICAR EN NUEVOS CONTEXTOS, CON CONSEJOS ACERCA
DE CMO APLICARLO EN NUEVAS SITUACIONES Y DISCUSIONES
SOBRE SUS COMPROMISOS.
Algo elevado, no?. Pues si analizamos un poco esta definicin, podemos inferir lo que los autores
nos intentan decir. Los patrones son una especificacin analtica reutilizable, con una estructura
que responde a la siguiente:
Nombre
Solucin
Problema [que resuelve]
Ms que especificar ideas nuevas, los patrones pretender codificar conocimiento, estilos y
principios existentes y que se han probado que son realmente vlidos. Esto quiere decir, que entre
ms trillados y extendidos, mejor.
Todos los patrones poseen nombres sugerentes, ya que definen en un solo concepto lo que estn
resolviendo. Es por eso que los autores han procurado en definir estos nombres de una forma
estndar para que los diseadores los utilicen como lenguaje comn. De esta forma,
encontraremos nombres tan esotricos y descriptivos como Experto en Informacin, Creador,
Factora, Variaciones Protegidas, etc.
Los patrones de diseo nos ayudan a determinar las clases conceptuales que son ms aptas o que
realmente compondrn nuestro software. Ahora bien, utilizar cualquiera de las clases
conceptuales es un verdadero crimen, ya que estas clases representan el mundo real, por lo que
no necesariamente corresponden a las clases de software. Es por eso que, como el proceso de
desarrollo es iterativo, se define una regla bsica:
Si hay clases relevantes en el Modelo de Diseo previo, considerar esa como posible clase
de diseo real.
100
Diagrama de Colaboracin: Diagrama que muestra cules son las operaciones y cmo
interactan entre s los objetos de diseo del sistema.
Diagrama de Clases de Diseo: Diagrama que muestra una visin esttica de las clases del
sistema, representando los tipos de objetos que se requieren para realizar la interaccin
modelada en los diagramas de colaboracin.
ESPECFICO
DE
UN
CASO
DE
USO
LAS
Como podemos ver en la definicin encontramos cosas parecidas a los diagramas de secuencia, y
esto tiene que ver porque vienen de un mismo tipo de diagramas (en UML se conocen como
diagramas de interaccin). Sin embargo, el hincapi de estos diagramas o su motivacin tiene que
ver en disear las responsabilidades delegadas a partir de la operacin de sistema (que ya
conocemos) en los objetos internos del sistema. A este proceso de inferencia de responsabilidades
se le conoce como aplicacin de responsabilidades.
Para hacer estos diagramas, se necesita entender algo de la anatoma de ellos. Es por eso que
definimos la notacin UML de los diagramas a continuacin:
Objeto
:Objeto
Objeto Mltiple
...
Cdigo
n: Expresion
n: [cond] Expresion
Mensaje
Mensaje Condicionado
Mensaje Cclico
}
n: var := mensaje(param: Tipo, ...) : TipoRetorno
Debemos destacar que los diagramas de colaboracin los utilizaremos para describir las
operaciones del sistema identificadas en los diagramas de secuencia con el detalle de operacin y
diseo interno tal como ya lo hemos dicho. De esta manera, tendremos diagramas por cada una
de las operaciones.
Un ejemplo de diagrama podemos verlo en el caso del TPDV (caja de supermercado). Si elegimos
la operacin de agregarProducto(cod, cant) en donde se agrega a la venta en curso una cantidad
determinada de cierto cdigo de producto podemos obtener el siguiente diagrama:
102
Que se haya encontrado una instancia p de tipo Producto en c (de tipo Catalogo) cuyo
atributo codigo tenga el mismo valor que el parmetro cod (responsabilidades 2 y 3).
Que se haya creado una instancia ldv de tipo LineaDeVenta (responsabilidad 5).
Que se haya cambiado el atributo cantidad de ldv por el valor del parmetro cant
(responsabilidad 6).
Que se haya asociado ldv a v (responsabilidad 4, solo por entregar el control de la creacin
a Venta).
La intensin de mostrar el diagrama no es dar la frmula de cmo se realizan sino ms bien ilustrar
la forma cmo se utiliza la notacin anteriormente mostrada, ya que debemos seguir un proceso
con el cual obtendremos este diagrama a partir del uso de patrones de diseo.
PATRONES DE DISEO GRASP
Los Patrones Generales de Software para la Asignacin de Responsabilidades (GRASP) no son
ms que un conjunto patrones de diseo que nos ayudarn a definir nuestras responsabilidades,
El programa StarUML no permite poner mensajes sin secuencia, por lo que el diagrama qued con la
operacin del sistema indicada por la responsabilidad nmero 1. Sin embargo, segn lo visto en clases, no es
relevante.
103
104
Para poder encontrar un producto dentro del catlogo, es importante saber quin tiene los
cdigos de cada producto de manera de compararlo con el cdigo entregado por el cajero a travs
de la caja (lector de cdigos o teclado).
De esta manera, preguntamos entonces quin debe ser el responsable de conocer el cdigo de
un producto?. Parece una pregunta sencilla de responder, porque el modelo conceptual de este
problema lo plantea de forma explcita, pero en realidad debemos hacer la pregunta de todas
maneras. La respuesta, entonces, queda claramente respondida diciendo que la clase Producto
(que en este caso es clase conceptual) es el responsable de saber cul es su propio cdigo, ya que
es parte de su definicin desde los requisitos. Sin embargo, como la operacin llega a la caja,
debemos delegar la responsabilidad de realizar la bsqueda del producto que tenga el cdigo
indicado en el contrato a la clase que trabaja ms estrechamente con el producto: la clase
Catlogo.
De esta manera, el diagrama se comienza a dibujar de la siguiente forma:
105
A pesar de que a travs del patrn es muy claro en asignar las responsabilidades de experto,
existen algunos casos en los cuales la solucin propuesta por ste vaya en contra de otros
patrones de asignacin de responsabilidad. Es por eso que es importante tener una visin general
de todos los patrones antes de comenzar a dar responsabilidades indiscriminadamente (si lo
vemos recursivamente, es una gran responsabilidad entregar responsabilidades). Los buenos
diseadores no son aquellos que se cien al pie de la letra a recetas, sino ms bien, aquellos que
poseen la visin de considerar todos los factores del problema para disear la mejor de las
soluciones, o al menos la que mejor se ajusta a l.
PATRN DE CREADOR
NOMBRE: CREADOR DE INSTANCIAS (O CREADOR)
106
hacer que nuestros diseos puedan soportar bajo acoplamiento, mayor claridad y alta
reutilizacin.
Por ejemplo en el mismo ejemplo de ingresarProducto, podemos buscar al creador de instancias
de la clase LineaDeVenta.
Si solo nos basamos en lo que dice el contrato y continuando con cada postcondicin, la creacin
de la lnea de venta quedara en manos de Caja. Si aplicamos las condiciones del patrn
tendramos que:
Caja tiene los datos de inicializacin de LineaDeVenta (producto y cantidad)
Sin embargo esto no es suficiente ya que debemos cumplir con al menos 2 caractersticas listadas.
Si seguimos bajando en el diagrama de clases conceptuales, podemos consultar por Venta, ya que
por naturaleza es contenedor de LineaDeVenta. Listemos las caractersticas que cumple Venta
para ser creador:
Venta contiene objetos de LineaDeVenta
Venta utiliza estrechamente objetos de LineaDeVenta (de hecho lo requiere para varias
operaciones del sistema)
Venta no tiene los datos de inicializacin de LineaDeVenta, pero puede tenerlo (por
delegacin de la caja)
De esta forma, podemos rpidamente hacer que Venta tenga 3 caractersticas convirtindola en
un mejor candidato para ser creador de LineaDeVenta. Si tratamos de buscar otro no
encontraremos una clase que tenga mejores condiciones, as que el diagrama sera el siguiente:
107
Al igual que todos los patrones que estamos viendo, ellos definen una gua ms que una receta,
por lo que el arquitecto es quien definir si lo que se presume a travs del patrn es en realidad un
buen candidato. Esto puede pasar cuando analizamos el patrn de Creador en casos en donde
requerimos utilizar instancias recicladas.
PATRN DE CONTROLADOR
NOMBRE: CONTROLADOR
Solucin: Asignar la responsabilidad de recibir o manejar un mensaje de evento del sistema a una
clase que representa una de las siguientes opciones:
Representa el sistema global, dispositivo o subsistema (controlador de fachada).
Representa un escenario de caso de uso en el que tiene lugar el evento del sistema
(controlador de sesin o de caso de uso).
A menudo este es nombrado como <Nombre>Controlador, <Nombre>Manejador o
<Nombre>Coordinador.
Problema: Quin debe ser responsable de gestionar un evento de entrada al sistema?
Antes que todo, un evento de entrada al sistema no es ms que un evento generado por un actor
externo. Se asocian con las operaciones del sistema que son las respuestas a esos eventos, tal
como se relacionan los mensajes y los mtodos.
Es importante tener en claro que las clases de tipo Controlador se refiere a clases que no
pertenecen a la interfaz del usuario (la caja), sino que define el mtodo para la operacin del
sistema.
Siguiendo con el ejemplo de ingresarProducto, tenemos que la operacin del sistema debe ser
recibida por alguien. En este caso tenemos 2 alternativas:
a) Caja es la clase que representa el sistema completo (en esta caso la clase sera
CajaControlador)
b) Venta es la clase que representa el CU Registrar Venta (y en este caso quedara como
VentaControlador)
La eleccin es del arquitecto, por lo que la mejor opcin depende de la complejidad. Si el sistema
es grande, a lo mejor separar el controlador lo hace ms especializado para cada uno de los
subproblemas, pero si no, si el problema no es muy grande, un controlador nico es ms sencillo
de implementar.
En este caso quedara el diagrama:
108
Como vemos en el diagrama, en realidad lo nico que estamos incorporando es la primera clase,
pero sin cambiar responsabilidades internas, an cuando es ms recomendable el anlisis antes de
cualquier otro patrn. Adems, cuando analicemos las otras operaciones, lo primero que
deberemos preguntar es si el controlador anteriormente identificado aplica a las nuevas
operaciones o no, por lo general si (sobre todo si representa al sistema completo como el de
ingresarProducto).
De los patrones que veremos en este curso, este es uno de los complejos de utilizar, porque posee
muchas aristas. Sin embargo, existen algunas recomendaciones al respecto que pueden ser tiles
de analizar:
Siempre utilice controladores de bajo acoplamiento y alta cohesin, algo que
aprenderemos en los siguientes patrones.
No trate de saturar los controladores con funciones de todo tipo. Recuerde que puede
utilizar controladores modulares dependiendo del caso de uso o componente
determinada.
Antes de crear una clase controlador, siempre verifique que su diseo ya no tiene una que,
en forma innata, puede tomar ese rol.
No entregue funciones del controlador a la interfaz del usuario.
PATRN DE ALTA COHESIN
NOMBRE: ALTA COHESIN
109
110
Solucin: Cuando una responsabilidad posee varias alternativas para comportamientos similares,
se asignarn a los tipos en que el comportamiento presenta las variantes.
Problema: Cmo manejar las alternativas basadas en el tipo?
NOMBRE: FABRICACIN PURA
Solucin: Se asigna la responsabilidad a un objeto intermedio, de manera tal que medie entre
componentes o servicios para que no terminen directamente acoplados. De esta manera ese
intermediario crea una indireccin entre el resto de los componentes o servicios.
Problema: De qu manera podemos desacoplar los objetos para as mantener una potencial
reutilizacin y un bajo acoplamiento? Quin debe tener la responsabilidad de mediar para
mantener la indireccin entre las componentes?
111
Nombre del patrn: nombre estndar del patrn por el cual ser reconocido en la
comunidad (normalmente se expresa en ingls).
Gang of The Four: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
112
Estructura: Diagramas de clases oportunos para describir las clases que intervienen en el
patrn.
Para que no entremos en tanto detalle veamos ahora una pequea descripcin de los patrones
GoF segn su clasificacin:
PATRONES CREACIONALES
Los patrones de diseo creacionales son todos aquellos que se aplican en la creacin de instancias
de objetos en general. Estos patrones son:
Abstract Factory (Fbrica abstracta): Permite trabajar con objetos de distintas familias de
manera que las familias no se mezclen entre s y haciendo transparente el tipo de familia
concreta que se est usando.
Singleton (Instancia nica): Garantiza la existencia de una nica instancia para una clase y la
creacin de un mecanismo de acceso global a dicha instancia.
113
PATRONES ESTRUCTURALES
Los patrones de diseo estructurales define objetos como estructuras de control que sirven en
diferentes formas. Estos patrones incluyen:
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de
otro modo no podra utilizarla.
Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple
se tratase.
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o
grupo de interfaces de un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen
idntica informacin.
PATRONES DE COMPORTAMIENTO
Los patrones de diseo de comportamiento definen algunos tipos de comportamientos de los
objetos y entregan informacin de cmo realizar dichos comportamientos. Estos patrones son:
Interpreter (Intrprete): Dado un lenguaje, define una gramtica para dicho lenguaje, as
como las herramientas necesarias para interpretarlo.
State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie
su estado interno.
114
sobre
objetos
compuestos
Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarqua de clases sin
modificar las clases sobre las que opera.
PATRONES DE SISTEMA
Los patrones de diseo de sistema definen algunas caractersticas que dependen de la
arquitectura y que deben ser reflejadas en las realizaciones. Estos patrones son:
Session (Sesin): Ofrece una forma de que los servidores de sistemas distribuidos sean
capaces de distinguir los clientes, permitiendo que las aplicaciones asocien el estado con la
comunicacin entre el cliente y el servidor.
Succesive Update (Actualizacin Sucesiva): Ofrece a los clientes una forma de recibir
actualizaciones continuas.
Transaction (Transaccin): Agrupa una coleccin de mtodos de forma que todos ellos
finalicen correctamente o fallen de forma colectiva.
115
A partir de esta definicin podemos entender, por lo tanto, que el DCD contiene realmente el
software como debe ser programado. En ellos encontramos toda la especificacin necesaria para
la implementacin, ya que en ellos se describen los atributos, tipos relevantes y mtodos que
responden a las responsabilidades que cada clase posee.
As, lo que encontraremos en este detalle es:
Clases, asociaciones y atributos
Interfaces, con sus operaciones y constantes
Mtodos
Tipos de datos
Navegabilidad
Dependencias
Por lo tanto, el nivel de detalle es alto porque a partir de este diagrama se deben escribir las
estructuras de clases que compondrn el sistema a implementar, y tambin gran parte de la lgica
interna de cada uno de los mtodos. De esta manera, la construccin del sistema est muy
completa, dejando poco trabajo para la fase de implementacin real.
La notacin que se utiliza en estos diagramas es muy parecida a la que usamos en el diagrama de
clases conceptuales. Sin embargo, es importante diferenciarlos, ya que en los DCD estamos
especificando las clases de software que sern implementadas y no solo conceptos que
representan elementos del negocio. Esta notacin UML es la siguiente:
116
-a
Metaclase
Asociacin
1..1
0..*
-a
Nombre
-atrib : byte
Agregacin
Clase
1..1
0..*
-a
+oper() : char
Composicin
1
Objeto
0..*
Objeto/Instancia
Herencia/Generalizacin
datatype
TipoDeDatos
Tipo de Dato
Implementacin de Interfaz
interface
Interfaz
Interfaz
Interfaz
Dependencia
Param
Clase
Tipo Parametrizado
Nota
Paquete
Paquete
{}
Restriccin
Veamos un ejemplo en el cual se nota la diferencia entre el modelo conceptual y las clases de
diseo. Tomemos la asociacin que hay entre Caja y Venta en el problema del supermercado. Para
el diagrama de clases conceptuales, tenemos lo siguiente:
117
Ms adelante descubriremos notacin adicional para otro tipo de situaciones especficas y que se
relacionan con nuevos patrones de asignacin de responsabilidades. Slo es importante recordar:
Considerar cul es la audiencia del DCD nos dar el nivel de detalle.
El DCD es un apoyo y una base para la implementacin, por lo es necesario evitar el detalle
exhaustivo cuando ste pueda provocar confusin.
TCNICA DE CONSTRUCCIN DE LOS DCD
En el proceso normal de generacin del DCD, todo comienza por identificar las clases de diseo a
partir de los diagramas de interaccin. An cuando esto ya lo hemos hecho de manera parcial, es
bueno que reunamos toda la informacin en un solo diagrama.
PASO 1: IDENTIFICACIN DE LAS CLASES DE DISEO Y SUS ATRIBUTOS
Lo primero que hacemos es dibujar las clases que se encuentran en los diagramas de interaccin y
les ponemos los atributos identificados en el Modelo de Dominio:
Una vez que eso se encuentra dibujado, comenzamos aadiendo los nombres de los mtodos de
manera anloga a las responsabilidades identificadas en las realizaciones. De esta forma, los
mensajes que encontramos en los diagramas de interaccin se convierten en mtodos fsicos de la
clase:
118
Algo muy importante al bautizar los mtodos es tener en cuenta algunas cuestiones que definen
un buen diseo:
La instanciacin o inicializacin de objetos no es una cuestin estndar para todos los
lenguajes orientados al objeto, por lo que generalmente se omiten en los DCD (en Java,
nos referimos a los constructores).
Cuando se hace referencia a la obtencin de valores de un objeto (mtodo de obtencin o
de acceso) o al cambio de valores de un objeto (mtodo de mutacin o de cambio) se
utiliza generalmente el nombre como get/set ms el atributo que acceden. Por
ejemplo, existe el mtodo getCodigo en la clase Producto que entrega el total de la venta.
Sin embargo, no se requiere especificar en el DCD todos los mtodos accesadores o
mutadores, ya que implicara tener una lista muy grande de mtodos que son irrelevantes
para el diseo, es por eso que solo aparecen aquellos que son relevantes o que generan
algn valor para el diseo.
La sintaxis que se utilice en los DCD debera corresponder a la sintaxis bsica de UML y no
a alguna en particular del lenguaje de implementacin. Idealmente la traduccin se debe
realizar cuando se implemente el cdigo que representa el diseo deseado. Sin embargo,
en ninguna parte UML niega el uso de otra sintaxis en sus diagramas, por lo que queda a
criterio del diseador finalmente.
AGREGANDO INFORMACIN DE LOS TIPOS DE DATOS
La informacin de tipos de datos en los DCD es relevante, ya que agrega informacin de bajo nivel
para los desarrolladores o para las herramientas que generan el cdigo en forma automtica. Sin
embargo, la decisin de agregar los tipos de datos y los parmetros a los mtodos pasa por una
definicin del diseador considerando que:
Si se est utilizando una herramienta CASE que genera cdigo en forma automtica, el
detalle de los tipos debe ser exhaustivo y concordante con el lenguaje que se utilizar en
la implementacin.
119
Si el DCD es solo para que lo vean los desarrolladores, agregar muchos detalles de tipos y
parmetro podra complicar el modelo ms que aclararlo porque se convierte en mucho
ruido para ellos. En este caso la recomendacin es utilizar tipos de datos lgicos que
representen la informacin a guardar (por ejemplo, Texto, Nmero, CdigoDeBarras, etc).
Sin embargo, tomar la decisin en si agregar o no el detalle debe ser considerado la audiencia que
deber utilizar este modelo, ya que si para la audiencia son obvios algunos de los tipos y
parmetros del DCD, es posible omitirlos.
ASOCIACIONES Y NAVEGABILIDAD EN LOS DCD
Como es de esperar, el DCD no est completo si no asociamos las clases entre ellas. Estas
asociaciones son similares y contrastadas con las que generamos en el Modelo Conceptual, ya que
responden al mismo principio con las que se generaron esas. De esta forma, antes de poner una
asociacin, es necesario preguntarse qu asociaciones se requieren para satisfacer la visibilidad
y las necesidades de memoria actuales que se indican en los diagramas de interaccin?. Esta
visibilidad requerida es necesaria en los siguientes casos comunes:
Cuando A enva un mensaje a B.
Cuando A crea una instancia de B.
Cuando A necesita mantener una conexin a B.
Una vez que se ha encontrado la asociacin, es necesario adems darle el concepto de
navegabilidad. Con esto, se le da un nivel de dependencia a la asociacin, lo que se traduce en
visibilidad de atributo:
De esta forma, CajaControlador tiene una visibilidad de atributo de Venta, lo que se traduce que la
clase CajaControlador posea un atributo de tipo Venta. Pero dnde queda ese atributo en el
DCD?. Es posible que opcionalmente se ponga ese atributo sobre la flecha hacia el lado del tipo de
destino (Venta), pero no es absolutamente necesario ya que se puede nombrar posteriormente en
la implementacin.
En nuestro ejemplo de la caja del supermercado, el DCD se convierte en:
120
Como ven en el ejemplo, el DCD es bastante simple de ver, sin embargo se ha construido a partir
de los diagramas de interaccin de las realizaciones. No se incluyeron los tipos de datos ni
parmetros de mtodos, porque la audiencia es acadmica y no nos entrega un valor agregado
ms que confundirnos en el modelo de diseo.
Ntese adems que el DCD que es mucho menos extenso que el modelo conceptual, porque se
basa netamente en el diseo del sistema que responde a los eventos del mismo.
RELACIONES DE DEPENDENCIA ADICIONALES
Se han omitido los tipos de datos en el diagrama de manera totalmente intencional, para la visin
completa de ste en el documento.
121
En el ejemplo, aparece una visibilidad de parmetro entre Venta y Producto, ya que el mtodo
crearLineaDeVenta requiere una instancia de Producto para ser asociada en LineaDeVenta (en
donde si est la visibilidad de atributo explcita en el DCD).
VISIBILIDAD DE ATRIBUTOS Y MTODOS
Hasta ahora todos los diagramas que hemos visto muestran unos pequeos signos en su
definicin. Estos signos no son adornos ni tampoco es casualidad que ah estn, sino que
representan la visibilidad que tienen los atributos y la visibilidad que tienen los mtodos en el
modelo.
UML no obliga a utilizar esto modificadores, pero nos daremos cuenta que algunos CASE los ponen
por defecto como - a los atributos y + a los mtodos. Por qu es esto?
El modificador - indica que el atributo o mtodo es privado, esto quiere decir que el
alcance que tiene es solo dentro de la clase en la cual est definido.
El modificador + indica que el atributo o mtodo es pblico, lo que significa que el
alcance que tiene es dentro y fuera de la clase.
Por defecto en UML, si estos modificadores no se especifican en el DCD, se supondr que los
atributos son privados y los mtodos son pblicos.
CUERPO DE LOS MTODOS
Por ltimo, y opcionalmente, es posible utilizar cuerpos de cdigo en los mtodos que
especifiquen cmo se implementan con pseudocdigo o algn lenguaje en particular. Sin
embargo, debemos recordar que todo el detalle que pongamos en el DCD es para apoyar la etapa
de implementacin y no debe significar mayor complejidad para los desarrolladores.
Desde el punto de vista de notacin, el cuerpo de los mtodos va sin la firma del mtodo
(encabezado) y solo se describe el contenido, de la siguiente forma:
122
TEMAS COMPLEMENTARIOS
GENERALIZACIN
Existe una regla simple para definir si existe una razn para definir un subtipo.
123
La agregacin se utiliza cuando existe una dependencia directa entre dos clases, de manera de que
la clase dependiente no puede existir sin su generadora.
Para la notacin se utiliza un rombo pintado indicando la clase generadora:
La clase A agrega uno o ms objetos de B.
Es importante definir la agregacin cuando sta corresponda. Por ejemplo en el caso del Punto de
Venta podemos encontrar agregacin en algunas clases del DCD como Venta y LineaDeVenta, ya
que no pueden existir referencias a una LineaDeVenta si no existe la Venta primero. Es por eso que
la relacin queda as:
COMPOSICIN
La composicin se utiliza cuando no existe una dependencia directa entre dos clases, pero si se
requiere tener una referencia de la otra.
Para la notacin se utiliza un rombo en blanco indicando la clase que necesita tener relacin:
La clase A compone uno o ms objetos de B.
Al igual como lo hicimos con la agregacin, la definicin se debe realizar correctamente solo
cuando una de ellas requiere tener una referencia de la otra en su definicin (atributos). Por
ejemplo en el caso del Punto de Venta podemos encontrar composicin en el DCD entre Catalogo
y Producto, ya que los productos de la tienda siempre deben existir por si solos, pero el catlogo
es solamente el medio para que puedan acceder a l. Es por eso que la relacin queda as:
124
MODELO ARQUITECTNICO
En este ejemplo solo nos referiremos al diagrama de componentes del modelo.
DIAGRAMA DE COMPONENTES
La primera premisa para nuestro diagrama es que separaremos las capas de interfaz grfica de las
funcionales (negocio) y operativa, es decir, utilizaremos un modelo de 3 capas de diseo
arquitectnico.
CAPA FUNCIONAL
La capa funcional estar compuesta de 3 componentes bsicos y que son separados por su
naturaleza:
Ahora bien, tanto la capa Consulta Mdica como la capa Procedimiento requieren trabajar con la
ficha, por lo que tambin existirn algunas dependencias entre ellas:
125
Como podemos ver, las interfaces que exponemos para la comunicacin entre los paquetes nos
definen algunas operaciones que se realizarn en los diagramas de colaboracin. De esta manera,
estamos obligando que las clases las debamos discriminar de acuerdo a la naturaleza del
componete:
Componente Consulta Mdica: Todas las clases que operen con la anamnesis.
Componente Procedimiento: Todas las clases que operen con los procedimientos.
Es fcil ver que el centro del negocio est en las clases que controlan las fichas de los pacientes y
que el resto en realidad no es tan relevante como habamos pensado, por lo que nos sugiere que
en realidad no necesitamos tantos componentes, sino que solo uno principal y que contenga todas
las operaciones del sistema con la ficha, sin embargo, para el ejemplo, mantendremos la
consistencia con el diseo realizado y seguiremos mantenindolo por separado.
Lo que nos queda ahora es exponer los servicios que van hacia la interfaz grfica y completar el
diagrama con la capa completa:
CAPA DE INTERFAZ
Las operaciones expuestas en la capa funcional (que particularmente son solo las de sistema) no
son para que las use el usuario final directamente, sino que para que sean gatilladas a partir de la
interfaz. De esta manera, podramos (y optimizando el diagrama anterior) organizar el sistema de
la siguiente manera:
126
Lo que finalmente describimos es una componente grfica por lugar donde funcionar el sistema y
relacionamos con qu servicio expuesto se comunican dichas componentes directamente. As
podemos discriminar cmo organizar tambin los programas de la interfaz grfica fcilmente.
CAPA DE DATOS
Por ltimo, debemos tambin comunicarnos con la capa de datos, la cual es la que gestiona las
tablas de la base de datos y muestra los servicios expuestos necesarios para trabajar con la capa
funcional. Este sera entonces el diagrama final de componentes del sistema:
127
Como podemos notar, el Registro de Fichas es una componente que representa la interaccin con
la base de datos directamente. De esta manera, cuando se desea, por ejemplo, realizar una
bsqueda de una ficha por el rut, es necesario que se obtenga la ficha desde la base (a travs de
un select de la tabla respectiva).
En particular, solo se exponen 2 servicios bsicos que son consultar y registrar (similar a un
select y un update en SQL), los cuales son consumidos solo por la componente de Ficha.
MODELO DE DISEO
Para poder realizar el diseo es necesario que recordemos un artefacto que no da el primer indicio
del diseo del sistema: el diagrama de clases conceptuales:
1
DetalleDeFicha
+rut
+nombre
+direccion
+telefono
+email
FichaDePaciente
es-descrita-por
Paciente
posee
1
0..1
crea
Recepcionista
1
+cotiene
contiene
0..*
Laboratorista
0..*
Procedimiento
1
1
ingresa
Especialista
Anamnesis
1
es-descrita-por
1
es-descrita-por
1
DetalleAnamnesis
DetalleProcedimiento
0..1
+datos_inspeccion
+observaciones
+indicaciones
+otros
+observaciones
0..1 +resultados
+diagnostico
ingresa
En la construccin del modelo de diseo, comenzaremos con los Diagramas de Colaboracin que
representan las realizaciones de las operaciones del sistema a partir de los objetos de diseo que
participan.
Para esto utilizaremos los Patrones de Diseo (GRASP y GoF) de manera de normalizar la
asignacin de responsabilidades a un buen diseo.
Finalmente transformaremos esta informacin en un Diagrama de Clases de Diseo completo en
donde se describe el detalle del sistema antes de su implementacin.
128
DIAGRAMAS DE COLABORACIN
Los diagramas de colaboracin realizan las interacciones necesarias para que lo objetos colaboren
bajo el objetivo de cumplir las operaciones de cada caso de uso. Por lo tanto, el diseo de
responsabilidades lo realizaremos en funcin de cada contrato descrito en el modelo de
comportamiento.
Operacin:
Responsabilidad:
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
Salidas:
Precondiciones
Postcondiciones:
CO1. validarRut(rut)
Validar que el RUT exista dentro del catalogo de pacientes
Sistema
CU1
Si el RUT existe, se aborta el resto del CU
- Exista una instancia r de tipo CatalogoDePacientes
- No se haya encontrado una instancia f de FichaDePaciente
dentro de r que tenga asociada una instancia d de
DetalleDeFicha que tenga como atributo rut el valor del
parmetro rut.
ILUSTRACIN 84. CONTRATO DE LA OPERACIN VALIDARRUT
Lo primero que debemos buscar en este caso es qu objeto debe ser el controlador de la
operacin. Es fcil ver que como no tuvimos nunca una clase que represente nada fsico del
sistema, siempre utilizamos Sistema como tal. As que, como estamos hablando de aplicar el
patrn de controlador, deberemos decidir si:
Para que podamos probar los controladores modulares, en este caso elegiremos la segunda
opcin. Adems, que el ejemplo es bastante bueno para que podamos separar las funciones en
cada mbito de la atencin mdica.
Si seguimos aplicando otros patrones, por ejemplo, para validar el rut debemos identificar de
quin es la responsabilidad de conocer o mantener conocimiento de las fichas de los pacientes.
Con el patrn de experto podemos determinar que ese es el CatlogoDePacientes, que ya
tenamos identificado anteriormente. Por ltimo, sabiendo que el experto de informacin de
conocer el rut de un paciente es DetalleDeFicha, y aplicando el patrn de cadena de
responsabilidad (de GoF), podemos llevar la responsabilidad desde el controlador hasta el mismo
objeto para entregar el valor del rut pidindole a CatalogoDePacientes, luego a FichaDePaciente y
que realice la validacin si existe una ficha (esperamos respuesta negativa por supuesto).
De esta manera, el primer diagrama de colaboracin quedara como sigue:
129
Es fcil ver que debemos primero buscar si el anterior controlar de las operaciones aplica en sta,
y la respuesta es s, porque seguimos en el mismo mdulo (CU) de registro de paciente.
Por otro lado, como debemos crear un DetalleDeFicha, debemos buscar el mejor creador ese tipo
de objetos. Como sabemos, la clase que usa ms estrechamente estos objetos es FichaDePaciente,
sin embargo tambin es parte del contrato crear un objeto de ese tipo, as que podemos realizar
esa creacin en cadena, delegando la responsabilidad al mejor creador de FichaDePaciente, y que
se lo podemos entregar de inmediato al CatalogoDePacientes (ya que l es quien necesitar
utilizar esas instancias de aqu en adelante).
Por ltimo, finalmente necesitamos obtener el experto de la informacin del detalle del paciente y
es DetalleDeFicha, lo que nos permite mejorar la creacin de ese tipo de objetos delegndole toda
esa informacin a su creador (FichaDePaciente) y permitiendo que la creacin se lleve a cabo en
una sola responsabilidad encapsulada.
El diagrama de colaboracin quedara as:
130
Notemos que en este caso particular, la existencia de la relacin con el catlogo no estaba definida
en el contrato, pero la aplicacin de los patrones de diseo nos permiti descubrir esta relacin.
Por otro lado tampoco aparece en forma explcita el cumplimiento de la postcondicin de asociar
d a f, pero por la delegacin de la creacin quedan asociadas esas instancias.
El siguiente contrato es:
Operacin:
Responsabilidad:
CO3. consultar(rut)
Obtiene la informacin de la ficha del paciente a partir del
rut ingresado.
Tipo o Clase: Sistema
Ref. Cruzadas: CU2, CU3, CU5
Notas: Excepciones: Si la ficha no existe, devuelve un valor nulo.
Salidas: Precondiciones - Exista una instancia r de CatalogoDePacientes
Postcondiciones: - Se haya encontrado una instancia p de DetalleDePaciente
cuyo atributo rut sea igual al valor del parmetros rut.
ILUSTRACIN 88. CONTRATO DE LA OPERACIN CONSULTAR
Para buscar el controlador, primero debemos consultarnos si se aplica el anterior. En este caso no
lo es, porque no estamos en el registro de un paciente, pero tampoco estamos en algn CU
particular, ya que esta operacin es transversal a los CU2, CU3 y CU5.
A pesar de ello, como la naturaleza de la operacin tiene que ver con obtener la informacin de la
ficha del paciente, podremos crear un nuevo controlador modular llamado FichaControlador, que
permite realizar las operaciones bsicas de consulta o manipulacin de la ficha9.
Por otro lado, como estamos buscando una ficha particular, debemos aplicar exactamente la
misma idea de lo aplicado en el CO1. De esta manera, podemos cambiar nuestra primera
realizacin para mejorar y aplicar este contrato en forma equivalente.
As, las colaboraciones corregidas para aplicar esta operacin tambin seran:
Note que las operaciones anteriormente analizadas tambin tienen que ver con la ficha, por lo que una
mejora sera juntarlas todas en este mismo controlador, quedando 3 operaciones (CO1, CO2 y CO3).
131
Como podemos ver, la naturaleza de la operacin es la misma, pero la respuesta que se espera es
diferente del controlador. El siguiente contrato es:
Operacin:
Responsabilidad:
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
Salidas:
Precondiciones
Postcondiciones:
ILUSTRACIN 92.
CO4. registrarInformacion(objeto)
Registra en la ficha del paciente la informacin entregada en
forma de objeto.
Sistema
CU3, CU5
Objeto puede tomar valores de DetalleAnamnesis y
DetalleProcedimiento
- Exiasta una instancia d de DetalleDePaciente
- Se haya asociado objeto a d.
CONTRATO DE LA OPERACIN REGISTRARINFORMACION
132
Primero, esto tiene diferentes matices, ya que est siendo generalizada una operacin que no
tendran el mismo controlador, as que seran vistas en forma diferente (como 2 contratos aparte).
De esta forma, el primero ser recibido por ConsultaControlador, el cual manejar las operaciones
realizadas por el especialista en la consulta mdica. La otra ser gestionada por
ProcedimientoControlador, que tiene que ver ms con las operaciones realizadas durante un
procedimiento mdico.
Ahora si comenzamos a ver el primer caso como registrarAnamnesis() tendremos el detalle
necesario para aplicar los patrones de creador y experto que nos lleve al primer diagrama de
colaboracin:
De una manera anloga podemos realizar la operacin respecto al registro del procedimiento
quedando el diagrama de la siguiente forma:
Lo relevante de este anlisis, es que como el detalle necesario es por cada una de las clases, es
necesario que hayamos separados las operaciones para cada caso, ya que, tal como vimos en
clase, se convertirn en los mtodos de cada una de las clases (y las clases destino son las mismas).
133
CO5. cerrarAtencion(especialista)
Enva una notificacin al sistema de agenda mdica
indicando el trmino de la atencin del especialista.
Sistema
CU7
Utiliza XML para construir la llamada al SAM.
Un mensaje intersistemas para el SAM
95. CONTRATO DE LA OPERACIN CERRARATENCION
Como podemos ver, esta operacin tiene que ver con la consulta mdica (y de hecho es una
operacin de secundaria, ya que es una notificacin). Sin embargo, este contrato no aporta
informacin al sistema como tal, porque solo elabora un mensaje a un sistema externo, lo que no
se ve reflejado en las postcondiciones.
DIAGRAMA DE CLASES DE DISEO
Una vez analizado por completo las operaciones del sistema, podemos plantear paso a paso el
diagrama de clases de diseo. Veamos cmo va quedando:
Con un simple paso por los diagramas de colaboracin, podemos identificar las siguientes clases:
En el diagrama, adems pusimos desde ya los atributos que vienen desde el diagrama de clases
conceptuales, ya que a priori sabemos que esos valores se mantendrn para el diseo.
134
El siguiente paso es completar con la informacin de los tipos de datos de los atributos y sus
visibilidades correctas:
Es fcil detectar que la informacin almacenada es mayormente de texto, ya que todos los datos
generados por los especialistas mdicos son de ese tipo.
Siguiendo con las definiciones aprendidas en la tcnica de creacin del diagrama de clases de
diseo, podemos obtener ahora los mtodos de cada una de las clases a partir de los diagramas de
colaboracin dibujados en la seccin anterior. As, podemos asociar los siguientes mtodos
encontrados a las siguientes clases:
ConsultaControlador: registrarAnamnesis.
ProcedimientoControlador: registrarProcedimiento.
Anamnesis: crear.
DetalleDeAnamnesis: crear
135
Procedimiento: crear
DetalleDeProcedimiento: crear
10
El paso siguiente es incorporar las asociaciones de acuerdo a la cercana de las clases del diagrama.
Esto es bastante rpido de identificar porque basta con responder cualquiera de las 3 situaciones
indicadas anteriormente:
De esta manera, el diagrama que estamos completando pasara a ser de la siguiente forma:
10
Las clases fueron reorganizadas para alcanzar a ver mayor detalle en el documento.
136
137
138
139
CODIFICACIN DE CALIDAD
Los especialistas deben perseguir la obtencin de programas de calidad. Para ello se establece
una serie de factores que determinan la calidad de un programa:
Correccin: Un programa es correcto si hace lo que debe hacer tal y como se estableci en
el anlisis y diseo.
Claridad: Es muy importante que el programa sea lo ms claro y legible posible, para
facilitar as su desarrollo y posterior mantenimiento.
Eficiencia: Se trata de que el programa, adems de realizar aquello para lo que fue creado
(es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos
que utiliza.
ESTNDARES DE CODIFICACIN
Los estndares de codificacin se refieren a un conjunto de reglas y lineamientos que se usan al
escribir los cdigos fuentes de un software. El uso de un estndar particular ayuda a los
programadores a leer y entender el cdigo evitando los errores de la mejor manera.
Un buen estilo de programacin (o estndar) es difcil de definir ya que depende del lenguaje de
programacin seleccionado, sin embargo existen algunos aspectos comunes a ellos que ayudan a
tener un estndar definido:
Apariencia del Cdigo: Los estndares apuntan a que el cdigo debe ser de fcil
entendimiento humano. De esta forma se pueden utilizar algunas tcnicas bsicas como
indentacin, alineamiento vertical, espaciado y tabuladores.
Nombrado de Variables: Una buena seleccin de nombres de variables indica que ellas
deben ser nombradas segn su funcin. La utilizacin de nombres deficientes de variables
solo complican el entendimiento del cdigo fuente.
HERRAMIENTAS CASE
Las CASE-Tools o Herramientas CASE (Computer Aided Software Engineering, Ingeniera de
Software Asistida por Computadora) son diversas aplicaciones informticas destinadas a aumentar
la productividad en el desarrollo de software reduciendo el costo de las mismas en trminos de
tiempo y de dinero.
Estas herramientas nos pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del
software en tareas como el proceso de realizar un diseo del proyecto, calculo de costes,
implementacin de parte del cdigo automticamente con el diseo dado, compilacin
automtica, documentacin o deteccin de errores entre otras.
A pesar de que las CASE-Tools nacieron en los aos 70, actualmente siguen siendo una gran ayuda
en el mbito de la ingeniera de software y sobretodo en etapas menos tcnicas como el anlisis y
diseo.
MODELO DE IMPLEMENTACIN
El modelo de implementacin define el mapeo que debemos hacer del diseo de software
realizado a travs de los artefactos del UP con la codificacin. De esta manera podemos definirlo
en dos partes:
A continuacin veremos algunos aspectos bsicos con los cuales debe trabajar el arquitecto antes
de llegar a obtener un diseo completo.
CONCEPTOS BSICOS
A continuacin algunos conceptos importantes que son necesarios de entender para este modelo.
CDIGO
Podemos definir que:
EL CDIGO ES LA SINTAXIS DE LOS PROGRAMAS, EN UN LENGUAJE
DE MQUINA PARTICULAR, Y QUE REPRESENTAN EL DISEO
ESPECIFICADO.
Lo que estamos definiendo tan sencillamente es que utilizaremos cdigo para especificar la
implementacin.
En este caso, en lenguaje de programacin que usaremos para los ejemplos ser Java por su
orientacin al objeto y pertinencia con la carrera.
141
142
Lo primero que debemos hacer es, entonces, adoptar el diagrama y convertir todos aquellos tipos
de datos y definiciones funcionales para convertirlas en elementos del lenguaje de programacin
seleccionado. Pensemos en Java, entonces el diagrama anterior quedara transformado a:
Ahora que ya lo tenemos normalizado, debemos saber de dnde vamos sacando los cdigos
respectivos de cada clase. La regla es siempre comenzar desde la menos acoplada (ms especfica)
a la ms acoplada. En el ejemplo, podemos definir el siguiente orden de acoplamiento:
Producto
Pago
LneaDeVenta
Catalogo
Venta
CajaControlador
Luego de saber el orden de implementacin, se debe comenzar poniendo los cdigos de las clases
desde la definicin que ya se ha encontrado en el DCD, lo que llamaremos atributos y mtodos
simples. De esta manera, la clase se va construyendo a partir directamente de la definicin que
dice el DCD.
Por ejemplo, tomemos LineaDeVenta para comenzar la definicin:
143
Esto lo debemos hacer para todas las clases del DCD, de manera que tenemos una primera
estructura bsica de la estructura de clases.
Otro tipo de atributos que se derivan de los DCD son los conocidos como de referencia y que
representan aquellos atributos que son definidos a raz de la relacin que tienen las clases. De esta
manera, cada vez que veamos una asociacin en el diagrama de clases, entonces estaremos
pensando que en la implementacin debemos referenciar la clase dependiente a travs de un
atributo.
Por ejemplo, en la relacin entre LineaDeVenta y Producto podemos obtener claramente un
atributo de referencia. Este se ve en la clase Linea de Venta:
Producto
-codigo: long
-glosa: String
-p -precio: double
1 +getCodigo(): long
+getPrecio(): double
1
LineaDeVenta
-cantidad: short
+new(p: Producto, cant: short): LineaDeVenta
-setProducto(p: Producto)
-setCantidad(cant: short)
+obtenerSubTotal(): double
Para este caso lo estamos haciendo a partir de una composicin. En el caso del lenguaje Java,
tanto la composicin como la agregacin se representan de la misma forma, sin embargo, cuando
estemos utilizando lenguajes cuya representacin se torna diferente, entonces debemos
preocuparnos de si hablamos de composicin y no de agregacin.
144
Otro tema importante es cuando hablamos del nombre del papel que se usa en el DCD. Algunos
diagramas utilizan en el extremo dependido un atributo que indica el nombre de la relacin. De
esta forma, ese papel debe ser usado como nombre del objeto de referencia.
Otra consideracin importante cuando se agregan los atributos de referencia es cuando estamos
hablando de los contenedores (como en el caso del ejemplo que son los objetos de tipo Producto
sobre el Catalogo o las LineasDeVenta sobre la Venta).
Cuando se trata de poner la multiplicidad en el cdigo nos vemos con la complicacin de que no
existe forma directa en algunos lenguajes para hacerlo. De esta manera, lo que se hace
tradicionalmente, por ejemplo en Java, es utilizar una clase intermediaria que relacione el
contenedor con lo contenido de la forma adecuada. As, a pesar de que no aparece en el DCD esta
clase, se hace directamente.
Por ejemplo, para hacer la relacin entre Venta y LineaDeVenta, podemos agregar la clase Vector,
la que en Java permite poner un grupo de objetos en un solo contenedor. De esta forma, la
definicin quedara de la siguiente forma:
public class Venta {
/* ATRIBUTOS */
private Date fecha;
private Vector ldv; // Atributo de grupo
private Pago p;
/* OPERACIONES */
public Venta (Date fecha) { }
private void setFecha(Date fecha) { }
public void crearLDV(Producto p, short cant) { }
public double obtenerTotal() { }
public void crearPago(double monto, byte tipo) { }
}
Venta
-fecha: Date
+new(fecha: Date): Venta
-setFecha(fecha: Date)
+crearLDV(p: Producto, cant: short)
+obtenerTotal(): double
+crearPago(monto: double, tipo: byte)
1..*
-ldv
LineaDeVenta
-cantidad: short
+new(p: Producto, cant: short): LineaDeVenta
-setProducto(p: Producto)
-setCantidad(cant: short)
+obtenerSubTotal(): double
En este ejemplo, podemos ver que qued puesto un objeto Vector llamado ldv que,
conceptualmente, no es ms que un conjunto de objetos de LineaDeVenta agrupados en Venta.
De esta manera, cada vez que se cree una nueva LineaDeVenta, tenemos que agregarlo al
Vector, no solo referenciando la variable, sino que utilizando las operaciones de ste ltimo.
Otro paso que a travs de esta tcnica es posible realizar es describir los mtodos que se
encontraron como mensajes y responsabilidades en los diagramas de colaboracin. De esta
manera, podemos escribir los cuerpos de los mtodos (al menos en parte) mirando estos
diagramas.
Veamos el ejemplo de la operacin agregarProducto de CajaControlador. Su diagrama de
colaboracin (parte de l) sera:
145
Ntese que los mensajes que salen de CajaControlador estn representando parte del cuerpo del
mtodo agregarProducto de CajaControlador. Por lo tanto, si revisamos la secuencia y vamos
agregando las llamadas respectivas a la definicin de la clase, tenemos:
public class CajaControlador {
private Catalogo c;
private Venta v;
public void iniciarVenta() { }
public void agregarProducto(long cod, short cant) {
Producto p;
p = c.buscar(cod);
v.crearLDV(p, cant);
}
public void registrarPago(double monto, byte tipo) {}
CajaControlador
-c
+iniciarVenta()
+agregarProducto(cod: long, cant: short)
+registrarPago(monto: double, tipo: byte)
Catalogo
1 +buscar(cod: long): Producto
0..*
-v
Venta
-fecha: Date
+new(fecha: Date): Venta
-setFecha(fecha: Date)
+crearLDV(p: Producto, cant: short)
+obtenerTotal(): double
+crearPago(monto: double, tipo: byte)
Como se puede ver ac aparecen directamente los mtodos que ya definimos en cada clase y
hasta el orden de llamada relativa por supuesto a la responsabilidad en cuestin. En este caso
ingresarProducto queda aparentemente definido en su totalidad, por lo tanto no requiere agregar
nada ms para que sea un procedimiento programado.
Finalmente, con esta documentacin tendremos un gran diagrama de clases con comentarios que
especifican cada clase de diseo como si fuera una fuente de informacin tcnica para la
programacin.
146
147
VENTA
public class Venta {
private Date fecha;
private Vector ldv;
private Pago p;
public Venta (Date fecha) {
this.setFecha(fecha);
}
private void setFecha(Date fecha) {
this.fecha = fecha;
}
public void crearLDV(Producto p, short cant) {
LineaDeVenta l = new LineaDeVenta(p, cant);
this.ldv.addElement(l);
}
public double obtenerTotal() {
double suma = 0.0;
for(int i=0; i<this.ldv.size(); i++) {
suma += this.ldv.elementAt(i).obtenerSubTotal();
}
return suma;
}
public void crearPago(double monto, byte tipo) {
this.p = new Pago(monto, tipo);
}
}
LINEADEVENTA
public class LineaDeVenta {
private short cantidad;
private Producto p;
public LineaDeVenta(Producto p, short cant) {
this.setProducto(p);
this.setCantidad(cant);
}
private void setProducto(Producto p) {
this.p = p;
}
private void setCantidad(short cant) {
this.cantidad = cant;
}
public double obtenerSutotal() {
return this.cantidad * this.p.getPrecio();
}
}
PAGO
public clas Pago {
private double monto;
private byte tipo;
148
CATALOGO
public class Catalogo {
private Vector cdp;
public Producto buscar(long cod) {
for(int i=0; i<this.cdp.size(); i++) {
if (this.cdp.elementAt(i).getCodigo() == cod)
return this.cdp.elementAt(i);
}
}
}
PRODUCTO
public class Producto {
private long codigo;
private String glosa;
private double precio;
public long getCodigo() {
return this.codigo;
}
public double getPrecio() {
return this.precio;
}
}
Luego de esto, es importante que los programadores incorporen en cada uno de los mtodos el
detalle y estructuras de control necesarias que permitan que el sistema opere de manera efectiva
y correcta segn las especificaciones de requisitos realizadas al principio del curso.
MODELO DE IMPLEMENTACIN
En este modelo especificaremos solo la estructura de clases a partir del DCD y usando Java.
DIAGRAMA DE CLASES DE IMPLEMENTACIN
149
ILUSTRACIN 109. DIAGRAMA DE CLASES DE DISEO CON TIPOS DE DATOS JAVA DEL SEFP
Luego de realizado esto, se van describiendo las clases a travs de anotaciones en el diagrama
considerando no solo los atributos explcitos, sino que tambin operaciones complejas y atributos
de asociacin.
Para el caso de las asociaciones mltiples que existen en este diagrama, vamos a utilizar una
estructura Vector de objetos para que vaya acumulando los objetos del tipo de destino sin
necesidad de conocer el nmero de elementos que finalmente vamos a registrar.
De esta manera, tendremos un diagram parecido a este:
150
El siguiente paso (que aparece en la tcnica vista en este captulo) indica incorporar lgica de
programacin en el diagrama, sin embargo, dada la complejidad de ste, vamos a optar por
escribir el cdigo (estructura de clases) a partir de lo ya obtenido, y luego incorporar lgica
programtica.
ESTRUCTURA DE CLASES
La estructura obtenida corresponde a las clases, con sus atributos y las firmas de todos los
mtodos identificados. Sin embargo, vamos a aprovechar de incorporar lgica en los mtodos de
las clases segn corresponda.
A continuacin el listado de las clases desde las menos acopladas a las ms acopladas:
public class DetalleDeAnamnesis {
private String datos_inspeccion;
private String observaciones;
private String indicaciones;
private String otros;
public DetalleDeAnamnesis(String inspeccion, String observaciones,
String indicaciones, String otros) {
this.setDatos_Inspeccion(inspeccion);
this.setObservaciones(observaciones);
this.setIndicaciones(indicaciones);
this.setOtros(otros);
}
private void setDatos_Inspeccion(String inspeccion) {
this.datos_inspeccion = inspeccion;
}
private void setObservaciones(String observaciones) {
this.observaciones = observaciones;
}
private void setIndicaciones(String indicaciones) {
this.indicaciones = indicaciones;
}
151
152
153
154
ANEXOS
155
ESPECIFICACIN DE REQUISITOS
En esta seccin se describe la visin funcional del sistema a la luz de los requerimientos
expresados por el cliente final.
IDENTIFICACIN DEL SISTEMA
El sistema se describe de la siguiente forma:
Nombre del Sistema:
Panorama:
Clientes:
Metas:
ESPECIFICACIN DE FUNCIONES
La especificacin funcional del sistema se detalla a travs de las siguientes funciones:
# Ref:
Funcin:
Descripcin:
Categora:
Atributo
Detalles y Restricciones
Categora
GLOSARIO
En esta seccin se describen los conceptos ms importantes del dominio y que impactan en su
entendimiento.
Trmino
Definicin
MODELO DE DOMINIO
En esta seccin se describen los artefactos que muestran la visin de negocio y el contexto en el
cual se desarrollar el sistema.
DIAGRAMA DE ACTIVIDADES
Los procesos se describen de la siguiente forma:
<INSERTAR DIAGRAMAS POR PROCESO>
DIAGRAMA DE CLASES CONCEPTUALES
El dominio se observa en el siguiente diagram:
<INSERTAR DIAGRAMA>
MODELO DE COMPORTAMIENTO
En esta seccin se describen los artefactos que describen el comportamiento del sistema.
157
DIAGRAMAS DE SECUENCIA
Los casos de uso se describen en los siguientes diagramas de secuencia:
<INSERTAR DIAGRAMAS POR CASO DE USO>
CONTRATOS DE LAS OPERACIONES
Las operaciones del sistema se describen a travs de los siguientes contraltos:
Operacin:
Responsabilidad:
Tipo o Clase:
Ref. Cruzadas:
Notas:
Excepciones:
Salidas:
Precondiciones
Postcondiciones:
CO1. validarRut(rut)
DIAGRAMAS DE ESTADO
Los cambios de estado de los objetos del sistema se describen en los siguientes diagramas:
<INSERTAR DIAGRAMAS POR OBJETO>
MODELO ARQUITECTNICO
En esta seccin se describen las decisiones de la arquitectura que afectan a la organizacin de los
programas finales.
DIAGRAMA DE COMPONENTES
El diagrama que define la distribucin de componentes es el siguiente:
<INSERTAR DIAGRAMA>
MODELO DE DISEO
En esta seccin se describe en detalle el diseo del sistema a partir de las operaciones de ste y
completando con una vision tcnica de las clases de diseo.
DIAGRAMAS DE COLABORACIN
Las operaciones se realizan en el sistema de la siguiente forma:
<INSERTAR DIAGRAMAS POR OPERACION DE SISTEMA>
DIAGRAMA DE CLASES DE DISEO
El diagrama de clases que define el sistema es el siguiente:
<INSERTAR DIAGRAMA>
158
MODELO DE IMPLEMENTACIN
En esta seccin se describen las labores de preparacin de la codificacin.
DIAGRAMA DE CLASES DE IMPLEMENTACIN
El diagrama de clases normalizado y preparado para la codificacin es:
<INSERTAR DIAGRAMA>
ESTRUCTURA DE CLASES
La estructura bsica de clases que se deriva del diseo es:
<INSERTAR ESTRUCTURA DE CLASES>
159
160
Gestionar globalmente todas las fases de desarrollo de software con una misma
herramienta.
Plataforma
Funcionalidades
Multiplataforma
Windows
MacOS
Otros
161
Tambin existen software compatibles entre plataformas, pero definitivamente depende un poco
del fabricante y de la tecnologa que utilicen para hacer cada herramienta.
FASES DEL CICLO DE VIDA DEL SOFTWARE
Esta es la clasificacin ms habitual de las herramientas, y se ha definido en 3 niveles:
Upper CASE (U-CASE), herramientas que ayudan en las fases de planificacin, anlisis de
requisitos y estrategia del desarrollo, usando, entre otros diagramas UML.
Existen otros nombres que se le dan a este tipo de herramientas, y que no es una clasificacin
excluyente entre s, ni con la anterior:
ARQUITECTURAS PRODUCIDAS
En esta clasificacin se han definido los siguientes tipos de arquitectura producida:
11
Ver http://es.wikipedia.org/wiki/Desarrollo_r%C3%A1pido_de_aplicaciones
162
negocio) y otra para el almacenamiento (persistencia). Una capa solamente tiene relacin
con la siguiente.
Otras arquitecturas menos utilizadas incluyen la de pipeline, entre pares, en pizarra, orientada a
servicios y mquinas virtuales.
FUNCIONALIDADES
De acuerdo a sus funcionalidades, las herramientas se pueden agrupar de la siguiente forma:
Editores UML.
163
FUNCIONALIDADES
A continuacin veremos las diferentes funcionalidades para trabajar con la herramienta.
CREACIN DE UN PROYECTO
Al momento de iniciar StarUML, el arquitecto debe crear un nuevo proyecto, el cual define el
mbito de desarrollo de los modelos y artefactos que se desea realizar.
StarUML organiza los proyectos (modelos-artefactos) de acuerdo un estilo que debe ser
seleccionado al momento de ser creado. La idea central es que el estilo posee una organizacin de
modelos o vistas que deben ser completadas con los artefactos de UML por el arquitecto.
Aproximacin Estndar
Aproximacin Rational
Aproximacin Personalizada
El estilo utilizado para el desarrollo de los artefactos presentados en este apunte fue Rational, ya
que es el ms cercano al proceso de desarrollo personalizado que se utiliz, sin embargo, no se
descarta crear una aproximacin especial adecuada para el curso en el futuro12.
Adems, independientemente el tipo de aproximacin, StarUML no limita los artefactos a utilizar
en cada estilo, sino que finalmente es el arquitecto quien tiene la labor de organizar de la mejor
forma cada proyecto a desarrollar.
12
Este curso seguir siendo impartido y se pretende mejorar con el uso de StarUML.
164
Modelo de Casos de Uso: El centro de este modelo es el Diagrama de Casos de Uso, el cual
detalla el ambiente y la interaccin del sistema desde el punto de vista funcional a travs
de la utilizacin del artefacto del mismo nombre.
APROXIMACIN RATIONAL
La aproximacin Rational hace referencia al proceso de desarrollo creado por The Three Amigos13
y organiza el proyecto de acuerdo a 4 vistas:
Vista de Casos de Uso: Esta vista pretende mostrar la descripcin funcional del proyecto
guiado a travs de los Casos de Uso del sistema. Su centro es el Diagrama de Casos de Uso.
Vista Lgica: Esta vista pretende mostrar la visin tanto de negocio como de
comportamiento del sistema desde el punto de vista lgico (no fsico). Su centro es el
Diagrama de Clases (conceptuales).
Vista de Componentes: Esta vista pretende mostrar la visin fsica del sistema incluyendo
componentes de software que deben ser implementados. Su centro es el Diagrama de
Componentes.
Vista de Despliegue: Esta vista pretende mostrar los artefactos de despliegue (instalacin)
del sistema de acuerdo a las necesidades modulares y funcionales del problema. Su centro
es el Diagrama de Despliegue.
La aproximacin de componentes UML est basada en la definicin original del lenguaje y organiza
el proyecto de acuerdo a 2 mbitos:
13
The Three Amigos: Booch, Jacobson y Rumbaugh, autores tambin del lenguaje de modelamiento UML.
165
Vista Lgica: En este mbito se describen los diagramas que representan lgica del
negocio y del sistema (Diagramas de Comunicacin, Clases Conceptuales y Secuencia).
Vista de Desarrollo: En este mbito se describen los diagramas que representan la vista
del programador y de administracin del software (Diagramas de Componentes y
Paquetes).
Vista de Procesos: En este mbito se describen los diagramas que representan los
aspectos dinmicos del sistema, a nivel de procesos y comportamiento de ste (Diagramas
de Actividades).
Vista Fsica: En este mbito se describen los diagramas que representan la visin del
ingeniero en sistemas sobre las capas fsicas y la comunicacin entre las componentes
(Diagramas de Despliegue).
APROXIMACIN PERSONALIZADA
La aproximacin personalizada no define mbitos ni modelos, sino que un proyecto vaco dejando
el trabajo de organizacin del proyecto al arquitecto. Es muy til cuando el arquitecto no se siente
cmodo con ninguna de las otras aproximaciones disponibles.
ANATOMA DE LA HERRAMIENTA
StarUML posee diferentes regiones en donde se muestra informacin. Estas regiones son las
siguientes:
14
Men Principal: Men de acciones del programa (File, Edit, Format, Model, View, Tools y
Help).
http://en.wikipedia.org/wiki/4%2B1_Architectural_View_Model
166
Explorador del Modelo (Model Explorer): Espacio para ver la organizacin del proyecto a
partir de la aproximacin seleccionada.
Explorador de Diagramas (Diagram Explorer): Espacio para ver los diagramas del proyecto
ordenados por tipo de diagrama.
Propiedades (Properties): Espacio que muestra las propiedades del proyecto, modelo,
diagrama o elemento seleccionado, dependiendo de su tipo.
Documentacin (Documentation): Espacio estilo bloc de notas para hacer anotaciones del
objeto seleccionado.
Salidas (Output): Espacio que muestra la bitcora de cambios que se van realizando
durante la modificacin del proyecto.
167
CREACIN DE DIAGRAMAS
Para crear un diagrama, ste debe ser incorporado a algn mbito del proyecto. Para ello se debe
seleccionar el mbito del proyecto, con el men Model o con el botn derecho, hacer clic en
Add Diagram y seleccionar el tipo de diagrama a realizar.
El resultado de esta operacin ser que se agregar bajo el mbito el nuevo diagrama del tipo
seleccionado y en el despliegue de la herramienta mostrar un lienzo en blanco para que se
comience a trabajar en l. Tambin existe un cambio en la barra de herramientas (Toolbox), la cual
cambia segn el tipo de diagrama seleccionado.
TIPOS DE DIAGRAMAS
Los diagramas bsicos que vienen con la versin 5.0 son los siguientes:
Diagrama de Clases
Diagrama de Estados
Diagrama de Actividades
Diagrama de Componentes
Diagrama de Despliegue
Diagrama de Robustez
168
Al lado izquierdo se encuentran los perfiles disponibles (C++, C# y EJB) y al lado derecho los que ya
tiene incorporados el proyecto (Java y UML). Se debe incorporar cada perfil seleccionando su
cono a la izquierda y usando el botn Include > quedaran automticamente incorporados.
Cabe destacar que la generacin de cdigo se realiza a partir de las clases de diseo del sistema,
por lo que es importante que se utilicen tipos de datos acordes al lenguaje en su definicin.
Si ambos factores son cumplidos, se puede generar el cdigo en el lenguaje. Esto se realiza con el
men Tools luego el lenguaje deseado y Generate Code, lo que abrir una ventana como la
siguiente:
169
Es necesario seleccionar la vista, modelo o paquete del proyecto que contiene la definicin de las
clases de diseo, y luego presionar Next >.
Luego se requiere seleccionar las clases o paquetes de clases que van a ser utilizadas para generar
el cdigo. Como la definicin de las clases queda asociada al elemento, los atributos y operaciones
de las clases tambin se ven amarradas a dicha definicin.
Adems, se debe seleccionar la carpeta en donde se desea guardar el cdigo y presionar la accin
Next >.
170
Finalmente, es necesario fijar algunas opciones de generacin y estilo, finalizando el proceso con
la accin Next >, lo que comenzar a generar el cdigo. Una vez iniciado el proceso de
generacin, StarUML construir las clases .java de todos los elementos seleccionados en el paso 2.
RECOMENDACIONES Y BUENAS PRCTICAS
Para completar esa gua, se puede decir que:
StarUML no apoya el proceso de generacin de los diagramas, sino que solo los permite
dibujar, lo que por supuesto es complejo para arquitectos poco experimentados. Por esta
razn es necesario que el arquitecto conozca su propia metodologa antes de dibujar los
diagramas.
Tal como se expresa en este apunte, los diagramas no lo son todo. StarUML permite
adjuntar archivos a los diferentes artefactos (por ejemplo, adjuntar los Casos de Uso en el
diagrama de CU lo que es recomendable hacer) para descripciones o artefactos de tipo
documento complementarios a los diagramas.
171
BIBLIOGRAFA
El material principal utilizado para estos apuntes es:
UML y Patrones
Craig Larman
Editorial Pearson Education
Manual de UML
Paul Kimmel
Editorial Mc Graw Hill
172
173
TABLA DE ILUSTRACIONES
Ilustracin 1. Notacin del Modelo de Objetos de OMT .................................................................. 19
Ilustracin 2. Notacin del Modelo Dinmico................................................................................... 20
Ilustracin 3. Notacin del Modelo Funcional .................................................................................. 22
Ilustracin 4. Iteraciones del Proceso Unificado de Desarrollo ........................................................ 23
Ilustracin 5. Fases del Proceso Unificado de Desarrollo ................................................................. 25
Ilustracin 6. Carga de Trabajo por Disciplina en el Proceso Unificado de Desarrollo ..................... 27
Ilustracin 7. Metamodelos Aplicados a la Metodologa .................................................................. 30
Ilustracin 8. Plantilla de Especificacin de Funciones ..................................................................... 40
Ilustracin 9. Continuacin de la Plantilla de Especificacin de Funciones ...................................... 41
Ilustracin 10. Plantilla de Especificacin de Funciones para el SPDV.............................................. 42
Ilustracin 11. Tabla de Identificacin de Actores y Objetivos ......................................................... 46
Ilustracin 12. Documento de Especificacin de Caso de Uso de Alto Nivel .................................... 46
Ilustracin 13. Documento de Especificacin de Caso de Uso Expandida ........................................ 47
Ilustracin 14. Notacin de los Diagramas de Casos de Uso ............................................................ 48
Ilustracin 15. Plantilla de Especificacin de Casos de Uso y Glosario ............................................. 49
Ilustracin 16. Diagrama de Casos de Uso del SPDV ......................................................................... 50
Ilustracin 17. Documento del Glosario............................................................................................ 50
Ilustracin 18. Glosario para el Problema del SPDV ......................................................................... 51
Ilustracin 19.Notacin de los Diagramas de Actividades ................................................................ 54
Ilustracin 20. Diagrama de Casos de Uso del SPDV ......................................................................... 54
Ilustracin 21. Diagrama de Actividades para el SPDV ..................................................................... 55
Ilustracin 22.Tabla de Identificacin de Clases conceptuales segn Categoras ............................ 57
Ilustracin 23.Anlisis de Clases conceptuales por Frases Nominales.............................................. 58
Ilustracin 24.Ejemplo de Asociacin de Clases conceptuales ......................................................... 59
Ilustracin 25.Tabla de Clasificacin de Multiplicidad ...................................................................... 60
174
178