You are on page 1of 11

OCL

Object Constraint Language

OCL: Object Constraint Language


Amlcar Domingos Rodrigues Santy Fernandes, Girson Csar Silva Monteiro, Rui S Guerra, Simo
Castro
Faculdade de Engenharia da Universidade Do Porto, Rua Dr. Roberto Frias,
s/n 4200-465 Porto, Portugal
ei99079@fe.up.pt, ei01095@fe.up.pt, ei03096@fe.up.pt, ei04100@fe.up.pt

1-Resumo
Trabalho de pesquisa sob tema proposto Object Constraint Language, abreviado OCL,
elaborado no mbito da disciplina de Engenharia de Software, de Faculdade de Engenharia da
Universidade do Porto.
Neste trabalho, so abordadas as valncias desta linguagem formal, a sua aplicabilidade em
diferentes ferramentas de especificao de modelos, tidas como plataformas de apoio no
desenvolvimento de sistemas de aplicao, com base na Programao Orientada aos Objectos.
O trabalho est dividido em trs partes:
- na primeira parte feita uma breve introduo dos temas e sub temas a desenvolver
(Objectivos), bem como uma descrio sucinta da linguagem acima referida, o seu uso para
especificao e restrio em modelos, a converso de restries de linguagem natural para OCL, e
finalmente, o paradigma de implementao que utilizada nesta linguagem, como forma de
especificao em modelos;
- na segunda parte, abordada a arquitectura do OCL, casos prticos da sua utilizao nos
sistemas. ainda tratada nesta parte, a anlise gramatical da linguagem ao nvel do lxico e da
sintaxe. Outras referncias com aplicao prtica, como implementao do dicionrio de dados,
tradutores para o OCL, assim como a sua livraria standard, tambm so aqui abordados.
- na terceira parte, temos exemplos de traduo com ilustraes, tabelas de comparao, e
finalmente as ferramentas.
Presume-se assim, com o desenvolvimento destes temas elaborados, esgotar os objectivos
preconizados para este projecto de pesquisa. Na ltima pgina so dadas as referncias dos
materiais consultados na sequncia da pesquisa.

LEIC

Engenharia de Software Object Constraint Language


1

OCL
Object Constraint Language
2-Objectivos
O OCL uma ferramenta utilizada para a especificao de restries na modelao dos
diagramas arquitectados em UML.
Um diagrama UML por conseguinte, tal como um diagrama de classe, no suficientemente
refinado para fornecer todos os aspectos relevantes de uma especificao. H entretanto uma
necessidade de definir restries adicionais sobre objectos no modelo.
Da a tentao de sempre descrever essas restries em linguagem natural. Contudo, a prtica
demonstrou que esse mtodo de descrio das restries, tem resultado sempre em ambiguidades.
Para resolver, obstante, esses problemas de ambiguidades, tem-se recorrido s linguagens de
especificao formal como OCL, justamente para solucionar tais problemas. Baseando-se na
especificao de objectos em modelos, ou nas classes, de forma segura e concisa, sem
ambiguidades. Neste trabalho, como j supracitado, demonstrado a aplicabilidade dos padres
de escrita dessas restries, na linguagem OCL. O projecto est estruturado em trs partes, j
referido anteriormente, cada uma dividida em sub temas onde so abordados aspectos
relevantes do uso da linguagem OCL. Como seguem:

Introduo ao OCL: aborda as valncias da linguagem, a sua origem e a aplicabilidade


para os modeladores a UML, a importncia do seu uso nas definies formais das
restries.
Descrio da Linguagem OCL: aborda casos especficos da utilizao da linguagem
quanto a definio de modelos UML; bem como a especificao dos invariantes.
Motivao: aborda o uso do OCL para especificao e restries; a converso de
restries de linguagem natural para OCL.
Implementao com OCL: aborda caractersticas do OCL quanto ao contexto,
expresses, tipos de restries e de operaes, processos de implementao, e uso de
expresses OCL em modelos UML.
Arquitectura do OCL: aborda a parte estrutural e semntica da linguagem, o dicionrio
de dados, a gramtica que engloba tambm o nvel lxico e sintctico; descrio da
semntica utilizando UML; elementos bsicos do OCL e livraria standard; e tradutor e
exemplos de traduo para OCL.
Ferramentas: aborda diferentes ferramentas onde a OCL se pode aplicar as valncias do
OCL.
Consideraes: esboa as valncias do OCL como uma linguagem formal, e suas
vantagens na especificao dos modelos.

3-Introduo ao OCL
A Linguagem de Restrio de Objectos, abreviado OCL (Object Constraint Language), uma
linguagem formal, utilizada para descrever expresses em modelos de UML. Essas expresses
definem tipicamente as condies que se deve assegurar para o funcionamento de um sistema que
est a ser modelado, ou ainda, de modelao de informaes contidas nos objectos descritos num
determinado modelo.
Quando uma expresso OCL avaliada, no tem qualquer efeito colateral, isto , no pode
alterar o estado de execuo do respectivo sistema. As expresses do OCL podem sim ser

LEIC

Engenharia de Software Object Constraint Language


2

OCL
Object Constraint Language
utilizadas para especificar as restries de operaes ou aces de um determinado objecto, que
quando executadas alteram o estado do sistema.
Os modeladores de UML podem utilizar o OCL para especificao de restries nas aplicaes
definidas nos modelos correspondentes. Os modeladores podem ainda recorrer OCL, para
especificar perguntas ou definir condies que so completamente diferentes de uma linguagem
de programao.
As expresses do OCL no interfiram na execuo do programa. No so compilados aquando
da execuo do programa. Embora existam ferramentas para a verificao e compilao das
expresses descritas em linguagem OCL. Mais a frente abordaremos em mais detalhe essas
ferramentas.

O OCL entre outras pode ser utilizada:

Para especificar invariantes em classes e tipos do modelos de classes.


Especificar tipos invariantes para esteretipos.
Descrever pr e ps condies em operaes.
Como uma linguagem de navegao entre associaes.
Como uma linguagem de pergunta.
Para descrever protectores.
Para especificar o alvo das mensagens e aces.
Para especificar regras de derivaes para atributos.
Especificar restries sobre operaes.

4-Descrio da linguagem
OCL uma Linguagem Formal utilizada para definir restries sobre objectos. Tais restries,
especificam condies que tem de se verificar no sistema modelado.
OCL no uma linguagem de programao. antes de mais, uma linguagem de modelao
com regras de sintaxe e semntica bem definidas, e expressa informaes que no existem nos
modelos.
Por exemplo, um diagrama de UML, tal como diagrama de classe, no suficientemente
refinado para fornecer todos os aspectos relevantes de uma especificao. H entretanto, a
necessidade de definir restries adicionais sobre objectos nos modelos. Essas restries so
descritas frequentemente na linguagem natural, que apresentam sempre resultados ambguos,
quanto s informaes dos objectos. Para acabar com essa representao ambgua de informao,
foram desenvolvidas linguagens formais So-Called. A desvantagem dessas linguagens formais
tradicionais, que so acessveis s pessoas com uma base matemtica muito forte, mas no aos
utilizadores mdios de um sistema de modelao.

LEIC

Engenharia de Software Object Constraint Language


3

OCL
Object Constraint Language
Em virtude dessa desvantagem, foi desenvolvido o OCL, justamente para facilitar a tarefa de
definio das restries, e tambm de dotar as linguagens formais de uma utilizao flexvel e
mais acessvel. uma linguagem fcil de ler e de escrever.
OCL foi desenvolvido em 1995 por Jos Warmer, como uma linguagem de business modelling
(modelao de negcio). Em 1996, o OMG fez um Request for Proposals em anlise e desenho
OO. E em 1997 a IBM e a Object Time Limited em colaborao com os parceiros da Unified
Modelling Language (UML), publicaram as verses: O OCL 1.3 de 1999; O OCL 1.4 de 2001; e
actualizaram a linguagem em 2004 com a verso OCL 2.0.
O OCL consequentemente, garante que as suas expresses no tenham efeitos colaterais, isto
, no altera o estado do objecto. Quando uma expresso OCL avaliada, retorna apenas um
valor.
Para cada classificador (sejam classes, interfaces) definido dentro do UML, corresponde a um
tipo OCL. A linguagem tambm define os seus tipos. Mais a frente apresentada uma tabela com
todos os tipos definidos em OCL.

5-Motivao
A importncia prtica das regras da linguagem OCL, quanto a implementao das
especificao de restries e definies das derivaes em modelos, requer um controle
estruturado e disciplinado, que garanta que tais regras estipuladas, se vo verificar em qualquer
circunstncia durante o desenvolvimento do programa que as utiliza.
Para esse efeito, so desenvolvidas ferramentas para a modelao das expresses e
interpretadores para o OCL, assim como um compilador para as expresses do OCL. Interfaces
que viabilizem, por outro, a utilizao de tcnicas de processamento de linguagem natural para
base de dados. Essas ferramentas so capazes de lidar com restries sobre dados estabelecidos
atravs das expresses do OCL. Como exemplo, escolhemos trs ferramentas para melhor ilustrar
o que descrevemos acima. Como seguem: Atenas; Hermes; OCLE.

LEIC

Atenas: um sistema modelador de regras de negcio, que permite a sua captura e


implementao; todas as restries sobre modelos de classe devem ser encaradas como
regras de negcio, mesmo as mais simples; regras de negcio muito simples em geral,
podem ser mapeados directamente como restries de modelo.
Hermes: um tradutor para OCL; traduz uma restrio estabelecida numa sentena em
portugus, e tenta gerar a expresso em OCL, que representa essa restrio dentro de um
modelo de classe.
OCLE: compilador do OCL, permite ao modelador apurar correco da sintaxe e a
semntica de expresses OCL; faz uma avaliao de restries especificadas pelo
modelador, em diferentes elementos do modelo; ajuda a corrigir erros nos modelos e nas
especificaes OCL.

Engenharia de Software Object Constraint Language


4

OCL
Object Constraint Language
5.1-Uso de OCL para a especificao e restries
Vamos propor para a anlise deste tema, a integrao das ferramentas acima referidas, neste
caso Atenas e Hermes, em linguagem OCL, na definio das regras de restries sobre um
determinado modelo de classes ou de um Sistema de Gesto de Base de Dados.
A ideia bsica de Atenas, de uma ferramenta que serve como uma base formal para a
documentao das regras de negcio de um sistema de informao.

Uma vez que as restries estejam estabelecidas em OCL, o Atenas capaz de detectar na base
de dados, os eventos que podem vir a violar essas restries, como por exemplo, a insero de um
registo, alterao de valor de uma coluna ou remoo de um registo.
O sistema tambm capaz de gerar um cdigo especfico para detectar e impedir violaes,
gerando tiggers que verificam a validade de restrio no evento correspondente. Tudo isso feito
automaticamente atravs de uma expresso em OCL, e do mapeamento entre um modelo de
classes e o esquema da base de dados relacional. E para cada expresso em OCL, so mantidas a
informao sobre a restrio em si, tais como a sua origem, aplicabilidade, histrico e etc.
Neste contexto, o Hermes traduz uma restrio estabelecida numa sentena em portugus, e
tenta gerar a expresso OCL que representa essa restrio dentro de um modelo de classe. Caso a
expresso seja gerada correctamente, o Hermes activar cdigo correspondente do Atenas que ir
gerar cdigo da respectiva linguagem de programao (por exemplo SQL) para fazer a avaliao
das regras.
Para Atenas, as regras de negcio esto divididas em trs grupos: regras extradas
automaticamente do esquema do banco de dados, regras registadas manualmente pelos
utilizadores e regras inferidas automaticamente a partir das outras duas. A ferramenta possui
funcionalidade para lidar com estes trs tipos de regras. De acordo com o que j definimos em
cima, especificamos em concreto as funcionalidades disponibilizadas pela ferramenta:

LEIC

Validar o sistema: uma vez que todas as regras de negcio estejam estabelecidas numa
linguagem formal, possvel gerar a lista de eventos do sistema (insero, alterao, )
onde os mesmos so gerados.
Validar os Dados Legados: assegurar a integridade e a qualidade dos dados, aquando da
implementao de um novo sistema, em substituio do anterior.
Auxlio para a Extraco das Regras do Negcio: um sistema que estruture as regras de
negcio de forma independente, as mensagens do erro so as prprias regras de negcio.
Manuteno do Sistema: a ferramenta permite analisar o impacto de mudanas em regras
de negcio, atravs do relatrio do impacto duma mudana ocorrida em alguma regra de
negcio.

Engenharia de Software Object Constraint Language


5

OCL
Object Constraint Language

RegraOCL

Esquema

Compilador

ListadeEventos

Formal Triggers

CdigoemSQL

Informal Updates

Fig. 1. Esquema de avaliao do impacto de alterao de Base de Dados

5.2-Converso de restries de Linguagem Natural para OCL

Escrever restries sobre um modelo de classe utilizando OCL, no uma tarefa trivial para
no programadores. necessrio ter um conhecimento sobre o modelo de classes, mesmo sendo
uma linguagem declarativa.
O OCL no uma linguagem trivial. O OCL uma linguagem formal, com as regras de sintaxe
e semntica bem distintas da linguagem natural. O sistema Hermes, escolhido neste trabalho de
pesquisa para exemplificar o funcionamento da linguagem, permite que no programadores
descrevam restries utilizando linguagem natural, em portugus, e as transformam em OCL e
depois passado para linguagem de programao. Durante o processo, as eventuais ambiguidades
presentes no discurso humano, so eliminadas.

LEIC

Engenharia de Software Object Constraint Language


6

OCL
Object Constraint Language
H trs cenrios onde a utilizao do Hermes apresenta vantagens bvias.
Um cenrio seria a formalizao de regras de negcio ou restries durante a etapa de anlise,
atravs da captura em linguagem natural e posterior converso em OCL.
A esta altura, no necessrio que o modelo de classes esteja muito estvel de qualquer
forma o sistema suporta pequenas evolues. Quando o modelo estiver mais estvel as regras
escritas em linguagem natural podem ser ento transformadas em OCL e finalmente quando o
modelo relacional estiver pronto elas sero convertidas em cdigo SQL (queries e triggers) para
verificarem e manterem a integridade das regras.
Dessa forma possvel documentar as regras de negcio nas etapas iniciais da anlise,
utilizando linguagem natural e estabelecendo as regras com um mximo de independncia do
modelo de dados de implementao.
Um outro cenrio possvel a existncia de dados legados que devem ser filtrados ou avaliados
quanto obedincia as regras de negcio ou outras restries.
Como em geral o nmero de restries a serem testadas grande torna-se mais fcil estabeleclas em linguagem natural. Alm disso, as restries no fundo so as mesmas, independentemente
do esquema dos dados. Portanto, elas podem ser estabelecidas uma nica vez, testada contra os
dados legados, e o tratamento adequando providenciado.
Aps a migrao para um novo esquema, as mesmas regras so novamente traduzidas para
OCL (possivelmente diferente do anterior) e compiladas para o SQL apropriado a nova base.
Finalmente, podemos ter tambm a situao onde um analista de negcios est a investigar a
validade de determinadas regras de negcio, realizando uma prospeco de conhecimento numa
base de dados j existente. Assim, ao invs de restries teramos suposies sobre os dados, tais
como os pedidos com peso acima de 50 kg pagam transporte maior que 40,00 Euros e o tempo
de entrega maior que 7 dias, onde o tempo de entrega a data de entrega menos a data do
pedido.
Aps o analista de domnio ou negcio elaborar uma suposio, o sistema Hermes a
transformaria em OCL e depois em SQL, e investigaria a validade da mesma na base de dados,
retornando o registos processado em acordo ou desacordo com a regra. Embora esse tipo de
prospeco seja manual, um facto geralmente aceite que boas descobertas de conhecimento em
bases de dados podem ser realizadas por especialistas do negcio que sabem ou tm uma boa
noo do que devem procurar.

6-Implementao de Contrato com OCL


Nesta parte esto representados os contratos do sistema. Em orientao a objectos, o contrato
descreve de forma clara e unvoca as obrigaes de um objecto, sendo que este executar seus
servios (obrigaes) mediante o cumprimento de certas regras estipuladas (direitos ou condies
iniciais sob as quais o servio ser prestado). O contrato est relacionado definio da interface
de um objecto. Difere do contrato legal por no necessitar de um cliente.

LEIC

Engenharia de Software Object Constraint Language


7

OCL
Object Constraint Language
Em seguida apresentamos dois exemplos de contratos:

Contrato para fornecerDinheiro:

Name: fornecerDinheiro(dinheiro:Moeda)
Responsibilities: Fornecer dinheiro mquina de bebida. Atualizar contagem da quantia de
dinheiro fornecida pelo cliente. Exibir bebidas disponveis.
Type: System
Cross References: R2.1
Notes:
Exceptions:
Output:
OCL Specification:
context Sistema::fornecerDinheiro(dinheiro:Moeda)
pre:dinheiro.valor=1.0
post:
maquinaDeBebida.carteiraDoCliente@pre->size=0 implies
maquinaDeBebida.carteiraDoCliente->size=1 and
maquinaDeBebida.carteiraDoCliente.oclIsNew=true
post:
maquinaDeBebida.carteiraDoCliente.oclIsNew=true implies
maquinaDeBebida.carteiraDoCliente.itemDeRepositorioDeDinheiro
>size=1 and
itemMaisRecente(maquinaDeBebida.carteiraDoCliente).oclIsNew=true
post:if itemMaisRecente(maquinaDeBebida.carteiraDoCliente).oclIsNew
then
itemMaisRecente(maquinaDeBebida.carteiraDoCliente).moeda=dinheiro and
itemMaisRecente(maquinaDeBebida.carteiraDoCliente).quantidade=1
else
itemMaisRecente(maquinaDeBebida.carteiraDoCliente).quantidade=
itemMaisRecente(maquinaDeBebida.carteiraDoCliente@pre).quantidade+1
endif

6.1-Tipos de Restries em OCL

Expresses
Contexto de uma expresso:
As expresses OCL requerem que as restries estejam ligadas a um contexto de um
modelo. O contexto de uma expresso pode ser uma classe de objectos ou pode ser uma
operao aplicvel a um objecto. Para representar um contexto em OCL utilizamos a palavra
reservada
context <contexto>

LEIC

Engenharia de Software Object Constraint Language


8

OCL
Object Constraint Language

Invariantes (inv): condio (ou predicado) que se aplica a TODAS as classes (ou tipo ou
interface ou associao e etc)
Pr-condio (pre): condio que deve ser satisfeita antes da execuo de uma operao
Ps-condio (post): condio que deve ser satisfeita aps a execuo de uma operao
Guarda: condio que deve ser satisfeita para que uma transio de estado seja efectuada
As restries aqui colocadas foram retiradas dos contratos expressos na anterioriormente.
Exemplos de invariantes:
context Cliente
inv: idade > = 18 and self.idade < 100
context c: Cliente
inv CasamentoLegal: c.casado implies c.idade > = 21
CasamentoLegal identificador do invariante
c objecto
casado - atributo

7-Ferramentas
Neste captulo falamos das ferramentas que tornam a linguagem OCL mais fcil de ser usada.
Em baixo esto enunciados algumas das mais recentes ferramentas dessa linguagem.
ModelRun (Boldsoft)
ModelRun permite a explorao e a navegao dos modelos atravs dos objectos dinmicos e
uma sustentao completa para o OCL. Uma vez que o modelo foi carregado, possvel examinar
suas propriedades de trs vistas:
"Metadata": onde ns encontramos a informao nas classes. Podemos consultar o nome da
classe, as suas super-classes, as associaes, os atributos e as operaes.
"Objects": uma vista para segurar os objectos. necessrio previamente carregar o ficheiro de
objectos com o formato padro de XML.
"Ocl Workbench": para a criao e a manipulao de expresses do OCL. A "Workbench" esta
compreendida entre uma janela da seleco de contexto e um editor das expresses do OCL.
OCL Compiler (Cybernetic Intelligence GMBH)
OCL Compiler uma aplicao para analisar as expresses do OCL que aparecem no modelo
de UML.
uma ferramenta independente em que, dado um modelo do software com restries do OCL,
as seguintes aces podem ser executadas (dependendo da especificao da ferramenta):
- Verificao da sintaxe das restries.
- Verificao de consistncia das restries usando o modelo. Por o exemplo, se o nome
de uma classe, de um atributo ou de uma associao for escrito incorrectamente, "OCL Compiler"
detectar a inconsistncia.

LEIC

Engenharia de Software Object Constraint Language


9

OCL
Object Constraint Language
-Verificao de incompatibilidade das restries, isto , certifica-se que restries do
mesmo modelo no entrem em conflito.
O analisador independente da ferramenta CASE usada na modelao, isto no sabe nada
sobre a ferramenta CASE e comunica-se atravs de uma ferramenta "front-end".
A verso mais recente dessa ferramenta a OCL Compiler v 1.5, desenvolvida pela
Cybernetic Intelligence GmbH, uma empresa de software Suia criada em 1994.
OCL Compiler (University de Dresden)
O OCL Compiler (OCLCUD) foi desenvolvido em Java pela Universidade de Dresden .As
caractersticas principais deste analisador so: capacidade de verificao sintctica e semntica
das expresses do OCL e a possibilidade de gerar cdigo Java e SQL a partir das restries
escritas em OCL.

8-Consideraes
No desenvolvimento do trabalho de pesquisa no tivemos dificuldades de maior. Encontramos
materiais com informaes precisas e esclarecedoras, que em muito facilitou a estruturao do
trabalho.
No conseguimos fazer referncias detalhadas de muitos temas, e acabamos mesmo por deixar
outros de fora, devido a limitao de pginas do relatrio. Mas, efectivamente, conseguimos
incluir aspectos mais relevantes do tema que nos propusemos desenvolver como trabalho de
pesquisa.
Obstante, julgamos que conseguimos alcanar os objectivos delineados para este trabalho,
embora tivemos que deixar alguns temas de fora, fizemos uma abordagem precisa dos temas mais
importantes. No entanto, ficamos a conhecer bastante bem, as potencialidades da ferramenta
OCL, as vantagens da sua aplicabilidade na definio de restries nos modelos de classes em
UML e ainda noutras linguagens de programao.
Portanto, conclumos que o uso desta ferramenta, para a especificaes das restries, vai
tornar-se cada vez mais necessria, devido no s a facilidade da sua utilizao, mas tambm da
vantagem que nos proporciona quanto a gerao dos cdigos em linguagens de programao, de
forma segura e com elevada qualidade.

LEIC

Engenharia de Software Object Constraint Language


10

OCL
Object Constraint Language

Referncias:
1. http://www.omg.org/docs/ptc/03-10-14.pdf
2. http://www.klasse.nl/ocl/
3. http://www.ic.unicamp.br/~eliane/Cursos/MC627/ocl_artigo.pdf
4. Birgit Demuth, Heinrich Hussmann: Using UML/OCL Constraints for Relational Database Design

LEIC

Engenharia de Software Object Constraint Language


11