1 / 37

Object Constraint Language

Object Constraint Language. in Together Dan Massey Y&L Consulting. Picking up From Logicians. Follows 3242 presentation to go in depth on OCL and using OCL in tools The preconference tutorial used the slides from session 3242 as the first third of the presentation. OCL Topics. OCL Basics

joshwa
Download Presentation

Object Constraint Language

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. Object Constraint Language in Together Dan Massey Y&L Consulting

  2. Picking up From Logicians • Follows 3242 presentation to go in depth on OCL and using OCL in tools • The preconference tutorial used the slides from session 3242 as the first third of the presentation.

  3. OCL Topics • OCL Basics • The LiquidLemons Example • OCL in Together • Team Modeling Exercise

  4. OCL Topics • OCL Basics • The LiquidLemons Example • OCL in Together • Team Modeling Exercise

  5. OCL is • Strongly typed declarative language • Small set of built-in types, including collections • User-defined types and operators

  6. OCL Basic Types • Boolean true or false • Integer theoretically unlimited natural numbers, subtype of Real • Real mathematical Real, no specific • implementation implied • String ‘sequence of characters’

  7. Boolean Operations • a : Boolean b : Boolean • a and b a or b a xor b • not a a = b a <> b • a implies b • implies constraint: • if a is true then b must be true

  8. Numeric Operators • Comparison • = equals <> not equals • < less > more • <= less or equal >= more or equal • Math • + addition - subtraction • * multiplication / division

  9. Every Type in OCL is an Object • a : Integer b:Integer • a.mod(b) a.div(b) • a.abs() a.max(b) • a.min(b) a.round() • a.floor() • Operators are just infix notation operations.

  10. String Operations • a : String b : String • a = b a <> b • a.concat(b) a.size() • a.toLower() a.toUpper() • a.subString(1, 3) • Operations return new Strings.

  11. OCL Conditional • OCL provides one conditional construct: • if <Boolean expression> • then <expression> • else <expression> • endif • No “elseif” or “switch”/“case”

  12. OCL Operation Precedence • Grouping () • Path resolution :: • Message notation . -> also ^ ^^ • Unary - not • Multiplication/Division * / • Addition/Subtraction + - • Comparison < > <= >= <> = • Logical and or xor • Logical implication implies

  13. User-Defined Types • Classes, Interfaces, etc. defined in the model • Users may overload infix and unary operators: • Multiply Money by a Real • Add two Distance values

  14. OCL Collections • Refreshing our memories, we have: • Collection • Bag Sequence • Set OrderedSet • OCL allows you to treat any instance like a collection. You can ask if a single attribute is empty.

  15. Collections must by Typed • Set(Bid) • Bag(String) • Like generics in Java or templates in C++.

  16. Collections Literals • Use curly brackets around comma lists to specify Collection literals. • Bag {‘sock’, ‘sock’, ‘shirt’, ‘sweater’, ‘sock’} • Sequence {‘abe’, ‘bob’, ‘bob’, ‘tim’, ‘zak’} • Set {16.0, 2.0, 64.0, 8.0, 128.0, 3.5} • OrderedSet {1, 2, 4, 8, 16, 32, 64, 128} • You can also specify Collections of Collections.

  17. Basic Collections Operations • a : Set(String) b : String c : Set(String) • a = c a <> c • a->size() a->count(b) • a->excludes(b) a->excludesAll(c) • a->includes(b) a->includesAll(c) • a->isEmpty() a->notEmpty() • a->sum() -- contents are of type supporting +

  18. More Collections Operations • OCL supports a wide range of Collection operations that vary by Collection type. • first(), last(), at(i : Integer), etc. for {ordered} collections • union(), -, asSet(), including(), symmetricDifference(collection : Collection) are a sample

  19. Flatten • Recursively adds the members of nested collections to a single collection. • contextMyType • def:a:Set(Set(Integer))=Set{Set{1,2,3},Set{3,4,5},Set{4,5,6}} • a->flatten()=Set{2,3,1,5,4,6}-- no order

  20. Collection Loops • OCL supports an iterate() operation for Collections. On top of that idea, OCL provides a set of Collection operations that accept expression. • Examples: • any(expression) exists(expression) • collect(expression) one(expression) • select(expression) reject(expression)

  21. Other OCL Types • OclAny the root Type • OclVoid the “null” Type “undefined” • OclType a type, like “Class” in Java • OCL provides operations for type identification. • Tuple group of named values • Tuple {name : String = ‘Dan’, role : Role = Role::Speaker}

  22. OCL Topics • OCL Basics • The LiquidLemons Example • OCL in Together • Team Modeling Exercise

  23. Liquid Lemons Domain

  24. LL Invariants • contextSale • -- a Sale has one or more items • invnumberOfSaleItems:items->size()> 1 • -- a Sale's subtotal may not be less than zero • invsubtotalGreaterThanZero:subtotal().amount>0.0andsubtotal().currency= Currency::USDollars

  25. LL Pre and Post • contextLiquidLemons::addLemonade(flavor:Flavor,size:DrinkSize) • preactiveSale:currentSale->size()=1 • premustHaveFlavor:notflavor.oclIsUndefined() • premustSpecifySize:notsize.oclIsUndefined() • postnewLemonade:currentLemonade->size()=1

  26. LL Query

  27. Collections Queries • contextItemAnalyzer::averagePrice():Money • body:items.basePrice()->sum()/items.basePrice()->size() • contextItemAnalyzer::uniqueModDescriptions():Set(String) • body:items.modDescriptions() ->flatten()->asSet()

  28. Composite Queries • Use small methods with single responsibilities to build up larger functions. • -- the total we want is subtotal plus tax • contextSale::total():Money • body:subtotal()+tax() • -- tax is the subtotal times the local tax rate • contextSale::tax():Money • body:subtotal()*Tax::localRate

  29. Composite Queries Cont. • contextSale::subtotal():Money • body:items.price()->sum() • contextLineItem::price():Money • body:basePrice()+modsPrice() • contextLineItem::modsPrice():Money • body:modifiers.price()->sum()

  30. Don’t Do This • contextLineItem::basePrice():Money • body: • ifsize=DrinkSize::Smallthen • ifflavor=Flavor::Regularthen • Money::newInstance(1.23,Currency::USDollars) • else • Money::newInstance(1.73,Currency::USDollars) • endif • else • ifflavor=Flavor::Regularthen • Money::newInstance(2.43,Currency::USDollars) • else • Money::newInstance(3.13,Currency::USDollars) • endif • endif

  31. Use Polymorphism • Little policy classes are an extension of the little operations idea. Smaller rules are easier to read. • contextLargeRegularLemonade::basePrice():Money • body:Money::newInstance(2.43,Currency::USDollars) • contextSmallFlavoredLemonade::basePrice():Money • body:Money::newInstance(1.72,Currency::USDollars)

  32. OCL Topics • OCL Basics • The LiquidLemons Example • OCL in Together • Team Modeling Exercise

  33. Where Does the OCL Go? • Use the named property fields and boxes. • Shows up in generated docs and XMI export. • Not visible in diagrams.

  34. OCL Notes • Attach notes containing OCL to correct contexts. • OCL is visible in the diagrams. • Potential to clutter the model.

  35. Together Designer • Syntax checked OCL in “Constraint Notes” that establish context. • Now in field test.

  36. OCL Topics • OCL Basics • The LiquidLemons Example • OCL in Together • Team Modeling Exercise

  37. Domain Options • Tic-Tac-Toe • Ants • Electronic Voting • Poem • Golf • Turtle Logo • Dog Kennel

More Related