OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object...
Transcript of OBJECT CONSTRAINT LANGUAGE OCL - moodle.fel.cvut.cz¡vrh... · OCL INTRO Tomáš Černý : Object...
![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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/1.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/12.jpg)
ÚČ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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/18.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/23.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/24.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/25.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/26.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/28.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/29.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/30.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/31.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/32.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/33.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/35.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/36.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/37.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/38.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/39.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/40.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/41.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/42.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/43.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/44.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/45.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/46.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/47.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/48.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/49.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022040415/5f2cedfff8a94848637544c7/html5/thumbnails/50.jpg)
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