ABSTRACT

Object-oriented design techniques evolved from abstract data types (ADTs) [Liskov and Zilles 1975, Liskov et al. 1977], and embody the concept of a class (replacing the ADT) as the unit of abstraction, partitionable into a publicinterface, which represents the behavior of a data type, and a privateimplementation, which is hidden from the software engineer using the class. Both the interface and implementation can be composed of data members (attributes) and operations (methods). Object-oriented and ADT approaches promote: representation independence for changes to the internal structure and function of each component without impacting the external view of a class; incrementality/anticipation of change for the addition of functionality, with the expectation that components will be changed, added, refined, etc., as needed to support evolving requirements; high cohesion (each class performs a single well-defined task) and low coupling (controlled interactions among classes). The distinguishing factor between ADTs and the object-oriented approach is inheritance, which allows controlled sharing between classes, permitting the passing of data and/or operations from the parent (superclass) to the child (subclass).