Objects and Subtyping in a Functional Perspective IBM Research Report RC 16423, March 1991 Martin Odersky Object-oriented programming languages with subtyping facilitate the reuse of code which forms the top part of a call graph. This style of code reuse, sometimes called inverted programming, cannot be simulated easily in traditional languages. We present a technique for achieving the same effect in the framework of a higher-order, polymorphic functional language without subtyping. Our method establishes a close relationship between the object-oriented concepts of class, ``self'', and subtyping, and the functional concepts of algebraic data types and abstraction functions. This relationship can form the basis of a transformational semantics of object-oriented language elements.