Object Constraint Language in Together Dan Massey Y&L Consulting.
-
Upload
leonel-leap -
Category
Documents
-
view
226 -
download
4
Transcript of Object Constraint Language in Together Dan Massey Y&L Consulting.
![Page 1: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/1.jpg)
Object Constraint Language
in Together
Dan Massey
Y&L Consulting
![Page 2: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/2.jpg)
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.
![Page 3: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/3.jpg)
OCL Topics
OCL Basics
The LiquidLemons Example
OCL in Together
Team Modeling Exercise
![Page 4: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/4.jpg)
OCL Topics
OCL Basics
The LiquidLemons Example
OCL in Together
Team Modeling Exercise
![Page 5: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/5.jpg)
OCL is
Strongly typed declarative language
Small set of built-in types, including collections
User-defined types and operators
![Page 6: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/6.jpg)
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’
![Page 7: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/7.jpg)
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
![Page 8: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/8.jpg)
Numeric Operators
Comparison
= equals <> not equals
< less > more
<= less or equal >= more or equal
Math
+ addition - subtraction
* multiplication / division
![Page 9: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/9.jpg)
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.
![Page 10: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/10.jpg)
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.
![Page 11: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/11.jpg)
OCL Conditional
OCL provides one conditional construct:
if <Boolean expression>
then <expression>
else <expression>
endif
No “elseif” or “switch”/“case”
![Page 12: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/12.jpg)
OCL Operation Precedence
Grouping ()Path resolution ::Message notation . -> also ^ ^^Unary - notMultiplication/Division * /Addition/Subtraction + -Comparison < > <= >= <> =Logical and or xorLogical implication implies
![Page 13: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/13.jpg)
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
![Page 14: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/14.jpg)
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.
![Page 15: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/15.jpg)
Collections must by Typed
Set(Bid)
Bag(String)
Like generics in Java or templates in C++.
![Page 16: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/16.jpg)
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.
![Page 17: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/17.jpg)
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 +
![Page 18: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/18.jpg)
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
![Page 19: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/19.jpg)
Flatten
Recursively adds the members of nested collections to a single collection.
context MyTypedef: 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
![Page 20: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/20.jpg)
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)
![Page 21: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/21.jpg)
Other OCL Types
OclAny the root Type
OclVoidthe “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}
![Page 22: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/22.jpg)
OCL Topics
OCL Basics
The LiquidLemons Example
OCL in Together
Team Modeling Exercise
![Page 23: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/23.jpg)
Liquid Lemons Domain
![Page 24: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/24.jpg)
LL Invariantscontext Sale-- a Sale has one or more itemsinv numberOfSaleItems : items->size() > 1
-- a Sale's subtotal may not be less than zeroinv subtotalGreaterThanZero : subtotal().amount >
0.0 and subtotal().currency = Currency::USDollars
![Page 25: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/25.jpg)
LL Pre and Postcontext LiquidLemons::addLemonade(flavor :
Flavor, size : DrinkSize)pre activeSale : currentSale->size() = 1pre mustHaveFlavor : not flavor.oclIsUndefined()pre mustSpecifySize : not size.oclIsUndefined()post newLemonade :
currentLemonade->size() = 1
![Page 26: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/26.jpg)
LL Query
![Page 27: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/27.jpg)
Collections Queries
context ItemAnalyzer::averagePrice() : Moneybody: items.basePrice()->sum() /
items.basePrice()->size()
context ItemAnalyzer::uniqueModDescriptions() : Set(String)
body: items.modDescriptions() ->flatten()->asSet()
![Page 28: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/28.jpg)
Composite QueriesUse small methods with single responsibilities to build up
larger functions.
-- the total we want is subtotal plus taxcontext Sale::total() : Moneybody: subtotal() + tax()
-- tax is the subtotal times the local tax ratecontext Sale::tax() : Moneybody: subtotal() * Tax::localRate
![Page 29: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/29.jpg)
Composite Queries Cont.context Sale::subtotal() : Moneybody: items.price()->sum()
context LineItem::price() : Moneybody: basePrice() + modsPrice()
context LineItem::modsPrice() : Moneybody: modifiers.price()->sum()
![Page 30: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/30.jpg)
Don’t Do Thiscontext LineItem::basePrice() : Moneybody: 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 endif
![Page 31: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/31.jpg)
Use Polymorphism
Little policy classes are an extension of the little operations idea. Smaller rules are easier to read.
context LargeRegularLemonade::basePrice() : Moneybody: Money::newInstance(2.43, Currency::USDollars)
context SmallFlavoredLemonade::basePrice() : Moneybody: Money::newInstance(1.72, Currency::USDollars)
![Page 32: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/32.jpg)
OCL Topics
OCL Basics
The LiquidLemons Example
OCL in Together
Team Modeling Exercise
![Page 33: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/33.jpg)
Where Does the OCL Go?
Use the named property fields and boxes.
Shows up in generated docs and XMI export.
Not visible in diagrams.
![Page 34: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/34.jpg)
OCL Notes
Attach notes containing OCL to correct contexts.
OCL is visible in the diagrams.
Potential to clutter the model.
![Page 35: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/35.jpg)
Together Designer
Syntax checked OCL in “Constraint Notes” that establish context.
Now in field test.
![Page 36: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/36.jpg)
OCL Topics
OCL Basics
The LiquidLemons Example
OCL in Together
Team Modeling Exercise
![Page 37: Object Constraint Language in Together Dan Massey Y&L Consulting.](https://reader035.fdocuments.in/reader035/viewer/2022062320/56649c815503460f94939ce5/html5/thumbnails/37.jpg)
Domain Options
Tic-Tac-Toe
Ants
Electronic Voting
Poem
Golf
Turtle Logo
Dog Kennel