Это немного философски, чтобы иметь «правильный» ответ, но хорошо, я укушу.
По моему мнению, проблема возникает потому, что вы считаете FP и OO несовместимыми, но это не так.FP и императивное программирование совмещены, то есть используют выражения вместо выражений.
Часть проблемы заключается в том, что ОО не имеет четкого определения, по моему мнению, в любом случае.Чтобы поддержать это, я бы указал на Алана Кея, который сказал: «На самом деле я придумал термин« объектно-ориентированный », и я могу сказать, что я не имел в виду C ++». Тем не менее, большинство языков мы рассматриваем как OO, то есть java / C #берут больше после C ++, чем smalltalk.
Что дает нам стиль OO C ++ / java / C #, это хороший способ организовать наш код в модели, создать данные, добавить в них свойства и т. д. Это практически невозможно-функционален и может хорошо использоваться с функциональным программированием.
Как вы указали, многие C ++ / java / C # имеют тенденцию быть состоящими, но это не обязательно, и java, и C # имеют фундаментальные типытакие как их строковые классы, которые являются неизменными.Это правда, Java и C # не облегчают создание неизменяемого класса, но, приложив немного усилий, вы можете сделать это.
Что приводит нас туда, где неизменные присваиваются?В моих проектах обычно все делается неизменным, поскольку это облегчает исправление ошибок, и если я вижу, что это вызывает проблемы с производительностью, я начинаю добавлять некоторую изменчивость на критические пути.Единственное место, где неизменность никогда не сработает, это элементы управления графическим интерфейсом, которые обычно содержат слишком много состояний, чтобы быть неизменными.Сказав, что вы можете получить довольно долгий путь построения GUI с использованием неизменяемого подхода «комбинатор», тогда интерпретируется изменяемыми элементами управления графическим интерфейсом.Это более или менее то, что делает парень из WebSharper: http://www.intellifactory.com/products/wsp/Home.aspx
Еще один замечательный ресурс для дебатов по FP / OO - это Brain «Как функциональное программирование влияет на структуру вашего кода?» (Что сильно повлияло на мое мышлениео FP / OO): http://lorgonblog.wordpress.com/2008/09/22/how-does-functional-programming-affect-the-structure-of-your-code/