Hi John,
OOP implementations come with a lot of conceptual baggage and cumbersome syntax, which has spoilt its reputation as a useful programming paradigm.
If OOP does not greatly simplify a programming task then, in my view, it should not be applied to it.
The most important feature of OOP is to remove hunks of variables and functions out of global space and put them onto their own independent islands, (commonly known as encapsulation).
This makes program merging much simpler, minimising name conflicts.
It also allows different classes of objects to have the same verb schema. For instance create, build, destroy, get, put, render, move, adjust, act, show, locate. This is an important aspect of so-called polymorphism.
For example a game may need to combine 2d controls, 3d objects, database, audio, and AI. Without OOP, combining these aspects into one project poses serious congestion of global name space and serious name bloat problems.
Inheritance turns out to be of lesser importance. And forcing classes into a false taxonomy, can spoil a program's architecture.
Charles