В одном из многочисленных выступлений против ООП на сайте cat-v.org я обнаружил отрывок Джо Армстронга, в котором было высказано несколько возражений против модели ООП, одним из которых было следующее:
Возражение 4 - Объекты имеют частное состояние
Государство является корнем всего зла. В особенности следует избегать функций с побочными эффектами.
В то время как состояние в языках программирования нежелательно, в реальном мире состояние изобилует. Я очень заинтересован в состоянии моего банковского счета, и когда я вносю или снимаю деньги в моем банке, я ожидаю, что состояние моего банковского счета будет корректно обновлено.
Учитывая, что состояние существует в реальном мире, какие возможности должен обеспечить язык программирования для работы с состоянием?
OOPL говорят «скрыть состояние от программиста». Состояния скрыты и видны только через функции доступа. Обычные языки программирования (C, Pascal) говорят, что видимость переменных состояния контролируется правилами области видимости языка. Чистые декларативные языки говорят, что нет государства. Глобальное состояние системы переносится на все функции и выходит из всех функций. Такие механизмы, как монады (для FPL) и DCG (логические языки) используются, чтобы скрыть состояние от программиста, чтобы они могли программировать «как если бы состояние не имело значения», но иметь полный доступ к состоянию системы, если это необходимо.
Опция «скрыть состояние от программиста», выбранная OOPL, является худшим вариантом. Вместо того, чтобы раскрывать состояние и пытаться найти способы минимизировать неприятность государства, они скрывают это.
Что именно подразумевается под этим? У меня очень мало низкого уровня или процедурного опыта, в основном ООП, так что, вероятно, это объясняет, насколько я незнаком с этим. И с более современной точки зрения, теперь, когда большая часть объектно-ориентированной истерии пройдена (по крайней мере, насколько я могу судить), насколько вы, ребята, думаете, насколько точен / актуален этот отрывок?
Спасибо за вашу помощь.