Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Atributos
Conceptos
Asociaciones
Colecciones
Organizacin del modelo conceptual: estructural, asociativa, y
temporal
Invariantes
Construccin iterativa del modo conceptual
6.2 Atributos
Un atributo puede ser declarado con un valor inicial, es decir, cada vez que
se crea una nueva instancia del concepto, ese atributo recibir
automticamente un valor inicial definido, que se puede cambiar ms
adelante si es necesario. En el sistema Livir, una orden puede ser creado,
por ejemplo, con un valor total que es inicialmente cero. Esta puede ser
definida en el diagrama de clases, como se muestra en la Figura 6.4. La
definicin de un valor inicial para un atributo tambin se puede crear con el
uso del lenguaje de restriccin de objetos (OCL) (Object Management Group,
2010).
FIGURA 6.4 Una clase que muestra un atributo con un valor inicial
Context Order::totalValue
Context Order::totalValue:Money
Los atributos derivados tambin pueden ser definidos por las expresiones
OCL. 1 La expresin de nuevo tiene una clase como contexto y un atributo
como subcontexto. Esta es seguida por la palabra derive: esto indica que la
expresin que sigue, define cmo calcular el valor del atributo derivado. La
expresin del ejemplo de la Figura 6.5 define beneficio usando los valores
de otros dos atributos de la misma clase: beneficio=precio - costo.
Por ahora, podemos considerar que las expresiones OCL despus de las
clusulas tales como init: y derive: comienzan con una expresin que
denota una instancia del contexto de la clase. Esa instancia se conoce
por la palabra self.
Context Book::profit
derive:
self.price-self.cost
Context Book::profit
derive:
price-cost
En el contexto Libro, el precio y el costo no pueden ser otra cosa que los
atributos de libro. Entonces, la palabra self puede omitirse de la expresin.
El equipo puede y debe definir los tipos primitivos cuando se relacionan con
los atributos que tienen reglas de formacin, como en el caso del ISBN. Los
tipos primitivos pueden definirse como clases estereotipada <<primitive>>
como se muestra en la Figura 6.7.
Ese predicado puede ser utilizado en el constructor (el mtodo que crea
instancias de la clase) para garantizar que slo los nmeros ISBN vlidos
son creados. Recuerde que las clases conceptuales no tienen mtodos, pero
los tipos primitivos no son parte del modelo conceptual. Son, componentes
de bajo nivel reutilizables definidos por el usuario.
Aunque el valor del tipo primitivo tiene acceso pblico que est
normalmente aceptado a ser inmutable. Eso significa que el valor del tipo
primitivo puede definirse slo en tiempo de la creacin, y no se actualiza
despus. Esto es para que sea coherente con la idea de elementos de datos
primitivos como constantes, y no como objetos. Los objetos pueden cambiar
su estado interno, y las constantes normalmente no lo hacen. 4
4 Algunos lenguajes como Smalltalk permiten constantes para cambiar su valor en tiempo de
ejecucin, pero esto no suele ser el caso, y no se recomienda para la mayora de
aplicaciones.
6.3 Conceptos
Los conceptos son ms que los valores alfanumricos. Tambin son ms que
un montn de atributos, porque llevan significado y pueden estar asociados
entre s. Modelado conceptual puede comenzar con los conceptos y las
asociaciones solamente, como se muestra en la seccin 3.6, es decir, los
atributos no son necesarios de inmediato. Sin embargo, cuando se examina
en detalle, un concepto por lo general contiene un grupo coherente de
atributos.
FIGURA 6.8 Clase que muestra un atributo estereotipado como << nica >>
5 Un patrn de diseo que indica que una clase con una sola instancia puede ser accesible a
nivel global.
La clase controlador del sistema puede ser estereotipada con <<control >>
o dibujada usando (1994) el icono de Jacobson, como se muestra en la
Figura 6.9.
Figura 6.9 Una clase controlador de sistema
6.4 Asociaciones
Cuando los conceptos complejos estn relacionados, se dice que hay una
asociacin entre ellos. Las asociaciones suelen ocurrir slo entre dos
conceptos, pero tambin se pueden definir entre tres o ms conceptos.
Tambin puede haber asociaciones reflexivas entre instancias de la misma
clase. Por ejemplo, la asociacin que une a los padres a hijos se define como
una asociacin reflexiva de persona a persona.
Cuando las clases estn asociadas, entonces sus instancias pueden estar
enlazadas. Por ejemplo, una orden est enlazada a los libros que se orden,
y tambin al cliente que crea la orden. Un pago, si es que existe, est
vinculado a un orden en el ejemplo de la librera.
Por otra parte, los casos de uso de texto de a menudo mencionan las
operaciones que no son exactamente asociaciones estticas. Las
operaciones como comprar de libros, o hacer una reserva, son
transformaciones dinmicas sobre datos. Podran producir conceptos
para representar su existencia, pero por lo general representarlas como
asociaciones no son adecuados. Es necesario tener en cuenta la diferencia
entre las asociaciones (esttica) y operaciones (dinmicos):
Una asociacin es una relacin esttica que pueda existir entre los
conceptos complejos, complementando la informacin acerca de ellos en
un momento dado (una instantnea de su estado), o se refieran a la
nueva informacin asociativa (por ejemplo, vecino o los padres / hijos).
Una operacin es el hecho de acceder y transformar la informacin
existente.
1 exactamente uno
0,* cero o ms
Los lmites de multiplicidad que incluyen cero representan roles que son
opcionales para un concepto. Todos los otros lmites son obligatorios.
La Figura 6.15 muestra un ejemplo donde una persona puede tener una
flota con un nmero indeterminado de carros (opcional), y una persona
puede ser conductor de un carro como mximo (tambin opcional). Por otro
lado, muestra que un carro debe tener un nico propietario (obligatorio) y
que puede tener un conductor o no (opcional).
Tan tiles como los atributos derivados son las asociaciones derivadas, es
decir, las asociaciones que en lugar de ser representados fsicamente se
calculan a partir de la informacin disponible. Por ejemplo, supongamos que
a menudo es necesario saber qu libros ha comprado un determinado
cliente en el sistema Livir. Como los libros no estn vinculados directamente
al cliente en el modelo conceptual, referirse a esa informacin podra ser un
poco ms complicado de lo esperado. La Figura 6.16 muestra un ejemplo de
cmo un modelo conceptual para Livir podra relacionar libros y clientes
indirectamente a travs de los pedidos y la compra de artculos; en este
caso, el conjunto de todos los libros comprados por un cliente sera referido
como el conjunto de libros vinculados a los artculos vinculados a las
rdenes vinculadas al cliente.
FIGURA 6.16 Un cliente indirectamente asociado a libros.
Tenga en cuenta que con este modelo no existe un vnculo directo entre el
cliente y los libros que ya se ha comprado. La creacin de una nueva
asociacin lineal entre el Cliente y el Libro no sera una buena solucin, ya
que sera redundante con el modelo, segn el conjunto de libros se puede
obtener de forma indirecta. Por otra parte, una nueva asociacin entre el
Cliente y el Libro podra asociar cualquier cliente con cualquier libro, no slo
los que ya fueron comprados por el cliente a travs de sus rdenes. Este
modelo permite la representacin de informacin inconsistente, lo que
requerira algn mecanismo de control (por ejemplo, permitiendo que slo
los libros que fueron comprados puedan ser asociados con el cliente).
Una solucin de modelado para ese caso, cuando es relevante tener acceso
directamente a una coleccin de objetos que ya se pueden derivar de la
informacin existente, es utilizar una asociacin derivada, tal como se
representa en la Figura 6.17.
A diferencia de las asociaciones normales que permiten los enlaces entre los
objetos individuales que se agregan y se quitan, una asociacin derivada
slo puede ser consultada (similar a los atributos derivados, que slo se
leen).
Una asociacin derivada puede ser definida tambin por una expresin OCL.
El ejemplo de la Figura 6.17 puede ser definido como
7 De hecho, en OCL, incluso un solo objeto se considera una coleccin con un solo elemento.
Esto es equivalente a la nocin natural de un conjunto, pero no a la nocin matemtica,
porque en la teora de conjuntos, un conjunto con un elemento no es el elemento. En OCL un
conjunto con un elemento y el elemento son la misma cosa.
Context Livir::goldCustomer
derive:
self.customer->select (aCustomer|aCustomer.totalSales>1000)
9 "Una asociacin puede representar una agregacin compuesta (es decir, en su conjunto la
relacin/part). Slo las asociaciones binarias pueden ser agregaciones. Agregacin
Compuesta es una forma fuerte de agregacin que requiere ser incluida una instancia de la
parte en a lo sumo un compuesto a la vez. Si se elimina un compuesto, todas sus partes
normalmente se eliminar con l. Tenga en cuenta que una parte puede (donde sea
permitido) ser retirado de un material compuesto antes de que se elimina el compuesto, y
por lo tanto no se puede eliminar como parte del compuesto. Las composiciones pueden
estar relacionados en un grfico dirigido acclico con caractersticas de delecin transitivo; es
decir, la eliminacin de un elemento en una parte de la grfica tambin se traducir en la
eliminacin de todos los elementos de la grfica sub debajo de ese elemento "(Object
Management Group, 2011).
La multiplicidad del role que representa el compuesto (el lado donde esta el
diamante), en el caso de una agregacin compuesta, debe ser de 1 o 0..1, y
nada ms, ya que los compuestos no comparten partes, incluso con objetos
de la misma clase.
Sin embargo, existe una diferencia semntica sutil entre los modelos en las
figuras 6.21 y 6.24. En el caso de la Figura 6.24, puede haber dos o ms
instancias Gastables con exactamente la misma partida presupuestaria,
ejercicio financiero y proyecto. Esto no puede suceder en el caso de la
Figura 6.21. As, por esta simplificacin a tener la misma semntica que la
asociacin ternaria, es necesario complementarlo con un invariante (ver
seccin 6.7).
6.5 Colecciones
Por lo tanto, a menos que la flota tenga sus propios atributos o asociaciones
(por ejemplo, una persona que tiene mltiples flotas ubicadas en diferentes
lugares) la forma correcta de representar una simple coleccin de objetos es
a travs de un rol de asociacin, no a travs de una clase (Figura 6.26).
FIGURA 6.26 Un modelo ms sencillo para la situacin presentada en la
Figura 6.25.
Los tipos de datos concretos, por otro lado, son implementaciones fsicas
para las versiones abstractas. Por ejemplo, una lista puede implementarse
en muchas formas, tales como una matriz, rbol binario, lista enlazada, etc
6.5.1 Set
6.5.3 Bag
Por ejemplo, uno puede necesitar saber cuntas personas vieron los detalles
de un libro, y puede ser importante tambin saber cuntas veces cada uno
lo ve. No es necesario conocer quienes vieron primero, pero la informacin
sobre el nmero de vista es necesaria. Este es un caso tpico de uso de una
bolsa. Cada vez que una persona ve los detalles de un libro, se aade un
nuevo eslabn en la asociacin que se define como una bolsa. El modelo se
muestra en la Figura 6.28.
6.5.4 Secuencia
6.5.5 Mapa
El rol en el lado izquierdo (el lado calificador) est marcado con "1", lo que
significa que cada libro tiene un solo ISBN, no menos o ms. Esto tiene que
ser necesariamente cierto, porque un ISBN es nico y no es opcional para la
clase de libro, y por lo tanto, es obligatorio y no permite la repeticin.
6.5.6 Particin
La Figura 6.32 establece que para cada valor particular de gnero hay un
conjunto de libros (con cero o ms elementos). El papel multiplicidad 1 en el
lado izquierdo indica que cada libro tiene un gnero.
6.5.7 Relacin
10 Slo trate de buscar en Google para las imgenes con las palabras clave "UML" y
"herencia." Usted ver un montn de ejemplos de mal uso de la herencia, como, por
ejemplo, la persona como una generalizacin del estudiante y el profesor.
Por lo tanto, una de las razones para usar la herencia es cuando hay algunas
propiedades similares (atributos, asociaciones, o mtodos) en diferentes
clases, que se pueden factorizar (agrupar) en una construccin abstracta,
tal como una superclase.
FIGURA 6.35 Dos clases que se generalizan por una clase abstracta.
FIGURA 6.42 Una reserva est modelada como una clase de asociacin.
Entonces, ella recibe una beca y se crea un nuevo registro. Entonces, ella
trabaja en un laboratorio, y se ha registrado de nuevo. Por ltimo, es
contratada como profesora y se crea un nuevo registro. Ella aparece muchas
veces en los registros de la universidad, como si fuera diferentes personas.
Sus viejos discos se convierten fuera de fecha; direcciones y nmeros de
telfono por lo general slo se actualizan en los registros ms recientes.
Esto sucede porque en estos casos los sistemas suelen utilizar la herencia
(Figura 6.43), o registros completamente separados (Figura 6.44).
Las clases modales son usadas para modelar conceptos con instancias que
pueden cambiar de un estado a otro durante su existencia, cambiar,
posiblemente, la estructura de sus propiedades, incluyendo atributos,
asociaciones y comportamiento. Aunque algunos lenguajes de programacin
permiten instancias a cambiar su estructura, cambiando su clase, esto no se
asume como un principio de modelado debido a que tales cambios pueden
crear problemas estructurales impredecibles.
Otra solucin que no es muy agradable, pero sigue siendo muy popular,
consiste en crear una clase Factura y permitir que ciertos atributos sean
nulos hasta que la clase cambia de estado, como se muestra en la Figura
6.49. Por lo general, la verificacin de la consistencia de la instancia se hace
en los mtodos de actualizacin. Pero un invariante tambin podra ser
utilizado (como se explica en la Seccin 6.7) para garantizar que ninguna
instancia alcanza un estado no vlido, como, por ejemplo, con un
paymentDate definido y null paidValue.
FIGURA 6.49 Manera inadecuada para modelar una transicin montona
creciente con una nica clase y atributos nulos.
Este modelo todava no es bueno, ya que genera una clase con baja
cohesin, que tiene, en consecuencia, las reglas de consistencia complejas
que deben revisarse con frecuencia. Este tipo de clase es altamente
susceptible a errores de diseo y programacin.
1. Inicialmente, un cliente potencial hace una reserva que indica los das en
que tiene la intencin de llegar y salir, el tipo de alojamiento, y el
nmero de personas. El hotel ofrece la tarifa.
2. Cuando los cheques de clientes en la fecha de llegada se ha registrado
(puede ser la misma fecha de la reserva o una fecha diferente). El hotel
asigna una habitacin que puede ser diferente del inicialmente
reservado y, si este es el caso, se informa al husped de la nueva tarifa.
La fecha prevista de salida sigue existiendo, aunque se puede actualizar
durante la estancia.
3. Cuando el cliente paga, la fecha prevista de salida deja de existir y la
fecha de salida efectiva se ha registrado, y la factura tiene que ser
pagado.
6.7 Invariantes
Context Order::totalValue:Money
derive:
self.item->sum(anItem|anItem.subtotal)
El precio del artculo tiene un valor inicial definido como el precio del libro
que est vinculado al artculo:
Contexto de artculo :: Precio: Dinero
init:
self.book.price
Ahora, si hay una restriccin que establece que ninguna orden puede tener
un valor total superior a 1.000 dlares, no sera posible a que la represente
en el papel multiplicidad, como se hace en la Figura 6.54.
Context Orden
inv:
self.totalValue <= 1,000
FIGURA 6.56 Un modelo que necesita una restriccin adicional para ser
consistente.
Para garantizar que un estudiante slo puede tomar cursos relacionados con
su propia carrera un invariante como la siguiente debe ser proporcionado:
Context Estudiante
inv:
self.course.career = self.career
En la Figura 6.59, casi todos los conceptos son dependientes. Por ejemplo,
una entrega depende de un pedido, la confirmacin depende de una
entrega, y as sucesivamente. Slo Editorial, Libro, y Cliente son conceptos
independientes y los candidatos a ser gestionados por los casos de uso
CRUD.
Los conceptos que son administrados por los casos de uso CRUD son
generalmente los que se pueden acceder directamente cuando se recupera
informacin de un sistema. Aunque la adicin de la clase controlador -
fachada para el modelo podra esperar por las actividades de modelado de
diseo (Captulo 9), se puede aadir ahora para indicar que conceptos son
los independientes. En principio, slo los conceptos independientes tienen
enlaces obligatorios a la clase controlador. Estar vinculado a la clase del
controlador significa que las instancias de la clase se pueden acceder
directamente. Por ejemplo, una instancia de libro se puede acceder
directamente por su ISBN.
Cuando uno afirma que una persona puede ser propietario de un carro, esa
informacin debe ser representada por una asociacin. Muchos
profesionales que trabajan con la programacin, pero no de modelado
podra producir modelos similares a la presentada en la Figura 6.61. Sin
embargo, esto no es adecuado, porque (primero) los atributos no deben
tener conceptos como tipo, y (segundo) el modelo disfraza una asociacin
real.
FIGURA 6.64 Flujo principal del caso de uso 02 Pagar libros con conceptos
candidatos y atributos identificados.
Contexto Orden
inv:
self.customer.address->Includes (self.address)
and
self.customer.creditCard ->Includes (self.creditCard)
Observe que invirtiendo ese orden dejara para las iteraciones finales la
insercin de muchas clases y atributos, y esto requerira una gran cantidad
de retrabajo en el diseo, y que posiblemente se necesitar una
arquitectura de refactorizacin con el fin de adaptarse a esas necesidades.
Es por eso que es tan fundamental para iniciar el proyecto con los casos de
uso ms complejos y slo ms tarde incorporar los ms simples en la
arquitectura.
2. What is the purpose of the controller class? What is its relation with
dependent and independent concepts?
3. Why should an attribute not be typed with a class name? Why should an
attribute not be used to reference another class?
4. Elaborate a list of concepts and subconcepts (subtypes of the original
concept, as, for example, dog and beagle) from common sense. Then,
try to identify the type of each relation: structural, associative, or
temporal. Try to have at least one example of each type in your list.
5. What is the difference between a normal association, an aggregation,
and a composition?
6. List some examples of data types that could be defined as primitive.