Jan Pettersen Nytun, UIA, page 1
Jan Pettersen Nytun, UIA, page 1 Content HISTORY COLLECTION - - PowerPoint PPT Presentation
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
Jan Pettersen Nytun, UIA, page 2
- HISTORY
- COLLECTION TYPES AND QUERING IN OCL
- FORMAL LANGUAGE - STATEMENT EXAMPLES
- CONSTRAINTS AND OCL
- EXAMPLES
Content
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.
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
Jan Pettersen Nytun, UIA, page 5
- HISTORY
- COLLECTION TYPES AND QUERING IN OCL
- FORMAL LANGUAGE - STATEMENT EXAMPLES
- CONSTRAINTS AND OCL
- EXAMPLES
Content
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.
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)
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
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!
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
Allowing a Mem ber to be Mem ber of Several Gangs
Jan Pettersen Nytun, UIA, page 12
belonging to two gangs
Allowing a Mem ber to be Mem ber of Several Gangs
Jan Pettersen Nytun, UIA, page 13
belonging to two gangs
Jan Pettersen Nytun, UIA, page 14
asSet
Jan Pettersen Nytun, UIA, page 15
Finding all m em bers of the B-gang
Jan Pettersen Nytun, UIA, page 17
- HISTORY
- COLLECTION TYPES AND QUERING IN OCL
- FORMAL LANGUAGE - STATEMENT EXAMPLES
- CONSTRAINTS AND OCL
- EXAMPLES
Content
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.
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
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?
Jan Pettersen Nytun, UIA, page 21
- HISTORY
- COLLECTION TYPES AND QUERING IN OCL
- FORMAL LANGUAGE - STATEMENT EXAMPLES
- CONSTRAINTS AND OCL
- EXAMPLES
Content
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…
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).
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)
…
Jan Pettersen Nytun, UIA, page 25
- HISTORY
- COLLECTION TYPES AND QUERING IN OCL
- FORMAL LANGUAGE - STATEMENT EXAMPLES
- CONSTRAINTS AND OCL
- EXAMPLES
Content
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”.)
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
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}.
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
What is this? This should not be allowed – this is not xor!
Modify the Constraint: context Account inv: (personOwner-> size() = 1 implies cooperationOwner-> size() = 0) and (personOwner-> size() = 0 implies cooperationOwner-> size() = 1)
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
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