Download presentation
Presentation is loading. Please wait.
Published byHubert Powers Modified over 9 years ago
1
Paper Title: On the Precise Meaning of the OCL Constraints Presented by Alla Dove
2
What we want OCL to be Main Purpose of OCL: Provide precise information in UML, which can be ambiguous Use in Advanced Support Tools: – check database integrity – check correctness of rules – prove that code never violates the constraints
3
What OCL is really like Lack of precise semantics Questions: – When during the execution is the validity of invariant enforced? – Is it possible to specify non-terminating operations in OCL? – What is the meaning when several constraints are attached to the operation? – What impact do the constraints on the superclass have on its subclasses?
4
Invariants context CheckingAccount inv: bal >= limit
5
Problem Question: When during the execution is the validity of invariant enforced? bal = $100 withdraw ($70)=>bal = $30 deposit ($30)=>bal = $60 withdraw ($70)=>bal = -$10 deposit ($30)=>bal = $20 Need to have a checkpoint at the end of a series of transfers.
6
Proposed Informal Semantics If an operation is used to compute intermediate results, use “volatile” property volatile=true =>invariant is not enforced context CheckingAccount inv: bal >= limit context CheckingAccount::withdraw(n:Interger): void volatile=true …
7
Undefinedness of Pre and Post Undefinedness = non-existence of result – Exception undefinedness division by zero accessing object through a reference which is null – Non-termination undefinedness loops that run forever
8
Problem Question: Is it possible to specify non-terminating operations in OCL? In OCL, an operation is always required to terminate. “Exception undefinedness” only
9
Proposed Solution Require all query operations defined in OCL to terminate Other operations transforming the state may or may not terminate
10
Splitting of Constraints Question: What is the meaning when several constraints are attached to the same operation? Complex post and pre conditions are split into smaller ones: context CheckingAccount::withdraw(n: Integer) pre: (n>=0) and (bal – n >=limit) post: bal = bal@pre – n context CheckingAccount::withdraw(n: Integer) pre: n>=0 post: true context CheckingAccount::withdraw(n: Integer) pre: bal – n >=limit post: bal = bal@pre – n May not always be a good idea; some parts may not be satisfied n=2 bal=1 limit=0
11
Inheritance of Constraints Question: What impact do the constraints on the superclass have on its subclasses? Liskov’s Substitution Principle: A class can always be substituted by any of its subclasses.
12
Proposed Solution Two approaches: 1. Make developer responsible - may overlook critical cases - not consistent with object-oriented paradigm 2. Consider all constraints on superclass to be constraints on its subclasses. context A inv: INV1 context A::op(x:T) pre: PRE1 post: POST1 context B inv: INV2 context B::op(x:T) pre: PRE2 post: POST2 X context B inv: INV1 and INV2 context B::op(x:T) pre: PRE1 and PRE2 post: POST1 and POST2
13
Exercise context CheckingAccount inv: bal >= limit context CheckingAccount::withdraw(n: Integer) pre: (n>=0) and (bal – n >=limit) post: bal = bal@pre – n context Account inv: bal >0 context Account::deposit(n: Integer) pre: n>0 post: bal = bal@pre + n What is the full list of OCL constraints for CheckingAccount?
14
Result: context CheckingAccount inv: bal >0 and bal >= limit context CheckingAccount::deposit(n: Integer) pre: n>0 post: bal = bal@pre + n context CheckingAccount::withdraw(n: Integer) pre: (n>=0) and (bal – n >=limit) post: bal = bal@pre – n
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.