1 / 35

OCL

OCL. The Object Constraint Language. Content. HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS AND OCL EXAMPLES. History.

nyeldell
Download Presentation

OCL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OCL The Object Constraint Language

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

  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.

  4. Aligning OCL with the OO-Concepts

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

  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.” context Gang inv: self.member… member Gang GangMember 1..* 0..* modelinstance(example) When self is A:Gang then self.member is: Set{@M1,@M2} :Set(GangMember) self.member self M1:GangMember A:Gang M3:GangMember M2:GangMember B:Gang M4:GangMember M5:GangMember

  8. One More Navigation Example Model alternative Quiz Question AnswerAlternative * 1..* * * contex Quiz inv: self.question.alternative… incomplete constraint self self.question self.question.alternative quiz2:Quiz q3:Question a4:AnswerAlternative 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. self self.question self.question.alternative quiz1:Quiz q1:Question a1:AnswerAlternative a2:AnswerAlternative q2:Question a3:AnswerAlternative

  9. The Example continues… Using OCL as a Query Language: Finding all members no matter which Gang they belong to OCL is case sensitive! Using USE as OCL tool.

  10. 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

  11. Allowing a Member to be Member of Several Gangs belonging to two gangs

  12. Allowing a Member to be Member of Several Gangs belonging to two gangs

  13. asSet

  14. Finding all members of the B-gang

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

  16. Logical implication – p implies q p  q Ifpis true then alsoqmust be true. “p  q” is called a predicate A predicate is a statement that may be true or false depending on the values of its variables.

  17. 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

  18. Example: Transitivity In logic and mathematics, a binary relation R is transitive ifxRy 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 Integera, 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?

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

  20. 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…

  21. 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).

  22. Where To Use OCL? • Invariants on classes and types • Precondition and postconditions on operations (methods) • Constraints on operations: operation=expression (the return value) • …

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

  24. An Invariant Example:Use of Size An invariant is predicate that is always true (i.e., when the system is at “rest”.) Gang name : String GangMember +member isArmy : Boolean 1..* 1..* 0..* 0..* register(newMember : GangMember) -- The gang is an army if there are more than 100 members.context Gang inv oneSimpleConstraint:self.isArmy = (member->size() > 100)

  25. Use of pre –and post-condition Gang name : String GangMember +member isArmy : Boolean 1..* 1..* 0..* register(newMember : GangMember) -- The gang has grown with one when a new member has been added.-- NB! @pre accesses the value before executing the operationcontext Gang :: register(newMember : GangMember)pre: not member->includes(newMember)post : member = member@pre->including(newMember)

  26. 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}.

  27. Using OCL in USEWhat we want:An account has either a person as owner or a cooperation as owner context Accountinv :personOwner->size() = 1 implies cooperationOwner->size() = 0

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

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

  30. forAll Variations(math. notation: ) employee Person Company * * age : Integer { 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 ) Equivalent Constraints

  31. Example:exists(math. notation: ) collection  exists(exp : OclExpression) : BooleanTrue if exp is true for one elements of the collection -- Every Gang must have a member with a carcontex Gang inv:member->exists(car->size()>0)

More Related