Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4ota+ El nom!re y el tipo del atri!tuo noOfItems -as sido su!rayado para
representar el -ec-o de ue es un atri!uto de clase y no de instancia como
reuiere U(%. 4o o!stante# 2ose no trata esta notacin de U(%. Un atri!uto de
clase es especificado usando la pala!ra reservada static en el cuadro de
especificaciones. Un atri!uto declarado como esttico corresponde a una
varia!le de clase.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
F
Coo@Copy
Cdigo para atributos - Ejemplo
334ic$ero )uente 553Coo@Copy5$
class Coo@Copy 7
pri%ate"
String code9
pu(lic"
String sel)mar@9
String linGsite9
protected"
static Integer noO)Items9
CODIGO C++
Hcode"Li(raryCode
+sel)mar@"String
+li(Gsite"String
InoO)Items"Integer
Jaria(le de Clase
<ecir ue una asociacin en U(% es una relacin entre dos clases. Cada una
de ellas .uega un papel en la asociacin.
El cdigo por defecto generado en una asociacin en U(% consiste en
un campo por cada asociacin accesi!le. Este campo es generado en la
clase generada por C)) para implementar la cone0in con la case
asociada. El tipo del campo depende de la multiplicidad del papel de la
asociacin. ,i la cota superior de la multiplicidad es uno entonces la clase
en C)) es implementada con el tipo de la clase de la asociacin
apuntada. ,i la cota superior indica ue la multiplicidad es n entonces la
implementacin se reali*a como una lista. %a visi!ilidad del campo es
determinada por la visi!ilidad asociada al papel como en el caso de los
atri!utos.
Un ejemplo de cdigo generado por defecto en una asociacin es
mostrado en la transparencia superior.
El generador de cdigo C)) codifica el campo p5!lico book y el campo
privado publisher para representar los papeles de book y publisher de la
asociacin publication. El primer campo -a sido implementado con la clase
definida en C)) publisher. El campo posterior se -a definido en C)) con la
clase book. =!servar ue el tipo del campo book es una lista de identificadores
de tipo book ms ue un identificador 5nico. Esto -a sido necesario de!ido a
ue la multiplicidad del papel book es de ?..@.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
1<
Cdigo para asociaciones - Ejemplo
334ic$ero )uente 553?u(lis$er5$
class ?u(lis$er 7
pu(lic"
Klist Coo@ 9
?u(lis$er*, 78 89
CODIGO C++
?u(lis$er Coo@
+ (oo@
1556 1551
H pu(lis$er
pu(lication
334ic$ero )uente 553 Coo@5$
class Coo@ 7
pri%ate"
?u(lis$er pu(lis$er 9
pu(lic" ?u(lis$er*, 78 89
Cdigo para la asociacin entre clases
Los campos .ue posee la asociacin son declarados con su propio
tipo en la clase5
#na clase en C++ resuel%e la asociacin entre clases apuntando a las
clases de la asociacin5
La multiplicidad de los roles determina el tipo e!acto de los campos
pero
El generador de Eose no trata la asociacin de clases5
Cdigo para las asociaciones
#n campo por cada asociacin accesi(le desde la clase )uente de la
asociacin5
La %isi(ilidad de un campo es determinada por la %isi(ilidad
indicada en la asociacin5*p5 e25 Private, public, protected,
#n campo esttico es creado por cada asociacin a una %aria(le de
clase5
La multiplicidad de la asociacin es n si el tipo del campo es un
%ector de elementos cuyo tipo es la clase apuntada por la asociacin5
Para implementar la asociacin entre clases el generador de cdigo C))
de!er/a crear+
Una clase en C)) para implementar la asociacin.
%os campos de la asociacin como campos de la clase ue apuntan.
Campos por cada clase apuntada.
4o o!stante# esto no lo -ace. 2ose solamente genera una plantilla para la
asociacin entre clases. %a clase en C)) ue implementa la asociacin
no tiene campos apuntando a las clases asociadas. %os campos son
creados en la asociacin de clases para implementar la asociacin como
si no estuvieran enla*ados a una asociacin entre clases.
El e.emplo de la transparencia superior muestra el cdigo ue de!er/a
-a!er sido generado para una asociacin entre clases. El generador de cdigo
de!er/a crear una clase en C)) para implementar la asociacin de la clase
oan y los campos en esta clase apuntando a las clases de la asociacin oan&
ver campos borro!er y book en la clase oan'. Aam!in de!er/a -a!er creado
los campos en las clases de la asociacin apuntando a la implementacin de la
clase. & ver campo oan de la clase Borro!erClass'.
1dvertir ue el generador de C)) de 2ose no crea este cdigo. En el
caso de ue lo -iciera slo generar/a la plantilla de la clase en C)) de oan
& sin lo campos para la asociacin de oan'.# un campo llamado book en la
clase borro!er# y un campo llamado borro!er en la clase BookCopy.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
11
Ejemplo de cdigo para asociaciones
con clases asociacin
334ic$ero )uente 553CorroLerClass5$
class CorroLerClass 7
pu(lic"
Klist Loan9
CorroLerClass*, 89
Coo@Copy CorroLerClass
+ (orroLer
<551 <55n
+ (oo@
loan
334ic$ero )uente 553Coo@5$
class Loan 7
pu(lic"
CorroLerClass (orroLer9
Coo@Copy (oo@9
Loan*, 89
Loan
+ out" Date
+ due" Date
Para cada operacin de una clase en U(% el generador de C)) produce+
%a ca!ecera del mtodo en la clase C)) ue implementa la operacin.
%a declaracin del mtodo se !asa en la declaracin de la operacin.
El esueleto del cuerpo del mtodo. El fragmento de cdigo ue
implementa el mtodo lo codifica el programador.
%os comentarios se e0traen de la documentacin asociada a la
operacin.
%a visi!ilidad del mtodo generado depende de la visi!ilidad de la operacin# la
cual puede ser p5!lica# protegida y privada. %a visi!ilidad de estas operaciones
funciona de igual modo a la visi!ilidad de los atri!utos ya comentadas
anteriormente.
4otar ue el programador tiene ue definir las operaciones para acceder a los
valores de los campos privados y protegidos de la clase.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
12
Cdigo para las operaciones
La ca(ecera de un mMtodo se (asa en la declaracin de la operacin5
La %isi(ilidad del mMtodo depende de la %isi(ilidad de la operacin5*
por de)ecto" pB(lica *+,+ protegida *I, y pri%ada *H,,5
El cuerpo del es.ueleto del mMtodo5 *es necesario .ue sea
completado por el usuario+ suministrando el cdigo necesario,5
Comentarios e!tra-dos de la documentacin de la operacin5
00 entity class 11
Li(raryItem
Cdigo para operaciones - Ejemplo 1
334ic$ero )uente 553Li(raryItem5$
class Li(raryItem 7
Li(raryItem*,
36
Esta operacin se in%oca en un elemento de (i(lioteca
.ue puede ser prestado cuando el sistema reci(e
una peticin para anali&ar este elemento5
63
%oid c$ec@Out*String cardNum+ Date outDate,
8
CODIGO C++
+c$ec@Out*cardNum"String+ outDate"Date,
Esta operacin se in%oca en un elemento de (i(lioteca
.ue puede ser prestado cuando el sistema reci(
una peticin para anali&ar este elemento5
Como muestra la transparencia superior# el cdigo generado por el generador
de C)) para el mtodo c-ecB=ut&,tring card4um# <ate out<ate' para
implementar la operacin en U(% c-ecB=ut&card4um+,tring# out<ate+<ate'. %a
visi!ilidad de los mtodos fue declarada como p5!lica para implementar la
visi!ilidad de la operacin definida en el diagrama de clases. Aam!in# la
anotacin asociada con la operacin en el diagrama de clases fue
transformada en un comentario en C)) dentro del cdigo.
%a operacin estimate"enalty declarada por la clase a!stracta Borro!ableItem
tiene declarada una operacin a!stracta&en U(% una operacin a!stracta se
denota poniendo la letra en cursiva' El significado de esta operacin es el
clculo de la penali*acin ue el solicitante del prstamo de un li!ro tiene ue
pagar si no devuelve el prstamo cuando es de!ido. %a penali*acin depende
de la tasa de penali*acin diaria del tipo de o!.eto del prstamo & por e.emplo#
li!ros y autos .udiciales'# llevando cada uno un tipo de penali*acin distinta. %a
implementacin de la operacin estimate"enalty se reali*a en las su!clases de
la clase Borro!ableItem.
Consecuentemente# el mtodo estimate"enalty generado para la
implementacin de esta operacin en la clase Borro!ableItem es declarada
como un mtodo a!stracto y no posee el esueleto del cuerpo para introducir el
cdigo de la implementacin.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
1'
Cdigo para operaciones - Ejemplo 2
class Coo@Copy" pu(lic CorroLa(leItem 7
O
Eeal estimate?enalty*, 8
class ?roceedings" pu(lic CorroLa(leItem 7
O
Eeal estimate?enalty*, 8
class CorroLa(leItem 7
%irtual Eeal estimate?enalty*,;< 8
CODIGO C++
?roceedings
+ estimate?enalty*,7)inal8
Coo@Copy
+ estimate?enalty*,7)inal8
00 entity class11
CorroLa(leItem
+ estimate?enalty*,
(stract
%as dos su!clases de Borro!ableItem & en este caso BookCopy y
"roceedings' en la transparencia superior redefinen la operacin
estimate"enalty para indicar ue ellas proveen la implementacin y se declaran
con la marca final. & o euivalente a no polimrfica' Para implementar esas
operaciones# el generador de cdigo de C)) produce unas nuevas ca!eceras y
cuerpos para ellas en las su!clases BokkCopy y "roceedings. 4otar ue
am!os mtodos son marcados con la notacin final y su implementacin no
puede ser so!recargada por ninguna su!clase de las clases BokkCopy y
"roceedings.
En la transparencia superior# la clase Borro!ableItem tiene dos operaciones+
%a operacin reserve&until+<ate' y la operacin noOfItems&'+Integer.
%a operacin reserve&until+<ate' puede ser invocada por un o!.eto presta!le
para reservarlo durante un cierto per/odo de tiempo. Una reserva puede ser
-ec-a solamente si el o!.eto actualmente no est prestado y no tiene una
reserva previa ue se solape con el per/odo de reserva solicitado. ,i ms de un
flu.o de control puede invocar esta operacin al mismo o!.eto simultneamente
entonces es en estos casos cuando las reservas pueden solaparse. Para evitar
esto# la operacin es declarada como concurrente. ,e de!e o!servar ue en
U(%# la restriccin concurrente -a sido anotada .unto a la declaracin para
marcarla como concurrente. En C)) la concurrencia no es implementada.
%a operacin noOfItems&'+Integer puede ser invocada para contar los o!.etos
cuyas instancias de la clase Borro!ableItem -an sido creadas. Esta operacin
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
1/
Cdigo para operaciones - Ejemplo 3
class CorroLa(leItem 7
%oid reser%e*Date until,
static Integer noO)Items*,
8
CODIGO C++
00 entity class11
CorroLa(leItem
+ reser%e*until"Date,7concurrent8
+ noO)Items*,"Integer
Sync$roni&ed
Static
es declarada como una varia!le de clase & en U(% una operacin con una
operacin de clase se marca su!rayndola'. <e este modo el mtodo generado
en C)) es declarado como un mtodo esttico.
%a!oratorio de ,istemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
1: