208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
1 | |
Полный ооп18.09.2022, 01:57. Показов 4967. Ответов 60
Приветствуется ли в плюсах полностью ооп проект? По аналогии с джавой, как сказал один джавист - функций нельзя сделать вообще, можно сделать похожее только через класс с одним методом.
Так вот собственно и вопрос - ооп круто, но стоит ли полностью на ооп делать проект? В данный момент, в рамках одного моего проекта - так сделать можно, но будут классы без данных, чисто методы и всё, по смыслу разбитые на классы
0
|
18.09.2022, 01:57 | |
Ответы с готовыми решениями:
60
ООП. Переделать фрагмент программы под ООП Где лучше учить ООП PHP ? И зачем нужен ООП Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП ООП ради ООП |
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
|
|
18.09.2022, 02:16 | 2 |
Вообще желательно использовать как можно меньше методологий.
Фигачите в ООП -- фигачте в ООП. Фигачите функциональщину -- фигачте функциональщину. Начинаете смешивать -- начинается бардак. Поэтому в яве, например, функциональщина выглядит как сова на глобусе. Добавлено через 1 минуту Да пожалуйста. Чистота кода мало зависит от методологии. Как оценить "стоит/не стоит": выпишете все плюсы и минусы, сравните, что больше подходит в вашей ситуации.
1
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 02:17 [ТС] | 3 |
Даже если есть функция, которая никак не граничит со всеми имеющимися и получится класс с одним методом - всё равно делать класс, если решено использовать ооп? А как же тогда библиотеки, в которых и классы и функции?
0
|
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
|
|
18.09.2022, 02:18 | 4 |
Так часто бывает. Обычно называется "интерфейсы".
Добавлено через 42 секунды Да пожалуйста. Это называется функтором. Добавлено через 36 секунд Если ломает вашу методолгию -- методы оборачиваются в классы-функторы.
1
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 02:21 [ТС] | 5 |
Исходя из моего, пусть и не шибко большого, опыта - если проект хотя бы больше пары сотен строк - писать его чисто на функциях - это сущий ад.. Тут либо оно так и есть - либо у меня мало опыта в функциональном программировании. Когда открыл для себя ооп - это был глоток свежего воздуха. Вот и думаю отойти от функций к ооп
0
|
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
|
|
18.09.2022, 02:31 | 6 |
Попробуйте.
Добавлено через 4 минуты В плюсах, в отличие от упомянутой ранее явы, есть несколько неудобств связанных с "абсолютным" ООП, делающих код на одном только ооп куда более многословным и несколько менее читаемым. Я бы выделил отсуствие сборщика мусора, без которого начинается куча кухни вроде правил трёх/пяти, умные указатели и тому подобный ручной менеджмент памяти; а ещё я бы выделил особенную и систему (явных) ссылок и указателей, которая тоже делает код более многословным относительно упомянутой явы. Не попробуете -- не узнаете. )
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.09.2022, 02:31 | 7 |
не надо использовать ооп там, где оно нафиг никому не нужно.
в процедурном. кучка функций в стиле си - это процедурная парадигма. не нужно путать её с функциональной парадигмой.
1
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 12:30 [ТС] | 8 |
Всё ж фукнциональное.. Процедура не возвращает результат, функция возвращает..
Добавлено через 8 минут Давайте для примера - я могу сделать функцию поисковик изображения и кормить ей в параметры каждый раз скриншот и искомую картинку. Могу реализовать это вторым способом - и либо сделать рычаг внутри функции, либо создать вторую. Могу сделать класс, в который при инициализации я буду класть искомую картинку, процент совпадения, количество объектов для поиска (один - все) и потом вызывать просто объект.Find(скриншот) и получать список совпадений. В плане этого будет в принципе та же функция, написано просто по-другому. НО! Есть ряд преимуществ класса 1) Действия применяются относительно конкретного объекта и читается это легче, чем в параметрах функции 2) Если в функции нужно применить параметры отличные от дефолтных, то их каждый раз нужно писать теперь. В классе это делается 1 раз в инициализации. Что опять же делает код более читабельно 3) Рычаг на тип поиска с теми же исходными данными - в классе смотрится отлично, а вот в функции немного вычурно, да и рычаги, влияющие на результат функции с неизменными входными данными - не есть гуд. В классе это самой парадигмой предусмотрено, в парадигме функции сказано, что результат не должен меняться без изменения входных данных Собственно поэтому я и подумал что полное ооп мне подойдёт лучше
0
|
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
|
|
18.09.2022, 13:18 | 9 |
Разница между функциональным и процедурным подходом немного глубже.
Процедурное программирование это последовательное выполнение инструкций сверху вниз с условными или безусловными переходами. В функциональном программировании любое вычисление есть исполнение функции, поэтому в функциональном программировании, например, нет циклов, изменяемых переменных и так далее. Посмотрите, поглубже, вам понравится. ) Добавлено через 12 минут Это вы говорите про организацию данных, а парадигмы "функциональное" или "объектно-ориентированное" программирование это про поведение.
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.09.2022, 13:49 | 10 |
попробуй в следующий раз сначала погуглить материал.
раз лучше, значит используй ооп.
0
|
73 / 74 / 17
Регистрация: 11.06.2018
Сообщений: 266
|
|
18.09.2022, 13:57 | 11 |
Сообщение было отмечено Laborant666 как решение
Решение
Фантазии какие-то... Нет бы взять и прочитать что есть что.
Тебе написали про твой же пример: А не вообще про ООП. Расшифровываю: если на С++ использовать функцию там, где это уместно, то ООП-парадигме, в которой может быть выполнен проект, это никак не повредит.
1
|
1653 / 1176 / 602
Регистрация: 17.03.2022
Сообщений: 3,699
|
|
18.09.2022, 14:24 | 12 |
Сообщение было отмечено Laborant666 как решение
Решение
Чистый ООП подходит далеко не для всяких задач. Да, есть случаи, когда он ложится на задачу идеально (вроде оконных интерфейсов), но просто загонять его везде - идея не лучшая. Написать-то рабочий код, возможно, и получится, но он будет откровенно избыточным.
0
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 15:44 [ТС] | 13 |
Это как раз из гугла 0.о
Добавлено через 1 минуту Хм, гугл значит мне наврал немного. Понял Добавлено через 1 минуту Услышал вас и сегодня это ощутил
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.09.2022, 22:42 | 14 |
вот человек любезно предоставил доступное определение
есть такое понятие: императивная парадигма когда код представляет собой просто последовательность каких то команд-инструкций. классический пример императива - ассемблерный код. на ней базируется процедурная парадигма это - тот же самый императив, только вместо отдельных инструкций можно использовать вызовы функций классический пример процедурного стиля - код на языке си. а вот функциональная парадигма, это уже не императив в функциональной парадигме алгоритм представлен деревом вызовов функций. т.е. функция в качестве аргументов принимает результаты вызовов других функций, которые в свою очередь так же запускают какие то функции, и так хоть до бесконечности. на языке с++ функциональная парадигма используется в метапрограммировании
1
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 23:51 [ТС] | 15 |
Если так - то у меня всё ж функциональный подход есть.. Правильно же понимаю, что объединение кучи мелких функций в одну большую - есть функциональщина? По вашим словам - функции берут результат работы других функций и запускают из себя ещё функции - эт есть такое, часто нужно. Теперь пойду по всем ссылкам похожу
Добавлено через 4 минуты Из вики о фукнциональной парадигме Добавлено через 3 минуты Хм. А вчера в гугле читал что наоборот процедурка - зависит от данных, функциональщина от данных и ещё чего-то. Тут же читаю вики - всё наоборот. Вот почему я вчера так и ответил. За ссылки спасибо, думаю тему можно закрывать, большинство за то - что лучше использовать ту или иную парадигму - в зависимости от её надобности, эффективности или удобстве. В одно полностью топить не есть гуд
0
|
2337 / 1825 / 753
Регистрация: 27.07.2012
Сообщений: 5,401
|
|
18.09.2022, 23:52 | 16 |
Нет. Это то же самое процедурное программирование.
В функциональном программировании сами функции являются объектами, могут быть переданы в другие функции, скомбинированы с другими такими же функциями и т.д.
1
|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
|
18.09.2022, 23:56 [ТС] | 17 |
Передать функцию в другую функцию как аргумент?0.о
Если так - то передаётся результат функции, а не сама функция. И это равно тому же, что мы бы результат сохранили в переменную и эту переменную скормили другой функции. Синтаксис разный, а суть одна. Ну разве что переменная экономится Либо я не так понял эту фразу
0
|
2337 / 1825 / 753
Регистрация: 27.07.2012
Сообщений: 5,401
|
||||||
19.09.2022, 00:11 | 18 | |||||
Типичный пример - callback, когда какая-то функциональная сущность (указатель на функцию, функциональный объект, лямбда-функция и т.д.) передаётся в другую функцию, которая уже её вызывает.
Добавлено через 7 минут Вот например:
std::bind1st - это функция, принимающая на вход функциональную сущность (в данном случае экземпляр класса std::multiplies ) и доп.параметр и возвращающая другую функциональную сущность - функциональный объект, который вызовет тот самый экземпляр std::multiplies для аргумента из входного вектора и доп.параметра.
1
|
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
|
|
19.09.2022, 13:05 | 20 |
lemegeton, у меня небольшой вопросик.
Где почитать причины существования, а главное использования, такого разнообразия языков и парадигм ? Где они используются, а не когда-то использовались, для каких задач ?
0
|
19.09.2022, 13:05 | |
19.09.2022, 13:05 | |
Помогаю со студенческими работами здесь
20
Я полный новичок полный перебор Полный перебор Не полный Windows 8.1 Полный учебник с++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|