Abstraction in Object-oriented Programming
The dictionary meaning of abstraction is "existing as an idea, feeling, or quality, not as a material object" (Source).
Abstraction is a higher-level concept or a way of thinking when you start designing your application from the business requirement. Abstraction is a process of identifying essential entities (classes) and their characteristics (class members) and leaving irrelevant information from the business requirement to prepare a higher-level application design.
Abstraction starts with identifying nouns in the business requirement or feature request. A noun is a person, place, thing, or process. These nouns can be your entities. After figuring out the required entities you can then collect the relevant characteristics of each entity. Characteristics are information (data) and behaviors (methods) relevant to each entity.
For example, consider the following simple business requirement:
In the above business requirement, we identify these nouns: student, course, teacher. These are our entities at the design level which can be implemented as classes.
Now, we can identify essential characteristics for each of these entities which can be implemented as properties or methods in each class. For example, a student has a name, address, and email. They might be doing some extra curriculum activities and they can have different skin colors, religions, etc.
Now, out of this information, we have to pick characteristics that are relevant and essential to our application. So, we can now pick the name, address, and courses he or she enrolled in. We will leave other information as they are not relevant for our application such as skin color, religion, and extra curriculum activities.
Thus, the process of identifying entities and characteristics which can be classes and their members from the business requirement is called "Abstraction".