a specification language
DESCRIPTION
A Specification Language. UML: www.rational.com/uml Model architecture Object Constraint Language A part of UML 1.1. Testing and OCL. A class model is not enough for a precise and unambiguous specification. Useful to express specifications, test requirements and test specifications - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/1.jpg)
04/22/23 Specification/Testing/OCL 1
A Specification Language
UML: www.rational.com/umlModel architecture
Object Constraint LanguageA part of UML 1.1
![Page 2: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/2.jpg)
04/22/23 Specification/Testing/OCL 2
Testing and OCL
• A class model is not enough for a precise and unambiguous specification.
• Useful to express specifications, test requirements and test specifications
• A useful notation to know: part of UML
![Page 3: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/3.jpg)
04/22/23 Specification/Testing/OCL 3
Resource Allocation
<JobCategory> <Facility>reqs
<Job>when: TimeInterval <Resource>
0..*
type
allocated
provides 0..*
0..1
inv Job::allocated<>0 ==> allocated.provides->includesAll(type.reqs)--Any allocated resource must have the required facilitiesinv Resource::jo1, jo2: Job:: (schedule->includesAll({jo1,jo2}) ==> jo1.when.noOverlap(jo2.when)-- no double-booking of resources
schedule
0..*
![Page 4: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/4.jpg)
04/22/23 Specification/Testing/OCL 4
Resource Allocation
JobDescription Skillreqs
Jobwhen: TimeInterval Plumber
0..*
type
allocated
provides 0..*
0..1
schedule
0..*
Resource Allocation
Facility
ResourceJob
JobCategory
Application of resource allocation to Pluming
Customer
![Page 5: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/5.jpg)
04/22/23 Specification/Testing/OCL 5
Further examples
Person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)
Company self. employee->select (p|p.age > 50)
![Page 6: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/6.jpg)
04/22/23 Specification/Testing/OCL 6
The relative cost of correcting an error increases over SDLC
1
10
100
1000
10000
Definition Analysis Design Code Maint.
Cost
![Page 7: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/7.jpg)
04/22/23 Specification/Testing/OCL 7
How to prevent defects?
• More precise specifications. OCL helps.• Start testing early, at design level: See
homework 2!!!• Use walkthroughs and inspections
![Page 8: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/8.jpg)
04/22/23 Specification/Testing/OCL 8
UML language architecture• UML metamodel defines meaning of UML
models• Defined in a metacircular manner, using a
subset of UML to specify itself• UML metamodel bootstraps itself. Similar:
– compiler compiles itself– grammar defines itself– class dictionary defines itself
![Page 9: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/9.jpg)
04/22/23 Specification/Testing/OCL 9
4 layer metamodel architecture
• UML metamodel one of the layers• Why four layers?• Proven architecture for complex models• Validates core constructs by using them to
define themselves
![Page 10: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/10.jpg)
04/22/23 Specification/Testing/OCL 10
Four layer architecture
• meta-metamodel– language for specifying metamodels
• metamodel– language for specifying models
• model– language for specifying objects in some domain
• user objects
![Page 11: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/11.jpg)
04/22/23 Specification/Testing/OCL 11
Four levels
• User Objects in running system– check run-time constraints
• Model of System under design– specify run-time constraints
• Meta-model– specify constraints on use of constructs in model
• Meta-metamodel– data interchange between modeling tools
![Page 12: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/12.jpg)
04/22/23 Specification/Testing/OCL 12
Three layers
user objectOP
CL
CB
modelOL
metamodelOB
TP
TL
TB
classes
objects
textsentence
classdictionary
a class dictionaryfor class dictionaries
instance of
defines classes
B: metamodelL: modelP: user objects
![Page 13: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/13.jpg)
04/22/23 Specification/Testing/OCL 13
UML OCL
• Object Constraint Language– allows you to define side effect-free constraints
for UML and other models– used in UML to defined well-formedness rules
of the UML meta model (invariants for meta model classes)
![Page 14: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/14.jpg)
04/22/23 Specification/Testing/OCL 14
Why OCL
• It is a formal mathematical language• Tend to be hard to use by average modelers• OCL is intended for average modelers• Developed as business modeling language
within IBM insurance division (has roots in Syntropy method)
• OCL is a pure expression language (side effect free)
![Page 15: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/15.jpg)
04/22/23 Specification/Testing/OCL 15
Companies behind OCL
• Rational Software, Microsoft, Hewlett-Packard, Oracle, Sterling Software, MCI Systemhouse, Unisys, ICON Computing, IntelliCorp, i-Logix, IBM, ObjecTime, Platinum Technology, Ptech, Taskon, Reich Technologies, Softeam
![Page 16: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/16.jpg)
04/22/23 Specification/Testing/OCL 16
Where to use OCL?
• Specify invariants for classes and types• Specify pre- and post-conditions for
methods• As a navigation language• To specify constraints on operations• Test requirements and specifications
![Page 17: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/17.jpg)
04/22/23 Specification/Testing/OCL 17
OCL properties
• LL(1) language– finally back to the Pascal days!– Grammar provided uses EBNF syntax
• Parser generated by JavaCC
![Page 18: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/18.jpg)
04/22/23 Specification/Testing/OCL 18
What is OCL?
• Predicate calculus for objects• Traditional predicate calculus:
– individuals– variables, predicate and function symbols– terms (for all, Boolean connectives)– axioms and the theories they define (group theory,
number theory, etc.)• In OCL: individuals -> objects
![Page 19: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/19.jpg)
04/22/23 Specification/Testing/OCL 19
Structured individuals
• some “structural” constraints imposed by UML class diagram; further constraints can be imposed by OCL expressions
• annotated UML class diagram defines textual representation
![Page 20: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/20.jpg)
04/22/23 Specification/Testing/OCL 20
Connection to model• Self. Each OCL expression is written in the
context of an instance of a specific type. Company self.numberOfEmployees c : Company c.numberOfEmployees
![Page 21: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/21.jpg)
04/22/23 Specification/Testing/OCL 21
Connection to model• Invariants of a type. An OCL expression
stereotyped with <<invariant>>. An invariant must be true for all instances of the type at any time.
Person self.age >= 0
![Page 22: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/22.jpg)
04/22/23 Specification/Testing/OCL 22
Example: UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName
0..*
parts
Concrete Abstract
super
className
Note: we use a thick arrow todenoteinheritance.UML uses anopen arrow.
![Page 23: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/23.jpg)
04/22/23 Specification/Testing/OCL 23
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
number of concrete classes
![Page 24: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/24.jpg)
04/22/23 Specification/Testing/OCL 24
Example
• Number of concrete classes:– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size
-> collection opselect:subsetcollect:new set
![Page 25: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/25.jpg)
04/22/23 Specification/Testing/OCL 25
Pre- and post-conditions
• constraints stereotyped with <<precondition>> and <<postcondition>>
for an operation or method. Example: Type::op(param1 : Type1 …): ReturnType pre: param1 … post: result = …
![Page 26: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/26.jpg)
04/22/23 Specification/Testing/OCL 26
Pre- and post-conditions
• Example: Post condition for insert operation: person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)
![Page 27: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/27.jpg)
04/22/23 Specification/Testing/OCL 27
Basic values and types• Boolean true, false
– and or xor not implies if-then-else• Integer 1 2 3 subtype of Real
– * + - / abs• Real 3.14
– * + - / floor• String ‘To be or not to be’
– toUpper concat
![Page 28: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/28.jpg)
04/22/23 Specification/Testing/OCL 28
Basic values and types• Collection
– Set subtype of Collection– Sequence subtype of Collection– Bag subtype of Collection
if element types conform to each other
![Page 29: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/29.jpg)
04/22/23 Specification/Testing/OCL 29
Types from the UML Model
• Each OCL expression lives in the context of a UML model, a number of types/classes and their features and associations and their generalizations.
• All types/classes from the UML model are types in OCL.
![Page 30: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/30.jpg)
04/22/23 Specification/Testing/OCL 30
Type Conformance
• OCL is typed• Type conformance rules for types in the
class diagram are simple:– each type conforms to its supertype– type conformance is transitive
![Page 31: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/31.jpg)
04/22/23 Specification/Testing/OCL 31
Objects and properties
• The value of a property on an object that is defined in a class diagram is specified by a dot followed by the property name.
Atype self.property
![Page 32: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/32.jpg)
04/22/23 Specification/Testing/OCL 32
Properties
• an attribute• an association end• an operation with isQuery true• a method with isQuery true
![Page 33: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/33.jpg)
04/22/23 Specification/Testing/OCL 33
Properties
• an attribute Person self.age >= 0 self.employer->size• an association end Companyself.manager --type Personself.employee--type Set(Person)
![Page 34: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/34.jpg)
04/22/23 Specification/Testing/OCL 34
Properties
• an operation with isQuery true Person self.income(aDate) Company self.stockPrice()
![Page 35: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/35.jpg)
04/22/23 Specification/Testing/OCL 35
Missing role names
• Whenever a role name is missing at one of the ends of an association, the name of the type at the association end, starting with a lowercase character is used as role name. If this results in an ambiguity, the role name is mandatory
![Page 36: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/36.jpg)
04/22/23 Specification/Testing/OCL 36
Navigation over associations
• Company self.manager object of type Person or Set(Person)
– used as Set(Person)
self.manager->size -- result 1– used as Person
self.manager.age
![Page 37: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/37.jpg)
04/22/23 Specification/Testing/OCL 37
OclType and OclAny• All types in a UML model, or predefined within
UML have a type. This type is an instance of the OCL type called OclType.
• OclType: meta type of all types. OclAny supertype of all types.
• OclType : Class = OclAny : Object (analogy to Java)
• Features of OclType: good for meta programming.
![Page 38: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/38.jpg)
04/22/23 Specification/Testing/OCL 38
Predefined OCL types
• OclType: type: instance of OclType– type.name : String– type.attributes:Set(String)– type.associationEnds:Set(String)– type.operations:Set(String)– type.supertypes:Set(OclType)– type.allSupertypes:Set(OclType)– type.allInstances:Set(type)
![Page 39: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/39.jpg)
04/22/23 Specification/Testing/OCL 39
Similarity: java.lang.Class
• instances of class Class represent classes and interfaces in a way that can be read (but not modified) by a running Java program
public final class Class{ public String getName(); public Class getSuperClass(); public Class[] getInterfaces(); ...
![Page 40: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/40.jpg)
04/22/23 Specification/Testing/OCL 40
Predefined OCL types
• OclAny: supertype of all types in the model. object: instance of OclAny– object=(object2:OclAny)– object<>(object2:OclAny):Boolean– object.oclType:OclType– object.oclIsKindOf(type:OclType): Boolean
![Page 41: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/41.jpg)
04/22/23 Specification/Testing/OCL 41
Similarity: java.lang.Object
• All objects, including arrays, implement the methods of this class
public class Object { public final Class getClass(); public boolean equals(Object obj); ...
![Page 42: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/42.jpg)
04/22/23 Specification/Testing/OCL 42
Predefined features on all objects (OclAny)
• Type of an objectoclType : OclType Feature oclType results in type of an object• Direct typeoclIsTypeOf(t:OclType):Boolean• Direct or super typeoclIsKindOf(t:OclType):Boolean
![Page 43: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/43.jpg)
04/22/23 Specification/Testing/OCL 43
Examples
• Person self.oclType results in Person• Person self.oclIsTypeOf(Person)--true self.oclIsTypeOf(Company)--false
![Page 44: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/44.jpg)
04/22/23 Specification/Testing/OCL 44
Predefined features on types
• Two kinds of properties – on instances of classes– on types/classes themselves
• Most important predefined feature on each type: allInstances
Person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)
![Page 45: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/45.jpg)
04/22/23 Specification/Testing/OCL 45
Collections
• Navigation will most often result in a collection.
• Collection predefined• Large number of predefined operations• Collection(X) : Set(X)|Sequence(X)|Bag(X).• Specifiable by a literal
![Page 46: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/46.jpg)
04/22/23 Specification/Testing/OCL 46
Collection type conformance
• Collection(X) is a subtype of OclAny.• Rules (only 3. collection specific)
– T1 conforms to T2 if T1=T2.– T1 conforms to T2 when T1 is a subtype of T2.– Collection(T1) conforms to Collection(T2) if
T1 conforms to T2– conformance is transitive
![Page 47: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/47.jpg)
04/22/23 Specification/Testing/OCL 47
Previous value in post-conditions
• Pre- and post-conditions on operations and methods– the value of a property at the start of the
operation or method– the value of a property upon completion of the
operation or method•Person::birthdayHappens() post: age = age@pre + 1
![Page 48: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/48.jpg)
04/22/23 Specification/Testing/OCL 48
Collection Operations
• Select and reject operations– collection->select(boolean-expr) Company self.employee->select(age > 50)– collection->select (v|boolean-expr-with-v) Company self.employee->select (p|p.age > 50)
![Page 49: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/49.jpg)
04/22/23 Specification/Testing/OCL 49
Collection Operations
• Select and reject operations– collection->select (v:Type|boolean-expr-with-v)Company self.employee->select (p:Person|p.age > 50)
![Page 50: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/50.jpg)
04/22/23 Specification/Testing/OCL 50
Select syntax
• Define a subset– collection->select (v:Type|boolean-expr-with-v)– collection->select (v|boolean-expr-with-v)– collection->select (boolean-expr)
refer toparts
refer toentireobject
typeredundancy
![Page 51: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/51.jpg)
04/22/23 Specification/Testing/OCL 51
Reject syntax
• Define a subset– collection->reject (v:Type|boolean-expr-with-v)– collection->reject (v|boolean-expr-with-v)– collection->reject (boolean-expr)
• Instead negate expression
![Page 52: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/52.jpg)
04/22/23 Specification/Testing/OCL 52
Collect syntax
– collection->collect (v:Type|expr-with-v)– collection->collect (v|expr-with-v)– collection->collect (expr)
• Creates a bagself.empl->collect(bdate)->asSet
Build new collectionby applyingexpressionto elementsof oldcollection
![Page 53: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/53.jpg)
04/22/23 Specification/Testing/OCL 53
Shorthand for Collect
• Because navigation through many objects is very common, there is a shorthand notation for collect that makes OCL expressions more readable. Both are correct:– self.employee -> collect(birthdate.year)
– self.employee.birthdate.year
![Page 54: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/54.jpg)
04/22/23 Specification/Testing/OCL 54
ForAll operation
• All elements satisfy Boolean expression– collection->forAll (v:Type|boolean-expr-with-v)– collection->forAll (v|boolean-expr-with-v)– collection->forAll (boolean-expr)
![Page 55: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/55.jpg)
04/22/23 Specification/Testing/OCL 55
Exists operation
• At least one element satisfies Boolean expression– collection->exists (v:Type|boolean-expr-with-v)– collection->exists (v|boolean-expr-with-v)– collection->exists (boolean-expr)
![Page 56: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/56.jpg)
04/22/23 Specification/Testing/OCL 56
Predefined OCL types
• Integer, Real, String, Boolean• OclExpression, OclType, OclAny
• OclType– all types defined in a model have type OclType– allows access to the meta-level of the model
![Page 57: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/57.jpg)
04/22/23 Specification/Testing/OCL 57
Predefined OCL types
• OclType: type: instance of OclType– type.name : String– type.attributes:Set(String)– type.associationEnds:Set(String)– type.operations:Set(String)– type.supertypes:Set(OclType)– type.allSupertypes:Set(OclType)– type.allInstances:Set(type)
![Page 58: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/58.jpg)
04/22/23 Specification/Testing/OCL 58
Predefined OCL types
• OclAny: supertype of all types in the model. object: instance of OclAny– object=(object2:OclAny)– object<>(object2:OclAny):Boolean– object.oclType:OclType– object.oclIsKindOf(type:OclType): Boolean
![Page 59: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/59.jpg)
04/22/23 Specification/Testing/OCL 59
Applications
• Number of class definitions:– ClassGraph self.entries->size wrong– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))->size
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
![Page 60: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/60.jpg)
04/22/23 Specification/Testing/OCL 60
Applications
• Number of class definitions: What about using strategies to define collections?– ClassGraph self.{to ClassDef} ->size
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
![Page 61: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/61.jpg)
04/22/23 Specification/Testing/OCL 61
Improve OCL: make adaptive
• OCL stresses the importance of collections• Collections are best specified adaptively• A strategy SS = (S, B, s, t) with source s and
target set t and name map N for class graph G defines a collection of objects contained in a N(s)-object. The collection type CT is the union of N(t1) for t1 in t.
![Page 62: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/62.jpg)
04/22/23 Specification/Testing/OCL 62
Improve OCL
• The collection consists of CT-objects reached during the traversal of the N(s) object following strategy SS.
![Page 63: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/63.jpg)
04/22/23 Specification/Testing/OCL 63
Properties
• In OCL – an attribute– an association end– an operation with isQuery true– a method with isQuery true
• Add for adaptive OCL– a strategy { … } with a single source
![Page 64: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/64.jpg)
04/22/23 Specification/Testing/OCL 64
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
ClassGraph -- concrete classes self.{to Concrete}->size
![Page 65: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/65.jpg)
04/22/23 Specification/Testing/OCL 65
Applications
• Number of concrete classes:– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size
![Page 66: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/66.jpg)
04/22/23 Specification/Testing/OCL 66
ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete))->size -- count concrete classes
ClassGraph -- count concrete classes self.{to Concrete}->size
Which one is easier to write?
![Page 67: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/67.jpg)
04/22/23 Specification/Testing/OCL 67
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 68: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/68.jpg)
04/22/23 Specification/Testing/OCL 68
Applications
• Terminal buffer ruleClassGraph self.{to ClassDef} ->forAll(r|r.termBProp())ClassDef Boolean termBProp(){ partCNs=self.{via Part to ClassName}; result=if (partCNs->size)>1 then (partCNs->intersection(predefCNs)) -> isEmpty else true endif}
![Page 69: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/69.jpg)
04/22/23 Specification/Testing/OCL 69
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 70: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/70.jpg)
04/22/23 Specification/Testing/OCL 70
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 71: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/71.jpg)
04/22/23 Specification/Testing/OCL 71
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 72: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/72.jpg)
04/22/23 Specification/Testing/OCL 72
Applications
• Class graph is flatClassGraph self.{to Abstract}-> forAll(a|a.parts->size=0)
![Page 73: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/73.jpg)
04/22/23 Specification/Testing/OCL 73
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 74: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/74.jpg)
04/22/23 Specification/Testing/OCL 74
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 75: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/75.jpg)
04/22/23 Specification/Testing/OCL 75
Applications• Abstract superclass ruleClassGraph superCls = self.{through->*,super,* to ClassName}; self.{to ClassDef}-> forAll(c| if (superCls->includes(c.className)) then c.{to Abstract}->size=1 else true endif)
![Page 76: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/76.jpg)
04/22/23 Specification/Testing/OCL 76
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 77: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/77.jpg)
04/22/23 Specification/Testing/OCL 77
UML class diagram ClassGraph
ClassGraph
EParse
BParseClassDef
Entry0..*
entries
BodyPart
ClassName0..*
parts
Concrete Abstract
super
className
![Page 78: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/78.jpg)
04/22/23 Specification/Testing/OCL 78
Conclusions
• OCL is a suitable language for expressing object properties, class invariants and method pre- and post-conditions. (needs capability to define functions and auxiliary variables).
• OCL is NOT a good language for navigation but can be made into one by adding strategies.
![Page 79: A Specification Language](https://reader033.vdocument.in/reader033/viewer/2022051219/5681602c550346895dcf3929/html5/thumbnails/79.jpg)
04/22/23 Specification/Testing/OCL 79
Further information
• www.rational.com contains latest information about UML, specifically OCL.
• www.ics.uci.edu/pub/arch/uml