OCL: Object Constraint Language

Propaganda
OCL
Object Constraint Language
OCL: Object Constraint Language
Amílcar Domingos Rodrigues Santy Fernandes, Girson César Silva Monteiro, Rui Sá Guerra, Simão
Castro
Faculdade de Engenharia da Universidade Do Porto, Rua Dr. Roberto Frias,
s/n 4200-465 Porto, Portugal
[email protected], [email protected], [email protected], [email protected]
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, são abordadas as valências desta linguagem formal, a sua aplicabilidade em
diferentes ferramentas de especificação de modelos, tidas como plataformas de apoio no
desenvolvimento de sistemas de aplicação, com base na Programação Orientada aos Objectos.
O trabalho está dividido em três partes:
- na primeira parte é feita uma breve introdução dos temas e sub – temas a desenvolver
(Objectivos), bem como uma descrição sucinta da linguagem acima referida, o seu uso para
especificação e restrição em modelos, a conversão de restrições de linguagem natural para OCL, e
finalmente, o paradigma de implementação que é utilizada nesta linguagem, como forma de
especificação em modelos;
- na segunda parte, é abordada a arquitectura do OCL, casos práticos da sua utilização nos
sistemas. É ainda tratada nesta parte, a análise gramatical da linguagem ao nível do léxico e da
sintaxe. Outras referências com aplicação prática, como implementação do dicionário de dados,
tradutores para o OCL, assim como a sua livraria standard, também são aqui abordados.
- na terceira parte, temos exemplos de tradução com ilustrações, tabelas de comparação, e
finalmente as ferramentas.
Presume-se assim, com o desenvolvimento destes temas elaborados, esgotar os objectivos
preconizados para este projecto de pesquisa. Na última página são dadas as referências dos
materiais consultados na sequência da pesquisa.
LEIC
Engenharia de Software ……………………………………… Object Constraint Language
1
OCL
Object Constraint Language
2-Objectivos
O OCL é uma ferramenta utilizada para a especificação de restrições na modelação dos
diagramas arquitectados em UML.
Um diagrama UML por conseguinte, tal como um diagrama de classe, não é suficientemente
refinado para fornecer todos os aspectos relevantes de uma especificação. Há entretanto uma
necessidade de definir restrições adicionais sobre objectos no modelo.
Daí a tentação de sempre descrever essas restrições em linguagem natural. Contudo, a prática
demonstrou que esse método de descrição das restrições, tem resultado sempre em ambiguidades.
Para resolver, obstante, esses problemas de ambiguidades, tem-se recorrido às linguagens de
especificação formal como OCL, justamente para solucionar tais problemas. Baseando-se na
especificação de objectos em modelos, ou nas classes, de forma segura e concisa, sem
ambiguidades. Neste trabalho, como já supracitado, é demonstrado a aplicabilidade dos padrões
de escrita dessas restrições, na linguagem OCL. O projecto está estruturado em três partes, já
referido anteriormente, cada uma dividida em sub – temas onde são abordados aspectos
relevantes do uso da linguagem OCL. Como seguem:
•
•
•
•
•
•
•
Introdução ao OCL: aborda as valências da linguagem, a sua origem e a aplicabilidade
para os modeladores a UML, a importância do seu uso nas definições formais das
restrições.
Descrição da Linguagem OCL: aborda casos específicos da utilização da linguagem
quanto a definição de modelos UML; bem como a especificação dos invariantes.
Motivação: aborda o uso do OCL para especificação e restrições; a conversão de
restrições de linguagem natural para OCL.
Implementação com OCL: aborda características do OCL quanto ao contexto,
expressões, tipos de restrições e de operações, processos de implementação, e uso de
expressões OCL em modelos UML.
Arquitectura do OCL: aborda a parte estrutural e semântica da linguagem, o dicionário
de dados, a gramática que engloba também o nível léxico e sintáctico; descrição da
semântica utilizando UML; elementos básicos do OCL e livraria standard; e tradutor e
exemplos de tradução para OCL.
Ferramentas: aborda diferentes ferramentas onde a OCL se pode aplicar as valências do
OCL.
Considerações: esboça as valências do OCL como uma linguagem formal, e suas
vantagens na especificação dos modelos.
3-Introdução ao OCL
A Linguagem de Restrição de Objectos, abreviado OCL (Object Constraint Language), é uma
linguagem formal, utilizada para descrever expressões em modelos de UML. Essas expressões
definem tipicamente as condições que se deve assegurar para o funcionamento de um sistema que
está a ser modelado, ou ainda, de modelação de informações contidas nos objectos descritos num
determinado modelo.
Quando uma expressão OCL é avaliada, não tem qualquer efeito colateral, isto é, não pode
alterar o estado de execução do respectivo sistema. As expressões do OCL podem sim ser
LEIC
Engenharia de Software ……………………………………… Object Constraint Language
2
OCL
Object Constraint Language
utilizadas para especificar as restrições de operações ou acções de um determinado objecto, que
quando executadas alteram o estado do sistema.
Os modeladores de UML podem utilizar o OCL para especificação de restrições nas aplicações
definidas nos modelos correspondentes. Os modeladores podem ainda recorrer à OCL, para
especificar perguntas ou definir condições que são completamente diferentes de uma linguagem
de programação.
As expressões do OCL não interfiram na execução do programa. Não são compilados aquando
da execução do programa. Embora existam ferramentas para a verificação e compilação das
expressões 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 estereótipos.
Descrever pré e pós condições em operações.
Como uma linguagem de navegação entre associações.
Como uma linguagem de pergunta.
Para descrever protectores.
Para especificar o alvo das mensagens e acções.
Para especificar regras de derivações para atributos.
Especificar restrições sobre operações.
4-Descrição da linguagem
OCL é uma Linguagem Formal utilizada para definir restrições sobre objectos. Tais restrições,
especificam condições que têem de se verificar no sistema modelado.
OCL não é uma linguagem de programação. É antes de mais, uma linguagem de modelação
com regras de sintaxe e semântica bem definidas, e expressa informações que não existem nos
modelos.
Por exemplo, um diagrama de UML, tal como diagrama de classe, não é suficientemente
refinado para fornecer todos os aspectos relevantes de uma especificação. Há entretanto, a
necessidade de definir restrições adicionais sobre objectos nos modelos. Essas restrições são
descritas frequentemente na linguagem natural, que apresentam sempre resultados ambíguos,
quanto às informações dos objectos. Para acabar com essa representação ambígua de informação,
foram desenvolvidas linguagens formais “So-Called”. A desvantagem dessas linguagens formais
tradicionais, é que são acessíveis às pessoas com uma base matemática muito forte, mas não aos
utilizadores médios de um sistema de modelação.
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
definição das restrições, e também de dotar as linguagens formais de uma utilização flexível e
mais acessível. É uma linguagem fácil de ler e de escrever.
OCL foi desenvolvido em 1995 por Jos Warmer, como uma linguagem de business modelling
(modelação de negócio). Em 1996, o OMG fez um “Request for Proposals” em análise e desenho
OO. E em 1997 a IBM e a Object Time Limited em colaboração com os parceiros da Unified
Modelling Language (UML), publicaram as versões: O OCL 1.3 de 1999; O OCL 1.4 de 2001; e
actualizaram a linguagem em 2004 com a versão OCL 2.0.
O OCL consequentemente, garante que as suas expressões não tenham efeitos colaterais, isto
é, não altera o estado do objecto. Quando uma expressão OCL é avaliada, retorna apenas um
valor.
Para cada classificador (sejam classes, interfaces) definido dentro do UML, corresponde a um
tipo OCL. A linguagem também define os seus tipos. Mais a frente é apresentada uma tabela com
todos os tipos definidos em OCL.
5-Motivação
A importância prática das regras da linguagem OCL, quanto a implementação das
especificação de restrições e definições das derivações em modelos, requer um controle
estruturado e disciplinado, que garanta que tais regras estipuladas, se vão verificar em qualquer
circunstância durante o desenvolvimento do programa que as utiliza.
Para esse efeito, são desenvolvidas ferramentas para a modelação das expressões e
interpretadores para o OCL, assim como um compilador para as expressões do OCL. Interfaces
que viabilizem, por outro, a utilização de técnicas de processamento de linguagem natural para
base de dados. Essas ferramentas são capazes de lidar com restrições sobre dados estabelecidos
através das expressões do OCL. Como exemplo, escolhemos três ferramentas para melhor ilustrar
o que descrevemos acima. Como seguem: Atenas; Hermes; OCLE.
•
•
•
LEIC
Atenas: é um sistema modelador de regras de negócio, que permite a sua captura e
implementação; todas as restrições sobre modelos de classe devem ser encaradas como
regras de negócio, mesmo as mais simples; regras de negócio muito simples em geral,
podem ser mapeados directamente como restrições de modelo.
Hermes: é um tradutor para OCL; traduz uma restrição estabelecida numa sentença em
português, e tenta gerar a expressão em OCL, que representa essa restrição dentro de um
modelo de classe.
OCLE: compilador do OCL, permite ao modelador apurar correcção da sintaxe e a
semântica de expressões OCL; faz uma avaliação de restrições especificadas pelo
modelador, em diferentes elementos do modelo; ajuda a corrigir erros nos modelos e nas
especificações OCL.
Engenharia de Software ……………………………………… Object Constraint Language
4
OCL
Object Constraint Language
5.1-Uso de OCL para a especificação e restrições
Vamos propor para a análise deste tema, a integração das ferramentas acima referidas, neste
caso Atenas e Hermes, em linguagem OCL, na definição das regras de restrições sobre um
determinado modelo de classes ou de um Sistema de Gestão de Base de Dados.
A ideia básica de Atenas, é de uma ferramenta que serve como uma base formal para a
documentação das regras de negócio de um sistema de informação.
Uma vez que as restrições estejam estabelecidas em OCL, o Atenas é capaz de detectar na base
de dados, os eventos que podem vir a violar essas restrições, como por exemplo, a inserção de um
registo, alteração de valor de uma coluna ou remoção de um registo.
O sistema também é capaz de gerar um código específico para detectar e impedir violações,
gerando tiggers que verificam a validade de restrição no evento correspondente. Tudo isso é feito
automaticamente através de uma expressão em OCL, e do mapeamento entre um modelo de
classes e o esquema da base de dados relacional. E para cada expressão em OCL, são mantidas a
informação sobre a restrição em si, tais como a sua origem, aplicabilidade, histórico e etc.
Neste contexto, o Hermes traduz uma restrição estabelecida numa sentença em português, e
tenta gerar a expressão OCL que representa essa restrição dentro de um modelo de classe. Caso a
expressão seja gerada correctamente, o Hermes activará código correspondente do Atenas que irá
gerar código da respectiva linguagem de programação (por exemplo SQL) para fazer a avaliação
das regras.
Para Atenas, as regras de negócio estão divididas em três grupos: regras extraídas
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 três 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 negócio estejam estabelecidas numa
linguagem formal, é possível gerar a lista de eventos do sistema (inserção, alteração, …)
onde os mesmos são gerados.
Validar os Dados Legados: assegurar a integridade e a qualidade dos dados, aquando da
implementação de um novo sistema, em substituição do anterior.
Auxílio para a Extracção das Regras do Negócio: um sistema que estruture as regras de
negócio de forma independente, as mensagens do erro são as próprias regras de negócio.
Manutenção do Sistema: a ferramenta permite analisar o impacto de mudanças em regras
de negócio, através do relatório do impacto duma mudança ocorrida em alguma regra de
negócio.
Engenharia de Software ……………………………………… Object Constraint Language
5
OCL
Object Constraint Language
RegraOCL
Esquema
Compilador
ListadeEventos
Formal Triggers
CódigoemSQL
Informal Updates
Fig. 1. Esquema de avaliação do impacto de alteração de Base de Dados
5.2-Conversão de restrições de Linguagem Natural para OCL
Escrever restrições sobre um modelo de classe utilizando OCL, não é uma tarefa trivial para
não programadores. É necessário ter um conhecimento sobre o modelo de classes, mesmo sendo
uma linguagem declarativa.
O OCL não é uma linguagem trivial. O OCL é uma linguagem formal, com as regras de sintaxe
e semântica bem distintas da linguagem natural. O sistema Hermes, escolhido neste trabalho de
pesquisa para exemplificar o funcionamento da linguagem, permite que não programadores
descrevam restrições utilizando linguagem natural, em português, e as transformam em OCL e
depois passado para linguagem de programação. Durante o processo, as eventuais ambiguidades
presentes no discurso humano, são eliminadas.
LEIC
Engenharia de Software ……………………………………… Object Constraint Language
6
OCL
Object Constraint Language
Há três cenários onde a utilização do Hermes apresenta vantagens óbvias.
Um cenário seria a formalização de regras de negócio ou restrições durante a etapa de análise,
através da captura em linguagem natural e posterior conversão em OCL.
A esta altura, não é necessário que o modelo de classes esteja muito estável – de qualquer
forma o sistema suporta pequenas evoluções. Quando o modelo estiver mais estável as regras
escritas em linguagem natural podem ser então transformadas em OCL e finalmente quando o
modelo relacional estiver pronto elas serão convertidas em código SQL (queries e triggers) para
verificarem e manterem a integridade das regras.
Dessa forma é possível documentar as regras de negócio nas etapas iniciais da análise,
utilizando linguagem natural e estabelecendo as regras com um máximo de independência do
modelo de dados de implementação.
Um outro cenário possível é a existência de dados legados que devem ser filtrados ou avaliados
quanto à obediência as regras de negócio ou outras restrições.
Como em geral o número de restrições a serem testadas é grande torna-se mais fácil estabelecêlas em linguagem natural. Além disso, as restrições no fundo são 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.
Após a migração para um novo esquema, as mesmas regras são novamente traduzidas para
OCL (possivelmente diferente do anterior) e compiladas para o SQL apropriado a nova base.
Finalmente, podemos ter também a situação onde um analista de negócios está a investigar a
validade de determinadas regras de negócio, realizando uma prospecção de conhecimento numa
base de dados já existente. Assim, ao invés de restrições teríamos suposições 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”.
Após o analista de domínio ou negócio elaborar uma suposição, 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
prospecção seja manual, é um facto geralmente aceite que boas descobertas de conhecimento em
bases de dados podem ser realizadas por especialistas do negócio que sabem ou têm uma boa
noção do que devem procurar.
6-Implementação de Contrato com OCL
Nesta parte estão representados os contratos do sistema. Em orientação a objectos, o contrato
descreve de forma clara e unívoca as obrigações de um objecto, sendo que este executará seus
serviços (obrigações) mediante o cumprimento de certas regras estipuladas (direitos ou condições
iniciais sob as quais o serviço será prestado). O contrato está relacionado à definição da interface
de um objecto. Difere do contrato legal por não 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 à máquina de bebida. Atualizar contagem da quantia de
dinheiro fornecida pelo cliente. Exibir bebidas disponíveis.
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 Restrições em OCL
•
Expressões
Contexto de uma expressão:
As expressões OCL requerem que as restrições estejam ligadas a um contexto de um
modelo. O contexto de uma expressão pode ser uma classe de objectos ou pode ser uma
operação aplicável 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): condição (ou predicado) que se aplica a TODAS as classes (ou tipo ou
interface ou associação e etc…)
Pré-condição (pre): condição que deve ser satisfeita antes da execução de uma operação
Pós-condição (post): condição que deve ser satisfeita após a execução de uma operação
Guarda: condição que deve ser satisfeita para que uma transição de estado seja efectuada
As restrições 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 capítulo falamos das ferramentas que tornam a linguagem OCL mais fácil de ser usada.
Em baixo estão enunciados algumas das mais recentes ferramentas dessa linguagem.
ModelRun (Boldsoft)
ModelRun permite a exploração e a navegação dos modelos através dos objectos dinâmicos e
uma sustentação completa para o OCL. Uma vez que o modelo foi carregado, é possível examinar
suas propriedades de três vistas:
"Metadata": onde nós encontramos a informação nas classes. Podemos consultar o nome da
classe, as suas super-classes, as associações, os atributos e as operações.
"Objects": uma vista para segurar os objectos. É necessário previamente carregar o ficheiro de
objectos com o formato padrão de XML.
"Ocl Workbench": para a criação e a manipulação de expressões do OCL. A "Workbench" esta
compreendida entre uma janela da selecção de contexto e um editor das expressões do OCL.
OCL Compiler (Cybernetic Intelligence GMBH)
OCL Compiler é uma aplicação para analisar as expressões do OCL que aparecem no modelo
de UML.
É uma ferramenta independente em que, dado um modelo do software com restrições do OCL,
as seguintes acções podem ser executadas (dependendo da especificação da ferramenta):
- Verificação da sintaxe das restrições.
- Verificação de consistência das restrições usando o modelo. Por o exemplo, se o nome
de uma classe, de um atributo ou de uma associação for escrito incorrectamente, "OCL Compiler"
detectará a inconsistência.
LEIC
Engenharia de Software ……………………………………… Object Constraint Language
9
OCL
Object Constraint Language
-Verificação de incompatibilidade das restrições, isto é, certifica-se que restrições do
mesmo modelo não entrem em conflito.
O analisador é independente da ferramenta CASE usada na modelação, isto é não sabe nada
sobre a ferramenta CASE e comunica-se através de uma ferramenta "front-end".
A versão mais recente dessa ferramenta é a “OCL Compiler v 1.5”, desenvolvida pela
Cybernetic Intelligence GmbH”, uma empresa de software Suiça criada em 1994.
OCL Compiler (University de Dresden)
O “OCL Compiler” (OCLCUD) foi desenvolvido em Java pela Universidade de Dresden .As
características principais deste analisador são: capacidade de verificação sintáctica e semântica
das expressões do OCL e a possibilidade de gerar código Java e SQL a partir das restrições
escritas em OCL.
8-Considerações
No desenvolvimento do trabalho de pesquisa não tivemos dificuldades de maior. Encontramos
materiais com informações precisas e esclarecedoras, que em muito facilitou a estruturação do
trabalho.
Não conseguimos fazer referências detalhadas de muitos temas, e acabamos mesmo por deixar
outros de fora, devido a limitação de páginas do relatório. Mas, efectivamente, conseguimos
incluir aspectos mais relevantes do tema que nos propusemos desenvolver como trabalho de
pesquisa.
Obstante, julgamos que conseguimos alcançar 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 definição de restrições nos modelos de classes em
UML e ainda noutras linguagens de programação.
Portanto, concluímos que o uso desta ferramenta, para a especificações das restrições, vai
tornar-se cada vez mais necessária, devido não só a facilidade da sua utilização, mas também da
vantagem que nos proporciona quanto a geração dos códigos em linguagens de programação, de
forma segura e com elevada qualidade.
LEIC
Engenharia de Software ……………………………………… Object Constraint Language
10
OCL
Object Constraint Language
Referências:
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
Download