A theory of object oriented refinement

This thesis introduces a formal theory of object oriented refinement. The formal design of the theory is based on the design principles of unification and decoupling, which we believe have not been adequately used in other object oriented refinement theories. Thanks to the use of these principles, the semantics of the theory is mathematically simpler than other approaches: the formalization of most features uses very primitive mathematical entities. Furthermore, the constructs of the theory are more general than other approaches. There are specification constructs more general than classes. Features that are typically coupled with classes, like reuse and polymorphism, now apply to these more general specifications. Finally, our solution to the frame problem is the only modular approach that we know of that does not impose any aliasing control policy. To demonstrate that the extra generality offers real advantages to the specifier, we use the theory in some specification examples that would be impossible with other approaches. These examples, mainly inspired by Design Patterns, represent realistic and common software design situations.