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

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

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

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

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

793
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 14:00
А что говорит Б.Страуструп. по этому поводу?

Добавлено через 2 минуты
//--------------------------------------------
а не мутить с классами обектами и методами.
//--------------------------------------------

Добавлено через 3 минуты
инкапсуляция - какой вообще ее смысл?
Тогда можно и не использовать функции.
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
09.02.2010, 14:03  [ТС]
Цитата Сообщение от Genius Ignat Посмотреть сообщение
А что говорит Б.Страуструп. по этому поводу?
Не знаю что говорит Страуструп. Я хочу знать мнение других программистов. Может я чего-то не понимаю в программировании?

Добавлено через 2 минуты
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Тогда можно и не использовать функции.
Функции можно и нужно использовать практически всегда. Даже всегда. В с++ и си-шарп без функций программировать вообще невозможно. Но программировать без ооп можно.
И меня интересует КОГДА удобнее использовать ооп, а когда обойтись обычными функциями.
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 14:06
классы и объекты способствуют моделированию реальных понятий, в более наглядном
виде не желе структуры и функции.

Добавлено через 2 минуты
Наследование используется для реализации взаимосвязных понятий.
Взаимосвязь выстроена в виде иерархии.
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
09.02.2010, 14:14  [ТС]
Цитата Сообщение от Genius Ignat Посмотреть сообщение
классы и объекты способствуют моделированию реальных понятий, в более наглядном
виде не желе структуры и функции.

Добавлено через 2 минуты
Наследование используется для реализации взаимосвязных понятий.
Взаимосвязь выстроена в виде иерархии.
Это я понимаю. НО: оправданы ли усилия на создание классов и обеспечение инкапсуляции и сокрытия данных и когда они оправданы
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 14:38
Посмотри на иерархию классов библиотеки MFC, тогда поймешь зачем ООП.
Для большого проекта в котором много взаимосвязных нитей лучше использовать ООП.

Добавлено через 3 минуты
Для больших проектов ООП это норм и оправдано.

Добавлено через 2 минуты
обеспечение инкапсуляции и сокрытия данных
//---------------------------------------------
А ты знаешь что глобальность не есть хорошо.

Добавлено через 8 минут
Если проект включает все то, что не как не взаимодействует между собой лучше применять процедурный подход.
ООП в данном случае в полной своей мере, не применимо к данной задаче.
Зачем изобретать иерархию, когда её даже и не видно логически.

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

Добавлено через 3 минуты
так методы и данные классов могут наследоваться
Причём что наследовать надо , определяет программист.
0
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
09.02.2010, 21:45
Лучший ответ Сообщение было отмечено как решение

Решение

И меня интересует КОГДА удобнее использовать ооп, а когда обойтись обычными функциями.[/
Я хочу знать мнение других программистов
Смотри, допустим ты создаёшь объект Цветочек. Ну ты описывашь какие-то данные (цвет, вид, количество лепестков и т.д.). Ты прописываешь ему функции (ну фотосинтез , размножение).

И если тебе нужен для работы всего один цветок , тебе хватит вполне несколько переменных для описания свойств и несколько функций. И тут тебе можно не заморачиваться на класс.
Но если, тебе нужно не 1 цветочек, а 10 , то представь, тебе нужно будет прописать уже не несколько переменных, а несколько умноженное на 10. А если нужно 100 цветков, ты представь сколько тебе переменных надо прописать? Прописать ладно, а какой хаус будет, у тебя только сотни строчек кода уйдёт на это.

А теперь прредставь, чтобы вызывать функции для каждого цветочка, тебе нужно прописывать передеваемые в функцию параметры вручную для каждого цветочка. А если их будет не 100 а 1000?
8
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
09.02.2010, 21:50
ООП не сразу приходит в голову. Я вообще вначале классы использовал как сборник функций и не более))))) Однако применение ООП там где оно нужно повышает наглядность кода в разы, а так же повышает удобство его написания. И многое другое... Стоит пользоваться! Но все зависит конечно от конкретной ситуации, иногда есть такие что это просто излишне

Кстати хороший пример ООП - string) Мы абстрагируемся от реальных данных (как я понимаю это называется инкапсулирование) скрывая их внутри. Мы знать не знаем про массив символов. И тут же можно удобно делать выделение памяти в конструкторе и удаление в деструкторе.
5
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 22:00
darkAngel:
Мысль не точна. Но всё равно тебе спасибо за рвение помочь.

Добавлено через 3 минуты
darkAngel:
Всё что ты сказал уложиться в малое количество строк, это следует логически из твоего высказывания.
Если хочешь я напишу на C++ всё что ты сказал. И ты удивишься.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
09.02.2010, 22:11
Если хочешь я напишу на C++ всё что ты сказал. И ты удивишься.
Кстати помоему в этом и есть идеалогия (одна из) C++ что она не навязывает конкретной парадигмы программирования, она просто предлагает инстумент. А вопрос @KOT@ звучит по логике в виде "стоит ли использовать перфоратор или плоскогубцы? когда лучше использовать плоскогубцы. раздражает что перфоратор делает большие дыры". Прошу не анализировать пример, он для шутки

Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени
Все не так вы воспринимаете. Объект это реальная сущность класса. Т.е. класс это схема по которой компилятор скомпанует данные. Потеря производительности пустяковая. Наоборот кое где можно выиграть очень многое. А самое главно выиграть свое время и долголетие мозга

ps. В ООП просто надо войти. Вначале оно кажется бредом - по себе знал. А потом не оторвешь и даже где оно не нужно будешь делать...
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 22:16
Я в своем в стиле про рекламирую COM:
@KOT@:
Если хочешь создавать эффективные и легко модифицируем не монолитные приложения,
используй технологию COM.
В разделе COM & OLE я выложил очень хорошую книгу про технологию COM.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.02.2010, 22:58
Лучший ответ Сообщение было отмечено как решение

Решение

@KOT@, у меня есть дикое подозрение, что даже если тебе разжуют вопрос и разложат по полочкам, то ты всё равно не поймёшь. Как и большинство начинающих, которые задаются этим вопросом. Замечу для отвечающих, что кот спрашивает именно про ООП. Пример с цветочками не канает, поскольку там можно обойтись обычными структурами Си (что совсем не есть ООП). Так или иначе вопрос попадает в ту категорию, когда человек в какой-то момент сам себе ответит на этот вопрос. Т.е. со временем придёт именно практическое понимание, чем объектное программирование отличается от необъектного (а не теоретическое описание из книг с модными словами "инкапсуляция" или типа "полиморфизм"). Одно могу сказать точно: на маленьких программах какой-то особенной необходимости в ООП нет
4
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
09.02.2010, 23:03
Evg:
Однозначно.
0
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
10.02.2010, 00:03
Всё что ты сказал уложиться в малое количество строк, это следует логически из твоего высказывания
ну да, если использовать массивы. но я немного другое имел в виду.

Evg,Genius Ignat, я имел в виду то, что для каждого цветочка нужно в функцию передвать допольнительные параметри, в то время как в объектах класса это сделает за тебя сам объект. Ну, например, указатель на вершину стека. Для каждого стека свой указатель, и для каждого стека нужно передавать в функцию этот указатель на вершину. (за исключением использования глобальных переменных).
В то время как в объекте может спокойно сидеть этот указатель и программист избовляется от данной заботы.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.02.2010, 00:14
darkAngel, то, что ты описал - это НЕ есть ООП (а точнее так: ООП далеко не только это). Это всего лишь техническая реализация языка Си++. Формально - да, это инкапсуляция

Вариант на Си++

C++
1
2
3
4
5
6
7
8
9
10
class Flower
{
  ...
  void Func (void);
  ...
}
 
...
Flower f;
f.Func();
эквивалентен варианту на Си

C
1
2
3
4
5
6
7
8
9
10
struct Flower
{
  ...
};
 
void Func (struct Flower *this);
 
...
Flower f;
Func (&f);
Из постановки вопроса я так понял, что КОТ сие отличие понимает. Он не понимает ЗАЧЕМ это нужно, когда можно без этого. Или я не так понял его непонятки
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
10.02.2010, 00:23
@KOT@, Спасибо за вопрос.
Этот ООП - беда и боль моя!
Да не нужен он мне!
И малые задачи решали, и побольше - обходились.
Инкапсулирование - это нужно когда много ребят работает над проектом. И ты им не доверяешь.
Или считаешь дураками. Или когда проект так велик, что без дураков не обойтись (по статистике и теории вероятностей).
Полиморфизм - задумка интересная, но в реализации - убийственная.
Просто компилятор дает тебе ошибку (а без них когда-нибудь что-то было?) в обращении к
функции - и иди ищи чего ему не понравилось, функций-то этих у него десяток!
Не считая того, что ты пишешь HWND, а он (умница такая) говорит про int.
(Но это - отдельная тема - в судьи будем Окаму привлекать)
Однако есть очень важное место, где я не могу обойтись без классов, полиморфизмов,
наследований и прочих прелестей ООП. Это Виндовский интерфейс. Самому такую махину
не поднять. Приходится пользоваться ООПовскими наработками.
При первой же возможности сбегаю в чистый С и там себя чувствую вполне комфортно.
Все вышеизложенное - чистое ИМХО, хотя даже это не спасет меня от грядущего поклевывания.
Что я хочу сказать, @KOT@, - сомневаешься не ты один
PS: Если делать все с нуля - никакой ООП не нужен. Если хочешь облегчить себе житуху с помощью предшественников - приходится примкнуть к их стае.
2
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
10.02.2010, 00:28
Цитата Сообщение от Day Посмотреть сообщение
Если хочешь облегчить себе житуху с помощью предшественников - приходится примкнуть к их стае.
Действительно. ЛУчше тупо игнорировать ООП и не облегчать себе житуху. Очень умно.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.02.2010, 06:45
Смотря для чего. Для серьёзных проектов альтернативы по-моему нет, но есть и такие задачи, при решении которых ООП будет только мешать.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.02.2010, 09:46
Day, всё-таки я с тобой не соглашусь. По части реализации графических оболочек сложно обойтись без наследования и виртуальных методов. Конечно, всё это можно написать на Си. Вместо наследования (типа "объект - кнопка", "объект - картинка") можно завести union и через поле "тип объекта" засунуть всё вовнутрь. Вместо виртуальных методов использовать указатели на функцию. Причём такая махина на Си будет глазами читаться проще, чем на Си++, потому как не видя перед глазами всей цепочки наследования (а иногда даже всего дерева) сложно что-то понять (лично для меня это одна из причин, по которым мне не нравится Си++ и я стараюсь его избежать при любой возможности).

Однако у Си++ есть одно преимущество (не в концепции, а в технической реализации). Описание "объект" можно поместить в системный файл (заголовок и библиотека). А вот "кнопка" и "картинка" могут быть пользовательским развитием системной базы. Конечно, в Си тоже это можно - заводим пользовательскую структуру, первым полем включаем в неё системную структуру, и через поинтерное преобразование из указателя на "свою" структуру получаем указатель на "системную" структуру и отдаём в системные коды (где из структура попросту пройдёт транзитом, а дальше через указатель на функцию мы опять попадём в "свои" коды). Но это уже начинает выглядеть коряво. Т.е. конкретно здесь при реализации системных интерфейсов я бы выбрал Си++. Я пишу про Си++, но здесь имеется ввиду конкретная техническая реализация объектно-ориентированного подхода

Скрытие полей (private, public) - тоже довольно удобная вещь. И полезно в том числе и для себя, когда проект уже реализуется несколько лет и ты с трудом вспоминаешь конкретику того, что было год назад. В этом месте наличие идиотов необязательно.
1
 Аватар для 0xAX
2451 / 362 / 9
Регистрация: 27.06.2009
Сообщений: 880
10.02.2010, 13:22
Цитата Сообщение от @KOT@ Посмотреть сообщение
Раздражает инкапсуляция - какой вообще ее смысл?
Цитата Сообщение от Evg Посмотреть сообщение
@KOT@, у меня есть дикое подозрение, что даже если тебе разжуют вопрос и разложат по полочкам, то ты всё равно не поймёшь. Как и большинство начинающих, которые задаются этим вопросом.
Evg, cовершенно прав, пока ваши знание о предмете на таком уровне вам не стоит использовать приемы ооп, поверьте будет только хуже.

Цитата Сообщение от taras atavin Посмотреть сообщение
Для серьёзных проектов альтернативы по-моему нет
Вы всерьез уверены что крупный проект без приемов ооп не написать? (При том что он не будет уступать аналогу написанному на ооп ни по каким характеристикам) Ну чтож мне смешно на вас.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2010, 13:22
Помогаю со студенческими работами здесь

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru