Я сомневаюсь, что CLOS послужит опорой для старых привычек, я обнаружил, что он довольно сильно отличается от стиля ОО в C ++ / Java / Python и очень интересен. Я не понимаю всех деталей, но я бы порекомендовал Практический Общий Лисп Питера Сейбела. Если вы читаете на Лиспе без особых проблем, вы сможете погрузиться в главы, посвященные CLOS в PCL. Кроме того, я бы порекомендовал ему Google Tech Talk , сравнивающий Java и Common Lisp.
Вот еще несколько рекомендаций, чтобы сделать этот ответ более полноценным:
Классический текст Структура и интерпретация компьютерных программ охватывает довольно много примеров в главе 3 построения модульных систем с использованием замыканий (и рассматривает проблемы с введением состояния и изменчивости). Глава 2 содержит некоторые общие и ориентированные на данные / тип программирования, которые могут быть полезны для мотивации изучения CLOS. Хотя эта книга действительно не нуждается в представлении, это возвышенная работа, и с весны я читаю ее медленно. Настоятельно рекомендуется, если вы заинтересованы в схеме.
Хотя SICP - отличная книга, она не лишена недостатков: действительно интересный взгляд на это - эссе «Структура и интерпретация учебного плана по информатике» , в котором подробно освещается критика SICP. и написано авторами Как разрабатывать программы (я не читал HTDP, но слышал, что это очень хорошо). Хотя это эссе не научит вас конкретно тому, что вы ищете - сравнивая функциональное и ОО-программирование, - в любом случае это действительно интересно. Их курс для начинающих студентов начинается с первого семестрового введения в функциональное программирование с использованием Scheme (я думаю, PLT / Racket) и заканчивается семестром ОО-программирования на C ++ или Java ... по крайней мере, это курс, который они описывают в эссе.
Эти слайды от Питера Норвига посвящены некоторым шаблонам проектирования, распространенным в ОО-программировании, и показывают, почему они отсутствуют или не нужны в динамических, функциональных языках, таких как Scheme и Lisp: http://norvig.com/design-patterns/
Я осторожно рекомендую книгу тех же авторов, что и книги Маленького Схемера: Маленькая Ява, Несколько образцов . Я не могу точно сказать, действительно ли это хорошая книга или нет, это было невероятно странно, и есть некоторые действительно плохие решения для набора текста (курсив, засечка, переменная ширина, верхний индекс не входит в текст по программированию) , но было бы интересно взглянуть на. В любом случае, вы можете найти это дешево. Не принимайте эту рекомендацию всерьез. Я думаю, что было бы лучше придерживаться текстов Схемы.
p.s. Я должен не согласиться с одним комментарием, утверждающим, что функциональное программирование не так сложно в ОО-программировании, я думаю, что это сильно искажает его. Функциональное программирование во всей его широте действительно ошеломляет. Когда вы выходите за рамки функций map / filter / redu и первоклассных функций и смотрите на другие вещи в функциональной сфере, такие как ленивая оценка, избегание побочных эффектов и мутаций, а также на сильные языки со статической типизацией, это становится довольно интересным, и, конечно, так же сложно, как традиционное OO программирование. Я только что поцарапал поверхность сам, но обнаружил множество новых идей. Программирование - сложный бизнес, будь то ОО или функциональный.