1 / 22

Writing Protocols in OCL

Writing Protocols in OCL. CS 4311 Jos B. Warmer and Anneke G. Kleppe, OCL: The Constraint Language of the UML, JOOP, May 1999. Jos B. Warmer and Anneke G. Kleppe, The Object Constraint Language: Precise Modeling with UML, Addison-Wesley, 1998. 1. 1. Outline. Motivation Basics of OCL

Télécharger la présentation

Writing Protocols in 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. Writing Protocols in OCL CS 4311 Jos B. Warmer and Anneke G. Kleppe, OCL: The Constraint Language of the UML, JOOP, May 1999. Jos B. Warmer and Anneke G. Kleppe,The Object Constraint Language: Precise Modeling with UML, Addison-Wesley, 1998. 1 1

  2. Outline • Motivation • Basics of OCL • Specifying invariants • Specifying pre and post-conditions • Navigating in OCL expressions • Basic values and types • Collections in OCL 2 2

  3. Review • Protocol • Documenting protocols • Syntactic and semantic interfaces 3 3

  4. Mortgage Person House Object Constraint Language (OCL) • Motivation • UML diagrams don’t tell everything • Q: What does the following class diagram tell? 0..* 1 houses owner borrower 1 security 1 0..* 0..* mortgages mortgages

  5. m1: Mortgage p1: Person p2: Person h1: House OCL --- Motivation • Is this a valid object diagram? • What’s the problem?

  6. Mortgage Person House OCL --- Motivation • Solution: Specify constraints explicitly A person my have a mortgage on a house only if that house is owned by the person. 0..* 1 houses owner borrower 1 security 1 0..* 0..* mortgages mortgages context Mortgage inv: security.owner = borrower

  7. OCL --- What Is It? • 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 • Characteristics • Constraint and query languages • Math foundation (set and predicate) but no math symbols • Strongly typed, declarative, and no side effect • High level of abstraction (platform independence)

  8. Basics of OCL • Associating OCL expressions to UML models • Directly to diagrams as notes • Separate accompanying texts, e.g., context Person inv: age >= 0 • Specifying invariants • State conditions that must be always be met by all instances of context types (classes or interfaces)

  9. Basics of OCL --- Invariants context Company inv: self.numberOfEmployees > 50 contextc: Company inv: c.numberOfEmployees > 50 context c: Company invenoughEmployees: 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

  10. Specifying Pre and Post-conditions context Account::deposit(amt: Integer): void pre: amt > 0 post: balance = balance@pre + amt context Account::deposit(amt: Integer): void preargumentOk: amt > 0 postbalanceIncreased: balance = balance@pre + amt pre-value, referring to previous value optional label • Pre and post-conditions • Conditions that must be true at the moment when an operation begins and ends its execution.

  11. Referring to Pre-value and Result context Account::payInterest(rate: Real): void post: balance = balance@pre + calcInterest@pre(rate) context Account::getBalance(): Integer post: result = balance • @pre: denotes the value of a property at the start of an operations • result: denotes the result of an operation

  12. Customer Account Navigating in OCL Expressions 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 0..* 1 accounts owner Arrow notation for collection operations • Use dot notation to navigate through associations • Direction and multiplicity matter • Use role names or class names

  13. Basic Values and Types Several built-in types and operations

  14. Exercise spouse 0..1 Write pre and post-conditions Pair (5 minutes)

  15. Collections in OCL • Why? • Multiple objects produced by navigating associations • Standard collection types • Parameterized with elements types, e.g., Set(Account) • Value types, not reference types • One abstract and four concrete types • Collection • Set, OrderedSet, Bag, Sequence

  16. Customer Account Collection Operations • Large number of predefined operations • Arrow notation, e.g., c->size() • Rationale: allow same-named, user-defined operations, e.g., c.size() context Account context Account inv: owner->isEmpty() inv: owner.isEmpty() 0..* 1 accounts owner

  17. Collection Operations • Defined on all collection types • Type-specific operations • append, including, excluding, first, last, insertAt, etc.

  18. Customer Account Iteration Operations 0..* 1 accounts owner • 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)

  19. Iteration Operations

  20. Iteration Operations accounts->any(a: Account | a.balance > 1000) accounts->collect(name) -- all the names accounts->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)

  21. Exercise 1 0..* accounts Pair (3 minutes) Write the pre- and post-condition 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.

  22. Group Work And Assignment Group work (see handout) Protocols for the project Due: April ?, 2012 Leader: Analyst OCLdescriptionsfor three key classes Natural languagedescriptions for the rest 22

More Related