50
OBJECT CONSTRAINT LANGUAGE OCL Tomáš Černý : Object contraint language 1

OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OBJECT CONSTRAINT LANGUAGE

OCL Tomáš Černý : Object contraint language 1

Page 2: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO

Tomáš Černý : Object contraint language 2

{context Flightinv: type = #cargo implies airplane.type = #cargoinv: type = #passenger implies airplane.type = #passenger}

1 0..* Flight Airplane

type : enum of cargo, passenger

type : enum of cargo, passenger

flights

Page 3: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO

Tomáš Černý : Object contraint language 3

{context Flightinv: type = #cargo implies airplane.type = #cargoinv: type = #passenger implies airplane.type = #passenger}

1 0..* Flight Airplane

type : enum of cargo, passenger

type : enum of cargo, passenger

flights

Page 4: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO

Tomáš Černý : Object contraint language 4

{context Flightinv: type = #cargo implies airplane.type = #cargoinv: type = #passenger implies airplane.type = #passenger}

1 0..* Flight Airplane

type : enum of cargo, passenger

type : enum of cargo, passenger

flights

Always true

Page 5: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO

Tomáš Černý : Object contraint language 5

{context Flightinv: type = #cargo implies airplane.type = #cargoinv: type = #passenger implies airplane.type = #passenger}

1 0..* Flight Airplane

type : enum of cargo, passenger

type : enum of cargo, passenger

flights

Page 6: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO II

context Flight

inv: origin <> destination

inv: origin.name = ‘Amsterdam’

context Flight

inv: airline.name = ‘KLM’

Tomáš Černý : Object contraint language 6

Airport

Flight

*

*

departTime: Time /arrivalTime: Time duration : Interval maxNrPassengers: Integer

origin

destination

name: String

arriving Flights

departing Flights

Airline name:String

flights

airline

Page 7: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO II

context Flight

inv: origin <> destination

inv: origin.name = ‘Amsterdam’

context Flight

inv: airline.name = ‘KLM’

inv: airline.name.toLower = ‘klm’

Tomáš Černý : Object contraint language 7

Airport

Flight

*

*

departTime: Time /arrivalTime: Time duration : Interval maxNrPassengers: Integer

origin

destination

name: String

arriving Flights

departing Flights

Airline name:String

flights

airline

Page 8: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL INTRO III context Person inv:

if employer.name = ‘CVUT’ then

job.type = #lecturer

else

job.type = #programmer

endif

Tomáš Černý : Object contraint language 8

Person Company

Job

* 1 employee employer

type : {lecturer, programmer}

name : String

Page 9: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

DEFINITION OF CONSTRAINT n  “A constraint is a restriction on one or more values of (part of)

an object-oriented model or system.”

Tomáš Černý : Object contraint language 9

Page 10: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

HISTORY n  1995 IBEL IBM n  Součást UML 1.1

Tomáš Černý : Object contraint language 10

Page 11: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

UML DIAGRAM NEDOSTAČUJE n  Potřebujeme jazyk pro specifikaci n  Potřebujeme něco pro Objektový návrh

n  ne nový jazyk n  Potřebujeme něco standardizovaného

Tomáš Černý : Object contraint language 11

Page 12: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

ÚČEL OCL n  Jazyk formální specifikace

n  -> implementovatelný

n  Objektový návrh

n  Intuitivní syntax pro OO jazyk

n  Pozor není to programovací jazyk!

Tomáš Černý : Object contraint language 12

Page 13: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

VÝHODY FORMÁLNÍ SPECIFIKACE n  Lepší dokumentace

n  Omezení modelu n  Informace navíc

n  Přesnost

n  Zamezí dvojznačnosti n  Komunikace bez nedorozumění

n  Komunikace mezi vývojářem a analytikem bez nedorozumění

Tomáš Černý : Object contraint language 13

Page 14: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

KAM S OCL n  Specifikace invariantů tříd a typů

n  Co smí a co ne n  Vymezení legálních hodnot n  …

n  Pre- a post-conditions pro metody

n  Navigační jazyk

n  Omezení/vymezení operací n  Test požadavku a specifikace

Tomáš Černý : Object contraint language 14

Page 15: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

EXAMPLE: A MORTGAGE SYSTEM (HYPOTEKA)

Tomáš Černý : Object contraint language 15

1.  A person may have a mortgage only on a house she owns. 2.  The start date of a mortgage is before its end date.

Page 16: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL SPECIFICATION OF THE CONSTRAINTS:

Tomáš Černý : Object contraint language 16

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

1.  A person may have a mortgage only on a house she owns. 2.  The start date of a mortgage is before its end date.

Page 17: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 17

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

OCL SPECIFICATION OF THE CONSTRAINTS:

Page 18: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 18

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

OCL SPECIFICATION OF THE CONSTRAINTS:

Page 19: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 19

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

OCL SPECIFICATION OF THE CONSTRAINTS:

Page 20: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 20

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

OCL SPECIFICATION OF THE CONSTRAINTS:

Page 21: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 21

1. context Mortgage context Mortgage invariant: self.security.owner = self.borrower invariant: security.owner = borrower

2. context Mortgage context Mortgage invariant: self.startDate < self.endDate invariant: startDate < endDate

OCL SPECIFICATION OF THE CONSTRAINTS:

Page 22: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

MORE CONSTRAINTS EXAMPLES n  All players must be over 18. n  The number of guests in each room doesn’t

exceed the number of beds in the room.

Tomáš Černý : Object contraint language 22

context Player invariant: self.age >=18

context Room invariant: guest -> size() <= numberOfBeds

Room room guest Guest numberOfBeds: Integer *

Player

age: Integer

Page 23: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINTS/OMEZENÍ (INVARIANTS), CONTEXTS AND SELF

n  Constraint (invariant) n  Boolean OCL výraz – vyhodnotitelný do true/false

n  Každý constraint je vázán na specifický typ n  (class, association class, interface) v UML modelu n  Má svůj context.

n  Context objektu může být vytičen přes keyword ‘self’. n  Context lze specifikovat přes:

q  Context <context name> q  Přerušovanou čárou spojující objekt v UML modelu

n  Constraint může mít název za klíčovým slovem invariant.

Tomáš Černý : Object contraint language 23

Page 24: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 24

LoyaltyProgram

enroll(c:Customer)

Service

condition: Boolean pointsEarned: Integer pointsBurned: Integer description: String

0..* deliveredServices

Membership

LoyaltyAccount

points: Integer earn(i: Integer) burn(i: Integer) isEmpty(): Boolean

Customer name: String title:String isMale: Boolean dateOfBirth: Date

CustomerCard

valid: Boolean validForm: Date goodThru: Date color: enum{silver, gold} printedName: String

0..* 0..*

age(): Integer

program

owner

card 0..* card

ProgramPartner

numberOfCustomers: Integer

partners

1..*

1..*

ServiceLevel

name: String

availableServices

0..*

{ordered} 1..* 0..1

0..*

actualLevel

Transaction points: Integer date:Date program(): LoyaltyProgram

0..* transactions

card

transactions 0..* transactions

0..*

Burning Earning

Date $now: Date isBefore(t:Date): Boolean isAfter(t:Date): Boolean =(t:Date): Boolean

1

1

1

1

1

1

1

1

1

level

generatedBy

partner 1

account

Page 25: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

USING OCL IN CLASS DIAGRAMS

Tomáš Černý : Object contraint language 25

LoyaltyAccount

points: Integer earn(i: Integer) burn(i: Integer) isEmpty(): Boolean

{ points >= 0 }

<<postcondition>> points = points@pre - i

class invariant

postcondition for burn operation <<postcondition>> result = (points=0)

<<precondition>> points >= i and i >= 0

precondition for burn operation

<<postcondition>> points = points@pre + i

<<precondition>> i >= 0

Page 26: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 26

Invarianty Atributů n  Invarianty atributů: context Customer invariant age-restriction: age >= 18 context CustomerCard invariant correctDates: validFrom.isBefore(goodThru) The type of validFrom and goodThru is Date. isBefore(Date):Boolean is a Date operation. n  The class on which the invariant must be put is the invariant context. n  For the above example, this means that the expression is an invariant of

the Customer class.

Customer name: String title:String isMale: Boolean dateOfBirth: Date

CustomerCard

valid: Boolean validForm: Date goodThru: Date color: enum{silver, gold} printedName: String

age(): Integer

owner

card 0..* 1

Page 27: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 27

Invarianty : Navigace přes associace – role

Navigation over associations is used to refer to Associated objects, starting from the context object: context CustomerCard invariant: owner.age >= 18 owner à a Customer instance. owner.age à an Integer.

Note: This is not the “right” context for this constraint! If the role name is missing – use the class name at the other end of the association, starting with a lowercase letter. Preferred: Always give role names.

Customer name: String title:String isMale: Boolean dateOfBirth: Date

CustomerCard

valid: Boolean validForm: Date goodThru: Date color: enum{silver, gold} printedName: String

age(): Integer

owner

card 0..* 1

Page 28: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 28

Invarianty : Navigace přes associace – roles

context CustomerCard invariant printedName: printedName = owner.title.concat(‘ ‘).concat(owner.name) printedName à a String. owner à a Customer instance. owner.title à a String. owner.name à a String. String is a recognized OCL type. concat is a String operation, with the signature

concat(String): String.

Page 29: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 29

LoyaltyProgram

enroll(c:Customer)

Service

condition: Boolean pointsEarned: Integer pointsBurned: Integer description: String

0..* deliveredServices

Membership

LoyaltyAccount

points: Integer earn(i: Integer) burn(i: Integer) isEmpty(): Boolean

Customer name: String title:String isMale: Boolean dateOfBirth: Date

CustomerCard

valid: Boolean validForm: Date goodThru: Date color: enum{silver, gold} printedName: String

0..* 0..*

age(): Integer

program

owner

cards 0..* card

ProgramPartner

numberOfCustomers: Integer

partners

1..*

1..*

ServiceLevel

name: String

availableServices

0..*

{ordered} 1..* 0..1

0..*

actualLevel

Transaction points: Integer date:Date program(): LoyaltyProgram

0..* transactions

card

transactions 0..* transactions

0..*

Burning Earning

Date $now: Date isBefore(t:Date): Boolean isAfter(t:Date): Boolean =(t:Date): Boolean

1

1

1

1

1

1

1

1

1

level

generatedBy

partner 1

account

Page 30: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 30

Invarianty : Navigace přes associace

Navigation from a class through an association class uses the association class name to obtain all tuples of an object: “The cards of the memberships of a customer are only the customer’s cards”: context Customer invariant correctCard: cards->includesAll(Membership.card) This is exactly the same as the previous constraint: “The owner of the card of a membership must be the customer in the membership”:

context Membership invariant correctCard: card.owner = customer

The Membership correctCard constraint is better!

Page 31: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 31

Invariants using Navigation through Associations with “Many” Multiplicity

Navigation over associations roles with multiplicity greater than 1 yields a Collection type. Operations on collections are accessed using an arrow “->”, followed by the operation name.

“A customer card belongs only to a membership of its owner”: context CustomerCard invariant correctCard: owner.Membership->includes(membership) owner à a Customer instance. owner.Membership à a set of Membership instances. membership à a Membership instance. includes is an operation of the OCL Collection type.

Page 32: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

NAVIGATING TO COLLECTIONS

Tomáš Černý : Object contraint language 32

Customer Account Transaction

context Customer account produces a set of Accounts

context Customer account.transaction produces a bag of transactions

If we want to use this as a set we have to do the following

account.transaction -> asSet

0..* 0..*

Page 33: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 33

LoyaltyProgram

enroll(c:Customer)

Service

condition: Boolean pointsEarned: Integer pointsBurned: Integer description: String

0..* deliveredServices

Membership

LoyaltyAccount

points: Integer earn(i: Integer) burn(i: Integer) isEmpty(): Boolean

Customer name: String title:String isMale: Boolean dateOfBirth: Date

CustomerCard

valid: Boolean validForm: Date goodThru: Date color: enum{silver, gold} printedName: String

0..* 0..*

age(): Integer

program

owner

cards 0..* card

ProgramPartner

numberOfCustomers: Integer

partners

1..*

1..*

ServiceLevel

name: String

availableServices

0..*

{ordered} 1..* 0..1

0..*

actualLevel

Transaction points: Integer date:Date program(): LoyaltyProgram

0..* transactions

card

transactions 0..* transactions

0..*

Burning Earning

Date $now: Date isBefore(t:Date): Boolean isAfter(t:Date): Boolean =(t:Date): Boolean

1

1

1

1

1

1

1

1

1

level

generatedBy

partner 1

account

Page 34: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 34

Navigation to Collections

“The partners of a loyalty program have at least one delivered service”:

context LoyaltyProgram invariant minServices: partners.deliveredservices->size() >= 1 “The number of a customer’s programs is equal to that of his/her valid cards”: context Customer invariant sizesAgree: Programs->size() = cards->select(valid=true)->size()

Page 35: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

Tomáš Černý : Object contraint language 35

Navigation to Collections

“When a loyalty program does not offer the possibility to earn or burn points, the members of the loyalty program do not have loyalty accounts. That is, the loyalty accounts associated with the Memberships must be empty”: context LoyaltyProgram invariant noAccounts: partners.deliveredservices-> forAll(pointsEarned = 0 and pointsBurned = 0) implies Membership.account->isEmpty()

and, or, not, implies, xor are logical connectives.

Page 36: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

THE OCL COLLECTION TYPES n  Collection is a predefined OCL type

q  Operations are defined for collections q  They never change the original

n  Three different collections: q  Set (no duplicates) q  Bag (duplicates allowed) q  Sequence (ordered Bag)

n  With collections type, an OCL expression either states a fact about all objects in the collection or states a fact about the collection itself, e.g. the size of the collection.

n  Syntax: q  collection->operation

Tomáš Černý : Object contraint language 36

Page 37: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

COLLECTION OPERATIONS <collection> → size ( ) → isEmpty ( ) → notEmpty ( )

→ sum ( )

→ count ( object )

→ includes ( object )

→ includesAll ( collection )

Tomáš Černý : Object contraint language 37

Page 38: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

COLLECTIONS CONT. <collection> → select ( e:T | <b.e.>) → reject ( e:T | <b.e.>) → collect ( e:T | <v.e.>)

→ forAll ( e:T* | <b.e.>)

→ exists ( e:T | <b.e.>)

→ iterate ( e:T1; r:T2 = <v.e.> | <v.e.>) b.e. stands for: boolean expression v.e. stands for: value expression

Tomáš Černý : Object contraint language 38

Page 39: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CHANGING THE CONTEXT

Tomáš Černý : Object contraint language 39

context StoreCard invariant: printName = owner.title.concat(owner.name) context Customer cards → forAll ( printName = owner.title.concat(owner.name) )

Customer printName:String points: Integer

1..* owner cards

StoreCard name:String title: String golduser: Boolean

age( ):Integer earn(p:Integer)

Page 40: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

EXAMPLE UML DIAGRAM

Tomáš Černý : Object contraint language 40

takes taken_by Student Module

Assessment

Exam Coursework

0..* 1..*

1..*

1..*

0..* for_module

set_work

submits

submitted_by

name: String code: String credit: Integer

weight: Integer

hours: Integer date: String

Page 41: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINTS a)  Modules can be taken iff they have more than

seven students registered b)   The assessments for a module must total 100% c)  Students must register for 120 credits each year d)   Students must take at least 90 credits of CS

modules each year e)  All modules must have at least one assessment

worth over 50% f)   Students can only have assessments for

modules which they are taking

Tomáš Černý : Object contraint language 41

Page 42: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (A) Modules can be taken iff they have more than seven students registered

Note: when should such a constraint be imposed?

context Module

invariant: taken_by→size > 7

Tomáš Černý : Object contraint language 42

Page 43: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (B) The assessments for a module must total 100%

context Module

invariant:

set_work.weight→sum( ) = 100

Tomáš Černý : Object contraint language 43

Page 44: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (C) Students must register for 120 credits each year

context Student

invariant: takes.credit→sum( ) = 120

Tomáš Černý : Object contraint language 44

Page 45: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (D) Students must take at least 90 credits of CS modules each year

context Student

invariant:

takes → select(code.substring(1,2) = ‘CS’).credit→sum( ) >= 90

Tomáš Černý : Object contraint language 45

Page 46: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (E) All modules must have at least one assessment worth over 50%

context Module

invariant: set_work→exists(weight > 50)

Tomáš Černý : Object contraint language 46

Page 47: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

CONSTRAINT (F) Students can only have assessments for modules which they are taking

context Student invariant: takes→includesAll(submits.for_module)

Tomáš Černý : Object contraint language 47

Page 48: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

OCL CONSTRAINTS n  A constraint is a restriction on one or more values of (part of) an

object model/system. n  Constraints come in different forms:

q  invariant n  constraint on a class or type that must always hold

q  pre-condition n  constraint that must hold before the execution of an op.

q  post-condition n  constraint that must hold after the execution of an op.

q  guard n  constraint on the transition from one state to another.

Tomáš Černý : Object contraint language 48

We studied only class constraints (invariants).

Page 49: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

FURTHER RESOURCES FOR OCL

n  The Object Constraint Language n  ISBN 0-201-37940-6

n  OCL home page

n  www.klasse.nl/ocl/index.htm

Tomáš Černý : Object contraint language 49

Page 50: OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object contraint language 4 {context Flight inv: type = #cargo implies airplane.type = #cargo

FURTHER RESOURCES FOR OCL n  The Amsterdam Manifesto on OCL

n  In Object Modeling with the OCL (LNCS2263) p115-149 n  The Object Constraint Language, Precise Modeling with UML,

Addison-Wesley, 1999. n  The Object Constraint Language, Precise Modeling with UML 2nd n  Response to the UML 2.0 OCL RfP (ad/2000-09-03) Revised

Submission, Version 1.6 January 6, 2003 n  Some Shortcomings of OCL, the Object Constraint Language of

UML n  Mandana Vaziri and Daniel Jackson,1999

n  http://www.klasse.nl/english/uml/ UML CENTER n  Informal formality? The Object Constraint Language and its

application in the UML metamodel n  Anneke Kleppe, Jos Warmer, Steve Cook

n  A Pratical Application of the Object Constraint Language OCL n  Kjetil Moage

n  The UML's Object Constraint Language: OCL Specifying Components, JAOO Tutorial – September 2000 n  Jos Warmer & Anneke Kleppe

Tomáš Černý : Object contraint language 50