Jan Pettersen Nytun, UIA, page 1 Content HISTORY COLLECTION - - PowerPoint PPT Presentation

jan pettersen nytun uia page 1 content
SMART_READER_LITE
LIVE PREVIEW

Jan Pettersen Nytun, UIA, page 1 Content HISTORY COLLECTION - - PowerPoint PPT Presentation

Jan Pettersen Nytun, UIA, page 1 Content HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES Jan Pettersen Nytun, UIA, page 2 History Formal Languages


slide-1
SLIDE 1

Jan Pettersen Nytun, UIA, page 1

slide-2
SLIDE 2

Jan Pettersen Nytun, UIA, page 2

  • HISTORY
  • COLLECTION TYPES AND QUERING IN OCL
  • FORMAL LANGUAGE - STATEMENT EXAMPLES
  • CONSTRAINTS AND OCL
  • EXAMPLES

Content

slide-3
SLIDE 3

Jan Pettersen Nytun, UIA, page 3

History

  • Formal Languages like Z, have for a long time (ca.

1970) been used to describe things in a precise and unambiguous way.

  • OCL was developed by IBM (1995) and is a part of

UML.

  • It emphasize precision and simplicity. There is

no use of special mathematical symbols.

slide-4
SLIDE 4

Jan Pettersen Nytun, UIA, page 4

Aligning OCL with the OO-Concepts

Level Class Property Ass. OCL

2 (metamodel) the class concept the property concept association concept an OCL construct as a concept 1 a specific class a specific property a specific association OCL Formulas an object of a class a slot with value a link between

  • bjects

a formula instantiated

slide-5
SLIDE 5

Jan Pettersen Nytun, UIA, page 5

  • HISTORY
  • COLLECTION TYPES AND QUERING IN OCL
  • FORMAL LANGUAGE - STATEMENT EXAMPLES
  • CONSTRAINTS AND OCL
  • EXAMPLES

Content

slide-6
SLIDE 6

Jan Pettersen Nytun, UIA, page 6

Some Collection Types in OCL

  • A Set is the mathematical set (no duplicate elements).
  • A Bag is like a set, which may contain duplicates (i.e.,

the same element may be in a bag twice or more).

  • A Sequence is like a Bag in which the elements are
  • rdered.

Both Bags and Sets have no order defined on them.

slide-7
SLIDE 7

Self

[2]: ”Each OCL expression is written in the context

  • f an instance of a specific type. In an OCL expression

the name self is used to refer to the contextual instance.”

A:Gang M1:GangMember M2:GangMember

GangMember 1..* 0..*

member

Gang

When self is A:Gang then

self.member is: Set{@M1,@M2} :Set(GangMember)

B:Gang M4:GangMember M5:GangMember M3:GangMember

context Gang inv: self.member…

self self.member

model instance (example)

slide-8
SLIDE 8

One More Navigation Example

Quiz Question AnswerAlternative

* * 1..* *

alternative

contex Quiz inv: self.question.alternative…

quiz2:Quiz q3:Question a4:AnswerAlternative quiz1:Quiz q1:Question a1:AnswerAlternative q2:Question a3:AnswerAlternative a2:AnswerAlternative

self self.question self.question.alternative self self.question self.question.alternative

Model

When the complete constraint is checked, then self is bound to

  • ne Quiz object

at a time and then the constraint is checked for that bound object.

incomplete constraint

slide-9
SLIDE 9
slide-10
SLIDE 10

The Example continues… Using OCL as a Query Language:

Finding all m em bers no m atter which Gang they belong to

Using USE as OCL tool.

OCL is case sensitive!

slide-11
SLIDE 11

Alternative way to find all m em bers no m atter which Gang they belong to

Single navigation of an association results in a Set. Combined navigations results in a Bag

slide-12
SLIDE 12

Allowing a Mem ber to be Mem ber of Several Gangs

Jan Pettersen Nytun, UIA, page 12

belonging to two gangs

slide-13
SLIDE 13

Allowing a Mem ber to be Mem ber of Several Gangs

Jan Pettersen Nytun, UIA, page 13

belonging to two gangs

slide-14
SLIDE 14

Jan Pettersen Nytun, UIA, page 14

asSet

slide-15
SLIDE 15

Jan Pettersen Nytun, UIA, page 15

slide-16
SLIDE 16

Finding all m em bers of the B-gang

slide-17
SLIDE 17

Jan Pettersen Nytun, UIA, page 17

  • HISTORY
  • COLLECTION TYPES AND QUERING IN OCL
  • FORMAL LANGUAGE - STATEMENT EXAMPLES
  • CONSTRAINTS AND OCL
  • EXAMPLES

Content

slide-18
SLIDE 18

Logical im plication – p im plies q

“p  q” is called a predicate A predicate is a statement that may be true or false depending on the values of its variables.

p  q

If p is true then also q must be true.

slide-19
SLIDE 19

Jan Pettersen Nytun, UIA, page 19

Universal Quantification: ∀

In predicate logic, universal quantification formalizes the notion that a logical predicate is true for all the values that can be bound to the variable. E.g.:

∀a ∈ Integer | (a > 10) → (a + 1 > 10)

Can be read as: For all a of type Integer the following is true: if a is greater then 10 then a +1 is also greater then 10

slide-20
SLIDE 20

Jan Pettersen Nytun, UIA, page 20

Example: Transitivity

In logic and mathematics,

a binary relation R is transitive if

xRy and yRz together imply xRz In predicate logic: ∀a,b,c ∈ X | a R b ∧ b R c → a R c

Less than (<) is a transitive relation: ∀a,b,c ∈ Integer | a < b ∧ b < c → a < c In english: For all Integer a, b, c the following is true if a < b and b < c then also a < c (e.g., 1<2 ∧ 2<4 → 1<4)

Is mother of a transitive relation?

slide-21
SLIDE 21

Jan Pettersen Nytun, UIA, page 21

  • HISTORY
  • COLLECTION TYPES AND QUERING IN OCL
  • FORMAL LANGUAGE - STATEMENT EXAMPLES
  • CONSTRAINTS AND OCL
  • EXAMPLES

Content

slide-22
SLIDE 22

Jan Pettersen Nytun, UIA, page 22

Constraint

[1]: … condition or restriction represented as an expression…. can be attached to any UML model element…. indicates a restriction that must be enforced by correct design of the system…

slide-23
SLIDE 23

Jan Pettersen Nytun, UIA, page 23

Why OCL?

  • The power of the graphical part of UML is limited!
  • OCL gives you power to improve the documentation

in a precise and unambiguous way.

  • OCL parsers (/ evaluators) ensure that the

constraints are meaningful and well formed within the model.

  • To do MDD the models have to be unambiguous

(e.g., when doing code generation, transformations).

slide-24
SLIDE 24

Jan Pettersen Nytun, UIA, page 24

Where To Use OCL?

 Invariants on classes and types  Precondition and postconditions on operations (methods)  Constraints on operations:

  • peration=expression (the return value)

 …

slide-25
SLIDE 25

Jan Pettersen Nytun, UIA, page 25

  • HISTORY
  • COLLECTION TYPES AND QUERING IN OCL
  • FORMAL LANGUAGE - STATEMENT EXAMPLES
  • CONSTRAINTS AND OCL
  • EXAMPLES

Content

slide-26
SLIDE 26

Jan Pettersen Nytun, UIA, page 26

An Invariant Example: Use of Size

GangMember Gang

name : String isArmy : Boolean register(newMember : GangMember)

1..* 0..*

+member

1..* 0..*

  • - The gang is an army if there are more than 100 members.

context Gang inv oneSimpleConstraint: self.isArmy = (member->size() > 100)

An invariant is predicate that is always true (i.e., when the system is at “rest”.)

slide-27
SLIDE 27

Jan Pettersen Nytun, UIA, page 27

GangMember Gang

name : String isArmy : Boolean register(newMember : GangMember)

1..* 0..*

+member

1..*

  • - The gang has grown with one when a new member has been added.
  • - NB! @pre accesses the value before executing the operation

context Gang :: register(newMember : GangMember) pre: not member->includes(newMember) post : member = member@pre->including(newMember)

Use of pre –and post-condition

slide-28
SLIDE 28

Jan Pettersen Nytun, UIA, page 28

Com m ents to Previous Slide

collection->includes(object: T): Boolean is True if object is an element of collection. E.g.: Set{@m 1,@m 2}->includes(@m 2) = true p@pre refers to the value of p before the operation was

  • executed. E.g.: member@pre is the set member before the
  • peration was executed.

collection->including(object: T): Bag(T) is the bag with all elements of collection plus object. E.g.: Set{@m 1,@m 2}->including(@m 3) = Set{@m 1,@m 2,@m 3}.

slide-29
SLIDE 29

Using OCL in USE

What we want:

An account has either a person as owner or a cooperation as owner

context Account inv : personOwner->size() = 1 implies cooperationOwner->size() = 0

slide-30
SLIDE 30
slide-31
SLIDE 31
slide-32
SLIDE 32

What is this? This should not be allowed – this is not xor!

slide-33
SLIDE 33

Modify the Constraint: context Account inv: (personOwner-> size() = 1 implies cooperationOwner-> size() = 0) and (personOwner-> size() = 0 implies cooperationOwner-> size() = 1)

slide-34
SLIDE 34

Jan Pettersen Nytun, UIA, page 34

context Company inv: self.employee->forAll( age <= 70 ) context Company inv: self.employee->forAll( p | p.age <= 70 ) context Company inv: self.employee->forAll( p : Person | p.age <= 70 )

forAll Variations (math. notation: ∀)

Company Person age : Integer

* * employee

Equivalent Constraints

slide-35
SLIDE 35

Jan Pettersen Nytun, UIA, page 35

  • - Every Gang must have a member with a car

contex Gang inv: member->exists(car->size()>0)

Gang

name : String isArmy : Boolean

GangMember 1..* 1 Car

type : String age : Integer

+member 1..* 1 Gun Person 0..* 1 0..* +owner 1 1 0..* +owner 1 0..*

Example: exis

xists

(math. notation: ∃)

collection  exists(exp : OclExpression) : Boolean True if exp is true for one elements of the collection