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);
}
...
}