Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Jan Pettersen Nytun, UIA, page 1. Jan Pettersen Nytun, UIA, page 2 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS."— Presentation transcript:

1 Jan Pettersen Nytun, UIA, page 1

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

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. precisionsimplicityIt emphasize precision and simplicity. There is no use of special mathematical symbols.

4 Jan Pettersen Nytun, UIA, page 4 Aligning OCL with the OO-Concepts LevelClassPropertyAss.OCL 2 (metamodel) the class concept the property concept association concept an OCL construct as a concept 1a specific class a specific property a specific association OCL Formulas 0 an object of a class a slot with value a link between objects a formula instantiated

5 Jan Pettersen Nytun, UIA, page 5 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES Content

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 ordered. Both Bags and Sets have no order defined on them.

7 Self [2]: ”Each OCL expression is written in the context of 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:GangM4:GangMember M5:GangMember M3:GangMember context Gang inv: self.member… self self.member model instance (example)

8 One More Navigation Example QuizQuestionAnswerAlternative * * 1..* * alternative contex Quiz inv: self.question.alternative… quiz2:Quizq3:Questiona4:AnswerAlternative quiz1:Quizq1:Questiona1:AnswerAlternative q2:Questiona3:AnswerAlternative a2:AnswerAlternative selfself.questionself.question.alternative selfself.questionself.question.alternative Model When the complete constraint is checked, then self is bound to one Quiz object at a time and then the constraint is checked for that bound object. incomplete constraint

9 Class Diagram Object Diagram

10 Using OCL as a Query Language Probably not supported by MagicDraw 18.3 Jan Pettersen Nytun, UIA, page 10

11 The Example continues… Finding all members no matter which Gang they belong to Using USE as OCL tool OCL is case sensitive!

12 Alternative way to find all members no matter which Gang they belong to Single navigation of an association results in a Set. Combined navigations results in a Bag

13 Allowing a Member to be Member of Several Gangs Jan Pettersen Nytun, UIA, page 13 belonging to two gangs

14 Allowing a Member to be Member of Several Gangs Jan Pettersen Nytun, UIA, page 14 belonging to two gangs

15 Jan Pettersen Nytun, UIA, page 15 asSet

16 Jan Pettersen Nytun, UIA, page 16

17 Finding all members of the B-gang

18 Jan Pettersen Nytun, UIA, page 18 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES Content

19 Logical implication – p implies 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.

20 Jan Pettersen Nytun, UIA, page 20 Universal Quantification: 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 or equal 10 then a +1 is also greater then 10

21 Jan Pettersen Nytun, UIA, page 21 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?

22 Jan Pettersen Nytun, UIA, page 22 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES Content

23 Jan Pettersen Nytun, UIA, page 23 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…

24 Jan Pettersen Nytun, UIA, page 24 Mulitiplicity is a Kind of constraint From MagicDraw:

25 Jan Pettersen Nytun, UIA, page 25 Why OCL? The power of the graphical part of UML is limited! preciseunambiguousOCL gives you power to improve the documentation in a precise and unambiguous way. OCL parsers (/ evaluators)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).

26 Jan Pettersen Nytun, UIA, page 26 Where To Use OCL? Invariants on classes and types Precondition and postconditions on operations (methods) Constraints on operations: operation=expression (the return value) …

27 Jan Pettersen Nytun, UIA, page 27 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES Content

28 Jan Pettersen Nytun, UIA, page 28 An Invariant Example: Use of 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”.)

29 Jan Pettersen Nytun, UIA, page 29 An Invariant Example: MagicDraw

30 Jan Pettersen Nytun, UIA, page 30

31 Jan Pettersen Nytun, UIA, page 31 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

32 Jan Pettersen Nytun, UIA, page 32 Comments to Previous Slide collection->includes(object: T): Boolean is True if object is an element of collection. E.g.: Set{@m1,@m2}->includes(@m2) = true p@pre refers to the value of p before the operation was executed. E.g.: member@pre is the set member before the operation was executed. collection->including(object: T): Bag(T) is the bag with all elements of collection plus object. E.g.: Set{@m1,@m2}->including(@m3) = Set{@m1,@m2,@m3}.

33 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

34

35

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

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

38 Jan Pettersen Nytun, UIA, page 38 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 forAll Variations (math. notation:  ) CompanyPerson age : Integer * * employee Equivalent Constraints {

39 Jan Pettersen Nytun, UIA, page 39 -- Every Gang must have a member with a car contex Gang inv: member->exists(car->size()>0) Example: Example: exists (math. notation:  ) collection  exists(exp : OclExpression) : Boolean True if exp is true for one elements of the collection


Download ppt "Jan Pettersen Nytun, UIA, page 1. Jan Pettersen Nytun, UIA, page 2 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS."

Similar presentations


Ads by Google