I think I have just had a revelation!
I have possibly realized why C++, Java, C# and that style of OOP tsunami going on for decades has upset my mind.
Let's think about that word "inheritance". As used in C++ and other languages. It is a total misnomer, the abstraction is wrong.
I am led to believe that I am what I am as the result of inheriting characteristics from my parents through the mechanism of DNA and all that. In turn they were what they were by such inheritance from my grandparents, which in turn ... going back millions (billions) of years inherited from some simple single celled thing or whatever, lost in the dawn of life.
So far so good. It all sounds plausible to me and there is evidence around to suggest the validity of the inheritance idea.
Now it occurs to me there is something odd about this. You see my parents are not alive anymore. In fact nothing I inherited from since the dawn of time exists anymore. But here I am. Still functioning as people might expect. My being does not depend on my ancestors existence.
Not only the instances of my inheritance, my parents, grandparents....no longer exist. But also the blue prints, the "classes", of their DNA is no more. Except in as much as it exists in me.
Where am I going with all this?
Well, imagine how well a C++ program would function if you killed all the ancestors of a class? Delete all that code and data from the base class up. Not very well!
My conclusion: "inheritance" in C++ and such is a misnomer. Those children at the end of the chain can never live independently, free of their ancestors like I do.
Rather what we have there is an ever growing chain of dependency. Which seems like an odd thing to want, software architect gurus are always imploring us to reduce dependencies between our components.
Sorry for the long ramble there. In part two I might start on what I think about that "class" idea. Which apparently is also inspired by some biological notion of taxonomy ....