OCLE
Object Constraint Language Environment
Fábio Moura
CIn-UFPE
Roteiro
Introdução
Projetos
Modelos
Compilando Especificações OCL
Model Checking
Geração de Código Java
Exemplo
OCLE – Introdução
OCLE foi especialmente projetada e implementada para
auxiliar usuários UML no desenvolvimento de
expressões OCL
Erros no desenvolvimento dos modelos podem ser
facilmente detectados e corrigidos
Permite fácil criação de expressões OCL
É uma ferramenta poderosa, de uso muito simples e
intuitivo
Permite acesso completo tanto a nível de meta modelos
como de modelos
É gratuita !


http://lci.cs.ubbcluj.ro/ocle/index.htm
http://www.cin.ufpe.br/~in1006/2005/OCLE
Projetos
Permite o gerenciamento flexível de modelos e
especificações OCL

Poder ser desenvolvidos em arquivos separados e
posteriormente unidos em um projeto
Um mesmo arquivo OCL ou modelo UML pode ser usado
em mais de um projeto OCLE
Um projeto pode conter mais de um modelo UML

Um deles deve ser o modelo ativo
A sua criação é opcional
A estrutura do projeto ativo é mostrada no Project
panel


Contém o Project Browser
Mostra os arquivos contendo os componentes do projeto
Projetos
Project Browser
Criando Novos Projetos
Menu Project – New ...
Modelos
OCLE permite a importação de modelos UML realizados
usando ferramentas CASE como o Rational Rose

A precondição é que estes modelos estejam armazenados no
formado XMI
OCLE também permite a criação de modelos UML
dentro de uma interface gráfica e então exportá-los
para arquivos XMI
O modelo ativo é mostrado no model browser



Completa navegação e representação do modelo
Filtragem
Edição
Model Browser, Estereótipos e
Propriedades
Diagramas Suportados
Use Case
Classe
Objetos
Diagrama de Classes
Diagrama de Use Case
Diagrama de Objetos
Compilando Especificações OCL
O compilador OCL permite ao usuário checar a
corretude da sintaxe e da semântica de expressões
OCL
Componente chave de qualquer ferramenta OCL
Menu Tools – Compile project specifications
Tipos de arquivos com especificações OCL


.ocl – especificações expressas no nível de meta modelo
.bcr – especificações expressas no nível de modelo (restrições
de negócio)
Mensagens de Erro
Model Checking
OCLE realiza a checagem do modelo através da
avaliação de restrições especificadas pelo usuário em
diferentes elementos do modelo
Ajuda a corrigir erro nos modelos e nas especificações
OCL
Maneira mais simples de checar o modelo



Compile as especificações OCL
Menu Tools – Check model
Problemas são mostrados no painel Evaluation
Avaliação Local
 Característica poderosa do OCLE que permite a avaliação parcial
de uma expressão OCL em um determinado contexto
 Passos






Escolha a regra que deseja avaliar – clique duas vezes em sua
declaração de contexto
Um menu popup será mostrado contendo todas as instâncias possíveis
para a classe mencionada na declaração de contexto
Selecione uma instância clicando duas vezes sobre ela
OCLE automaticamente irá modificar o contexto para todas as regras
Uma vez que o contexto foi escolhido, clique duas vezes em
diferentes partes da expressão escolhida, OCLE irá tentar avaliar a
expressão selecionada, mostrando o resultado no painel OCL Output
Dê um duplo clique sobre o estereótipo da expressão (inv) para avaliar
a expressão inteira
Geração de Código Java
O principal objetivo do gerador de código é produzir
uma aplicação completamente executável a partir do
modelo UML e suas especificações OCL associadas
Transforma classes, interfaces e tipos de dados em
seu código fonte Java correspondente
Adicionalmente, restrições OCL associadas são
transformadas em código executável, integrado ao
código do modelo UML, produzindo uma aplicação Java
que checa suas próprias restrições
O código Java produzido é compilável, embora não seja
completo

Uma vez que o código foi gerado, ainda se faz necessário
escrever o corpo dos métodos gerados
Geração de Código Java
Para invocar o gerador de código, use a opção do menu
Tools – Generate code ...
Exemplo
Finance_Business_ClassDiagram
Exemplo
Código Gerado (.java)
...
public void check_Order_first()
{
Enum enumType = Order.this.type;
boolean bEquals = enumType.equals(Enum.buy);
float fMatchedPrice = Order.this.matchedPrice;
float fLimit = Order.this.limit;
boolean bLessOrEqual = fMatchedPrice <= fLimit;
boolean bImplies = !bEquals || bLessOrEqual;
if (!bImplies)
{
System.err.println("invariant 'first' failed for object
"+Order.this);
}
...
}
Download

ocl