"Если мы скажем, что абсолютно все паттерны РЕАЛИЗУЮТСЯ через объекты и/или классы, - родим трюизм и потеряем понимание: вот здесь вот этот класс работает декоратором, а вот там - фабрикой, а вот там - ещё чем-нибудь. Будем тупить, как на дизассемблер обфусканного ява-пакета."
Прекрасно уживаются, это называется переупрощение.
Можем фп-программу перепереть на каноническом ооп? Да, можем. Разглядим ли при этом фп-паттерны, и дадим ли им адекватное ооп-представление? Как повезёт. Если перед этим долго курили алгебру и теоркат, то есть шанс. (Но нужно ещё будет отличить, воткнуты там разные навороты от нужды или от эстетики).
Человек, не знающий о паттернах, глядя на хорошую ооп-программу, воскликнет: "а! узнаю! это же всё объекты, классы и иерархии!" И дальше что? Это позволит ему вручную оттранслировать её в машинные коды, и всё. И глядя на фп-программу, - "а, это функции до самого низу, тоже всё понятно".
Гм. Я не вполне понял смысла переупрощения. С одной стороны - вы назвали все "интерфейсами", а с другой - что интерфейсами все подряд называть негоже. Тогда не понятно, зачем монады, карринг, стрелки называть одним общим словом?
Или вы возмущены тем, что автор доклада на видео всё назвал функциями? По-моему, в докладе он сначала объяснил, что не будет обсуждать паттерны ООП - в частности, потому что паттерны ФП не пересекаются с паттернами ООП, и потому что все паттерны ООП выглядят довольно единообразно (например, потому что ФП фокусируется на другом подходе к структуризации вычислений и размышлять, визитор ли это, декоратор ли, не приходится).
Адекватного представления ФП паттернов в ООП не будет в частности оттого, что функции не являются равноправными объектами. Тут, действительно, как повезёт. А в языках, где функции таки объекты, паттерны ФП проявляются и узнаваемы.
Например, на днях порефакторил код с колбеками - получил код, где колбеки являются tail call, увидел continuation monad. Пора вводить Promises.
no subject
Date: 2016-04-26 09:39 pm (UTC)"Если мы скажем, что абсолютно все паттерны РЕАЛИЗУЮТСЯ через объекты и/или классы, - родим трюизм и потеряем понимание: вот здесь вот этот класс работает декоратором, а вот там - фабрикой, а вот там - ещё чем-нибудь.
Будем тупить, как на дизассемблер обфусканного ява-пакета."
и
"Карринг - втопку: интерфейс! Монады - втопку: интерфейс! Стрелки - втопку: интерфейс!"
no subject
Date: 2016-04-26 11:58 pm (UTC)Можем фп-программу перепереть на каноническом ооп? Да, можем. Разглядим ли при этом фп-паттерны, и дадим ли им адекватное ооп-представление? Как повезёт.
Если перед этим долго курили алгебру и теоркат, то есть шанс. (Но нужно ещё будет отличить, воткнуты там разные навороты от нужды или от эстетики).
Человек, не знающий о паттернах, глядя на хорошую ооп-программу, воскликнет: "а! узнаю! это же всё объекты, классы и иерархии!"
И дальше что? Это позволит ему вручную оттранслировать её в машинные коды, и всё.
И глядя на фп-программу, - "а, это функции до самого низу, тоже всё понятно".
no subject
Date: 2016-04-27 06:36 am (UTC)Или вы возмущены тем, что автор доклада на видео всё назвал функциями? По-моему, в докладе он сначала объяснил, что не будет обсуждать паттерны ООП - в частности, потому что паттерны ФП не пересекаются с паттернами ООП, и потому что все паттерны ООП выглядят довольно единообразно (например, потому что ФП фокусируется на другом подходе к структуризации вычислений и размышлять, визитор ли это, декоратор ли, не приходится).
Адекватного представления ФП паттернов в ООП не будет в частности оттого, что функции не являются равноправными объектами. Тут, действительно, как повезёт. А в языках, где функции таки объекты, паттерны ФП проявляются и узнаваемы.
Например, на днях порефакторил код с колбеками - получил код, где колбеки являются tail call, увидел continuation monad. Пора вводить Promises.