object constraint language philip stephen medcraft

33
Object Constraint Language Philip Stephen Medcraft

Upload: milton-oliveira-capistrano

Post on 07-Apr-2016

259 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object Constraint Language Philip Stephen Medcraft

Object Constraint Language

Philip Stephen Medcraft

Page 2: Object Constraint Language Philip Stephen Medcraft

SumárioIntroduçãoLigação com a UMLTipos básicos e operaçõesObjetos e propriedadesOperações em coleções

Page 3: Object Constraint Language Philip Stephen Medcraft

IntroduçãoModelos gráficos são completos?Podemos gerar especificações precisas apenas com modelos gráficos?Muitas vezes, sentimos a necessidade de adicionar restrições aos objetos.Uma linguagem natural pode resolver?Uma linguagem formal é mais precisa!

Page 4: Object Constraint Language Philip Stephen Medcraft

IntroduçãoOCL é uma linguagem descritiva.Uma expressão OCL não pode alterar nada no esquema.O estado do sistema nunca mudará devido a uma expressão OCL.Quando executada, uma expressão OCL simplesmente devolve um valor.

Page 5: Object Constraint Language Philip Stephen Medcraft

IntroduçãoA OCL pode ser usada com diferentes propósitos:

Para especificar restrições em classes e tipos no diagrama de classes.Para descrever pré e pós condições para métodos.Como uma linguagem de navegação.

Page 6: Object Constraint Language Philip Stephen Medcraft
Page 7: Object Constraint Language Philip Stephen Medcraft

Ligação com a UMLUma expressão OCL:

´Essa é uma expressão OCL’O contexto para a expressão:NomeDoTipo´Expressão OCL no contexto de NomeDoTipo’Uma expressão OCL é escrita no contexto de uma instância de um tipo específico.

Page 8: Object Constraint Language Philip Stephen Medcraft

Ligação com a UMLEm uma expressão OCL, o nome self é usado para referenciar o contexto.Exemplo:Company

self.numberOfEmployeesOutra opção:c : Company

c.numberOfEmployees

Page 9: Object Constraint Language Philip Stephen Medcraft

Ligação com a UMLPré e Pós condições:

A expressão é uma pré ou pós condição para uma operação.

Portanto, a instância atual (contexto) é do tipo que possui a operação.Person::income(d : Date) : Integerpost: result = ... Alguma função ...

Page 10: Object Constraint Language Philip Stephen Medcraft

Tipos básicos e operaçõesBoolean (and, or, not, implies, if-then-else)Integer (*, +, -, /, abs)Real (*, +, -, /, floor)String (toUpper, concat)CollectionSetBagSequence

Page 11: Object Constraint Language Philip Stephen Medcraft

Tipos básicos e operaçõesCada expressão OCL é escrita no contexto de um modelo UML contendo:

um número de classes;associações entre as classes;generalizações.

Todos as classes do modelo UML são tipos nas expressões OCL anexadas ao modelo.

Page 12: Object Constraint Language Philip Stephen Medcraft

Tipos básicos e operaçõesRelações entre tipos:

Os tipos básicos são organizados numa hierarquia.Uma expressão OCL é válida quando os seus tipos conformam. Caso contrário, temos um “type conformance error”.

Page 13: Object Constraint Language Philip Stephen Medcraft

Tipos básicos e operaçõesOs relacionamentos entre os tipos devem obedecer as seguintes regras:

Cada tipo conforma com seu supertipo;Se tipo1 conforma com tipo2, e tipo2 conforma com tipo3, então tipo1 conforma com tipo3.

Page 14: Object Constraint Language Philip Stephen Medcraft

Tipos básicos e operaçõesCasting:

Algumas vezes precisamos usar uma propriedade de um objeto que é definido num subtipo do objeto corrente.object.oclAsType(Tipo2)Neste exemplo, object é do tipo Tipo1.Só podemos fazer o cast para um subtipo do tipo corrente.

Page 15: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesPropriedades:

O valor de uma propriedade de um objeto definido num diagrama de classes é especificado da seguinte forma:UmTipo

self.nomePropriedade

Page 16: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesAtributos

A idade de uma pessoa é escrita como:Personself.age

O tipo dessa expressão é o tipo do atributo age (Integer).Poderíamos definir como regra:

Personself.age >= 0

Page 17: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesOperações

Cada operação pode ser definida por uma restrição de pós-condição.Person::income (d : Date) : Integer

post: result = -- alguma função --Para o caso de uma operação sem parâmetros:Company

self.stockPrice()

Page 18: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesNavegação

Partindo de um certo objeto, podemos navegar numa associação do diagrama de classes, para referenciar outros objetos e suas propriedades.Companyself.manager -- do tipo Personself.employee -- do tipo Set(Person)

Page 19: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesNavegação

A execução da primeira expressão resultará num objeto do tipo Person.A execução da segunda expressão resultará num conjunto de Pessoas.Por default, navegação sempre resulta num conjunto. No caso da associação conter o elemento {ordered}, a navegação resulta numa sequência.

Page 20: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesOs tipos Set, Bag e Sequence são pré-definidos em OCL. Cada um desses tipos de coleção possui um grande número de operações pré-definidas.Temos acesso a uma propriedade de uma coleção usando uma seta ‘->’, seguida do nome da propriedade.

Page 21: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesA expressão abaixo resulta no número de empregadores da Pessoa self.Personself.employer->sizeA expressão abaixo resulta em ‘true’ caso o conjunto de empregadores é vazio.Personself.employer->isEmpty

Page 22: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesAlguns exemplos de expressões OCL:

self.wife->notEmpty implies self.wife.age >=18 andself.husband->notEmpty implies self.husband.age >= 18

self.employee->size <= 50

self.wife.sex = #female and self.husband.sex = #male

not ((self.wife->size = 1) and (self.husband->size = 1))

Page 23: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesNavegação para classes de associação:

OCL usa um ponto e o nome da classe de associação iniciando com letra minúscula.

Personself.jobResulta no conjunto de todos os empregos que a pessoa possui dentre as empresas.

Page 24: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesNavegação:

Podemos ainda fazer uma melhor seleção dos objetos. Veja os exemplos:

Bankself.customer -- resulta num Set(Person) contendo -- todos os clientes do banco.self.customer[8764423] -- resulta numa pessoaque possui número daconta igual a 8764423

Page 25: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesColeções:

O tipo coleção é pré-definido em OCL.Define um grande número de operações pré-definidas que possibilitam ao autor manipular coleções.Collection é um tipo abstrato, com os tipos concretos de coleções sendo:• Set, Sequence, e Bag.

Page 26: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesSet

É o conjunto matemático.Não contém elementos duplicados.

BagÉ como Set, mas pode conter elementos duplicados.

SequenceÉ como Bag, com elementos ordenados.

Page 27: Object Constraint Language Philip Stephen Medcraft

Objetos e propriedadesPodemos obter coleções das seguintes maneiras:

Definindo de forma direta:• Set {1, 2, 3, 5, 7, 11, 13, 17}• Sequence {1, 2, 3, 5, 7, 11, 13, 17}• Bag {1, 2, 3, 2, 1}

Através de uma navegação:Company self.employeeOperações em coleções:collection1->union(collection2)

Page 28: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação Select

Muitas vezes queremos apenas um subconjunto de uma coleção.O Select é uma operação realizada sobre uma coleção, com a seguinte sintaxe:Companyself.employee->select (age > 50)Companyself.employee->select (p | p.age > 50)Companyself.employee->select (p : Person | p.age > 50)

Page 29: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação Reject

Idêntica ao Select, no entanto, o subconjunto que pegamos da coleção é composta pelos elementos que não satisfazem à expressão.As duas expressões abaixo são iguais:

Collection->reject ( v : Tipo | expressão-booleana )Collection->select ( v : Tipo | not (expressão-

booleana) )

Page 30: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação Collect

Usamos a operação quando queremos especificar uma coleção a partir de uma outra, mas com diferentes objetos da coleção original.Companyself.employee->collect (birthDate)self.employee->collect (person | person.birthDate)self.employee->collect (person:Person | person.birthDate)

Page 31: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação ForAll

Muitas vezes uma restrição é comum para todos os elementos de uma coleção.ForAll resulta num boolean. Retornará true caso a restrição seja comum a todos.

Companyself.employee->forAll ( sobrenome = ‘Schiel’ )Será true, caso todos os empregados da empresa tenham sobrenome “Schiel”.

Page 32: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação Exists

Muitas vezes precisamos saber se há pelo menos um elemento de uma coleção para o qual uma certa restrição é válida.

Companyself.employee->exists ( sobrenome = ‘Schiel’ )Será true, caso exista pelo menos um empregado da empresa com sobrenome “Schiel”.

Page 33: Object Constraint Language Philip Stephen Medcraft

Operações em coleçõesOperação Iterate

A sintaxe é a seguinte:collection->iterate ( elem : Tipo; acc : Tipo =

<expressão> |expressão-com-elem-e-acc )

collection->collect ( x : T | x.propriedade )é idêntico a:collection->iterate ( x : T; acc : T2 = Bag{} |

acc->including(x.property) )