How to successfully progress from procedural to OOP style?
In the past I had some trouble to grasp why we even need classes and don't just write functions. In the meantime I learned to see how it makes sense to protect certain data and tie related functionality to it; I also learned how to write classes (in my case in Python). But when I want to apply it, I often get the feeling that something's not quite right: Either my classes do too much and suck up the functionality and data of the whole application, effectively making the class 'wrapping' effectless. Or they do too little so that they look like functions in a pretty dress, useless again. How can I, step by step, understand better how to write *meaningful* classes, how to model their relationships to other classes, free functions or free data, how to make it all interact properly and, well, reasonably?