Насколько я могу судить, несмотря на бесчисленные миллионы или миллиарды, потраченные на образование, языки и инструменты ООП, ООП не улучшила производительность разработчиков или надежность программного обеспечения и не уменьшила затраты на разработку. Немногие люди используют ООП в любом строгом смысле (мало кто придерживается или понимает такие принципы, как LSP); как представляется, малое единообразие или согласованность с подходами, которые люди применяют к предметным областям моделирования. Слишком часто класс используется просто для его синтаксического сахара; он помещает функции для типа записи в собственное маленькое пространство имен.
Я написал большое количество кода для самых разных приложений. Хотя были места, где истинное замещаемое подтипирование играло ценную роль в приложении, они были довольно исключительными. В целом, хотя много говорят о "повторном использовании", реальность заключается в том, что, если часть кода не делает именно то, что вы хотите, очень мало "рентабельного" использования. Крайне сложно разрабатывать классы, чтобы их можно было расширять правильно, и поэтому стоимость расширения обычно настолько велика, что "повторное использование" просто не стоит.
Во многих отношениях это меня не удивляет. Реальный мир не является "OO", и идея, подразумеваемая в OO, - что мы можем моделировать вещи с помощью некоторой таксономии классов - кажется мне очень фундаментально ошибочной (я могу сидеть на столе, пеньке, капот автомобиля, кто-то на коленях - но не один из них - стул). Даже если мы перейдем к более абстрактным областям, OO-моделирование часто бывает сложным, противоречивым и в конечном итоге бесполезным (рассмотрим классические примеры кругов/эллипсов или квадратов/прямоугольников).
Так что мне здесь не хватает? Где значение ООП и почему все время и деньги не удалось сделать программное обеспечение лучше?