Viewed in this light, the concept of an object seems a natural heir to the idea of an abstract data type. An object provides encapsulation, similar to modules. An object provides instantiation, similar to ADT's. What is new is the notion of message passing, a more dynamic way of binding procedure names to behavior, the idea of classes, hierarchies of object categories which permits code sharing and reuse, and polymorphism, a new form of software reuse the takes advantage of message passing.