Objects vs ADTs: Instance vs Class

Most ADT definitions specify an abstract type and also create an instance of that type. In OOP, object classes are templates for abstract data types. Rather than defining a specific instance of an ADT, a class definition represents a template from which many instances of the type may be created.

Example: If you've ever implemented an ADT for stacks in Pascal, you probably only implemented one stack. It wouldn't be possible to declare several variables of type stack. The problem is that Pascal has no way to declare a type template for a complex ADT which can be used many times. (Note that Pascal does allow you to declare simple types, such as enumerated types, and use those types to declare variables.)