Object Constraint Language
L'Object Constraint Language (OCL) és un llenguatge que permet definir expressions formals vinculades a elements de models UML. Aquestes expressions són bàsicament restriccions, regles de derivació i condicions.[1] OCL fou desenvolupat inicialment el 1995 per IBM i posteriorment es va integrar amb l'UML. OMG el va adoptar com estàndard el 1997.[2]
Elements principals del llenguatge
A continuació s'introdueixen mitjançant exemples els elements principals de l'OCL. Els exemples es basaran en el model UML de la figura. És un model molt simplificat d'un sistema de gestió d'inscripcions a esdeveniments.
Exemple 1: Invariant d'Esdeveniment

Un invariant és una restricció vinculada a una classe d'un model. La restricció ha de ser certa (o s'ha de satisfer) per cada instància de la classe.
En el model de la figura, un exemple d'invariant és:
context Esdeveniment inv:
self.nombreInscrits <= self.nombrePlacesOfertes
La primera línia indica que s'està definint un invariant (inv
) vinculat (context
) a la classe Esdeveniment. La restricció es defineix en la segona línia, i es tracta d'una condició que ha de ser certa per cada instància d'Esdeveniment.
El terme self
denota una instància del context (Esdeveniment en aquest cas). L'expressió self.nombreInscrits,
on nombreInscrits és un atribut d'Esdeveniment, denota el valor de l'atribut per a la instància self. Semblantment, l'expressió self.nombrePlacesOfertes
denota el valor de l'atribut nombrePlacesOfertes per a la instància self. La restricció indica doncs que, per cada esdeveniment, el nombre d'inscrits a l'esdeveniment no pot ser superior al nombre de places ofertes.
Exemple 2: Invariant d'Inscripcio
Una restricció molt freqüent és la que requereix que no hi hagi dues instàncies d'una classe que tinguin el mateix valor d'un dels seus atributs. En l'exemple de la figura això passa en la classe Inscripció, perquè no hi poden haver dues inscripcions que tinguin el mateix número. En OCL ho podem expressar així:
context Inscripcio inv:
Inscripcio.allInstances()->isUnique(numero)
L'expressió Inscripcio.allInstances()
denota el conjunt de totes les instàncies de la classe Inscripcio. L'OCL té diverses operacions que es poden aplicar a conjunts d'instàncies. L'aplicació es fa escrivint el símbol ->operació
a continuació del conjunt, En l'exemple, tenim ->isUnique(numero)
per indicar que s'aplica l'operació isUnique(numero)
al conjunt denotat per Inscripcio.allInstances()
.
L'operació isUnique(nom_atribut)
dona el resultat de Cert (true) si no hi ha dues instàncies del conjunt al qual s'aplica que tinguin el mateix valor de l'atribut nom_atribut, i el resultat Fals (false) en cas contrari. En l'exemple, ->isUnique(numero)
serà cert si no hi ha dues inscripcions que tinguin el mateix número.
Referències
- ↑ OMG «Object Constraint Language. Version 2.4». OMG Document Number: formal/2014-02-03, 2-2014.
- ↑ Cabot, Jordi; Gogolla, Martin «Object Constraint Language (OCL):A Definitive Guide». Lecture Notes in Computer Science, vol 7320. Springer, Berlin, Heidelberg, 2012.