PhD Thesis Abstract

Thesis information and downloads are also available.

Abstract

This thesis is about object-oriented and component-based software architecture. It has two parts, which focus on (i) concrete software design and especially the notion of a software interface, and (ii) an algebraic basis for object-oriented modelling.

We begin in chapter 3 by extending the mathematical notion of a signature with an explicit name and import mechanism to form a model of basic interfaces. A collection of interface definitions is termed a repository. The overall software architecture of a system can be considered in terms of the structure of interfaces within its repository. Basic interfaces with import lists of interface names articulate the data dependencies of an interface. We also consider whole graphs of import dependencies within a repository.

In chapter 3 and 4 we augment our basic interfaces with a notion of state to form stateful interfaces. Stateful interfaces extend the structure of basic interfaces by declaring lists of queries and commands. Queries allow interrogation of state whereas commands allow change of state. Later, in chapter 4, we show how inheritance and encapsulation mechanisms can be modelled using our notion of interfaces. In addition to our basic model of inheritance, we provide three separate models of interfaces with encapsulation based on the C++, Java and Eiffel programming languages.

The second part of this thesis concerns object-oriented modelling, particularly the snapshot and scenario notions found in the Unified Modelling Language.

In chapter 6 we define state algebras which describe the set of all possible state of a domain of discourse. We show how state algebras can be formed from simple object-oriented models.

In chapter 7 we show our notion of state algebra can be augmented by constructing a simulation algebra which describes the dynamic behaviour of an abstract world or system in terms of atomic, global events. We show how guarded forms of our simulation algebras can be defined which reject certain events depending on the current system state.

We demonstrate our techniques in chapter 8 by reverse engineering a well-known case study.