This is known as a Gorilla-banana problem.
The drawback of classical OOP is that you have to define classes all the time even for simple features and main problem is that you can extend only from one class. It came from years of bad practice when OOP was very popular and many developers have been writing a lot of complex code when it wasn't necessary. I've been there many times as well. I asked one of my team members to implement a simple feature and when I checked a PR, I've seen that feature (banana I needed) was wrapped into the class (Gorilla) and interface (entire jungle). I just needed a function...
The main problem of OOP is that a lot of people misunderstand OOP. It should be called a "Messaging Oriented Programming". Many developers are overcomplicating things and trying to make everything an object, every entity, while what they have to deal in a software is just a data and messaging between a data in a MVS (Minimum viable software). Developers are also afraid of writing just a simple code thinking that it is for novice and inexperienced engineers, while totally contrary, this is what distinguish fan from real professional who can implement complicated logic in a maximum simple way.
It is still possible to write clean and maintainable OOP if language allows you to do composition like Object.assign() in JavaScript or traits in PHP.
After all code is bad not because of paradigm but because of a person who doesn't applies software engineering principles and good practice, and doesn't uses right tool for the right job.
Follow the "Lego principle" - build small and totally independent blocks, functions, objects without side effects.
"Keep it simple" (c)