If you’ve learned Design Patterns correctly, then you would never have faced any of these problems. Design Patterns refers to all the problems that you have described here. But it’s difficult to take a grasp of design patterns, it requires practice. If used correctly, OOP can be extremely powerful tool. I think your post of lacks of research, you never mentioned that Design Patterns can handle all the problems very efficiently. So, at the end of the day, it all comes to using the paradigm correctly.