Objects versus Abstract Data Types
TweetWilliam R. Cook’s essay titled On Understanding Data Abstraction, Revisited explains the differences between two forms of data abstraction, objects and abstract data types. His another paper, Object-Oriented Programming Versus Abstract Data Types shows why distinguishing these two data abstractions are important:
Object-oriented programming and abstract data types can also be viewed as complementary implementation techniques: objects are centered around the constructors of a data abstraction, while abstract data types are organized around the operations. These differences have consequences relating to extensibility, efficiency, typing, and verification; in many cases the strengths of one paradigm are the weaknesses of the other. Most object-oriented programming languages support aspects of both techniques, not a unification of them, so an understanding of their relative merits is useful in designing programs.
Haskell type classes are also discussed in Cook’s essay. He described Haskell type classes as a powerful mechanism for parameterization and extensibility because type classes are unique in that they have properties of both objects and abstract data types:
- Type classes do not allow different instances to interoperate, but they allow multiple type class instances within a single program.
- Type classes are similar to object interfaces in allowing a method to operate on any value that has the necessary operations.
- Type classes are based on algebraic signatures as in abstract data types, but they do not enforce any hiding of representations.