Abstraction means separating the top level usefulness of a thing from the details of its implementation so that the programmers is freed from worrying about details.
Process abstraction is necessary for achieving program modularity, which means dividing up a system into components or modules, each of which can be designed, implemented, tested, reasoned about, and reused separately from the rest of the system.
For example, List is a widely used data structure Data: a collection of items, each item has a position in a sequential order. Operations: add/remove an item, sort the items,...
[1] Basic information should not be difficult to obtain [2] The set of operations should be adequate [3] Each operation should have a well-defined purpose [4] Have a few simple operations that can be combined to perform more complex operations.
[1] internal storage container is used to hold the items in the collection, e. g an array [2] users of the ADT need not know the representation [3] users not allowed to tamper with the representation [4] all data private [5] use accessors and mutators
[1] An algorithm for each of the necessary operations, e.g., an algorithm for sorting a list. [2] All auxiliary (helper) operations that are not in the contract should be private.