46
1 The Object Constraint Language Jos Warmer and Anneke Kleppe. OCL: The Constraint Language of the UML, Journal of Object-Oriented Programming, 2(2):10-13, May 1999. Jos Warmer and Anneke Kleppe. The Object Constraint Language, second edition, Addison- Wesley, 2003. 1

The Object Constraint Language

Embed Size (px)

DESCRIPTION

The Object Constraint Language. Jos Warmer and Anneke Kleppe. OCL: The Constraint Language of the UML, Journal of Object-Oriented Programming, 2(2):10-13, May 1999. Jos Warmer and Anneke Kleppe. The Object Constraint Language, second edition, Addison-Wesley, 2003. 1. Outline. Motivation - PowerPoint PPT Presentation

Citation preview

Page 1: The Object Constraint  Language

1

The Object Constraint Language

Jos Warmer and Anneke Kleppe. OCL: The Constraint Language of the UML, Journal of Object-Oriented Programming, 2(2):10-13, May 1999.

Jos Warmer and Anneke Kleppe. The Object Constraint Language, second edition, Addison-Wesley, 2003.

1

Page 2: The Object Constraint  Language

2

Outline

• Motivation• Basics of OCL• OCL types• OCL collections• Other features

2

Page 3: The Object Constraint  Language

3

Motivation---Problem

• UML diagrams don’t tell everything– Can’t express a rich semantics of and all relevant

information about an application– Lack expressiveness

• Q: What does the following class diagram tell?

parents

Person

0..2

0..* children

Page 4: The Object Constraint  Language

4

Motivation---Problem

• Is this a valid object diagram?– Q: What’s wrong with it?– Q: How to fix it using Z?

parents

joe: Personchildren

parents

Person

0..2

0..* children

Page 5: The Object Constraint  Language

5

Motivation---Solution

• Specify constraints explicitlyA person can’t be one’s own parents or children, e.g.,

this parents

inv: not parents->includes(self)

parents

Person

0..2

0..* children

Page 6: The Object Constraint  Language

6

Exercise

• Formulate constraints for a derived association.

parents

Person

0..2

0..* children0..*

0..*/family tree

ancestors

descendants

Page 7: The Object Constraint  Language

7

What Is OCL?

• Standard “add-on” to UML– OCL expressions dependent on types from UML diagrams

• Language for expressing additional information (e.g., constraints and business rules) about UML models

Page 8: The Object Constraint  Language

8

Characteristics of OCL

• Constraint and query languages– UML 1.1: Constraints– UML 2.0: Queries, reference values, conditions, business rules

• Math foundation but no math symbols– Set theory and predicate logic

• Strongly typed language– Checking possible

• Declarative language– What vs. how (algorithmic or procedural)– No side effect– High level of abstraction (platform independence)

Page 9: The Object Constraint  Language

9

Outline

Motivation• Basics of OCL• OCL types• OCL collections• Other features

9

Page 10: The Object Constraint  Language

10

Basics of OCL

• Associating OCL expressions to UML models– Directly to diagrams as notes– Separate accompanying texts, e.g.,

context Person

inv: age >= 0

Person

-ageinv: age >= 0

Page 11: The Object Constraint  Language

11

Basic: Specifying Invariants

• Invariants: state conditions that must be always be met by all instances of context types (classes or interfaces)

context Company inv:

self.numberOfEmployees > 50

context c: Company inv:

c.numberOfEmployees > 50

context c: Company inv enoughEmployees:

c.numberOfEmployees > 50

self: contextual instance, an instance to which the OCL expression is attached

An explicit specification of contextual instance, c

an optional label

Page 12: The Object Constraint  Language

12

Basic: Pre and Post-conditions

• Pre and post-conditions: conditions that must be true at the moment when an operation begins and ends its execution.

context Account::deposit(amt: Integer): void pre: amt > 0 post: balance = balance@pre + amt

context Account::deposit(amt: Integer): void pre argumentOk: amt > 0 post balanceIncreased: balance = balance@pre + amt

optional label

pre-value, referring to previous value

Page 13: The Object Constraint  Language

13

Referring to Pre-value and Result

• @pre: denotes the value of a property at the start of an operations

• result: denotes the result of an operation

context Account::payInterest(rate: Real): void post: balance = balance@pre + calcInterest@pre(rate)

context Account::getBalance(): Integer post: result = balance

Page 14: The Object Constraint  Language

14

Navigating in OCL Expressions

• Use dot notation to navigate through associations– Direction and multiplicity matter– Use role names or class names

context Account inv: self.owner … -- evaluate to a single Customer self.customer …

context Customer inv: self.accounts->size() … -- evaluate to a collection self.account … -- of accounts

CustomerAccount0..* 1

accounts owner

Arrow notation for collection operations

single line (--) or multiple lines (/* … */)

Page 15: The Object Constraint  Language

15

Exercise

• Write pre and post-conditions

• Pair (5 minutes)

Person

- sex: Sex

+ marry(p: Person): void0..1

spouse

Page 16: The Object Constraint  Language

16

Exercise

• Formulate constraints or business rules for the following class diagram.

16

Page 17: The Object Constraint  Language

17

ExerciseModel the following software by drawing a class diagram and formulating the constraints the class diagram has to satisfy. The software system automates test taking by allowing an instructor to prepare test questions and students to take tests.

1. The system shall allow an instructor to add test questions, Each question is a multiple choice question consisting of a stem---that presents the problem to be solved or the question to be answered---and a set of options---that are possible answers. Test questions are classified by topics, difficulty levels, and similarity.

2. The system shall allow an instructor to create a test on specific topics by suggesting a set of questions that meets the instructor's request (e.g., number of questions and their distributions among different topics and difficulty levels).

3. The system shall allow students to take tests prepared by the instructor.4. The system shall grade tests taken by students to calculate test scores.5. The system shall allow both the instructor and the students view their

scores. However, students are allowed to view only their tests.

17

Page 18: The Object Constraint  Language

18

Outline

MotivationBasics of OCL• OCL types• OCL collections• Other features

18

Page 19: The Object Constraint  Language

19

Types in OCL

• Two different kinds– Predefined types (as defined in standard library)

• Basic types: Integer, Real, String, Boolean• Collection types: Set, OrderedSet, Bag, Sequence

– User-defined types: classes, interfaces, and enumerations.

• Value vs. object types– Immutable vs. mutable types– All predefined types are value types, i.e., there is no

mutation operation defined.

19

Page 20: The Object Constraint  Language

20

Basic Types

Type Values Operations

Boolean false, true or, and, xor, not, =, <>, implies

Integer -10, 0, 10, … =, <>, <, >, <=, >=, +, -, *, /, mod(), div(), abs(), max(), min(), round(), floor()Real -1.5, 3.14, …

String ‘Carmen’=, <>, concat(), size(), toLower(), toUpper(), substring()

• Several basic types with operations

Page 21: The Object Constraint  Language

21

Integer and Real

• No restriction on size and precision• Operations: =, <>, <, >, <=, >=, +, -, *, /, mod,

div, abs, max, min, round, floor• Prefix vs. infix operations, e.g.,

5.max(10)5.+(10)5 + 10

• Axioms of associativity and commutitivity hold:a + (b + c) = (a + b) + ca + b = b + a

Page 22: The Object Constraint  Language

22

String

• Operations: concat, size, toLower, toUpper, substring, =, <>

• Constants: 'cs 5381'

• 1-based index for substring, substring(l,u)Q: Pre- and post-conditions of substring?

Page 23: The Object Constraint  Language

23

Boolean

• Operations: or, and, xor, not, =, <>, implies, if-then-else-endif

• Order of evaluation and "undefined" value– Undefined represented by OclVoid, conforming to all

types (cf. isUndefined() from OclAny)– Mostly strict interpretation except for boolean

operators– Q: Truth table for: and, or, xor, implies, not?

Page 24: The Object Constraint  Language

24

OclAny• Supertype of all types• Operations useful for every type of OCL instance, e.g.,

– = (o2: OclAny): Boolean– <> (o2: OclAny): Boolean– oclIsUndefined(): Boolean – oclIsTypeOf(t: OclType): Boolean– oclIsKindOf(t: OclType): Boolean– oclIsNew(): Boolean– oclAsType(t: OclType): OclType– T::allInstances(): Set(T)*Both = and <> are mostly redefined by subtypes

Q: Use of oclAsType?Accessing subtype's features and supertype's overridden features

Q: Difference between oclIsTypeOf and oclIsKindOf?

Page 25: The Object Constraint  Language

25

Using and Navigating User-defined Types

• Can use (class) attributes and query operations of user-defined types

• Can use associations and aggregations– Use role names or, if unambiguous, type names– If multiplicity > 1, collections based on properties

• Set: {unique} (default)• OrderedSet: {unique, ordered}• Bag: {notUnique}• Sequence: {notUnique, ordered}

context Account inv: self.owner.name <> ''

context Customer inv: self.accounts->size() > 0

CustomerAccount0..* 1

accounts owner

Page 26: The Object Constraint  Language

26

Navigating User-defined Types

• Navigating more than one association with multiplicity "many"– Bag– Sequence if at least one is marked {ordered}

context Bank

inv: self.customers.accounts->forAll(balance > 0)

Customer Account0..*

accounts

Bank0..*

customers

Page 27: The Object Constraint  Language

27

Using Enumeration

• Use “::” notation

context Account

inv: type = AccountType::gold implies minBalance > 10000 and

type = AccountType::silder implies minBalance > 5000

<<enumeration>>AccountType

goldsilver

Account1

type

Page 28: The Object Constraint  Language

28

Using Association Class

• Use class name (with a lowercase character) and role names

context Courseinv: self.outcome->forAll(score > 90)

context Outcomeinv: score > 90Inv: students.enrolled -- the student associated with this outcome

Course0..*

Outcome

score: Integer

Student

students

0..*

Page 29: The Object Constraint  Language

29

Outline

MotivationBasics of OCLOCL types• OCL collections• Other features

29

Page 30: The Object Constraint  Language

30

Collections in OCL

• Why?– Multiple objects produced by navigating associations

• Standard collection types– Parameterized with elements types, e.g.,

Set(Account)– Value/immutable types, not reference types– One abstract and four concrete types

• Collection• Set, OrderedSet, Bag, Sequence• Determined based on properties of associations, e.g.,

unique, ordered, and sorted.

Page 31: The Object Constraint  Language

31

Collection Types

• Properties Type Duplicate? Ordered?

SetOrderedSetBagSequence

NNYY

NYNY

*Ordered doesn’t mean sorted.

• Constants– Set{10, 100}

– OrderedSet{'apple', 'orange'}

– Bag{10, 10, 100}

– Sequence{10, 10, 100}, Sequence{1..10}, Sequence{1..(5 + 5)}

– Set{Set{1}, Set{10}}

Page 32: The Object Constraint  Language

32

Collection Operations

• Large number of predefined operations • Arrow notation, e.g., c->size()

– Rationale: allow same-named, user-defined operations, e.g., c.size()

CustomerAccount0..* 1

accounts owner

context Account context Account inv: not owner->isEmpty() inv: not owner.isEmpty()

Page 33: The Object Constraint  Language

33

Collection Operations

Operation Description

count(o)excludes(o)excludesAll(c)includes(o)includesAll(c)isEmpty()notEmpty()size()sum()

Number of occurrences of o in the collection (self)Is o not an element of the collection?Are all the elements of c not present in the collection?Is o an element of the collection?Are all the elements of c contained in the collection?Does the collection contain no element?Does the collection contain one or more elements?Number of elements in the collectionAddition of all elements in the collection

Defined on all collection types

Type-specific operationsappend, including, excluding, first, last, insertAt, etc.

Page 34: The Object Constraint  Language

34

Exercise

Write pre- and post-conditions for:– includes– excludes– includesAll– excludesAll– isEmpty– notEmpty

Hint: use forAll operations for includesAll and excludesAll.

Page 35: The Object Constraint  Language

35

ExerciseWrite pre and postconditions for:

Set union(s: Set(T)): Set(T) =(s: Set(T)): Boolean including(o: T): Set(T)

OrderedSet append(o: T): OrderedSet(T) insertAt(i: Integer, o: T): OrderedSet(T)

Bag excluding(o: T): Bag(T) Sequence subSequence(l: Integer, u: Integer): Sequence(T)

Page 36: The Object Constraint  Language

36

Iteration Operations

• Loop over elements by taking one element at a time• Iterator variables

– Optional variable declared and used within body– Indicate the element being iterated– Always of the element type, thus, type declaration is optional

context Customer

inv: self.accounts->forAll(a: Account | a.owner = self)

inv: accounts->forAll(a | a.owner = self)

inv: accounts->forAll(owner = self)

CustomerAccount0..* 1

accounts owner

Page 37: The Object Constraint  Language

37

Iteration Operations

Operation Descriptionany(expr)collect(expr)

exists(expr)forAll(expr)isUnique(expr)iterate(x: S; y: T| expr)one(expr)reject(expr)select(expr)sortedBy(expr)

Returns any element for which expr is trueReturns a collection that results from evaluating expr for each element of selfHas at least one element for which expr is true?Is expr true for all elements?Does expr has unique value for all elements?Iterates over all elementsHas only one element for which expr is true?Returns a collection containing all elements for which expr is falseReturns a collection containing all elements for which expr is trueReturns a collection containing all elements ordered by expr

Page 38: The Object Constraint  Language

38

Examples

accounts->any(a: Account | a.balance > 1000)accounts->collect(name) -- all the namesaccounts->exists(balance > 5000)accounts->forAll(balance >= 0)accounts->isUnique(name)accounts->iterate(a: Account; sum: Integer = 0 | sum + a.balance)accounts->one(name = “Carmen”)accounts->reject(balance > 1000)accounts->select(balance <= 1000)accounts->sortedBy(balance)

Page 39: The Object Constraint  Language

39

Select vs. Collect

• Q: Difference between select and collect?• Note that the dot notation is short for collect,

e.g.,

context Bank

inv: self.customers.accounts->forAll(balance > 0)

inv: self.customers->collect(accounts)->forAll(balance > 0)

Customer0..*

accountscustomers

Account

balance: IntegerBank

0..*

Note that results are flattened for “collect” and not for “collectNested”.

Page 40: The Object Constraint  Language

40

The Iterate Operation

• Most fundamental and generic loop operation• All other loop operations are special cases

iterate(elem: T1; result: T2 = expr | expr-elem-result)

• Example

Set{1, 2, 3}->sum()

Set{1, 2, 3}->iterate(i: Integer; r: Integer = 0 | r + i)

Page 41: The Object Constraint  Language

41

Exercise

• Pair (3 minutes)• Write the pre- and post-conditions of the

getBelowAverage operation that returns all the accounts of a customer of which balances are below the average balance of the customer’s accounts.

0..*1

accounts

Account

+ getBalance(): Real

Customer

+ getBelowAverage(): Set(Account)

Page 42: The Object Constraint  Language

42

Exercise

• Write pre- and post-conditions of the following operations in terms of the iterate operation:

size, count, sum, and excluding(o: T): Sequence(T)

• Define the following operations in terms of the iterate operation:

forAll, any, one, select, reject

E.g., source->exists(vars|body) = source->iterate(vars; result: Boolean = false| result or body)

Page 43: The Object Constraint  Language

43

Initial Values and Derivation Rules

• Specify initial values for attributes and association ends

context Account::balanceinit: 0

• Specify derivation rules for derived attributes and associations

context Person::printedNamederive: lastName.concat(', ').concat(firtName)

Q: How to indicate derived attributes and associations in UML?Q: Difference between initial values and derivation rules?

Page 44: The Object Constraint  Language

44

Outline

MotivationBasics of OCLOCL typesOCL collections• Other features

44

Page 45: The Object Constraint  Language

45

Introducing New Attributes and Operations

• Can add new attributes and operations to UML models

context Account

def: isJointlyOwned: Boolean = owners->size() > 1

context Account

def: numOfOwners(): Integer = owners->size()

Customer0..*

owners

Account

balance: Integer

Page 46: The Object Constraint  Language

46

Message Sending

• The isSent (^) operator in post-conditions specifies communication (e.g., method call or signal) has taken place.

context Subject::hasChanged() post: observer^update(10, 20)

context Subject::hasChanged() post: observer^update(?: Integer, ?: Integer)