
Object-oriented methodology has become an important approach to
improving the quality of software and increasing the efficiency
of its development. In this paper our aim is to show how the benefits of
object-oriented methodologies can be realized within the
framework of functional programming, achieving
a more powerful level of modular program structure and avoiding
introduction of the possibility of nondeterminate program
behavior except when demanded by an application.
We show how inheritance can be
supported by an extension of the Sisal language, namely ObjectSisal, to
include a natural class mechanism with immutable abstract
data types, and how uses of ``state'' may be handled by means of
stream data types and the nondeterminate merge operation.
These principles are illustrated using examples from
simulation and real-time systems. We
believe that efficient distributed implementation of such an
object-oriented methodology can be achieved through
compile-time program transformation and execution
platforms that implement fine-grain threads.

