OCL The Object Constraint Language Franklin Ramalho Ph
OCL – The Object Constraint Language Franklin Ramalho Ph. D Student – CIn - UFPE
Roteiro n Motivação n Introdução n Tipos e instâncias n Herança n Estilos para especificação em OCL n Questões de modelagem com OCL n Considerações Finais
Motivação UML não provê todos aspectos relevantes da especificação do sistema n Linguagem Natural é ambigua n Linguagens formais requerem forte conhecimento matemático n OCL - Linguagem para escrita de restrição sobre objetos, que pode ser aplicada em um ou mais valores de um (ou parte de) sistema ou modelo orientado a objetos. n
Introdução n n n Linguagem formal de fácil escrita e leitura Não é uma linguagem de programação Sem efeitos colaterais Linguagem tipada Avaliação instântanea
Introdução n Uso de OCL: – Especificar invariantes – Descrever pre e pos condições sobre operações e métodos – Descrever guardas – Servir como linguagem de navegação
Invariantes É uma expressão cujo resultado deve ser verdadeiro para todas as instâncias da classe, tipo ou interface associada n Exemplo: n Context c : Customer inv Minimum. Age: c. age() >= 18 Context Customer inv: self. age() >= 18 n Podem ser representadas através: – – Nota no modelo UML Estereótipo <<invariant>> Arquivo separado Tab específico provido por ferramentas
Invariantes n Exemplo: Context membership inv: card. owner = customer Context Customer. Card inv: printed. Name = customer. title. concat (customer. name)
Invariantes
Pre e pos-condições Pré-condição é uma restrição que deve ser verdadeira no inicio da execução da operação. n Pós-condição é uma restrição que deve ser verdadeira no final da execução da operação. n Context Typename: : operation. Name (param 1 : Type 1, . . . ) : Return. Type pre: param 1 >. . . post: result =. . . Context Loyalty. Account: : is. Empty() : Boolean pre: -- none post: result = ( points = 0) Context Loyalty. Program: : enroll(c : Customer) pre: not customer->includes(c) post: customer = customer@pre->including(c)
Pre e pos-condições n Podem ser representadas através: – Nota no modelo UML – Estereótipos <<precondition>> e <<poscondition>> – Arquivo separado – Tab específico provido por ferramentas
Tipos e instâncias n Tipos Valor – Tipos Básicos • • Integer Real String Boolean – Tipos Collection • • n Set Bag Sequence Collection Tipos Objeto – Tipos Modelo (classes, interfaces ou tipos definidos no modelo UML)
Tipos e instâncias n OCLAny é o supertipo de todos os tipos – – – = <> ocl. Type ocl. Is. Kind. Of(type : Ocl. Type) ocl. Is. Type. Of(type : Ocl. Type) ocl. As. Type(type : Ocl. Type) Context Burning inv: self. ocl. Type = Burning self. ocl. Is. Kind. Of(Transaction) = true self. ocl. Is. Type. Of(Transaction) = false self. ocl. Is. Type. Of(Burning) = true
Tipos e instâncias n OCLType é o supertipo de todos os tipos – – – name : String attributes : Set (String) association. Ends : Set (String) operations : Set (String) all. Instances : Set(sometype. ocl. Type) Customer. name = ‘Customer’ Transaction. attributes = Set {‘points’, ‘date’} Transaction. association. Ends = Set {‘servicelevel’, ‘loyalty. Account’, ‘card’} Transaction. operations = Set {‘program’}
Tipos Básicos n Boolean Context Customer inv: title = (if is. Male = true age() > 21 and age() < 65 then ‘Mr. ’ else ‘Ms. ’ endif) Context Service inv: self. points. Earned > 0 implies self. points. Burned = 0
Tipos Básicos n Integer e Real 2654 * 4. 3 + 101 =11513. 2 1. 175 * (-8. 9). abs – 10 = 0. 4575 12. max(33) = 33 33. max(12) = 33 33. 7. min(12) = 12 13. mod(2) = 1 n String ‘casa’. size = 6 ‘casa’. to. Upper = ‘CASA’ ‘casa’. concat(‘mento’) = ‘casamento’
Tipos Collection - supertipo abstrato usado para definir operações comuns entre todos os tipos Collection (Set, Bag e Sequence) n Operações: n – – – size count(object) includes. All(collection) is. Empty not. Empty sum() exists(expression) for. All(expression) including(object) excluding(object)
Loyalty. Program 1. . n enroll() +partners 1. . n Program. Partner number. Of. Customers : Integer 1. . n Service. Level name : String Context Loyalty. Program inv: service. Level->size = 2
Loyalty. Program 1. . n enroll() Context Service. Level inv: loyalty. Program. partners -> +partners 1. . n Program. Partner number. Of. Customers : Integer includes. All(available. Services. progr am. Partner) 1. . n 0. . n Service. Level name : String +delivered. Services Service condition : Boolean points. Earned : Integer +available. Services points. Burned : Integer 0. . n description : String
Context Loyalt. Program inv: partners. delivered. Services->for. All ( points. Earned = 0 and points. Burned = 0) implies membership. loyalty. Account->is. Empty
Tipos Collection n Tipo Set – Subtração (-) Set{1, 4, 7, 10} – Set {4, 7} = Set {1, 10} – Diferença simétrica Set{1, 4, 7, 10}. symmetric. Difference(Set{4, 5, 7}) = Set{1, 5, 10} n Tipo Sequence – first, last, append e prepend. Sequence{1, 4, 7, 10}->first = 1 Sequence{1, 4, 7, 10}->last = 10 Sequence{1, 4, 7, 10}->at(3) = 7 Sequence{1, 4, 7, 10}->append( 15 ) = Sequence{15, 1, 4, 7, 10} Sequence{1, 4, 7, 10}->prepend( 15 ) = Sequence{1, 4, 7, 10, 15}
Tipos Collection Context Program. Partner inv: number. Of. Customers = loyalty. Program. customer->size Context Program. Partner inv: number. Of. Customers = loyalty. Program. customer->as. Set ->size
Tipos Collection n Operações de interação
– select Context Customer. Card inv: self. trasactions->select( points > 100 ) –reject
– collect Context Loyalty. Account inv: transaction->collect (points)-> exists (p: Integer | p = 500)
Tipos Collection n Iterate collection->iterate( element : Type 1; result : Type 2 = <expression> | <expression-with-element-and-result>)
– iterate Context Program. Partner inv: self. service. transaction->iterate( t: Transaction; result: Integer = 0 | if t. ocl. Type = Burning then result + points else result endif )
Tipos Modelo Classes (inclusive, classes-associação), tipos e interfaces definidos no modelo UML, são consideradas classes em OCL. n Estes tipos possuem propriedades: n – – n Atributos Operações e métodos Navegações (associações) Enumerações (definidas como tipo de algum atributo) Exemplos: Service, Program. Partner, Customer, etc. Enumeration {silver, gold} definida na classe Customer. Card.
Tipos Modelo n Navegações são tratadas como atributos cujos tipos são tipos modelo ou collections – Se a multiplicidade é no máximo 1, o tipo é modelo Context Customer. Card inv: self. owner. age() > 18 – Se a multiplicidade > 1, o tipo é collection Context Customer inv: self. cards->size = 1
Tipos Modelo n Navegação em classes-associação Context Membership inv: program. service. Level->includes (actual. Level) Context Loyalty. Program inv: service. Level->includes. All ( membership. actual. Level)
Restrições e Herança n Principio Liskov: “Onde quer que uma instância de uma classe seja esperada, ela pode ser substituída por uma instância de alguma de suas sub-classes” n Na redefinição de uma restrição em uma sub-classe: – Uma invariante pode ser fortalecida, não enfraquecida – pré-condição deve ser enfraquecida, não fortalecida – Pós-condição deve ser fortalecida, não enfraquecida
Restrições e Herança Context Stove inv: temperature <= 200 Context Electric. Stove inv: temperature <= 300 Context Stove inv: temperature <= 150
Restrições e Herança Context Stove: : open() pre: #off post: status = #off and is. Open Context Electric. Stove: : open() pre: #off post: status = is. Open Context Electric. Stove: : open() pre: temperature <= 50 post: status = #off and is. Open
Estilos para especificação OCL n Escolha correta do objeto Context Person inv: wife. employers->intersection (self. employers)->is. Empty and husband. employers->intersection (self. employers)->is. Empty Context Company inv: employees. wife->intersection(self. employees)->is. Empty
Estilos para especificação OCL n Dividir uma restrição em várias Context Program. Partner inv: partners. delivered. Services->for. All(points. Earnerd = 0) and membership. card->for. All(good. Thru = Date. from. YMD(200. 1. 1)) and customer->for. All(age() > 55) Context Program. Partner inv: partners. delivered. Services->for. All(points. Earnerd = 0) Context Program. Partner inv: membership. card->for. All(good. Thru = Date. from. YMD(200. 1. 1)) Context Program. Partner inv: customer->for. All(age() > 55)
Estilos para especificação OCL n Adicionar atributos ou operações extras
Estilos para especificação OCL Context Membership inv: program. partners. delivered. Services->for. All(points. Earned = 0) implies Loyalty. Account->is. Empty Context Loyalty. Program inv: is. Saving = partners. delivered. Services->for. All(points. Earned = 0) Context Membership inv: program. is. Saving implies Loyalty. Account->is. Empty n Evitar expressões de navegação complexa
Questões de modelagem com OCL n Especificar Restrições de unicidade Context Person inv: person. all. Instances->for. All(p 1, p 2 | p 1 <> p 2 implies p 1. social. Security. Number <> p 2. social. Security. Number
Questões de modelagem com OCL n Adicionar detalhes ao modelo versus adicionar restrições
Context Classic. Guitar inv: strings->for. All(ocl. Type = Plastic. String) Context Electric. Guitar inv: strings->for. All(ocl. Type = Metal. String)
Context Guitar inv: type = #classic implies strings->for. All(type = #plastic) Context Guitar inv: type = #electric implies strings->for. All(type = #metal)
Questões de modelagem com OCL n Restrição 0. . 1 or project. Leader Person 0. . 1 {or} project. Member managed. Project 0. . 1 performed. Project
Questões de modelagem com OCL 0. . 1 project. Leader Person 0. . 1 Project project. Member 0. . 1 performed. Project Context Person inv: managed. Project->is. Empty or performed. Project->is. Empty Context Project inv: project. Leader->is. Empty or projectmember->is. Empty
Considerações Finais n OCL é uma linguagem que expressa informação extra em modelos. – – – n Formal Fácil de ler e escrever Declarativa Sem efeitos colaterais Tipada Adotada pela OMG como parte de UML. Extensões – – – Novos tipos Novas operações O que fazer quando uma restrição for violada Geração de código (? ) Outros diagramas: de estados, sequência, etc Ferramentas que permitam geração de código (? )
- Slides: 46