С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
1

Полный ооп

18.09.2022, 01:57. Показов 4963. Ответов 60

Author24 — интернет-сервис помощи студентам
Приветствуется ли в плюсах полностью ооп проект? По аналогии с джавой, как сказал один джавист - функций нельзя сделать вообще, можно сделать похожее только через класс с одним методом.
Так вот собственно и вопрос - ооп круто, но стоит ли полностью на ооп делать проект? В данный момент, в рамках одного моего проекта - так сделать можно, но будут классы без данных, чисто методы и всё, по смыслу разбитые на классы
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2022, 01:57
Ответы с готовыми решениями:

ООП. Переделать фрагмент программы под ООП
Есть небольшой фрагмент из программы, который необходимо перестроить под ООП(создать класс), для...

Где лучше учить ООП PHP ? И зачем нужен ООП
Здравствуйте ! До того как начел учить ООП я кайфовал от программирования, после того как начел...

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

ООП ради ООП
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует...

Полный слив...
///

60
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
18.09.2022, 02:16 2
Вообще желательно использовать как можно меньше методологий.
Фигачите в ООП -- фигачте в ООП.
Фигачите функциональщину -- фигачте функциональщину.

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

Добавлено через 1 минуту
Цитата Сообщение от Laborant666 Посмотреть сообщение
Приветствуется ли в плюсах полностью ооп проект?
Да пожалуйста. Чистота кода мало зависит от методологии.

Цитата Сообщение от Laborant666 Посмотреть сообщение
стоит ли полностью на ооп делать проект?
Как оценить "стоит/не стоит": выпишете все плюсы и минусы, сравните, что больше подходит в вашей ситуации.
1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 02:17  [ТС] 3
Цитата Сообщение от lemegeton Посмотреть сообщение
Начинаете смешивать -- начинается бардак
Даже если есть функция, которая никак не граничит со всеми имеющимися и получится класс с одним методом - всё равно делать класс, если решено использовать ооп? А как же тогда библиотеки, в которых и классы и функции?
0
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
18.09.2022, 02:18 4
Цитата Сообщение от Laborant666 Посмотреть сообщение
будут классы без данных
Так часто бывает. Обычно называется "интерфейсы".

Добавлено через 42 секунды
Цитата Сообщение от Laborant666 Посмотреть сообщение
есть функция, которая никак не граничит со всеми имеющимися и получится класс с одним методом - всё равно делать класс, если решено использовать ооп?
Да пожалуйста. Это называется функтором.

Добавлено через 36 секунд
Цитата Сообщение от Laborant666 Посмотреть сообщение
А как же тогда библиотеки, в которых и классы и функции?
Если ломает вашу методолгию -- методы оборачиваются в классы-функторы.
1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 02:21  [ТС] 5
Цитата Сообщение от lemegeton Посмотреть сообщение
Как оценить "стоит/не стоит": выпишете все плюсы и минусы, сравните, что больше подходит в вашей ситуации.
Исходя из моего, пусть и не шибко большого, опыта - если проект хотя бы больше пары сотен строк - писать его чисто на функциях - это сущий ад.. Тут либо оно так и есть - либо у меня мало опыта в функциональном программировании. Когда открыл для себя ооп - это был глоток свежего воздуха. Вот и думаю отойти от функций к ооп
0
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
18.09.2022, 02:31 6
Цитата Сообщение от Laborant666 Посмотреть сообщение
Вот и думаю отойти от функций к ооп
Попробуйте.

Добавлено через 4 минуты
В плюсах, в отличие от упомянутой ранее явы, есть несколько неудобств связанных с "абсолютным" ООП, делающих код на одном только ооп куда более многословным и несколько менее читаемым.

Я бы выделил отсуствие сборщика мусора, без которого начинается куча кухни вроде правил трёх/пяти, умные указатели и тому подобный ручной менеджмент памяти; а ещё я бы выделил особенную и систему (явных) ссылок и указателей, которая тоже делает код более многословным относительно упомянутой явы.

Не попробуете -- не узнаете. )
1
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.09.2022, 02:31 7
Цитата Сообщение от Laborant666 Посмотреть сообщение
стоит ли полностью на ооп делать проект?
не надо использовать ооп там, где оно нафиг никому не нужно.

Цитата Сообщение от Laborant666 Посмотреть сообщение
либо у меня мало опыта в функциональном программировании
в процедурном.

кучка функций в стиле си - это процедурная парадигма.
не нужно путать её с функциональной парадигмой.
1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 12:30  [ТС] 8
Цитата Сообщение от hoggy Посмотреть сообщение
в процедурном.
Всё ж фукнциональное.. Процедура не возвращает результат, функция возвращает..

Добавлено через 8 минут
Цитата Сообщение от hoggy Посмотреть сообщение
не надо использовать ооп там, где оно нафиг никому не нужно
Давайте для примера - я могу сделать функцию поисковик изображения и кормить ей в параметры каждый раз скриншот и искомую картинку. Могу реализовать это вторым способом - и либо сделать рычаг внутри функции, либо создать вторую.
Могу сделать класс, в который при инициализации я буду класть искомую картинку, процент совпадения, количество объектов для поиска (один - все) и потом вызывать просто объект.Find(скриншот) и получать список совпадений. В плане этого будет в принципе та же функция, написано просто по-другому. НО!
Есть ряд преимуществ класса
1) Действия применяются относительно конкретного объекта и читается это легче, чем в параметрах функции
2) Если в функции нужно применить параметры отличные от дефолтных, то их каждый раз нужно писать теперь. В классе это делается 1 раз в инициализации. Что опять же делает код более читабельно
3) Рычаг на тип поиска с теми же исходными данными - в классе смотрится отлично, а вот в функции немного вычурно, да и рычаги, влияющие на результат функции с неизменными входными данными - не есть гуд. В классе это самой парадигмой предусмотрено, в парадигме функции сказано, что результат не должен меняться без изменения входных данных

Собственно поэтому я и подумал что полное ооп мне подойдёт лучше
0
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
18.09.2022, 13:18 9
Цитата Сообщение от Laborant666 Посмотреть сообщение
Процедура не возвращает результат, функция возвращает..
Разница между функциональным и процедурным подходом немного глубже.

Процедурное программирование это последовательное выполнение инструкций сверху вниз с условными или безусловными переходами.

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

Посмотрите, поглубже, вам понравится. )

Добавлено через 12 минут
Цитата Сообщение от Laborant666 Посмотреть сообщение
Давайте для примера - я могу сделать функцию поисковик изображения и кормить ей в параметры каждый раз скриншот и искомую картинку. Могу реализовать это вторым способом - и либо сделать рычаг внутри функции, либо создать вторую.
Могу сделать класс, в который при инициализации я буду класть искомую картинку, процент совпадения, количество объектов для поиска (один - все) и потом вызывать просто объект.Find(скриншот) и получать список совпадений. В плане этого будет в принципе та же функция, написано просто по-другому. НО!
Это вы говорите про организацию данных, а парадигмы "функциональное" или "объектно-ориентированное" программирование это про поведение.
1
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.09.2022, 13:49 10
Цитата Сообщение от Laborant666 Посмотреть сообщение
Всё ж фукнциональное.. Процедура не возвращает результат, функция возвращает..
попробуй в следующий раз сначала погуглить материал.

Цитата Сообщение от Laborant666 Посмотреть сообщение
Собственно поэтому я и подумал что полное ооп мне подойдёт лучше
раз лучше, значит используй ооп.
0
71 / 72 / 17
Регистрация: 11.06.2018
Сообщений: 263
18.09.2022, 13:57 11
Лучший ответ Сообщение было отмечено Laborant666 как решение

Решение

Цитата Сообщение от Laborant666 Посмотреть сообщение
Всё ж фукнциональное.. Процедура не возвращает результат, функция возвращает..
Фантазии какие-то... Нет бы взять и прочитать что есть что.

Цитата Сообщение от Laborant666 Посмотреть сообщение
Давайте для примера
Тебе написали про твой же пример:
Цитата Сообщение от Laborant666 Посмотреть сообщение
функций нельзя сделать вообще, можно сделать похожее только через класс с одним методом.
А не вообще про ООП.
Расшифровываю: если на С++ использовать функцию там, где это уместно, то ООП-парадигме, в которой может быть выполнен проект, это никак не повредит.
1
1643 / 1167 / 601
Регистрация: 17.03.2022
Сообщений: 3,685
18.09.2022, 14:24 12
Лучший ответ Сообщение было отмечено Laborant666 как решение

Решение

Чистый ООП подходит далеко не для всяких задач. Да, есть случаи, когда он ложится на задачу идеально (вроде оконных интерфейсов), но просто загонять его везде - идея не лучшая. Написать-то рабочий код, возможно, и получится, но он будет откровенно избыточным.
0
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 15:44  [ТС] 13
Цитата Сообщение от hoggy Посмотреть сообщение
попробуй в следующий раз сначала погуглить материал.
Это как раз из гугла 0.о

Добавлено через 1 минуту
Цитата Сообщение от lemegeton Посмотреть сообщение
Разница между функциональным и процедурным подходом немного глубже.
Хм, гугл значит мне наврал немного. Понял

Добавлено через 1 минуту
Цитата Сообщение от Pphantom Посмотреть сообщение
Чистый ООП подходит далеко не для всяких задач. Да, есть случаи, когда он ложится на задачу идеально (вроде оконных интерфейсов), но просто загонять его везде - идея не лучшая. Написать-то рабочий код, возможно, и получится, но он будет откровенно избыточным.
Услышал вас и сегодня это ощутил
1
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.09.2022, 22:42 14
Цитата Сообщение от Laborant666 Посмотреть сообщение
Это как раз из гугла
вот человек любезно предоставил доступное определение

есть такое понятие: императивная парадигма

когда код представляет собой просто последовательность каких то команд-инструкций.
классический пример императива - ассемблерный код.


на ней базируется процедурная парадигма

это - тот же самый императив,
только вместо отдельных инструкций можно использовать вызовы функций
классический пример процедурного стиля - код на языке си.


а вот функциональная парадигма, это уже не императив

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


на языке с++ функциональная парадигма используется в метапрограммировании
1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 23:51  [ТС] 15
Цитата Сообщение от hoggy Посмотреть сообщение
в функциональной парадигме алгоритм представлен деревом вызовов функций.
т.е. функция в качестве аргументов принимает результаты вызовов других функций,
которые в свою очередь так же запускают какие то функции,
и так хоть до бесконечности.
Если так - то у меня всё ж функциональный подход есть.. Правильно же понимаю, что объединение кучи мелких функций в одну большую - есть функциональщина? По вашим словам - функции берут результат работы других функций и запускают из себя ещё функции - эт есть такое, часто нужно. Теперь пойду по всем ссылкам похожу

Добавлено через 4 минуты
Из вики о фукнциональной парадигме

"Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательное изменение состояний (в значении, подобном таковому в теории автоматов)."
У меня нынче половина проекта на классах, половина на последовательном изменении состояний (сам порядок действий предопределен, но если что-то пойдет не так - код подстроится, сам или начнет сначала, или определит на каком шаге застрял и попытается с него стартануть ещё раз)

Добавлено через 3 минуты
Хм. А вчера в гугле читал что наоборот процедурка - зависит от данных, функциональщина от данных и ещё чего-то. Тут же читаю вики - всё наоборот. Вот почему я вчера так и ответил. За ссылки спасибо, думаю тему можно закрывать, большинство за то - что лучше использовать ту или иную парадигму - в зависимости от её надобности, эффективности или удобстве. В одно полностью топить не есть гуд
0
2337 / 1825 / 753
Регистрация: 27.07.2012
Сообщений: 5,400
18.09.2022, 23:52 16
Цитата Сообщение от Laborant666 Посмотреть сообщение
Правильно же понимаю, что объединение кучи мелких функций в одну большую - есть функциональщина?
Нет. Это то же самое процедурное программирование.

В функциональном программировании сами функции являются объектами, могут быть переданы в другие функции, скомбинированы с другими такими же функциями и т.д.
1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.09.2022, 23:56  [ТС] 17
Цитата Сообщение от John Prick Посмотреть сообщение
В функциональном программировании сами функции являются объектами, могут быть переданы в другие функции
Передать функцию в другую функцию как аргумент?0.о
Если так - то передаётся результат функции, а не сама функция. И это равно тому же, что мы бы результат сохранили в переменную и эту переменную скормили другой функции. Синтаксис разный, а суть одна. Ну разве что переменная экономится
Либо я не так понял эту фразу
0
2337 / 1825 / 753
Регистрация: 27.07.2012
Сообщений: 5,400
19.09.2022, 00:11 18
Цитата Сообщение от Laborant666 Посмотреть сообщение
Передать функцию в другую функцию как аргумент?0.о
Если так - то передаётся результат функции, а не сама функция.
Типичный пример - callback, когда какая-то функциональная сущность (указатель на функцию, функциональный объект, лямбда-функция и т.д.) передаётся в другую функцию, которая уже её вызывает.

Добавлено через 7 минут
Вот например:
C++
1
2
    std::transform(a.begin(), a.end(), r.begin(),
        std::bind1st(std::multiplies<double>(), pi / 180.))
Здесь std::bind1st - это функция, принимающая на вход функциональную сущность (в данном случае экземпляр класса std::multiplies) и доп.параметр и возвращающая другую функциональную сущность - функциональный объект, который вызовет тот самый экземпляр std::multiplies для аргумента из входного вектора и доп.параметра.
1
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
19.09.2022, 12:51 19
Цитата Сообщение от Laborant666 Посмотреть сообщение
Передать функцию в другую функцию как аргумент?0.о
Даже не просто передать функцию в другую функцию.
А можно, например, подставить первые N-аргументов и передать такую функцию дальше. )
Пройдите коротенький туториал, скажем, по хаскелю. Отпадёт множество вопросов.
1
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
19.09.2022, 13:05 20
lemegeton, у меня небольшой вопросик.
Где почитать причины существования, а главное использования, такого разнообразия языков и парадигм ?
Где они используются, а не когда-то использовались, для каких задач ?
0
19.09.2022, 13:05
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2022, 13:05
Помогаю со студенческими работами здесь

Я полный новичок
20 марта сделал свой первый сайт по партнёрской программе интернет-магазина.Конечно я уже знал что...

полный перебор
и снова я..)у меня есть кусок задачи..там нада просто правильна написать нужную распечатку...ая...

Полный перебор
Здравствуйте. Скорее всего, я пришел не по адресу и мне следовало бы задать свой вопрос где-нибудь...

Не полный Windows 8.1
Всем привет, я поставил себе Windwos 8.1 (лицензионный), всё работает, но он не сильно отличается...

Полный учебник с++
Доброго времени суток!!! Ситуация такая: изучил основы c++, хочу изучить ПОЛНОСТЬЮ его....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Подброка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru