|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered На самом деле область применения ООП достаточно узкая. Объекты хороши когда есть один "изолированный" объект с состоянием и своим поведением. Обычно ООП хорош для описание объектов операционной системы: окно, принтер, кнопка и пр. +++ unregestered В этом случае более подходящей моделью является Multiple Dispatch , которая, правда, очень плохо реализована в языках программирования. Статью прочитал - но не понял. Пусть у меня есть необходимость задать некую операцию (например "оплата") над двумя классами объектов. Платеж и начисление. При этом может быть несколько типов платежа и несколько вариантов оплаты начисления. К примеру: обычная оплата, оплата из аванса и так далее. И разные классы начислений: обычное начисление, пени/штраф и так далее. В данном примере, нужно реализовать 2x2=4 варианта. Система живет, появляется новый класс начисления, нужно новое поведение. Оп...ля... уже нужно 2x3=6 вариантов.... Система живет, появляется еще новый класс оплаты. Эквайрингу, сбербанк-бизнес-онлайн, оплата по QR-CODE. Оп... 5x3 = 15 вариантов Функции. Появились новые классы начислений, требуют разнести воду, канализацию, экологию раздельно. 5x6=30 вариантов. Плохо я себе это представляю, на уровне компилятора. В классической программе, от такой мешанины получится спагетти код из if'ов, где кол-во if'ов будет __значительно__ меньше полного набора вариантов M x N В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 18:44 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Есть семейство языков Erlang/Lisp/Prolog у которых очень много похожих свойств. Первая версия Эрланга была написана на Прологе, оттуда и заимствование синтаксических конструкций. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:13 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Есть семейство языков Erlang/Lisp/Prolog у которых очень много похожих свойств. Между Erlang-ом и нет вообще ничего общего, ибо пролог это логическое программирование с недетерминированным (в общем случае) поведением програм ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:32 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste Необязательно. Реализуй только те что тебе конкретно нужны, речь не идет о cartesian product ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:36 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник Ленивость и хвостовая рекурсия это следствия, а не причины(при чем первое вообще присутствует далеко не во всех ФП-языках). Столпы ФП - pure, total, side-effects free функции + immutable data + high-order-functions(частным случаем которых как раз и являются стримы редьюсеры и т.п) High-order functions это указатели на функции что ли? Так вызов функции с колбаком в С и ассемблере -это и есть high-order. Основная идея ФП - это неизменяемость состояний и чистота функций. Lazy присваивания и определения заменяют обычное присваивание, изменяющее состояние. Без хвостовой рекурсии нам придётся использовать циклы, которые тоже изменяют состояние. Если так "ФП" не имеет ленивости, то вряд ли его можно назвать ФП. Просто этот термин щас лепят куда не попадя. Кроме того, ленивость нужна для динамического программирования (в качестве аналога кэширования), если язык не меняет состояние то динамического программирование надо делать через кэширование. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:42 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Я-бы добавил вывод типов и генерики и паттерн-матчинг. 2 пункт вообще очень **ёво реализовано в Java. Паттерн-матчинг это 3-яя парадигма наряду с функциональным программированием и процедурным. В Computer Science машина тьюринга - это процедурный подход, ламбда исчисление - это функциональный, а pattern-matching-у соответствуют нормальные алгорифмы Маркова. На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:50 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Статью прочитал - но не понял. Пусть у меня есть необходимость задать некую операцию (например "оплата") над двумя классами объектов. Платеж и начисление. При этом может быть несколько типов платежа и несколько вариантов оплаты начисления. К примеру: обычная оплата, оплата из аванса и так далее. И разные классы начислений: обычное начисление, пени/штраф и так далее. В данном примере, нужно реализовать 2x2=4 варианта. Система живет, появляется новый класс начисления, нужно новое поведение. Оп...ля... уже нужно 2x3=6 вариантов.... Система живет, появляется еще новый класс оплаты. Эквайрингу, сбербанк-бизнес-онлайн, оплата по QR-CODE. Оп... 5x3 = 15 вариантов Функции. Появились новые классы начислений, требуют разнести воду, канализацию, экологию раздельно. 5x6=30 вариантов. Плохо я себе это представляю, на уровне компилятора. В классической программе, от такой мешанины получится спагетти код из if'ов, где кол-во if'ов будет __значительно__ меньше полного набора вариантов M x N В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste Не нужно реализовывать 4 варианта, достаточно реализовать функции для базовых классов. Если вы напишете ещё одну функцию с более специфическим типом, то этот вариант будет "перекрывать" более универсальный. Это что-то типа полиморфизма, но по нескольким типам. Такая фича есть в груви ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:54 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered High-order functions это указатели на функции что ли? Так вызов функции с колбаком в С и ассемблере -это и есть high-order. По смыслу правильно, но вернее будет сказать что hof - это функции, которые могут принимать длругие функции как параметр либо возвращать функции(currying, closures). unregestered Основная идея ФП - это неизменяемость состояний и чистота функций. Именно об этом я и сказал unregestered Lazy присваивания и определения заменяют обычное присваивание, изменяющее состояние. Без хвостовой рекурсии нам придётся использовать циклы, которые тоже изменяют состояние. Именно поэтому они и являются следствием, а не причиной(immutability, не устану повторять "как я и сказал") unregestered Если так "ФП" не имеет ленивости, то вряд ли его можно назвать ФП. Кроме того, ленивость нужна для динамического программирования (в качестве аналога кэширования), если язык не меняет состояние то динамического программирование надо делать через кэширование. Lazy спокойно эмулируется в обычной Java с помощью паттерна Command, к теории ФП это не имеет отношения. unregestered Просто этот термин щас лепят куда не попадя. Это да. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:56 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered Такая фича есть в груви В Clojure тоже. В динамически-типизированных языках реализовать мультиметоды проще ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 19:58 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools. Чем Scala не угодила? Не говоря о Haskell ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:00 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник unregestered На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools. Чем Scala не угодила? Не говоря о Haskell В хаскеле тоже есть, но не уверен насколько полноценный, ибо не являюсь спецом по хаскелю. А в скале он вообще какой-то кривой - какие-то case-ы надо писать и пр. Или как, например, сматчить по полю дочернего объекта? Есть такое в Скале? В друлсах есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:09 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник Lazy спокойно эмулируется в обычной Java с помощью паттерна Command, к теории ФП это не имеет отношения. А как съэмулировать лези лист? А если надо мне надо lazy A прибавить к lazy B, это значит мне надо ещё один класс сделать вместо A+B? В общем, за такие фокусы в джаве надо руки отрывать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:14 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered забыл ник пропущено... Чем Scala не угодила? Не говоря о Haskell В хаскеле тоже есть, но не уверен насколько полноценный, ибо не являюсь спецом по хаскелю. А в скале он вообще какой-то кривой - какие-то case-ы надо писать и пр. Или как, например, сматчить по полю дочернего объекта? Есть такое в Скале? В друлсах есть. Да, насчет синтаксиса соглашусь. Тем не менее, сматчить по полю дочернего объекта можно. А вот сматчить List[String] vs List[Int] все же не получится, из-за erasure. Насчет Haskel - там классический паттерн-матчинг в моем понимании(каждый матчинг - отдельная функция, которая в зависимости от аргументов переадресует на свою ветку кода) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:27 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
В топике генерации кривой Гильберта я пытался создать ленивый список на Java. Ничего не вышло. Но мне помогли с созданием аналогичного функционала на Scala. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:30 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered А как съэмулировать лези лист? Так list.stream() же.. unregestered А если надо мне надо lazy A прибавить к lazy B, это значит мне надо ещё один класс сделать вместо A+B? Ну с этим беда unregestered В общем, за такие фокусы в джаве надо руки отрывать ) Согласен, но тем не менее мой поинт в том что lazy это все-таки далеко не основное и необходимое в ФП, это скорее интересное следствие при попытке реализовать ФП ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:30 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton В топике генерации кривой Гильберта я пытался создать ленивый список на Java. Ничего не вышло. Но мне помогли с созданием аналогичного функционала на Scala. Ну тут надо еще определиться что есть lazy list. А то ведь есть и такие реализации - https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/list/LazyList.html ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:34 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник Согласен, но тем не менее мой поинт в том что lazy это все-таки далеко не основное и необходимое в ФП, это скорее интересное следствие при попытке реализовать ФП Ну все 4 парадигмы (процедурное, логическое, функциональное и паттерн-матчинг) могут эмулировать друг-друга ибо все turing-complete. Другое дело - насколько это удобно. То мы пару читабельных строчек напишем, а то кучу команд, с абстрактными классами, third-party библиотеками, кодогенераторами и портянкой кода ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 20:55 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит. Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 23:25 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит. Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся. Истину глаголишь! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 04:15 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит. Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся. Зато можно обмазать слоями абстракции и присыпать синтаксическим сахаром. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 05:56 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит. Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся. Да, примерно это и имел в виду. С заметанием сложности в "концепции языка" есть еще проблема, что от такого заметания сложность может существенно прирасти. Взять те же самые Оплаты и Счета, Начисления. Если подходить с позиции ООП и инкапсуляции как минимум есть PaymentDocument, BillDocument, BillLines. А дальше начинается порнография. В каком из этих объектов я должен реализовывать метод РазнестиОплату (Квитовать) ? Чисто организационно (по рабочим группам), он относится к модулю ПриемПлатежей. НО он так же должен иметь полный доступ к функционалу Bill и BillLines. Т.е. или всю секьюрити/инкапсуляция идет лесом или нужно кодировать 100500 мелких служебных функций, что бы туда-сюда-обратно управление между классами передавать. Так же и внесение изменений. Любое изменение по любому пчиху заказчика, затрагивает все классы. Которые относятся к совершенно разным (организационно) группам (программистам) и модулям: Платежи и Счета/Начисления. Т.е. модульность и инкапсуляция становится не благом, а даже злом (организационно). А кроме квитовки, есть еще такой функционал как Авансы/Переплаты. Где вообще черт ногу сломит (в нашей сущ. системе). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 06:41 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
В результате получается: что часто данные удобно сложить в какие-то ООП-обертки a la DTO: Payment, Bill, BillLines А весь бизнес функционал унести в какие нибудь Utility class'ы. И вместо ООП с инкапсуляцией/наследованием .... мы получаем... получаем... фактически голый процедурный язык с необходимостью писать 100500 геттеров-сеттеров и прочей малонужной ООП обязаловкой. IMHO. Утрированно конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 06:46 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 07:12 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
istrebitel Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания. В таблицах то все понятно. Я именно про ООП говорю. ООП зиждется на постулате инкапсуляции: данные и код которые их обрабатывают должны быть собраны в одном месте Вроде бы верный постулат. Но если взять реальные бизнес-системы, то он нифига не действует. Большинство бизнес-кода "междесциплинарны" и затрагивают сразу огромное кол-во объектов-данных. Т.е., по факту, главный постулать/аксиома на котором и основан весь ООП - оказывается не верной. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 07:22 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev istrebitel Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания. В таблицах то все понятно. Я именно про ООП говорю. ООП зиждется на постулате инкапсуляции: данные и код которые их обрабатывают должны быть собраны в одном месте Вроде бы верный постулат. Но если взять реальные бизнес-системы, то он нифига не действует. Большинство бизнес-кода "междесциплинарны" и затрагивают сразу огромное кол-во объектов-данных. Т.е., по факту, главный постулать/аксиома на котором и основан весь ООП - оказывается не верной. А так же наследовании и полиморфизме ;-) Комбинация трех этих принципов позволяет делать обработку "междесциплинарных" данных. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 08:15 |
|
|
start [/forum/topic.php?fid=59&msg=39957111&tid=2120807]: |
0ms |
get settings: |
23ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
443ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 580ms |
0 / 0 |