powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение spring beans в классе, неуправляемом spring
25 сообщений из 113, страница 4 из 5
Получение spring beans в классе, неуправляемом spring
    #39957064
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered

На самом деле область применения ООП достаточно узкая. Объекты хороши когда есть один "изолированный" объект с состоянием и своим поведением. Обычно ООП хорош для описание объектов операционной системы: окно, принтер, кнопка и пр.

+++

unregestered

В этом случае более подходящей моделью является Multiple Dispatch , которая, правда, очень плохо реализована в языках программирования.

Статью прочитал - но не понял.

Пусть у меня есть необходимость задать некую операцию (например "оплата") над двумя классами объектов. Платеж и начисление. При этом может быть несколько типов платежа и несколько вариантов оплаты начисления. К примеру: обычная оплата, оплата из аванса и так далее. И разные классы начислений: обычное начисление, пени/штраф и так далее.

В данном примере, нужно реализовать 2x2=4 варианта. Система живет, появляется новый класс начисления, нужно новое поведение. Оп...ля... уже нужно 2x3=6 вариантов.... Система живет, появляется еще новый класс оплаты. Эквайрингу, сбербанк-бизнес-онлайн, оплата по QR-CODE. Оп... 5x3 = 15 вариантов Функции. Появились новые классы начислений, требуют разнести воду, канализацию, экологию раздельно. 5x6=30 вариантов.

Плохо я себе это представляю, на уровне компилятора.

В классической программе, от такой мешанины получится спагетти код из if'ов, где кол-во if'ов будет __значительно__ меньше полного набора вариантов M x N

В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957082
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Есть семейство языков
Erlang/Lisp/Prolog у которых очень много похожих свойств.


Первая версия Эрланга была написана на Прологе, оттуда и заимствование синтаксических конструкций.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957088
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Есть семейство языков
Erlang/Lisp/Prolog у которых очень много похожих свойств.

Между Erlang-ом и нет вообще ничего общего, ибо пролог это логическое программирование с недетерминированным (в общем случае) поведением програм
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957091
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev


В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste


Необязательно. Реализуй только те что тебе конкретно нужны, речь не идет о cartesian product
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957095
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

Ленивость и хвостовая рекурсия это следствия, а не причины(при чем первое вообще присутствует далеко не во всех ФП-языках).
Столпы ФП - pure, total, side-effects free функции + immutable data + high-order-functions(частным случаем которых как раз и являются стримы редьюсеры и т.п)


High-order functions это указатели на функции что ли? Так вызов функции с колбаком в С и ассемблере -это и есть high-order.

Основная идея ФП - это неизменяемость состояний и чистота функций.
Lazy присваивания и определения заменяют обычное присваивание, изменяющее состояние.
Без хвостовой рекурсии нам придётся использовать циклы, которые тоже изменяют состояние.
Если так "ФП" не имеет ленивости, то вряд ли его можно назвать ФП. Просто этот термин щас лепят куда не попадя.
Кроме того, ленивость нужна для динамического программирования (в качестве аналога кэширования), если язык не меняет состояние то динамического программирование надо делать через кэширование.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957097
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я-бы добавил вывод типов и генерики и паттерн-матчинг. 2 пункт вообще очень **ёво реализовано в Java.


Паттерн-матчинг это 3-яя парадигма наряду с функциональным программированием и процедурным.

В Computer Science машина тьюринга - это процедурный подход, ламбда исчисление - это функциональный, а pattern-matching-у соответствуют нормальные алгорифмы Маркова.

На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957098
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

Статью прочитал - но не понял.

Пусть у меня есть необходимость задать некую операцию (например "оплата") над двумя классами объектов. Платеж и начисление. При этом может быть несколько типов платежа и несколько вариантов оплаты начисления. К примеру: обычная оплата, оплата из аванса и так далее. И разные классы начислений: обычное начисление, пени/штраф и так далее.

В данном примере, нужно реализовать 2x2=4 варианта. Система живет, появляется новый класс начисления, нужно новое поведение. Оп...ля... уже нужно 2x3=6 вариантов.... Система живет, появляется еще новый класс оплаты. Эквайрингу, сбербанк-бизнес-онлайн, оплата по QR-CODE. Оп... 5x3 = 15 вариантов Функции. Появились новые классы начислений, требуют разнести воду, канализацию, экологию раздельно. 5x6=30 вариантов.

Плохо я себе это представляю, на уровне компилятора.

В классической программе, от такой мешанины получится спагетти код из if'ов, где кол-во if'ов будет __значительно__ меньше полного набора вариантов M x N

В парадигме из ссылки - нужно реализовывать полный набор M x N функций, большинство из которых будет тупым Copy-Paste


Не нужно реализовывать 4 варианта, достаточно реализовать функции для базовых классов.
Если вы напишете ещё одну функцию с более специфическим типом, то этот вариант будет "перекрывать" более универсальный.
Это что-то типа полиморфизма, но по нескольким типам.
Такая фича есть в груви
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957099
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered

High-order functions это указатели на функции что ли? Так вызов функции с колбаком в С и ассемблере -это и есть high-order.

По смыслу правильно, но вернее будет сказать что hof - это функции, которые могут принимать длругие функции как параметр либо возвращать функции(currying, closures).

unregestered

Основная идея ФП - это неизменяемость состояний и чистота функций.

Именно об этом я и сказал

unregestered

Lazy присваивания и определения заменяют обычное присваивание, изменяющее состояние.
Без хвостовой рекурсии нам придётся использовать циклы, которые тоже изменяют состояние.

Именно поэтому они и являются следствием, а не причиной(immutability, не устану повторять "как я и сказал")

unregestered

Если так "ФП" не имеет ленивости, то вряд ли его можно назвать ФП.
Кроме того, ленивость нужна для динамического программирования (в качестве аналога кэширования), если язык не меняет состояние то динамического программирование надо делать через кэширование.

Lazy спокойно эмулируется в обычной Java с помощью паттерна Command, к теории ФП это не имеет отношения.

unregestered

Просто этот термин щас лепят куда не попадя.

Это да.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957101
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered

Такая фича есть в груви

В Clojure тоже. В динамически-типизированных языках реализовать мультиметоды проще
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957102
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered


На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools.

Чем Scala не угодила? Не говоря о Haskell
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957108
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
unregestered


На самом деле, паттерн-матчинг плохо реализован в языках. На вскидку могу назвать только XSLT, пролог и JBoss Drools.

Чем Scala не угодила? Не говоря о Haskell


В хаскеле тоже есть, но не уверен насколько полноценный, ибо не являюсь спецом по хаскелю. А в скале он вообще какой-то кривой - какие-то case-ы надо писать и пр. Или как, например, сматчить по полю дочернего объекта? Есть такое в Скале? В друлсах есть.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957111
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

Lazy спокойно эмулируется в обычной Java с помощью паттерна Command, к теории ФП это не имеет отношения.


А как съэмулировать лези лист? А если надо мне надо lazy A прибавить к lazy B, это значит мне надо ещё один класс сделать вместо A+B? В общем, за такие фокусы в джаве надо руки отрывать )
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957113
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered
забыл ник
пропущено...

Чем Scala не угодила? Не говоря о Haskell


В хаскеле тоже есть, но не уверен насколько полноценный, ибо не являюсь спецом по хаскелю. А в скале он вообще какой-то кривой - какие-то case-ы надо писать и пр. Или как, например, сматчить по полю дочернего объекта? Есть такое в Скале? В друлсах есть.

Да, насчет синтаксиса соглашусь. Тем не менее, сматчить по полю дочернего объекта можно. А вот сматчить List[String] vs List[Int] все же не получится, из-за erasure.
Насчет Haskel - там классический паттерн-матчинг в моем понимании(каждый матчинг - отдельная функция, которая в зависимости от аргументов переадресует на свою ветку кода)
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957115
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топике генерации кривой Гильберта я пытался создать ленивый список
на Java. Ничего не вышло. Но мне помогли с созданием аналогичного функционала
на Scala.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957116
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered


А как съэмулировать лези лист?

Так list.stream() же..

unregestered

А если надо мне надо lazy A прибавить к lazy B, это значит мне надо ещё один класс сделать вместо A+B?

Ну с этим беда

unregestered

В общем, за такие фокусы в джаве надо руки отрывать )

Согласен, но тем не менее мой поинт в том что lazy это все-таки далеко не основное и необходимое в ФП, это скорее интересное следствие при попытке реализовать ФП
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957118
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В топике генерации кривой Гильберта я пытался создать ленивый список
на Java. Ничего не вышло. Но мне помогли с созданием аналогичного функционала
на Scala.

Ну тут надо еще определиться что есть lazy list.
А то ведь есть и такие реализации - https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/list/LazyList.html
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957124
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

Согласен, но тем не менее мой поинт в том что lazy это все-таки далеко не основное и необходимое в ФП, это скорее интересное следствие при попытке реализовать ФП


Ну все 4 парадигмы (процедурное, логическое, функциональное и паттерн-матчинг) могут эмулировать друг-друга ибо все turing-complete.

Другое дело - насколько это удобно. То мы пару читабельных строчек напишем, а то кучу команд, с абстрактными классами, third-party библиотеками, кодогенераторами и портянкой кода
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957161
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит.
Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957201
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит.
Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся.


Истину глаголишь!
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957207
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит.
Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся.


Зато можно обмазать слоями абстракции и присыпать синтаксическим сахаром. :-)
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957213
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Практика показывает, что всегда найдётся задача (целый класс задач) где надо "портянку растягивать". От концептуальной эстетики языка это не зависит.
Помнится, была на RSDN статья про "сложность". Основной посыл: сложность она такая, какая есть. Всё, что можно сделать - "замести" часть сложности "куда-то". Я бы сказал, что замести сложность в "концепции языка" - вряд ли удастся.

Да, примерно это и имел в виду.

С заметанием сложности в "концепции языка" есть еще проблема, что от такого заметания сложность может существенно прирасти.

Взять те же самые Оплаты и Счета, Начисления. Если подходить с позиции ООП и инкапсуляции как минимум есть PaymentDocument, BillDocument, BillLines.

А дальше начинается порнография. В каком из этих объектов я должен реализовывать метод РазнестиОплату (Квитовать) ? Чисто организационно (по рабочим группам), он относится к модулю ПриемПлатежей. НО он так же должен иметь полный доступ к функционалу Bill и BillLines.

Т.е. или всю секьюрити/инкапсуляция идет лесом или нужно кодировать 100500 мелких служебных функций, что бы туда-сюда-обратно управление между классами передавать. Так же и внесение изменений. Любое изменение по любому пчиху заказчика, затрагивает все классы. Которые относятся к совершенно разным (организационно) группам (программистам) и модулям: Платежи и Счета/Начисления. Т.е. модульность и инкапсуляция становится не благом, а даже злом (организационно).

А кроме квитовки, есть еще такой функционал как Авансы/Переплаты. Где вообще черт ногу сломит (в нашей сущ. системе).
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957214
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате получается:

что часто данные удобно сложить в какие-то ООП-обертки a la DTO: Payment, Bill, BillLines
А весь бизнес функционал унести в какие нибудь Utility class'ы.

И вместо ООП с инкапсуляцией/наследованием .... мы получаем... получаем... фактически голый процедурный язык с необходимостью писать 100500 геттеров-сеттеров и прочей малонужной ООП обязаловкой.

IMHO. Утрированно конечно
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957217
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957218
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания.

В таблицах то все понятно. Я именно про ООП говорю.

ООП зиждется на постулате инкапсуляции: данные и код которые их обрабатывают должны быть собраны в одном месте

Вроде бы верный постулат. Но если взять реальные бизнес-системы, то он нифига не действует. Большинство бизнес-кода "междесциплинарны" и затрагивают сразу огромное кол-во объектов-данных. Т.е., по факту, главный постулать/аксиома на котором и основан весь ООП - оказывается не верной.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39957230
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
istrebitel
Обычно для разноски одной суммы по другим суммам вводится третья сущность. С точки зрения БД это таблица связей многие ко многим. Например в ERP Галактика это сущность Хозяйственная операция, в SAP R3 это документ выравнивания.

В таблицах то все понятно. Я именно про ООП говорю.

ООП зиждется на постулате инкапсуляции: данные и код которые их обрабатывают должны быть собраны в одном месте

Вроде бы верный постулат. Но если взять реальные бизнес-системы, то он нифига не действует. Большинство бизнес-кода "междесциплинарны" и затрагивают сразу огромное кол-во объектов-данных. Т.е., по факту, главный постулать/аксиома на котором и основан весь ООП - оказывается не верной.


А так же наследовании и полиморфизме ;-)

Комбинация трех этих принципов позволяет делать обработку "междесциплинарных" данных. :-)
...
Рейтинг: 0 / 0
25 сообщений из 113, страница 4 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение spring beans в классе, неуправляемом spring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]