Цю цитату я знайшов у « Радості Клоджура » на с. 32, але хтось сказав те ж саме мені під час вечері минулого тижня, і я чув це також і в інших місцях:
Недоліком об'єктно-орієнтованого програмування є тісний зв'язок між функцією та даними.
Я розумію, чому непотрібна зв'язок погана в додатку. Також мені зручно сказати, що слід уникати стану, що змінюється, і успадкування, навіть у об'єктно-орієнтованому програмуванні. Але я не розумію, чому дотримуватися функції класів по суті погано.
Я маю на увазі, додавання функції до класу здається тегом поштової пошти в Gmail або вклеювання файлу в папку. Це організаційна техніка, яка допомагає вам знайти її знову. Ви вибираєте кілька критеріїв, а потім складаєте речі. До OOP наші програми були досить великими пакетами методів у файлах. Я маю на увазі, ви повинні десь поставити функції. Чому б не організувати їх?
Якщо це завуальована атака на типи, чому вони просто не скажуть, що обмеження типу введення та виведення функції не є правильним? Я не впевнений, чи міг би я з цим погодитися, але принаймні я знайомий з аргументами про та con безпеку. Це звучить для мене, як правило, окреме занепокоєння.
Звичайно, іноді люди помиляються і ставлять функціональність на неправильний клас. Але порівняно з іншими помилками, це здається зовсім незначною незручністю.
Отже, у Clojure є простори імен. Чим наклеювання функції на клас в OOP відрізняється від закріплення функції в просторі імен у Clojure і чому це так погано? Пам'ятайте, що функції класу не обов'язково функціонують лише на членах цього класу. Подивіться на java.lang.StringBuilder - він працює на будь-якому еталонному типі, або через автоматичний бокс, будь-який тип взагалі.
PS Ця цитата посилається на книгу, яку я не читав: Мультипарадигмальне програмування в Leda: Timothy Budd, 1995 .