2.1.1 Example: Arithmetic Operations for Rational Numbers Data abstraction: isolate the use of data from its implementation details 2.1.2 Abstraction Barriers Abstraction barriers: a mechanism for enforcing the separation between different levels ob abstraction. Benefits of abstraction barriers: ability to change the implementation of a module without affecting its external users Violation of abstraction barriers: access and manipulate the internal implementation of a module directly Refactoring with abstraction barriers 2.1.3 What Is Meant by Data? Data as a set of objects Hierarchical structure of data: objects can contain other objects as components Composite data objects: pairs, sequences, trees Data and the interpreter: interpreter can be designed to recognize and manipulate different data types