Do yourself a favour, read the Structure and Interpretation of Computer Programs. It will teach you that:
The general technique of isolating the parts of a program that deal with how data objects are represented from the parts of a program that deal with how data objects are used is a powerful design methodology called data abstraction.
In my opinion OOP doesn’t favour data abstraction.
A class glues together data (attributes) and functions dealing with the data (methods). In functional programming languages, data and functions which operate on the data are kept separated promoting data abstraction.
I read this definition while learning Scheme with the beautiful Structure and Interpretation of Computer Programs (which I recommend for you health and safety).
Here, the explanation of functions and procedures (data manipulation) is kept separated from the explanation of how the data is represented, separation which should also be advocated in your source code.
Any comment is more than welcome.. it will help me to understand more and more!