Understanding ‘Abstraction’
In the beginning there was Abstraction. And the abstraction was God (of OO). And God of abstraction said let there be Classes and there were Objects
– Book of Genesis - OO Bible
Abstraction is very important concept in OO. Understanding Abstraction is crucial in becoming a successful OO designer. Abstraction cannot be understood by reading books (which deal with it in Abstract terms turning it into a sort of mystery). Like Morpheus said to Neo in Matrix, You need to experience it yourself.
Roughly stated, Abstraction is the process of discovering classes, their responsibilties [the services they provide, the functions they implement] and how these classes interact [co-ordination] with others to complete the big picture [implement the system].
Continuing with our 'File System' example [easy to understand], it's easier to find Files, without using 'Search', if the directories are given meaningful names. Files an directories [ class/functions] are easier to find if the names are short and easier to remember.
It's easier deduce what files 'My Photos' directory contains, than the one named 'RoboXYZ12T45G'.File system [programming language] will not prevent a file 'hardrock.mp3' from being created under 'My Photos'. It's the users [programmer] resposibility to organize files [functions] under the right directory [class] based on purpose [responsibilty] of that directory [class]. To summarize, meaningful and easy to remember names ought to be given based on the purpose served.