Download presentation
Presentation is loading. Please wait.
Published byLeonel Leap Modified over 9 years ago
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 Booleantrue or false Integertheoretically unlimited natural numbers, subtype of Real Realmathematical Real, no specific implementation implied String‘sequence of characters’
7
Boolean Operations a : Booleanb : Boolean a and ba or ba xor b not aa = ba <> b a implies b implies constraint: if a is true then b must be true
8
Numeric Operators Comparison =equals<>not equals more =more or equal Math +addition-subtraction *multiplication/division
9
Every Type in OCL is an Object a : Integerb: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 : Stringb : String a = ba <> 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 then else endif No “elseif” or “switch”/“case”
12
OCL Operation Precedence Grouping() Path resolution:: Message notation. ->also ^ ^^ Unary- not Multiplication/Division* / Addition/Subtraction+ - Comparison = <> = Logicaland or xor Logical implicationimplies
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 BagSequence SetOrderedSet 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 : Stringc : Set(String) a = ca <> 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. context MyType 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 OclAnythe root Type OclVoidthe “null” Type “undefined” OclTypea type, like “Class” in Java OCL provides operations for type identification. Tuplegroup 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 context Sale -- a Sale has one or more items inv numberOfSaleItems : items->size() > 1 -- a Sale's subtotal may not be less than zero inv subtotalGreaterThanZero : subtotal().amount > 0.0 and subtotal().currency = Currency::USDollars
25
LL Pre and Post context LiquidLemons::addLemonade(flavor : Flavor, size : DrinkSize) pre activeSale : currentSale->size() = 1 pre mustHaveFlavor : not flavor.oclIsUndefined() pre mustSpecifySize : not size.oclIsUndefined() post newLemonade : currentLemonade->size() = 1
26
LL Query
27
Collections Queries context ItemAnalyzer::averagePrice() : Money body: items.basePrice()->sum() / items.basePrice()- >size() context ItemAnalyzer::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 context Sale::total() : Money body: subtotal() + tax() -- tax is the subtotal times the local tax rate context Sale::tax() : Money body: subtotal() * Tax::localRate
29
Composite Queries Cont. context Sale::subtotal() : Money body: items.price()->sum() context LineItem::price() : Money body: basePrice() + modsPrice() context LineItem::modsPrice() : Money body: modifiers.price()->sum()
30
Don’t Do This context LineItem::basePrice() : Money body: if size = DrinkSize::Small then if flavor = Flavor::Regular then Money::newInstance(1.23, Currency::USDollars) else Money::newInstance(1.73, Currency::USDollars) endif else if flavor = Flavor::Regular then Money::newInstance(2.43, Currency::USDollars) else Money::newInstance(3.13, Currency::USDollars) endif
31
Use Polymorphism Little policy classes are an extension of the little operations idea. Smaller rules are easier to read. context LargeRegularLemonade::basePrice() : Money body: Money::newInstance(2.43, Currency::USDollars) context SmallFlavoredLemonade::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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.