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

Полный ооп

18.09.2022, 01:57. Показов 4967. Ответов 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
73 / 74 / 17
Регистрация: 11.06.2018
Сообщений: 266
18.09.2022, 13:57 11
Лучший ответ Сообщение было отмечено Laborant666 как решение

Решение

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

Цитата Сообщение от Laborant666 Посмотреть сообщение
Давайте для примера
Тебе написали про твой же пример:
Цитата Сообщение от 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
Цитата Сообщение от 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,401
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,401
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
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
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-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru