48
UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE

UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Embed Size (px)

Citation preview

Page 1: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

UML - OCL

Franklin RamalhoDSC-UFCGCIn - UFPE

Page 2: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Roteiro

UML– Introdução– Diagramas– Diagrama de classes

OCL– Introdução– Invariantes, pré e pós-Condições– Tipos– Estilos de programação e questões de modelagem

Considerações Finais

Page 3: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições
Page 4: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

Empresa de Software de sucesso ↔ desenvolve software de qualidade e atende aos usuários

Modelagem é uma tarefa fundamental nas atividades iniciais do desenvolvimento do software– Comunicar a estrutura e comportamento desejados para o sistema

– Visualizar e controlar a arquitetura do software

– Melhor entendimento do sistema

– Gerenciar os riscos

– Etc, ... É preciso utilizar uma linguagem expressiva, simples e padrão

Page 5: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

UML é uma linguagem para especificação, visualização, construção e documentação de artefatos de sistemas de software.– Linguagem padrão adotada e recomendada pela OMG.

Extensível Apenas uma linguagem Independente de processo Amplamente utilizada pelo mercado e pela academia Inter-disciplinar Não possui semântica formal bem definida Abrange modelagem estrutural e comportamental Sub-dividida em diagramas (9)

Page 6: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

Parte estrutural – Diagrama de classes– Diagrama de objetos– Diagrama de Componentes– Diagrama de Desenvolvimento

Classes, interfaces e relacionamentosObjetos e relacionamentosComponentes e

dependênciasNodos e configurações

Page 7: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

Parte comportamental– Diagrama de Colaboração– Diagrama de Seqüência– Diagrama de Casos de Uso– Diagrama de estados– Diagrama de atividades

Diagramas de Interação: Objetos, relacionamentos

e mensagens} Casos de uso, atores e relacionamentos

Máquina de estados: Estados, transições, eventos e atividades}

Page 8: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes

É um diagrama que mostra um conjunto de classes, interfaces e relacionamentos.

Responsável por modelar a parte estática do sistema Uma classe é uma descrição de um conjunto de

objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica

Interface é uma coleção de operações que são usadas para especificar um serviço de uma classe

Um relacionamento é uma conexão entre classes. Pode conter notas, restrições e pacotes

Page 9: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes

Rectangle Circle Polygon

display()

Square

Shape

origin

display()move()resize()

ShapeInterface

display()move()resize()

Tipo especial de Rectangle que possui os lados de mesmo tamanho

ShapePackage

Page 10: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes Adornos aplicados às classes, atributos e operações:

– Visibilidade – especifica se ela pode ser usada por outros classificadores

• Public (+)

• Protected (#)

• Private (-)

– Escopo – especifica se a propriedade aparece em cada instância do classificador ou se existe apenas uma instância da característica para todas as instâncias do classificador

• Instance (default)

• Classifier (propriedade sublinhada)

Page 11: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes Outras propriedades:

– Abstract (nome da classe em itálico)

– Leaf ‘{leaf}’ após nome da classe

– Root ‘{root}’ após nome da classe

Rectangle Circle {leaf} Polygon

display()

Square

Shape

origin : Point = (0,0)id : Integer {addOnly}

display()move()resize()

ShapeInterface

display()move()resize()

Tipo especial de Rectangle que possui os lados de mesmo tamanho

Page 12: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes Um relacionamento é uma conexão entre classes.

FilmClip

name

playOn(c : Channel)

Channel

Generalização – relacionamento entre uma classe geral (super-classe) e uma mais específica (sub-classe)

Dependência – indica que a mudança na especificação de uma classe deve afetar uma outra classe.

Shape

Rectangle Circle Polygon

Square

Page 13: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes Associação é um relacionamento estrutural, que especifica

que objetos de uma classe são conectados com objetos de uma outra classe

Associação entre todo-parte é conhecida como agregação

Composição é um tipo especial de agregação que ocorre quando o tempo de vida do todo e da parte são iguais

Company

1

*

Department

*

1 1

1..*1..*

1

Company

Department

CompanyPerson

Page 14: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classes

Vários adornos aplicados às associações– Nome, Papéis, Multiplicidade, etc.

Rectangle Circle {leaf} Polygon

display()

Square

Shape

origin : Point = (0,0)id : Integer {addOnly}

display()move()resize()

ShapeInterface

display()move()resize()

Tipo especial de Rectangle que possui os lados de mesmo tamanho

Realização é um relacionamento entre classificadores onde um especifica um contrato e outro garante cumpri-lo

Person

+employer

0..* 1..*

+employee

1..*0..* CompanyWorks for

Page 15: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Diagrama de Classe

Uma associação entre duas classes pode possuir propriedades: classes-associação

Person Company1..*0..*Works for

+employee+employer

1..*0..*

Job

descriptiondateHiredsalary

Page 16: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Burning Earning

Transactionpoints : Integerdate : Date

program()

LoyaltyAccountpoints : Integer

earn()burn()isEmpty()

0..n+transactions 0..n

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : enum{silver, gold}printedName : String

0..n

+transactions

0..n

+cardService

condition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : String

0..n

+transactions

0..n

Membership

0..10..1 +card

Customername : Stringtitle : Stringismale : BooleandateOfBirth : Date

age()

0..n+cards 0..n

+owner

ProgramPartnernumberOfCustomers : Integer

0..n +deliveredServices0..n

LoyaltyProgram

enroll()0..n0..n 0..n

+program

0..n1..n

1..n

1..n

+partners 1..n

ServiceLevelname : String

0..n

+availableServices

0..n

0..n0..n

+actualLevel

1..n1..n

Page 17: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições
Page 18: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

UML não provê todos aspectos relevantes da especificação do sistema

Linguagem Natural é ambigua Linguagens formais requerem forte conhecimento

matemático 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.

Page 19: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

Linguagem formal de fácil escrita e leitura Não é uma linguagem de programação Sem efeitos colaterais Linguagem tipada Avaliação instântanea

Page 20: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Introdução

Uso de OCL:– Especificar invariantes– Descrever pre e pos condições sobre operações e

métodos– Servir como linguagem de navegação

Page 21: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Burning Earning

Transactionpoints : Integerdate : Date

program()

LoyaltyAccountpoints : Integer

earn()burn()isEmpty()

0..n+transactions 0..n

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : enum{silver, gold}printedName : String

0..n

+transactions

0..n

+cardService

condition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : String

0..n

+transactions

0..n

Membership

0..10..1 +card

Customername : Stringtitle : Stringismale : BooleandateOfBirth : Date

age()

0..n+cards 0..n

+owner

ProgramPartnernumberOfCustomers : Integer

0..n +deliveredServices0..n

LoyaltyProgram

enroll()0..n0..n 0..n

+program

0..n1..n

1..n

1..n

+partners 1..n

ServiceLevelname : String

0..n

+availableServices

0..n

0..n0..n

+actualLevel

1..n1..n

Page 22: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Invariantes É uma expressão cujo resultado deve ser verdadeiro para

todas as instâncias da classe, tipo ou interface associada

Exemplos:

Context c : Customer inv MinimumAge:c.age() >= 18

Context Customer inv:self.age() >= 18

Podem ser representadas através:

– Nota no modelo UML

– Estereótipo <<invariant>>– Arquivo separado– Tab específico provido por ferramentas

Page 23: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Invariantes

Exemplo:Context membership inv:

card.owner = customer

Context CustomerCard inv:

printedName = customer.title.concat (customer.name)

Page 24: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Invariantes

<<invariant>>Context Customer inv:self.age() >= 18

Customername : Stringtitle : Stringismale : BooleandateofBirth : date

age()

<<invariant>>Context Customercard inv:printedname = customer.title.concat( customer.name)

CustomerCardvalid : Booleanvalidfrom : DategoodThru : DateprintedName : string

Page 25: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Pre e pos-condições Pré-condição é uma restrição que deve ser verdadeira no

inicio da execução da operação. Pós-condição é uma restrição que deve ser verdadeira no final

da execução da operação.

Context Typename::operationName (param1 : Type1, ...) : ReturnType

pre: param1 > ...

post: result = ...

Context LoyaltyAccount::isEmpty() : Boolean

pre: -- none

post: result = ( points = 0)

Context LoyaltyProgram::enroll(c : Customer)

pre: not customer->includes(c)

post: customer = customer@pre->including(c)

Page 26: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Pre e pos-condições Podem ser representadas através:

– Nota no modelo UML– Estereótipos <<precondition>> e <<poscondition>>– Arquivo separado– Tab específico provido por ferramentas

LoyaltyProgram

enroll()

<<precondition>>not customer->includ...

<<postcondition>>customer = customer@pre-...

Page 27: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos e instâncias Tipos Pré-definidos

– Tipos Básicos• Integer• Real• String• Boolean

– Tipos Collection• Set• Bag• Sequence• Collection

Tipos Modelo– classes, interfaces ou tipos definidos no modelo UML

Page 28: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Básicos Boolean

Context Customer inv:

title = (if isMale = true

then ‘Mr.’

else ‘Ms.’

endif)

Context Customer inv:

age() > 21 and age() < 65

Page 29: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Collection Collection - supertipo abstrato usado para definir

operações comuns entre todos os tipos Collection (Set, Bag e Sequence)

Operações:– size– count(object)– includes(object)– includesAll(collection)– isEmpty– notEmpty– sum()– exists(expression)– forAll(expression)– including(object)– excluding(object)

Page 30: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

ProgramPartnernumberOfCustomers : Integer

LoyaltyProgram

enroll()

ServiceLevelname : String

1..n

+partners 1..n

1..n

1..n

1..n1..n

Context LoyaltyProgram inv:

serviceLevel->size = 2

Page 31: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

ProgramPartnernumberOfCustomers : Integer

LoyaltyProgram

enroll()

Servicecondition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : String

ServiceLevelname : String

1..n

+partners 1..n

1..n

1..n

+deliveredServices0..n0..n

+availableServices

0..n0..n

1..n1..n

Context ServiceLevel inv:

loyaltyProgram.partners ->

includesAll(availableServices.programPartner)

Page 32: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Context LoyaltProgram inv:

partners.deliveredServices->forAll ( pointsEarned = 0 and pointsBurned = 0) implies membership.loyaltyAccount->isEmpty

ProgramPartnernumberOfCustomers : Integer

LoyaltyProgram

enroll()

Servicecondition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : String

ServiceLevelname : String LoyaltyAccount

points : Integer

earn()burn()isEmpty()

Membership

1..n

+partners 1..n

1..n

1..n

+deliveredServices0..n0..n

+availableServices

0..n0..n

+actualLevel

1..n1..n

0..10..1

0..n0..n

Page 33: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Collection Tipo Set

– Subtração (-)Set{1, 4, 7, 10} – Set {4, 7} = Set {1, 10}

– Diferença simétricaSet{1, 4, 7, 10}.symmetricDifference(Set{4, 5, 7}) = Set{1, 5, 10}

Tipo Sequence– first, last, at, append e prepend.Sequence{1, 4, 7, 10}->first = 1Sequence{1, 4, 7, 10}->last = 10Sequence{1, 4, 7, 10}->at(3) = 7Sequence{1, 4, 7, 10}->append( 15 ) = Sequence{1, 4, 7, 10, 15}Sequence{1, 4, 7, 10}->prepend( 15 ) = Sequence{15, 1, 4, 7, 10}

Page 34: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Collection

Context ProgramPartner inv:numberOfCustomers = loyaltyProgram.customer->size

Context ProgramPartner inv:numberOfCustomers = loyaltyProgram.customer->asSet->size

0..n

Customername : Stringtitle : Stringismale : BooleandateOfBirth : Date

age()

LoyaltyProgram

enroll()

ProgramPartnernumberOfCustomers : Integer

+program

0..n 0..n0..n1..n

+partners 1..n

1..n

1..n

Page 35: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Collection Operações de interação

Page 36: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

– select

Context CustomerCard inv:

self.trasactions->select( points > 100 )

LoyaltyAccountpoints : Integer

earn()burn()isEmpty()

Transactionpoints : Integerdate : Date

program()

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : enum{silver, gold}printedName : String

+transactions 0..n

+transactions

0..n

0..n

+card

0..n

–reject

Page 37: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

– collectContext LoyaltyAccount inv:

transaction->collect (points)-> exists (p: Integer | p = 500)

LoyaltyAccountpoints : Integer

earn()burn()isEmpty()

Transactionpoints : Integerdate : Date

program()

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : enum{silver, gold}printedName : String

+transactions 0..n

+transactions

0..n

0..n

+card

0..n

Page 38: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Modelo Classes (inclusive, classes-associação), tipos e

interfaces definidos no modelo UML, são consideradas classes em OCL.

Estes tipos possuem propriedades:– Atributos– Operações e métodos– Navegações (associações)– Enumerações (definidas como tipo de algum atributo)

Exemplos: Service, ProgramPartner, Customer, etc. Enumeration {silver, gold} definida na classe CustomerCard.

Page 39: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

+card

Burning Earning

Customername : Stringtitle : Stringismale : BooleandateOfBirth : Date

LoyaltyAccountpoints : Integer

earn()burn()isEmpty()

CustomerCardvalid : BooleanvalidFrom : DategoodThru : Datecolor : enum{silver, gold}printedName : String

0..n+cards 0..n

+owner

Transactionpoints : Integerdate : Date

program()

0..n+transactions 0..n

0..n

+transactions

0..n

Servicecondition : BooleanpointsEarned : IntegerpointsBurned : Integerdescription : String

0..n

+transactions

0..n

Membership

0..10..1

ProgramPartnernumberOfCustomers : Integer

0..n +deliveredServices0..n

ServiceLevelname : String

0..n

+availableServices

0..n

0..n0..n

+actualLevel

LoyaltyProgram

enroll()0..n0..n 0..n

+program

0..n1..n

1..n

1..n

+partners 1..n

1..n1..n

+card

Page 40: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Modelo

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 CustomerCard inv:

self.owner.age() > 18

– Se a multiplicidade > 1, o tipo é collection

Context Customer inv:

self.cards->size = 1

Page 41: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Tipos Modelo

Navegação em classes-associação

Context Membership inv:

program.serviceLevel->includes (actualLevel)

Context LoyaltyProgram inv:

serviceLevel->includesAll ( membership.actualLevel)

Page 42: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Estilos para especificação OCL Escolha correta do objeto Context

0..1

CompanyPerson

0..n0..n

+employers

0..n

+employees

0..n0..1

0..1

wife 0..1

+husband

Context Person inv:wife.employers->intersection (self.employers)->isEmptyandhusband.employers->intersection (self.employers)->isEmpty

Context Company inv:employees.wife->intersection(self.employees)->isEmpty

Page 43: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Estilos para especificação OCL Dividir uma restrição em várias

Context ProgramPartner inv:

partners.deliveredServices->forAll(pointsEarnerd = 0)

and membership.card->forAll(goodThru = Date.fromYMD(200.1.1))

and customer->forAll(age() > 55)

Context ProgramPartner inv:

partners.deliveredServices->forAll(pointsEarnerd = 0)

Context ProgramPartner inv:

membership.card->forAll(goodThru = Date.fromYMD(200.1.1))

Context ProgramPartner inv:

customer->forAll(age() > 55)

Page 44: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Estilos para especificação OCL

Context Membership inv:

program.partners.deliveredServices->forAll(pointsEarned = 0)

implies LoyaltyAccount->isEmpty

LoyaltyProgram

<<oclAttribute>> isSaving : Boolean

Context LoyaltyProgram inv:

isSaving = partners.deliveredServices->forAll(pointsEarned = 0)

Context Membership inv:

program.isSaving implies LoyaltyAccount->isEmpty

Evitar expressões de navegação complexa

Adicionar atributos ou operações extras

Page 45: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Questões de modelagem com OCL Adicionar detalhes ao modelo versus adicionar

restrições

Guitar GuitarString

0..n0..1

+strings

0..n0..1

ElectricGuitar

MetalString

0..10..1

+strings

0..10..1

ClassicGuitar PlasticString

0..n0..1

+strings

0..n0..1

Page 46: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Guitar GuitarString

0..n0..1

+strings

0..n0..1

ElectricGuitar

MetalString

ClassicGuitar PlasticString

Context ClassicGuitar inv:

strings->forAll(oclType = PlasticString)

Context ElectricGuitar inv:

strings->forAll(oclType = MetalString)

Page 47: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

+strings

0..1 0..n0..1 0..n

GuitarStringtype : enum{plastic, metal}

Guitartype : enum{electric, classic}

Context Guitar inv:

type = #classic implies strings->forAll(type = #plastic)

Context Guitar inv:

type = #electric implies strings->forAll(type = #metal)

Page 48: UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições

Considerações Finais OCL é uma linguagem que expressa informação extra

em modelos.– 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 (?)