In light of software engineering, particularly in object-oriented analysis and design, Abstraction can be seen and defined as a process and as an entity.

Rumbaugh sees abstraction as the fundamental attribute of certain aspects of a problem and the goal is to segregate those chief aspects. On the other hand, Booch describes abstraction as an important characteristic of an object that identifies it from all other variety of objects. To sum this all up, abstraction provides a crisply defined conceptual boundary, relative to the perspective of the view.

Abstraction as a process
- denotes the withdrawal of important details about an item or group of items while disregarding the unimportant details. It draws a boundary line around an object, where its important attributes are within the boundary. By having a boundary, we can concentrate more on the real issues concerning the object.

Abstraction as an entity
- denotes some representation of an actual entity.

Types of Abstraction
Fundamental Abstraction- concentration on the function *but* ignoring its implementation.
Data Abstraction- extension of the concept of functional abstraction; underlying implementation's particulars and the data are not of interest to the client.

...and there are two different forms of data abstraction

Abstraction of the fundamental structure of the data- the different forms of data are identified in terms of operations that apply to the objects of the type though the only setback with this kind of data abstraction is that values of such objects can be altered and observed only by the use of the native operations.
Abstraction of items held in the data type- the model of the data type is alienated from the structure of the items held in the data type.

That's all.