Extensions and foundations of object-oriented programming

This paper has three major objectives: (i) to provide several new features for object-oriented programming (OOP); (ii) t o p rovide a rigorous logical semantics for OOP; and (iii) to unify OOP with functional programming. FOOPS is a clean new programming language that embodies our approach to these objectives. Following a broad definition of “logical programming,” our main techniques are described: (1) subsorts (from order-sorted algebra) for multiple inheritance; (2) a distinction between “adt” (for abstract data type) modules and “object” modules; and (3) “reflection,” in the sense of providing a built-in data type for programs in a functional sublanguage. Among the features of FOOPS that are new to OOP are: (4) user-definable abstract data types; (5) generic modules; (6) strong but flexible typing, with overloaded mixfix operations; (7) integration of coding with specification; and (8) an operational semantics (based on term-rewriting) that should be very efficient on suitable parallel machines. In addition, (9) a logical basis is provided in “reflective” logic. Some examples of FOOPS are given.