I don’t know why people make such a fuss over objects, I really don’t.
Normally objects works better using composition rather than inheritence, anyway, not always, but mostly.
A lot of the problems I see described here are similar to when I see people using UML, a stick figure a few boxes and lines and hey presto a full design that will describe the interactions of 3000 lines of code, I don’t think so, a lot more detail please. Those three letters be they UML or OOP do not convey any special aura on the code. You still need to do a good job.
If people overuse features, then they are using them inappropriatly, presumably they don’t know any better, or don’t have the confidence of their own convictions. Or want to learn some new stuf and add it to thier CV/resume.
When push comes to shove, to me (and I seem to be in the minority here), there is very little conceptual difference in OOP code and non-OOP code, cetainly nothing revolutionary. It’s basically conceptual integrity through high cohesion, low coupling i.e. encapsualtion and private methods and state. Polmorphism icing on the cake.
Oh and yes, the “object-oriented” bit of OOP, does not refer to modeling real world objects in code. You are modelling conceptual objects in code, when was the last you could examine the metallurgy on your car object. You can’t, it dosn’t have any, not a real object, a conceptual object.
Clarity is king.
If you can look at any piece of your code and it holds together conceptually, fits in your head and presumably does the right thing, your home free.
So in conclusion, OOP its just stuff like anything else, stop getting your knickers in a twist.