Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
1

Можно ли мешать ООП с ФП?

13.11.2016, 11:59. Показов 1670. Ответов 35
Метки нет (Все метки)

Добрый день.
Недавно столкнулся с такой проблемой:
есть несколько алгоритмов, которые я ну никак не могу ни к какому из классов отнести.
Я решил вынести их в неймспейс algorithms, но потом подумал, а будет ли это хорошо?
Ведь говорят, что ФП - бяка и её лучше избегать.
Но суть в том, что я эти функции использую по всему приложению, а не только в одном классе.
Значит ли это, что у меня просто плохая архитектура?
Как бы Вы поступили на моём месте?
Может быть синглтон?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2016, 11:59
Ответы с готовыми решениями:

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

Может ли роутер мешать коннектиться
Делаю что то вроде чата. До этого момента отлаживал все на одном компе. Решил попробовать с одного...

Будет ли верстка мешать изучению С++?
Народ всем привет как думаете если заниматься версткой и паралельно учить С++ то я в С++ не...

Может css мешать воспроизведению javasript?
Может ли так быть? есть анимация на javascript, но не воспроизводится.

35
2408 / 1810 / 398
Регистрация: 15.12.2013
Сообщений: 7,828
13.11.2016, 12:11 2
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ведь говорят, что ФП - бяка и её лучше избегать.
Кто говорит?

Цитата Сообщение от GbaLog- Посмотреть сообщение
Как бы Вы поступили на моём месте?
Какую задачу решаете?
0
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 13:41  [ТС] 3
Цитата Сообщение от S_el Посмотреть сообщение
Кто говорит?
Ну, сторонники ООП.
Цитата Сообщение от S_el Посмотреть сообщение
Какую задачу решаете?
Ну, я думаю, что это от задачи в общем-то не должно зависеть.
Но если вкратце, то есть структура данных, которая, допустим, содержит имя и кол-во чего-либо( это не важно ).
C++
1
2
3
4
5
struct Data
{
    string name;
    string count;
};
А есть класс, который содержит в себе вектор этих структур.
C++
1
2
3
4
class BD
{
    std::vector<Data> data;
};
Так вот, классу BD нужно совершать какие-то манипуляции с этой структурой. Например, поступает запрос к BD в виде строки с пробелами, для того, чтобы разбить эту строку я использую функцию split, эту же функцию я использую для обработки некоторых данных, поступающих из конфига. Есть ещё функция create_range, которая делает из строки вида "привет" строку типа "привет-привет"( используется для чисел, но на вход поступают строки, поэтому не суть важно, что там в строке ).
Вообще, есть ещё несколько алгоритмов, но практически все они используются именно в BD и нигде больше, я их и засунул туда, как private-методы.
Вообще, если так подумать, то только split и используется во всей программе повсеместно, но эффективно ли использовать целый неймспейс или синглтон для одного метода?
0
Эксперт CЭксперт С++
5058 / 2245 / 331
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
13.11.2016, 13:44 4
Цитата Сообщение от GbaLog- Посмотреть сообщение
подумал, а будет ли это хорошо?
GbaLog-, львиная доля STL нарушает ООП и построена по принципу ФП. И что с того?

Цитата Сообщение от GbaLog- Посмотреть сообщение
я эти функции использую по всему приложению, а не только в одном классе.
Значит ли это, что у меня просто плохая архитектура?
Нормальная архитектура. В STL так и сделали. Вместо того, чтобы плодить кучу функций-членов для каждого контейнера, унифицировали подход к контейнерам и сделали глобальные шаблонные функции и вынесли их в один заголовочник - algorithm.
2
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 13:52  [ТС] 5
Цитата Сообщение от gru74ik Посмотреть сообщение
И что с того?
Ладно, я уже понял, что немного не так вопрос поставил.
0
Эксперт CЭксперт С++
5058 / 2245 / 331
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
13.11.2016, 14:10 6
Цитата Сообщение от GbaLog- Посмотреть сообщение
ФП - бяка и её лучше избегать
Это полная чушь. Любая парадигма, любой подход - это просто инструмент. В одной ситуации удобнее и уместнее применять один инструмент, в другой - другой.

Добавлено через 2 минуты
Цитата Сообщение от GbaLog- Посмотреть сообщение
Может быть синглтон?
Почему нет? Можно и синглтон, я думаю. Если прям дикое желание всё в классы завернуть и не использовать глобальные функции.
1
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 14:12  [ТС] 7
Цитата Сообщение от gru74ik Посмотреть сообщение
Это полная чушь.
Java с Вами не согласна. Там вообще нет ФП.

А по теме меня интересует такой вопрос: нормально ли для одной функции создавать неймспейс или синглтон?
0
Эксперт CЭксперт С++
5058 / 2245 / 331
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
13.11.2016, 14:38 8
Цитата Сообщение от GbaLog- Посмотреть сообщение
Java с Вами не согласна.
Я в курсе, что там даже функция main() в класс завёрнута.

Цитата Сообщение от GbaLog- Посмотреть сообщение
Там вообще нет ФП.
Элементы ФП там тоже есть. Лямбды же есть там?

Цитата Сообщение от GbaLog- Посмотреть сообщение
нормально ли для одной функции создавать неймспейс или синглтон?
Почему нет? Если Вам так захотелось и Вы считаете, что это оправдано, то почему нет?

Добавлено через 2 минуты
GbaLog-, а вообще, каков вопрос, таков ответ. Ваш вопрос слишком отвлечённый, поэтому в ответах никакой толковой конкретики и не будет. В первом же ответе в этой теме Вам правильно сказали:
Цитата Сообщение от S_el Посмотреть сообщение
Какую задачу решаете?
Зная это, можно уже более предметно о чём-то говорить.
1
Эксперт CЭксперт С++
5058 / 2245 / 331
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
13.11.2016, 14:39 9
Цитата Сообщение от GbaLog- Посмотреть сообщение
Вообще, если так подумать, то только split и используется во всей программе повсеместно, но эффективно ли использовать целый неймспейс или синглтон для одного метода?
Я бы сделал какой-нибудь global_functions.h или algorithms.h и не заморачивался бы вообще. Ну, разве что в неймспейс завернул бы, чтобы возможного конфликта имён избежать.
0
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 14:40  [ТС] 10
gru74ik, Так я же в #3 описал задачу примерно. Ну да ладно, я уже понял, что вполне нормально хедер для одного метода делать, если это оправданно.

Добавлено через 38 секунд
Цитата Сообщение от gru74ik Посмотреть сообщение
Я бы сделал какой-нибудь global_functions.h или algorithms.h и не заморачивался бы вообще. Ну, разве что в неймспейс завернул бы, чтобы возможного конфликта имён избежать.
Я так и сделал.
0
Эксперт CЭксперт С++
5058 / 2245 / 331
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
13.11.2016, 14:40 11
Цитата Сообщение от GbaLog- Посмотреть сообщение
я же в #3 описал задачу примерно
Уже увидел и отписался. Невнимательно прочитал просто.
0
Комп_Оратор)
Эксперт по математике/физике
8696 / 4412 / 597
Регистрация: 04.12.2011
Сообщений: 13,184
Записей в блоге: 16
13.11.2016, 15:01 12
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ведь говорят, что ФП - бяка и её лучше избегать.
Цитата Сообщение от S_el Посмотреть сообщение
Кто говорит?
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ну, сторонники ООП.
Какие?
GbaLog-, ФП и ООП это не одного уровня абстракции и их не сравнивать ни противопоставлять нельзя. Сторонники ООП гораздо реже говорят о таком, потому что им легче жить и есть время для прогулок на свежем воздухе. Тут активность проявляют ФП-шники, обычно. Они считают ООП абстракцией уровня ФП (другой не знают потому что) и понеслась. Хотя есть немало и ООП-шников и не глупых с виду. И туда же. Так что мы тут лучше только в плане статистики.
Могу показать ссылку о "главном козыре" врагов - проблеме элипс-круг (https://en.wikipedia.org/wiki/... se_problem ):
http://askofen.blogspot.com/2011/07/blog-post.html
там нет ничего супер-пупер авторитетного. Просто порезвился.
1
Игогошка!
1800 / 707 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
13.11.2016, 17:57 13
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ведь говорят, что ФП - бяка и её лучше избегать.


Цитата Сообщение от GbaLog- Посмотреть сообщение
Я решил вынести их в неймспейс algorithms, но потом подумал, а будет ли это хорошо?
А почему это плохо?

Цитата Сообщение от GbaLog- Посмотреть сообщение
я их и засунул туда, как private-методы.
Зачем? Смысл?

Цитата Сообщение от GbaLog- Посмотреть сообщение
Java с Вами не согласна. Там вообще нет ФП.
А кое-где нет ООП. И живут люди получше многих.
0
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 19:02  [ТС] 14
Цитата Сообщение от ct0r Посмотреть сообщение
Зачем? Смысл?
Ну так зачем они в неймспейсе или public-полях, если это реализация?
Цитата Сообщение от ct0r Посмотреть сообщение
А почему это плохо?
Да я уже понял, что это вполне нормально.
0
Комп_Оратор)
Эксперт по математике/физике
8696 / 4412 / 597
Регистрация: 04.12.2011
Сообщений: 13,184
Записей в блоге: 16
13.11.2016, 19:20 15
Цитата Сообщение от GbaLog- Посмотреть сообщение
Java с Вами не согласна. Там вообще нет ФП.
Это с чего такой вывод? Искусство писать хорошие функции присуще Java-программистам в полной мере. GbaLog-, у Вас ООП и ФП априори противоречащие друг другу подходы и дело именно в Вашем отношении.
1
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 22:45  [ТС] 16
Цитата Сообщение от IGPIGP Посмотреть сообщение
у Вас ООП и ФП априори противоречащие друг другу подходы и дело именно в Вашем отношении.
Я уже осознал свою ошибку.
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
13.11.2016, 22:56 17
Цитата Сообщение от GbaLog- Посмотреть сообщение
Значит ли это, что у меня просто плохая архитектура?
Скорее всего, да.
0
Любитель чаепитий
3557 / 1664 / 512
Регистрация: 24.08.2014
Сообщений: 5,633
Записей в блоге: 1
13.11.2016, 23:55  [ТС] 18
Цитата Сообщение от castaway Посмотреть сообщение
Скорее всего, да.
Пусть так, я новичок, мне можно!
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
14.11.2016, 00:00 19
Цитата Сообщение от GbaLog- Посмотреть сообщение
Пусть так, я новичок, мне можно!
Так я и не говорил что так нельзя
0
Комп_Оратор)
Эксперт по математике/физике
8696 / 4412 / 597
Регистрация: 04.12.2011
Сообщений: 13,184
Записей в блоге: 16
14.11.2016, 00:41 20
Цитата Сообщение от GbaLog- Посмотреть сообщение
Но суть в том, что я эти функции использую по всему приложению, а не только в одном классе.
тут бы конкретно посмотреть. Наиболее общие алгоритмы (например swap, min, max ...) нет смыла связывать с конкретным типом, кроме случая когда специализация связана с тем, что для какого-то конкретного типа, алгоритм будет работать иначе.
Если у Вас какая-то группа классов просит этих методов, то можно было бы реализовать интерфейс, то есть отнаследовать их от абстрактного класса. Но опять-таки, это если алгоритмы могут отличаться за интерфейсом данных методов для разных типов. Иначе свободные функции прикрытые пространством имён, это умеренно и уместно.
Просто, жуть как интересно, GbaLog-, какие же это общие алгоритмы Вы раскопали.
А вообще, в C# вон, куда ни плюнь, а есть методы класса и такие же статические методы от абстрактного класса с запретом наследования. Например класс public ref class File abstract sealed вот он красавец:
https://msdn.microsoft.com/ru-... .110).aspx
Так что, несмотря на то что сёрп называют мелкососновой жабой, она не заблудилась в своих мелкососнах. Классы классами, а представляются возможности работать как от экземпляра так и в свободном стиле.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2016, 00:41

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Что можно выполнить на ООП
Подкиньте идею, что можно написать на ООП ? только не сильно сложное. Просто хочу применить свои...

Можно ли писать ооп с mvc?(php)
В общем это весь вопрос. Можно ли писать ооп с mvc?(php)

Как можно улучшить код (ООП)?
Здравствуйте форумчане. В книге Bhaskad Chaudhary &quot;Tkinter GUI Development Blueprints&quot; увидел...

Новичку с ООП, как можно отличить обьеты
constructor...

Изучаю ООП можно или нет так?
Это index: &lt;?php include('classes/database.class.php'); $object = new DB; $nick = &quot;Alex&quot;;...

ООП. Можно ли зацикливать классы ради быстродействия?
Добрый день! Нужен совет касательно правильности придуманного мною подхода. Можно ли так делать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.