Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: используете ли вы ооп
да 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. Показов 103196. Ответов 793
Метки нет (Все метки)

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

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

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

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

793
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.02.2010, 14:35
Студворк — интернет-сервис помощи студентам
Коллега Evg, я совершенно согласен с тем, что нужно или не нужно использовать ООП - сильно зависит от конкретной задачи. Тут консенсус. А вот на тех задачах, где время компиляции будет уже измеряться часами (а значит, число строк исходного кода - измеряется сотнями тысяч, если не миллионами LOC), - пожалуй, стоит уже использовать.
На тех же задачах, где два часа могут существенно повлиять на сроки исполнения проекта..... хм, а что за задачи-то такие? "Hello, World!" написать?
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
10.02.2010, 14:38  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Ты всегда можешь в отладчике поставить брейкпоинт на процедуру set - это намного проще, чем пытаться отловить точку, где произошла запись напрямую в твоё поле (адрес, куда реально идёт запись к тому же будет плавать от запуска к запуску)
Хм... об этом я не подумал - действительно удобнее.

Добавлено через 35 секунд
Такой еще вопрос.
На скорость выполнения программы ооп не влияет?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 14:42
На скорость работы оказывают влияние алгоритмы присутствующие в программе, вроде так.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.02.2010, 14:45
Цитата Сообщение от CheshireCat Посмотреть сообщение
Коллега Evg, я совершенно согласен с тем, что нужно или не нужно использовать ООП - сильно зависит от конкретной задачи. Тут консенсус. А вот на тех задачах, где время компиляции будет уже измеряться часами (а значит, число строк исходного кода - измеряется сотнями тысяч, если не миллионами LOC), - пожалуй, стоит уже использовать.
Мы же договорились, что зависит от задачи То же самое ядро ОС, тот же самый компилятор. Понятно, что исходник компилятора не три часа собирается, но когда машина не "чистая" (т.е. на ней запущено какой-то тестирование), то время сборки компилятора gcc или ядра linux - довольно ощутимое

Цитата Сообщение от CheshireCat Посмотреть сообщение
На тех же задачах, где два часа могут существенно повлиять на сроки исполнения проекта..... хм, а что за задачи-то такие? "Hello, World!" написать?
Имеется в виду два часа каждым разработчиком на каждую перекомпиляцию с нуля. Так или наче приходится править файлы *.h. После такой правки зачастую пересобирается если не весь проект, то немаля его часть. После внесения правок в репозиторий это теперь повторит каждый разработчик, подцепивший новую правку. Собственно, многократная потеря времени на перекомпиляцию в сумме даст нехилые потери

Просто лет 10 назад мы это уже проходили и в полной мере ощутили. Правда тогда у нас были sparc'и с частотой порядка 60 МГц, а на 3-ГГцовых машинах это скорее всего будет ощущаться в меньшей степени.
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 14:46
Может ещё что то влияет я не знаю точно, но алгоритмы в большей степени.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.02.2010, 14:51
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от @KOT@ Посмотреть сообщение
Такой еще вопрос.
На скорость выполнения программы ооп не влияет?
Завист от конкретной реализации. Если ты set и get напишешь внутри класса, то любой вменяемый компилятор сделает inline-подстановку и код будет работать так, как будто ты пишешь напрямую в поле. Но если вынесешь эти процедуры в отдельный файл, то никакого inline не будет, ибо компилятор попросту внутренностей функции не увидит. В итоге на каждую запись поля вместо одного машинного такта будет их тратиться несколько десятков

Добавлено через 1 минуту
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Может ещё что то влияет я не знаю точно, но алгоритмы в большей степени.
Когда тебе нужен список для конкретных задач, то ты можешь реализовать его сам наиболее оптимальным образом под свои нужды. А можешь использовать из стандартных шаблонов (stl). Во втором случае, как правило, код будет медленнее, чем в первом
5
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 14:54
@KOT@
Только не спрашивай о скорости работы программы, при наличии virtual.
ответ где то на форуме есть.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
10.02.2010, 18:01
Цитата Сообщение от Evg
Когда тебе нужен список для конкретных задач, то ты можешь реализовать его сам наиболее оптимальным образом под свои нужды. А можешь использовать из стандартных шаблонов (stl). Во втором случае, как правило, код будет медленнее, чем в первом
Спасибо, давно хотел об этом услышать По крайне мере я хоть как то успокоился и оправдал свои велосипеды которые недавно написал. Для игры важна скорость особенно во время рендера, stl вообще не пользуюсь почти.

Цитата Сообщение от Genius Ignat
Только не спрашивай о скорости работы программы, при наличии virtual.
ответ где то на форуме есть.
Мне кажется если человек не знает для чего ООП то для чего virtual ему рановато спрашивать

2 @KOT@ Ты вроде собирался редактор писать? Без String класса тебе будет сложнее это сделать. А если будут ошибки придется сложнее отлаживать.
Множество людей не могут ошибаться. ООП полезен, его надо использовать. Зачем отказываться от возможнсти если она есть? Новичку в какой то области всегда кажется сомнительным та или иная технология. Например люди с компьютером на "вы" могут поставить 1 программу определенного типа и использовать её всю жизнь (т.к. освоили - все понятно и просто, а новое страшно и мудрено). Даже если вы сейчас не хотите использовать в вашем конкретном проекте ООП, все равно стоит его изучить. Просто смысл в том что пока не попробуешь не прочувствуешь. Так что опыт, опыт, опыт решает. Дело не в ООП, дело в опыте

Не по теме:

ps. Тема для холивара?)

0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
10.02.2010, 18:18  [ТС]
Цитата Сообщение от insideone Посмотреть сообщение
Мне кажется если человек не знает для чего ООП то для чего virtual ему рановато спрашивать
2 @KOT@ Ты вроде собирался редактор писать? Без String класса тебе будет сложнее это сделать. А если будут ошибки придется сложнее отлаживать.
Множество людей не могут ошибаться. ООП полезен, его надо использовать. Зачем отказываться от возможнсти если она есть? Новичку в какой то области всегда кажется сомнительным та или иная технология. Например люди с компьютером на "вы" могут поставить 1 программу определенного типа и использовать её всю жизнь (т.к. освоили - все понятно и просто, а новое страшно и мудрено). Даже если вы сейчас не хотите использовать в вашем конкретном проекте ООП, все равно стоит его изучить. Просто смысл в том что пока не попробуешь не прочувствуешь. Так что опыт, опыт, опыт решает. Дело не в ООП, дело в опыте
Нет - почему я изучаю (можно даже сказать почти доучил) ооп - не в том смысл, что я не знаю как оно работает.
Я просто предположил, что небольшие программы можно писать и без него, и возможно даже легче без ооп. Хотя некоторые доводы показались мне довольно убедительными. И я согласен, что в больших проектах ооп - очень даже уместно.
Но в мелких программах...

К тому же в си-шарп - без ооп вообще обойтись невозможно, так как там весь код содержиться в классах и методах(помоему в джава тоже). Я считаю это лишним. К тому же в си шарп, все типы (даже инт и чар) являются обьектами классов - правильно ли это для языка?
В этом плане си++ мне кажется более свободным (можно обойтись и без ооп).
+ я полностью поддерживаю ооп, там где обьекты сопоставлены с обьектами в реальном мире например в играх - обьект человек, а бежать это метод человека. Здесь ооп - лучшее средство.

Но при написании тех же берем крестиков - ноликов ооп абсолютно ни к чему.

Добавлено через 2 минуты
Я также поддерживаю ооп, когда нужно делать библиотеки и код, который будет использоваться потом в других программах. Раньше подключать можно было только заголовочные с функциями теперь с ооп гораздо удобнне работать с предыдущим кодом.
1
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
10.02.2010, 18:19
Цитата Сообщение от @KOT@ Посмотреть сообщение
К тому же в си шарп, все типы (даже инт и чар) являются обьектами классов
не все
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
10.02.2010, 18:21  [ТС]
Цитата Сообщение от HIMen Посмотреть сообщение
не все
а какие не являются?
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
10.02.2010, 18:27
указатели
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
10.02.2010, 18:36  [ТС]
Цитата Сообщение от HIMen Посмотреть сообщение
указатели
Ну а все остальные - обьекты. К тому же мелкософт не очень поддерживает использование указателей.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
10.02.2010, 18:36
Цитата Сообщение от @KOT@ Посмотреть сообщение
Я просто предположил, что небольшие программы можно писать и без него, и возможно даже легче без ооп. Хотя некоторые доводы показались мне довольно убедительными.
Было бы забавно если здесь кто нибудь предположил что все должны пользоваться ООП всегда и везде )) Кстати мне и мелкую программку бывает проще напсать из за ООП. 1) Повторно использую какой то класс и этим могу сделать 30% программы (маленькая же); 2) Легче воспринимать код -> легче отлаживать, легче дополнять, легче налаживать. Если говорить о совсем уж мелких программах то смысл их написания кроме учебного вообще теряется, а учебный процесс это другой вопрос. Иначе в голову и пример не приходит. Хотя согласен что без ООП ряд мелких задач может быть решен быстрее благорадя тому что не нужно "запариваться" на него
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.02.2010, 19:50
Цитата Сообщение от insideone Посмотреть сообщение
Спасибо, давно хотел об этом услышать По крайне мере я хоть как то успокоился и оправдал свои велосипеды которые недавно написал. Для игры важна скорость особенно во время рендера, stl вообще не пользуюсь почти.
А вот тут есть еще один момент. Очень легко убедить себя, что написанный собственными руками код будет более эффективен. На практике же можно написать велосипед с квадратными колесами, вся ценность которого будет в копирайте..
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
10.02.2010, 20:02
Ну я делаю по принципу конкретной задачи - все лишнее вон. Ведь stl она же универсальна и поэтому я как понимаю у неё есть минусы в скорости? Вообще говоря я прогонял некоторые stl вещи через пошаговый проход и это выглядело просто ужасно. В смысле можно час сидеть нажимать кнопку "следующая строчка" а в своем коде это реально видно что гораздо меньше. Это конечно не показатель, но все же выглядит подозрительно.

Ps. Это касается не только stl но и любых других вещей. Хотя функциям mem*** научился доверять. ASM внушает)
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.02.2010, 20:12
А тема растят...
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
10.02.2010, 20:14
В приложении к конкретной задаче обсуждении было бы более конкретным и интересным. Так что ждем что скажет @KOT@
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
10.02.2010, 20:30
В пользу ООП приведу рабочий живой пример - класс работы с комплексеыми числами - кода самого класса там на 68 строк.
Но зато при использовании
C#
1
Complex A = Complex.exp(-2 * Math.PI * Complex.i * k * n / N);
формулы выглядеть горездо понятнее, чем если бы +, * и / я использовал функции
C
1
Сomplex A = complex_exp(complex_mult_complex_complex(complex_mult_double_complex(-2*PI*n/N, complex_i),k));
На счет Get и Set: возьмем тот же пример. Сейчас у меня действительная и мнимая часть записываются в x и y. Чтобы получить действительную и мнимую часть есть, положим, функции Re и Im, которые просто возвращают значения переменных. И меня это устраивает. Но вот для вычисления Log нужно хранить числа в тригонометрической форме. То есть, если бы я использовал поля x и y вместо Re и Im, то везде в коде, где я их использовал, мне нужно было бы что-то переписывать при изменении формы представления. А сейчас мне нужно поменять только сами функции Re и Im.
К тому же, очень редко модификаторы только возвращают и устанавливают значение. Вот у меня, например, функции SetRe и SetIm еще пересчитывают модуль числа (так просто в моей задаче гораздо повышается быстродействие, а она работает с большими массивами данных)
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.02.2010, 22:16
Цитата Сообщение от insideone Посмотреть сообщение
Вообще говоря я прогонял некоторые stl вещи через пошаговый проход и это выглядело просто ужасно. В смысле можно час сидеть нажимать кнопку "следующая строчка" а в своем коде это реально видно что гораздо меньше. Это конечно не показатель, но все же выглядит подозрительно.
Неважно, сколько часов ты нажимал на кнопку "следующая строчка" для STL и для своего велосипеда. Данные профилировщика - где?

Никакая "интуиция", "я чувствую" и прочее не дают правильного ответа. Только экспериментальные данные профилировщика объективны и неоспоримы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2010, 22:16

Стоит ли учить ООП в одно время с Яп
Добрый день! Начал активно изучать 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...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
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
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru