I am new to OOP. I’ve read definiton of both terms in many different articles and books, but still can’t understand whether there is any relationship between them.
2
In OOP languages with type inheritance, “abstraction” is often used to denote the relationship between subtype and supertype. But this is a relatively narrow technical meaning.
“Abstraction” is a much wider concept and means the act of describing something through its essential properties while ignoring details that are not relevant in the context you’re talking about.
Abstract data type are a good example for abstraction: they’re defined only through the operations they support, without specifying how those operations are implemented. The abstract datatype “list” supports getting, inserting and removing elements via an index, and that’s all you need to know at that level.
Now in pretty much all mainstream OO languages, abstract datatypes are in fact modelled as a type that concrete implementations inherit from, but that is itself an implementation detail of these languages, not relevant to the concept of abstract datatypes.
1