OCL
Object Constraint Language
PUC-PR - Mestrado em Informática Aplicada
Disciplina de Orientação a Objetos
Prof. Dr. Alcides Calsavara
Mestrandos Irani Martins Souza e Hugo Eduardo Simião
Novembro de 2001
1
OCL - Object Constraint Language
Introdução:
A OCL foi criada por Jos Warmer da IBM (Holanda), como uma
linguagem para a modelagem de negócios. Ela é derivada do
método SYNTROPY de Steve Cook e John Daniels.
OCL é uma linguagem que complementa a UML, permitindo
formalizar a semântica da linguagem propriamente dita e
fornecendo maneiras de expressar precisa e formalmente as
restrições de uma estrutura de modelos.
OCL permite ao desenvolvedor criar um conjunto de regras
altamente específicas, que definem o aspecto de um objeto
individual.
Novembro de 2001
2
OCL - Object Constraint Language
O que a OCL é:
• uma linguagem textual de modelagem, expressiva e formal
O que a OCL não é:
• uma linguagem de programação
Por que usar a OCL?
• os modelos gráficos não são suficientes para uma
especificação precisa e sem ambiguidade
• as linguagens formais tradicionais não são muito
“amigáveis”
Novembro de 2001
3
OCL - Object Constraint Language
Características da OCL:
Especificamente a OCL suporta expressões de invariantes, pré e
pós condições, permitindo ao modelador definir restrições
precisas de comportamento para um modelo, sem estar
envolvido em detalhes de implementação. A OCL foi
desenvolvida com o objetivo de descrever regras de negócio e
evitar ambigüidades em modelos gráficos de orientação a
objetos.
Novembro de 2001
4
OCL - Object Constraint Language
Características da OCL:
•as expressões OCL são fáceis de ler e de escrever. Mesmo
pessoas com pouca base matemática não têm dificuldade para
aprender e utilizar a OCL
• na OCL cada expressão é conceitualmente atômica
• todas as construções têm um significado definido formalmente
• OCL é baseada na Lógica de Predicados e na Teoria das Séries
(Set Theory)
• as expressões OCL não têm efeitos colaterais no modelo,
podem ser avaliadas quanto à sintaxe e semântica, mas nem
todas podem ser executadas diretamente
• as expressões OCL exigem tipos de dados concordantes e
devem utilizar apenas caracteres ASCII
Novembro de 2001
5
OCL - Object Constraint Language
Onde usar a OCL:
• para especificar invariantes nos modelos de Classe
• para especificar tipos nos modelos de Classe
• para especificar tipos de invariantes para Estereótipos
• para descrever pré e pós-condições em Operações
• para descrever pré e pós-condições em Métodos
• para descrever alertas (Guards)
• como uma linguagem de navegação
• para especificar restrições em Operações
Novembro de 2001
6
OCL - Object Constraint Language
História:
• 1996 - OMG requisitou propostas sobre Análise e Projeto
baseados em Objetos
• 1997 (janeiro) - IBM e Object Time Ltd apresentaram uma
proposta que incluía a OCL
• 1997 (agosto) - Liberada a versão 1.1 da OCL
• 2001 (agosto) - OMG requisitou propostas para a versão 2.0
da OCL
• 2001 (dezembro) - prazo final para apresentação das
propostas requeridas em agosto
Novembro de 2001
7
OCL - Object Constraint Language
Estrutura da Linguagem
OCL não provê uma sintaxe especial para cada construção da
linguagem. Em vez disso, ela usa um conceito:
Comece com um objeto, avalie uma propriedade (atributo,
operação ou navegação) do objeto, a qual resulta em um novo
objeto (ou uma coleção de objetos, que é um objeto também).
Neste objeto resultante se pode avaliar outra propriedade, que
resulta em outro objeto, etc.
A estrutura básica é:
object.property.aPropertyOnTheResult
(...).yetAnotherProperty()
Novembro de 2001
8
OCL - Object Constraint Language
Examples of OCL-expressions
The context of example expressions is written with underlined text.
Person
wife.name
Evaluates to the name of a persons wife
Person
children->Select(age>7)
Evaluates to the list of persons who happen to be the children of the original
person and is older than seven years.
Company
employees->union(Employees.Spouse)->union(Employees.Children)
Evaluates to the entire families of the employees of a company.
Novembro de 2001
9
OCL - Object Constraint Language
Novembro de 2001
10
Modelo UML
Novembro de 2001
11
Exemplos OCL
•Atributos
A idade de uma pessoa deve ser maior ou igual a 0:
Person
self.age >= 0
•Associações
Quem é o Gerente e quais os Empregados de uma Companhia:
Company
self.manager
self.employee
Novembro de 2001
12
Exemplos OCL
•Associações
Quanto ao número de empregadores de determinada pessoa:
Person
self.employer -> size
self.employer -> isEmpty
Novembro de 2001
13
Exemplos OCL
•Pessoas Casadas com Idade maior ou igual a 18:
self.wife -> notEmpty
implies
self.husband -> notEmpty
self.wife.age >= 18 and
implies self.husband.age >= 18
Novembro de 2001
14
Exemplos OCL
•As companhias que tenham 50 empregados ou menos:
self.employee -> size <= 50
•Uma relação de casamento deve acontecer entre um homem(Marido)
e uma mulher (Esposa):
self.wife.sex = # female and self.husband.sex = # male
Novembro de 2001
15
Exemplos OCL
•Uma pessoa não pode ser ao mesmo tempo Esposa e Marido:
not ((self.wife -> size = 1) and (self.husband -> size = 1))
Novembro de 2001
16
Exemplos OCL
•Navegação para uma Classe de Associações
O conjunto dos trabalhos de uma pessoa com as companhias
que o emprega:
Person
self.job
Novembro de 2001
17
Exemplos OCL
•Navegação de uma Classe de Associações
Job
self.employer
self.employee
Novembro de 2001
18
Exemplos OCL
•Navegação através de Assiciações Qualificadas
Bank
self.customer
self.customer[8764423]
Novembro de 2001
19
Exemplos OCL
• Conjuntos
Set, conjunto que não contêm elementos duplicados
Ex: Set{1,2,3,5,7,11,13,17}
Bag, semelhante a Set, porém pode conter elementos
duplicados
Ex: Bag{1,3,4,3,5}
Sequence, semelhante a Bag, porém os elementos são
ordenados
Ex: Sequence{1,2,3,4,5,6,7,8,9,10}
Sequence{1..10}
Sequence{1..(6+4)}
Novembro de 2001
20
Exemplos OCL
• Pré e Pós Condições:
Company : : hireEmployee(p : Person)
pre: not employee -> includes(p)
post: employee -> includes(p) and
stockprice() = stockprice@pre() + 10
Novembro de 2001
21
Exemplos OCL
• Select , Reject e Collect
Select, retorna um conjunto para os quais o resultado da
expressão seja verdadeiro:
Company
self.employee -> select (age > 50)
Reject, retorna um conjunto para os quais o resultado da
expressão seja falso:
Company
self.employee -> reject(isMarried)
Novembro de 2001
22
Exemplos OCL
• Collect
Company
self.employee -> collect (birthDate)
Company
self.employee.birthDate
Novembro de 2001
23
Bibliografia
[1] Reflections on the Object Constraint Language; Ali Hamie, et al;
University of Brighton
[2] Object Constraint Language Specification - Version 1.1; W3C
Consortium; September 1997
[3] On the Expressive Power of the Object Constraint Language OCL; Luis
Mandel, Maria Victoria Cengarle; München, Alemanha
[4] Response to the UML 2.0 OCL ; RfP (ad/2000-09-03); OMG
Document ad/2001-08-01; Submitters: Boldsoft, Rational Software
Corporation, IONA, August 2001
Novembro de 2001
24
Download

O que a OCL é - Programa de Pós