A Specification Language

Slides:



Advertisements
Similar presentations
Formal Methods of Systems Specification Logical Specification of Hard- and Software Dr. Armin Wolf Fraunhofer Institut für Rechnerarchitektur.
Advertisements

Language Specification using Metamodelling Joachim Fischer Humboldt University Berlin LAB Workshop Geneva
Profiles Construction Eclipse ECESIS Project Construction of Complex UML Profiles UPM ETSI Telecomunicación Ciudad Universitaria s/n Madrid 28040,
The role of OCL in the Model Driven Architecture Jos Warmer Klasse Objecten
Semantics Static semantics Dynamic semantics attribute grammars
ICE1341 Programming Languages Spring 2005 Lecture #6 Lecture #6 In-Young Ko iko.AT. icu.ac.kr iko.AT. icu.ac.kr Information and Communications University.
1 The Object Constraint Language: Expressing Constraints in the UML (Most slides created by Robert B. France, Professor Department of Computer Science,
OCL2 April A presentation of OCL 2 Object Constraint Language Christian Hein, Fraunhofer FOKUS April 2006.
Copyright © 2006 Addison-Wesley. All rights reserved.1-1 ICS 410: Programming Languages Chapter 3 : Describing Syntax and Semantics Axiomatic Semantics.
ISBN Chapter 3 Describing Syntax and Semantics.
Fall Semantics Juan Carlos Guzmán CS 3123 Programming Languages Concepts Southern Polytechnic State University.
CS 355 – Programming Languages
Formal Methods of Systems Specification Logical Specification of Hard- and Software Prof. Dr. Holger Schlingloff Institut für Informatik der.
Lecturer: Sebastian Coope Ashton Building, Room G.18 COMP 201 web-page: Lecture.
CS 330 Programming Languages 09 / 18 / 2007 Instructor: Michael Eckmann.
McGraw-Hill/Irwin Copyright © 2007 by The McGraw-Hill Companies, Inc. All rights reserved. Chapter 5 Understanding Entity Relationship Diagrams.
PSUCS322 HM 1 Languages and Compiler Design II Formal Semantics Material provided by Prof. Jingke Li Stolen with pride and modified by Herb Mayer PSU Spring.
CS 330 Programming Languages 09 / 16 / 2008 Instructor: Michael Eckmann.
Describing Syntax and Semantics
® Eurostep.ESUKPC v0.1©Copyright Eurostep Limited An Introduction to ISO STEP Part 25 David Price.
SEG4110 – Advanced Software Engineering and Reengineering TOPIC E Object Constraint Language (OCL)
Ranga Rodrigo. Class is central to object oriented programming.
Syntax & Semantic Introduction Organization of Language Description Abstract Syntax Formal Syntax The Way of Writing Grammars Formal Semantic.
1 The Object Constraint Language Jos Warmer and Anneke Kleppe. OCL: The Constraint Language of the UML, Journal of Object-Oriented Programming, 2(2):10-13,
Supporting Automatic Model Inconsistency Fixing Yingfei Xiong University of Tokyo, Japan Zhenjiang HuNational Institute of Informatics, Japan Haiyan ZhaoPeking.
A presentation of OCL 2 Object Constraint Language Fraunhofer FOKUS.
1 COSC 4406 Software Engineering COSC 4406 Software Engineering Haibin Zhu, Ph.D. Dept. of Computer Science and mathematics, Nipissing University, 100.
111 Writing Protocols in OCL CS 4311 Jos B. Warmer and Anneke G. Kleppe, OCL: The Constraint Language of the UML, JOOP, May Jos B. Warmer and Anneke.
UML Model architecture Object Constraint Language Lectures P9-P11 T120B pavasario sem.
ISBN Chapter 3 Describing Semantics -Attribute Grammars -Dynamic Semantics.
CS 363 Comparative Programming Languages Semantics.
1 OCL The Role of OCL in UML. 2 רשימת הנושאים  מבוא  מרכיבי השפה  דוגמאות  מקורות.
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
IM NTU Software Development Methods, Fall2006 Software Development Methods, Fall 2006 OCL 2006/12/ Object Constraint Language (OCL) Yih-Kuen Tsay.
Institute for Software Integrated Systems Vanderbilt University Object Constraint Language Himanshu Neema Krishnakumar Balasubramanian Jeff Parsons November.
Chapter 3 Part II Describing Syntax and Semantics.
Programming Languages and Design Lecture 3 Semantic Specifications of Programming Languages Instructor: Li Ma Department of Computer Science Texas Southern.
Object Constraint Language
1 Kyung Hee University Constraints Spring Kyung Hee University Graphical Notations  Graphical notations are well suited for displaying structural.
1 / 48 Formal a Language Theory and Describing Semantics Principles of Programming Languages 4.
Software Engineering 2 -Prakash Shrestha.
© 2004 Benet Devereux Lecture #4 OCL and SCR/Parnas Tables.
ANU COMP2110 Software Design in 2003 Lecture 10Slide 1 COMP2110 Software Design in 2004 Lecture 12 Documenting Detailed Design How to write down detailed.
Static Techniques for V&V. Hierarchy of V&V techniques Static Analysis V&V Dynamic Techniques Model Checking Simulation Symbolic Execution Testing Informal.
UML Profile BY RAEF MOUSHEIMISH. Background Model is a description of system or part of a system using well- defined language. Model is a description.
CSC3315 (Spring 2009)1 CSC 3315 Languages & Compilers Hamid Harroud School of Science and Engineering, Akhawayn University
C HAPTER 3 Describing Syntax and Semantics. D YNAMIC S EMANTICS Describing syntax is relatively simple There is no single widely acceptable notation or.
Interpreting the Object Constraint Presented by: Ed Kausmeyer.
Object Design More Design Patterns Object Constraint Language Object Design Specifying Interfaces Review Exam 2 CEN 4010 Class 18 – 11/03.
A UML-Based Pattern Specification Technique Presented by Chin-Yi Tsai IEEE TRANSACTION ON SOFTWARE ENGINEERING, VOL. 30, NO. 3, MARCH 2004 Robert B. France,
Defects of UML Yang Yichuan. For the Presentation Something you know Instead of lots of new stuff. Cases Instead of Concepts. Methodology instead of the.
Jan Pettersen Nytun, UIA, page 1. Jan Pettersen Nytun, UIA, page 2 HISTORY COLLECTION TYPES AND QUERING IN OCL FORMAL LANGUAGE - STATEMENT EXAMPLES CONSTRAINTS.
Language = Syntax + Semantics + Vocabulary
System Software Unit-1 (Language Processors) A TOY Compiler
Extending UML.
CS510 Compiler Lecture 4.
Specifications Liskov Chapter 9
The Object Constraint Language
UML Model architecture Object Constraint Language
Syntax Questions 6. Define a left recursive grammar rule.
UML: Unified Modeling Language
Midterm Review CSU 670 Spring 2004.
Semantics In Text: Chapter 3.
The Object Constraint Language
Protocols CS 4311 Wirfs Brock et al., Designing Object-Oriented Software, Prentice Hall, (Chapter 8) Meyer, B., Applying design by contract, Computer,
Chapter 3 Describing Syntax and Semantics.
Object Constraint Language (OCL)
Formal Methods in Software Engineering 1
Software Architecture & Design
Presentation transcript:

A Specification Language UML: www.rational.com/uml Model architecture Object Constraint Language A part of UML 1.1 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Resource Allocation <JobCategory> reqs <Facility> 0..* type provides 0..* <Job> when: TimeInterval schedule allocated <Resource> 0..* 0..1 inv Job::allocated<>0 ==> allocated.provides->includesAll(type.reqs) --Any allocated resource must have the required facilities inv Resource::jo1, jo2: Job:: (schedule->includesAll({jo1,jo2}) ==> jo1.when.noOverlap(jo2.when) -- no double-booking of resources 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Resource Allocation JobDescription reqs Skill 0..* type JobCategory Facility provides 0..* Resource Allocation Resource Job Job when: TimeInterval schedule allocated Plumber 0..* 0..1 Customer Application of resource allocation to Pluming 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Further examples Person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id) Company self. employee->select (p|p.age > 50) 12/8/2018 Specification/Testing/OCL

The relative cost of correcting an error increases over SDLC 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL How to prevent defects? More precise specifications. OCL helps. Start testing early, at design level: See homework 2!!! Use walkthroughs and inspections 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

Four layer architecture meta-metamodel language for specifying metamodels metamodel language for specifying models model language for specifying objects in some domain user objects 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Three layers instance of defines classes B: metamodel L: model P: user objects CB CL metamodel OB classes model OL TB user object OP a class dictionary for class dictionaries objects TL class dictionary TP text sentence 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL OCL properties LL(1) language finally back to the Pascal days! Grammar provided uses EBNF syntax Parser generated by JavaCC 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Example: UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph Note: we use a thick arrow to denote inheritance. UML uses an open arrow. ClassDef BParse Body parts Part className 0..* super ClassName Concrete Abstract 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName number of concrete classes super Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Example -> collection op select:subset collect:new set Number of concrete classes: ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size 12/8/2018 Specification/Testing/OCL

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 = … 12/8/2018 Specification/Testing/OCL

Pre- and post-conditions Example: Post condition for insert operation: person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Basic values and types Collection Set subtype of Collection Sequence subtype of Collection Bag subtype of Collection if element types conform to each other 12/8/2018 Specification/Testing/OCL

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. 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Properties an attribute an association end an operation with isQuery true a method with isQuery true 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Properties an attribute Person self.age >= 0 self.employer->size an association end Company self.manager --type Person self.employee--type Set(Person) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Properties an operation with isQuery true Person self.income(aDate) Company self.stockPrice() 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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. 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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) 12/8/2018 Specification/Testing/OCL

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(); ... 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

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); ... 12/8/2018 Specification/Testing/OCL

Predefined features on all objects (OclAny) Type of an object oclType : OclType Feature oclType results in type of an object Direct type oclIsTypeOf(t:OclType):Boolean Direct or super type oclIsKindOf(t:OclType):Boolean 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Examples Person self.oclType results in Person self.oclIsTypeOf(Person)--true self.oclIsTypeOf(Company)--false 12/8/2018 Specification/Testing/OCL

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) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

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 12/8/2018 Specification/Testing/OCL

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) 12/8/2018 Specification/Testing/OCL

Collection Operations Select and reject operations collection->select (v:Type|boolean-expr-with-v) Company self.employee->select (p:Person|p.age > 50) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Select syntax Define a subset collection->select (v:Type|boolean-expr-with-v) (v|boolean-expr-with-v) (boolean-expr) type redundancy refer to entire object refer to parts 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Reject syntax Define a subset collection->reject (v:Type|boolean-expr-with-v) (v|boolean-expr-with-v) (boolean-expr) Instead negate expression 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Collect syntax collection->collect (v:Type|expr-with-v) (v|expr-with-v) (expr) Creates a bag self.empl->collect(bdate)->asSet Build new collection by applying expression to elements of old 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL ForAll operation All elements satisfy Boolean expression collection->forAll (v:Type|boolean-expr-with-v) (v|boolean-expr-with-v) (boolean-expr) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Exists operation At least one element satisfies Boolean expression collection->exists (v:Type|boolean-expr-with-v) (v|boolean-expr-with-v) (boolean-expr) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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) 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Number of class definitions: ClassGraph self.entries->size wrong ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))->size 0..* Entry EParse entries ClassGraph BParse ClassDef 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Number of class definitions: What about using strategies to define collections? ClassGraph self.{to ClassDef} ->size 0..* Entry EParse entries ClassGraph BParse ClassDef 12/8/2018 Specification/Testing/OCL

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. 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Improve OCL The collection consists of CT-objects reached during the traversal of the N(s) object following strategy SS. 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super ClassGraph -- concrete classes self.{to Concrete}->size Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Number of concrete classes: ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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? 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Terminal buffer rule ClassGraph 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} 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Class graph is flat ClassGraph self.{to Abstract}-> forAll(a|a.parts->size=0) 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Applications Abstract superclass rule ClassGraph 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) 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

UML class diagram ClassGraph 0..* Entry EParse entries ClassGraph BParse ClassDef Body parts Part className 0..* ClassName super Concrete Abstract 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL 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. 12/8/2018 Specification/Testing/OCL

Specification/Testing/OCL Further information www.rational.com contains latest information about UML, specifically OCL. www.ics.uci.edu/pub/arch/uml 12/8/2018 Specification/Testing/OCL