Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: используете ли вы ооп
да 238 86.55%
нет 37 13.45%
Голосовавшие: 275. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.76/461: Рейтинг темы: голосов - 461, средняя оценка - 4.76
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386

Стоит ли использовать ООП?

09.02.2010, 13:44. Показов 103246. Ответов 793
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп?
Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами.
Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2010, 13:44
Ответы с готовыми решениями:

Стоит ли использовать ООП -- часть вторая
У людей задающих подобные вопросы не все в порядке с пониманием ООП. Например, в параллельной теме человек интересуется: На самом...

Какие РЕАЛЬНО есть причины НЕ использовать ООП?
Появился такой вопрос. Все мы знаем о шумихе вокруг ООП, спорной идее наследования, других невнятных идей которых можно добиться...

Где стоит использовать bootstrap и стоит ли вообще использовать CSS фреймворки?
Здравствуйте. Лично я ужасаюсь ковырять стили, когда к сайту подключен bootstrap и мало понимаю, чем он хорош вообще. В данной теме я бы...

793
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.09.2017, 02:42
Студворк — интернет-сервис помощи студентам
Shamil1, это если вписывать заглушки в код в процессе его написания. А речь шла именно об обдумывании логических частей процесса, с написанием прототипов функций, и уже последующей компоновкой их в виде заглушек в код.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.09.2017, 05:45
Цитата Сообщение от Shamil1 Посмотреть сообщение
Проблема в том, что я не знаю, можно ли использовать ф111 вместо ф123.
это надуманная проблема т.к.
Чтобы выяснить это, мне нужно прочитать спецификации всех функций в системе и сравнить каждую с требуемой.
как ни странно, это придется делать независимо от выбраного метода сверху вниз, снизу вверх, по диагонали
Это в идеальном случае - когда для каждой функции составлена спецификация, а в реальном всё будет ещё хуже.
функция не описана значит ее нет - пиши свою.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
22.09.2017, 10:25
Цитата Сообщение от pycture Посмотреть сообщение
как ни странно, это придется делать независимо от выбраного метода сверху вниз, снизу вверх, по диагонали
Нет.
Например, если я провожу декомпозицию по функциональности, то мне нужно будет просматривать только функции требуемой специализации.
Или, если я провожу декомпозицию по типам данных, то мне нужно будет просматривать только функции, работающие с данным типом данных.

Цитата Сообщение от TRam_ Посмотреть сообщение
А речь шла именно об обдумывании логических частей процесса, с написанием прототипов функций
Совсем не похоже на "сверху-вниз".
Разбиваем задачу на несколько более простых шагов/подзадач. Затем повторяем с каждой из подзадач. Если текущая подзадача выглядит достаточно простой, то пишем код без дальнейшего разбиения.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.09.2017, 10:44
Цитата Сообщение от Shamil1 Посмотреть сообщение
если я провожу декомпозицию по функциональности, то мне нужно будет просматривать только функции требуемой специализации
какая разница. всё равно придется просмотреть все (более-менее подходящие) функции которые уже написаны (причём кем-то) и этот список постоянно растет.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
22.09.2017, 13:56
Цитата Сообщение от pycture Посмотреть сообщение
какая разница. всё равно придется просмотреть все (более-менее подходящие) функции которые уже написаны (причём кем-то) и этот список постоянно растет.
Принципиальная разница. Примерно как между просмотром паблик методов одного класса и просмотром паблик и приват методов всех классов.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
22.09.2017, 20:53
Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, если я провожу декомпозицию по функциональности, то мне нужно будет просматривать только функции требуемой специализации.
Или, если я провожу декомпозицию по типам данных, то мне нужно будет просматривать только функции, работающие с данным типом данных.
И как это связано с направлением проектирования?
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
23.09.2017, 15:19
Цитата Сообщение от korvin_ Посмотреть сообщение
И как это связано с направлением проектирования?
Не с направлением, а с методом. "сверху-вниз" - это метод проектирования. И у этого метода есть недостаток, который я упоминал выше. Другой метод - ООП - более-менее решает эту проблему.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.09.2017, 17:46
Цитата Сообщение от Shamil1 Посмотреть сообщение
Примерно как между просмотром паблик методов одного класса и просмотром паблик и приват методов всех классов.
разницы все равно никакой нет. если избегать дублирования кода придется шерстить все классы (ибо некоторые любят рожать класс на каждый чих) и удостоверится, что не напишешь существующий/код функционал не изучив все, что написано к текущему моменту, невозможно.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.09.2017, 21:13
Цитата Сообщение от Shamil1 Посмотреть сообщение
Другой метод - ООП - более-менее решает эту проблему.
Не решает. И ООП ортогонально проектированию «сверху-вниз» или «снизу-вверх».
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
24.09.2017, 08:23
Цитата Сообщение от korvin_ Посмотреть сообщение
ООП ортогонально проектированию «сверху-вниз»
Видимо, под проектированием "сверху-вниз" Вы понимаете не то, что я.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
24.09.2017, 10:53
Цитата Сообщение от Shamil1 Посмотреть сообщение
Видимо, под проектированием "сверху-вниз" Вы понимаете не то, что я.
Видимо. Что ты под этим понимаешь, и какое это имеет отношение к ООП?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
19.10.2017, 01:17
Цитата Сообщение от CoderHuligan Посмотреть сообщение
как абстрактный общий тип данных
Абстрактный как раз и означает что его нельзя использовать напрямую. только через потомков.

Добавлено через 3 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Видимо, под проектированием "сверху-вниз" Вы понимаете не то, что я.
С применением ООП снизу вверх проектировать можно разве что инфраструктуру, и то без излишнего фанатизма в плане универсализации . а остальное надо проектировать сверху вниз. В результате получается проектирование на встерчу.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
19.10.2017, 13:29
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Абстрактный как раз и означает что его нельзя использовать напрямую
Тогда он бессмысленнен.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
19.10.2017, 14:43
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
С применением ООП снизу вверх проектировать можно разве что
Вы противопоставляете "проектирование сверху вниз" и "проектирование снизу вверх". Я противопоставляю "проектирование сверху вниз" и "проектирование с применением ООП".
При проектировании сверху вниз программист первым делом пишет функцию СделатьВсёЧтоТребуется(). При этом отдельные шаги заменяются вызовами функций, которые когда-то потом будут это делать.
При проектировании с применением ООП программист первым делом начинает думать, какие классы понадобятся.

з.ы. Основное достоинство проектирования сверху вниз в том, что думать не надо, можно сразу начинать писать. А основной недостаток в том, что пишешь, не подумав.
1
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
09.11.2017, 19:28
Да, однозначно стОит.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.01.2018, 13:36
Цитата Сообщение от Shamil1 Посмотреть сообщение
Основное достоинство проектирования сверху вниз в том, что думать не надо, можно сразу начинать писать. А основной недостаток в том, что пишешь, не подумав.
ООП этот недостаток устраняет при том что проектирование сверху вниз никуда не делось. В ООП программист делает абстрактный класс который несет какой либо набор функциональности не задумываяь как конкретно внутри этот функционал фунциклит. както заранее неизвестно как. но известно что на входах и выходах этого черного ящика. А потом расширяетсяя номенклатура оных конкретных функционалов. так делать не подумав уже не получится. Хотя разработка остается сверху вниз. В идеале и схема управления функционалом прописана в этом абстрактном классе. Тогда и расширение номенклатуры загнано в какие то вменяемые рамки.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    class TEntity {
    private:
        HINTERNET FHandle = nullptr;
    protected:
        void DestroyHandle() {
            if (FHandle) {
                WinHttpSetStatusCallback(FHandle, nullptr, 0, 0);
                WinHttpCloseHandle(FHandle);
                FHandle = nullptr;
            }
        };
        virtual HINTERNET DoCreateHandle() = 0;
        virtual void HandleEvent(long Status, void* StatusInfo, long StatusLength) = 0;
        static  void CALLBACK HandleProc(HINTERNET ObjHandle, DWORD_PTR Object, DWORD Status, void* StatusInfo, DWORD StatusLength);
        TEntity() {};
        void CreateHandle() {
            if (FHandle) return;
            FHandle = DoCreateHandle();
            WinHttpSetStatusCallback(FHandle, &TEntity::HandleProc, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0);
            void *Ptr = this;
            WinHttpSetOption(FHandle,WINHTTP_OPTION_CONTEXT_VALUE,&Ptr,sizeof(Ptr));
            
        };
    public:
        AnsiString Name;
        virtual ~TEntity() { DestroyHandle(); };
        HINTERNET GetHandle() { if (!HandleAllocated) CreateHandle(); return FHandle; }
        bool   GetHandleAllocated() { return FHandle != nullptr; }
 
        operator HINTERNET () { return Handle; }
 
        __declspec(property(get = GetHandle)) HINTERNET Handle;
        __declspec(property(get = GetHandleAllocated)) bool HandleAllocated;
    };
т.е. известно что оно хэндл. извесно что оно как то создается и как то удаляется. тому что создано нужно установить калбэк. что и описано. Как именно оно создается и удаляется - это уже ниже по иерархииб потому что не известно на данном этапе.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,899
01.01.2018, 20:21
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В ООП программист делает абстрактный класс
Прежде, чем делать абстрактный класс, нужно решить, что этот класс нужен. То есть, нужно продумать архитектуру программы. А для этого нужен опыт. Большинство программистов таким опытом не обладают.
1
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.01.2018, 07:24
Цитата Сообщение от Shamil1 Посмотреть сообщение
Большинство программистов таким опытом не обладают.
А никто и не говорит что ООП это инструмент быдлокодера. Напротив ООП это инструмент профессионала. Ну и опять же в квалификации/должности слово инженер имеет свойство стоять на первом месте а программист на втором. Да он за примерами далеко ходить не надо - те же Delph/Builder считаются быдлоформошлепками только по той причине что в СНГ явно недостаточно спецорв способных вести разработку расширением фреймворка а не навешивать бизнес-логику на обработчики кнопок. Там же оная формошлепка практически монополист в сфере создания внутреннего софта крупных корпораций. А к быдлоформошлепкам относят WPF и т.п. не преспособленные к расширению фреймверка.

Цитата Сообщение от Shamil1 Посмотреть сообщение
А для этого нужен опыт
В первую очередь для этого нужны знания предметной области. Инженер-программист именно потому и инженер что разработку начинает с исследования предметной области.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Большинство программистов таким опытом не обладают.
Ну это как бы проблемы не ООП а этих псевдопрограммистов. Да кстати за бугром программист давно уже не обязательно инженер. К примеру на позиции быдлокодеров (developers или programers) особенно web особенно frontend особенно Java и JavaScript большинство вакансий требует образования школа. Наивно полагать что у них такой опыт/знания будут. Но как бы и инженерами-программистами и даже инженерами-техниками их считать нельзя. А вот тот кто инженер-программист (Software Engineer) тот без оного опыта диплом фиг получит. При этом за время обучения в ВУЗе предостаточно возможностей оный опыт получить.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
03.01.2018, 16:37
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Там же оная формошлепка практически монополист в сфере создания внутреннего софта крупных корпораций.
А к быдлоформошлепкам относят WPF и т.п. не преспособленные к расширению фреймверка.

ищо! на бис!
0
WH
1589 / 817 / 192
Регистрация: 10.09.2013
Сообщений: 3,293
Записей в блоге: 3
31.03.2018, 11:01
В опросе не хватает одного пункта - Стоит, но не всегда ))

Кстати, есть ли совсем не большие задачи, года ООП оправдано? Ведь обычно манипулируют терминами - "для больших задач". И напротив, есть ли большие задачи, когда ООП не нужно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2018, 11:01

Стоит ли учить ООП в одно время с Яп
Добрый день! Начал активно изучать c#. Читаю Шилдта в свободное от учебы время и стараюсь практиковаться и всё выходит пока нормально. Но...

Как использовать ООП в WinAvr
Класс я создал. А вот объект класса создать не получается! Полазив по интернету выяснил что оператор new не поддерживается компилятором! ...

Js class как правильно использовать ООП
Накидал вот такой простенький код, авторизация проходит, data.Access_token существует, но в this.Access_token почему то не сохраняется, не...

Когда следует использовать ООП в РНР?
Когда стоит учить ооп в РНР, если новичок в РНР? Стоит ли писать весь код в стиле ооп ?

WITH AS стоит ли использовать
Использую СУБД Postgresql, есть запрос SELECT * FROM Table1 WHERE Filed1 IN (SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND...


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

Или воспользуйтесь поиском по форуму:
720
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru