Modular Reasoning in an Object-Oriented Refinement Calculus

Object-oriented languages typically use late binding for procedure calls on objects. This raises a potential problem for programmers who wish to reason about their programs, because the effects of a procedure call cannot always be determined statically. In this paper we develop a simple model of procedure invocation for object-oriented languages based on the refinement calculus [Morgan and Robinson 87] and define the minimum requirements for a system to support modular reasoning. In such systems, reasoning about procedure calls is easier, because the behaviour of a procedure call with arguments of type T can be used as an approximation to its behaviour on more specialised arguments.

[1]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[2]  Ken Robinson,et al.  The Object-oriented Lollipop: An Example of Subtyping , 1991 .

[3]  Ken Robinson,et al.  Specification statements and refinements , 1987 .

[4]  Daniel G. Bobrow,et al.  Common lisp object system specification , 1988, SIGP.

[5]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[6]  Gary T. Leavens Modular specification and verification of object-oriented programs , 1991, IEEE Software.

[7]  Wilf R. LaLonde,et al.  Inside Smalltalk (Volume 1) , 1990 .

[8]  Gary T. Leavens,et al.  Reasoning about object-oriented programs that use subtypes , 1990, OOPSLA/ECOOP '90.

[9]  Will Tracz Modularization: approaches to reuse in Ada , 1990 .

[10]  Pierre America,et al.  Designing an Object-Oriented Programming Language with Behavioural Subtyping , 1990, REX Workshop.

[11]  Carroll Morgan,et al.  Programming from specifications , 1990, Prentice Hall International Series in computer science.

[12]  Craig Chambers,et al.  Object-Oriented Multi-Methods in Cecil , 1992, ECOOP.

[13]  Barry Mark Utting An object-oriented refinement calculus with modular reasoning , 1992 .

[14]  Joseph M. Morris,et al.  A Theoretical Basis for Stepwise Refinement and the Programming Calculus , 1987, Sci. Comput. Program..

[15]  R. E. Johnson,et al.  Arithmetic and double dispatching in Smalltalk , 1990 .

[16]  P. America,et al.  A behavioural approach to subtyping in object-oriented programming languages , 1991 .

[17]  Rakesh Agrawal,et al.  Static type checking of multi-methods , 1991, OOPSLA '91.

[18]  Todd Leavens Gary Verifying object-oriented programs that use subtypes , 1989 .

[19]  Carroll Morgan,et al.  Data Refinement of Predicate Transformers , 1991, Theor. Comput. Sci..

[20]  Ralph-Johan Back,et al.  A Lattice-theoretical Basis for a Specification Language , 1989, MPC.

[21]  Carroll Morgan Procedures, parameters, and abstraction: Separate concerns , 1988, Sci. Comput. Program..

[22]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.