Форум программистов, компьютерный форум, киберфорум
Наши страницы
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Результаты опроса: используете ли вы ооп
да 227 87.64%
нет 32 12.36%
Голосовавшие: 259. Вы ещё не голосовали в этом опросе

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

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

09.02.2010, 13:44. Просмотров 60509. Ответов 770
Метки нет (Все метки)

Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп?
Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами.
Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2010, 13:44
Ответы с готовыми решениями:

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

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

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

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

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

770
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 14:00 2
А что говорит Б.Страуструп. по этому поводу?

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

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

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

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

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

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

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

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

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

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

Решение

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

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

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

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

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

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

ps. В ООП просто надо войти. Вначале оно кажется бредом - по себе знал. А потом не оторвешь и даже где оно не нужно будешь делать...
1
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 22:16 11
Я в своем в стиле про рекламирую COM:
@KOT@:
Если хочешь создавать эффективные и легко модифицируем не монолитные приложения,
используй технологию COM.
В разделе COM & OLE я выложил очень хорошую книгу про технологию COM.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
09.02.2010, 22:58 12
Лучший ответ Сообщение было отмечено как решение

Решение

@KOT@, у меня есть дикое подозрение, что даже если тебе разжуют вопрос и разложат по полочкам, то ты всё равно не поймёшь. Как и большинство начинающих, которые задаются этим вопросом. Замечу для отвечающих, что кот спрашивает именно про ООП. Пример с цветочками не канает, поскольку там можно обойтись обычными структурами Си (что совсем не есть ООП). Так или иначе вопрос попадает в ту категорию, когда человек в какой-то момент сам себе ответит на этот вопрос. Т.е. со временем придёт именно практическое понимание, чем объектное программирование отличается от необъектного (а не теоретическое описание из книг с модными словами "инкапсуляция" или типа "полиморфизм"). Одно могу сказать точно: на маленьких программах какой-то особенной необходимости в ООП нет
4
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 23:03 13
Evg:
Однозначно.
0
darkAngel
Технофашист
218 / 201 / 11
Регистрация: 11.03.2009
Сообщений: 883
10.02.2010, 00:03 14
Всё что ты сказал уложиться в малое количество строк, это следует логически из твоего высказывания
ну да, если использовать массивы. но я немного другое имел в виду.

Evg,Genius Ignat, я имел в виду то, что для каждого цветочка нужно в функцию передвать допольнительные параметри, в то время как в объектах класса это сделает за тебя сам объект. Ну, например, указатель на вершину стека. Для каждого стека свой указатель, и для каждого стека нужно передавать в функцию этот указатель на вершину. (за исключением использования глобальных переменных).
В то время как в объекте может спокойно сидеть этот указатель и программист избовляется от данной заботы.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
10.02.2010, 00:14 15
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
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
10.02.2010, 00:23 16
@KOT@, Спасибо за вопрос.
Этот ООП - беда и боль моя!
Да не нужен он мне!
И малые задачи решали, и побольше - обходились.
Инкапсулирование - это нужно когда много ребят работает над проектом. И ты им не доверяешь.
Или считаешь дураками. Или когда проект так велик, что без дураков не обойтись (по статистике и теории вероятностей).
Полиморфизм - задумка интересная, но в реализации - убийственная.
Просто компилятор дает тебе ошибку (а без них когда-нибудь что-то было?) в обращении к
функции - и иди ищи чего ему не понравилось, функций-то этих у него десяток!
Не считая того, что ты пишешь HWND, а он (умница такая) говорит про int.
(Но это - отдельная тема - в судьи будем Окаму привлекать)
Однако есть очень важное место, где я не могу обойтись без классов, полиморфизмов,
наследований и прочих прелестей ООП. Это Виндовский интерфейс. Самому такую махину
не поднять. Приходится пользоваться ООПовскими наработками.
При первой же возможности сбегаю в чистый С и там себя чувствую вполне комфортно.
Все вышеизложенное - чистое ИМХО, хотя даже это не спасет меня от грядущего поклевывания.
Что я хочу сказать, @KOT@, - сомневаешься не ты один
PS: Если делать все с нуля - никакой ООП не нужен. Если хочешь облегчить себе житуху с помощью предшественников - приходится примкнуть к их стае.
2
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
10.02.2010, 00:28 17
Цитата Сообщение от Day Посмотреть сообщение
Если хочешь облегчить себе житуху с помощью предшественников - приходится примкнуть к их стае.
Действительно. ЛУчше тупо игнорировать ООП и не облегчать себе житуху. Очень умно.
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.02.2010, 06:45 18
Смотря для чего. Для серьёзных проектов альтернативы по-моему нет, но есть и такие задачи, при решении которых ООП будет только мешать.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
10.02.2010, 09:46 19
Day, всё-таки я с тобой не соглашусь. По части реализации графических оболочек сложно обойтись без наследования и виртуальных методов. Конечно, всё это можно написать на Си. Вместо наследования (типа "объект - кнопка", "объект - картинка") можно завести union и через поле "тип объекта" засунуть всё вовнутрь. Вместо виртуальных методов использовать указатели на функцию. Причём такая махина на Си будет глазами читаться проще, чем на Си++, потому как не видя перед глазами всей цепочки наследования (а иногда даже всего дерева) сложно что-то понять (лично для меня это одна из причин, по которым мне не нравится Си++ и я стараюсь его избежать при любой возможности).

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

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

Цитата Сообщение от taras atavin Посмотреть сообщение
Для серьёзных проектов альтернативы по-моему нет
Вы всерьез уверены что крупный проект без приемов ооп не написать? (При том что он не будет уступать аналогу написанному на ооп ни по каким характеристикам) Ну чтож мне смешно на вас.
1
10.02.2010, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2010, 13:22

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

Стоит ли использовать this?
Здравствуйте, когда стоит использовать this, а когда нет? Например у меня есть...

WITH AS стоит ли использовать
Использую СУБД Postgresql, есть запрос SELECT * FROM Table1 WHERE...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru