ООП — это не руководство по функциям класса (таким как наследование, полиморфизм и тому подобное). Концепция очень проста, если бы мы могли группировать переменные, а затем группировать внутри класса, и то же самое с функциями. Программирование в рамках ООП в основном заключается в размещении переменных и функций внутри класса. Позже программист может использовать наследование, di, интерфейсы и т. д., но они необязательны. Я съеживаюсь, когда вижу проекты, использующие все возможные функции класса без реальной цели. Я больше съеживаюсь, когда архитектор использует наследование, потому что на диаграмме UML это выглядит прекрасно! и большинство архитекторов так и поступают!
Поэтому можно работать с ООП, даже не касаясь наследования.

My 2c