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