Ph.D. (Computer Science)The development of software systems is a relatively recent field of human endeavour. Even so, it has followed a steady progression of dominant paradigms which have incrementally improved the ease with which developers are able to express the logic and structure of their systems. The initially unstructured era of free-form spaghetti code gave way to structured programming in which the entry and exit points of functional units were well defined through the creation of abstractions such as procedures, sub-routines and functions. The problem of correctly associating data with the set of operations which are legal on this data was addressed through the concept of encapsulation with the onset of object-oriented programming...