220 likes | 321 Views
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
E N D
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 • Specifying invariants • Specifying pre and post-conditions • Navigating in OCL expressions • Basic values and types • Collections in OCL 2 2
Review • Protocol • Documenting protocols • Syntactic and semantic interfaces 3 3
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
m1: Mortgage p1: Person p2: Person h1: House OCL --- Motivation • Is this a valid object diagram? • What’s the problem?
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
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)
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)
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
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.
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
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
Basic Values and Types Several built-in types and operations
Exercise spouse 0..1 Write pre and post-conditions Pair (5 minutes)
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
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
Collection Operations • Defined on all collection types • Type-specific operations • append, including, excluding, first, last, insertAt, etc.
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)
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)
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.
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