|
|
| Результаты опроса: используете ли вы ооп | |||
| да |
|
238 | 86.55% |
| нет |
|
37 | 13.45% |
| Голосовавшие: 275. Вы ещё не голосовали в этом опросе | |||
|
|
Рейтинг 4.76/461:
|
|
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
|
|
Стоит ли использовать ООП?09.02.2010, 13:44. Показов 96099. Ответов 793
Метки нет (Все метки)
Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп? Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами. Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
|
|
| 09.02.2010, 13:44 | |
|
Ответы с готовыми решениями:
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 [ТС] | |||
|
Добавлено через 2 минуты И меня интересует КОГДА удобнее использовать ооп, а когда обойтись обычными функциями.
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 [ТС] | ||
|
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
|
||
|
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
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||
| 09.02.2010, 22:11 | |||
![]()
![]() ps. В ООП просто надо войти. Вначале оно кажется бредом - по себе знал. А потом не оторвешь и даже где оно не нужно будешь делать...
1
|
|||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 09.02.2010, 22:16 | |
|
Я в своем в стиле про рекламирую COM:
@KOT@: Если хочешь создавать эффективные и легко модифицируем не монолитные приложения, используй технологию COM. В разделе COM & OLE я выложил очень хорошую книгу про технологию COM.
0
|
|
|
|
|
| 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
|
||
|
|
|||||||||||
| 10.02.2010, 00:14 | |||||||||||
|
darkAngel, то, что ты описал - это НЕ есть ООП (а точнее так: ООП далеко не только это). Это всего лишь техническая реализация языка Си++. Формально - да, это инкапсуляция
Вариант на Си++
1
|
|||||||||||
|
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 | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 10.02.2010, 06:45 | |
|
Смотря для чего. Для серьёзных проектов альтернативы по-моему нет, но есть и такие задачи, при решении которых ООП будет только мешать.
0
|
|
|
|
|
| 10.02.2010, 09:46 | |
|
Day, всё-таки я с тобой не соглашусь. По части реализации графических оболочек сложно обойтись без наследования и виртуальных методов. Конечно, всё это можно написать на Си. Вместо наследования (типа "объект - кнопка", "объект - картинка") можно завести union и через поле "тип объекта" засунуть всё вовнутрь. Вместо виртуальных методов использовать указатели на функцию. Причём такая махина на Си будет глазами читаться проще, чем на Си++, потому как не видя перед глазами всей цепочки наследования (а иногда даже всего дерева) сложно что-то понять (лично для меня это одна из причин, по которым мне не нравится Си++ и я стараюсь его избежать при любой возможности).
Однако у Си++ есть одно преимущество (не в концепции, а в технической реализации). Описание "объект" можно поместить в системный файл (заголовок и библиотека). А вот "кнопка" и "картинка" могут быть пользовательским развитием системной базы. Конечно, в Си тоже это можно - заводим пользовательскую структуру, первым полем включаем в неё системную структуру, и через поинтерное преобразование из указателя на "свою" структуру получаем указатель на "системную" структуру и отдаём в системные коды (где из структура попросту пройдёт транзитом, а дальше через указатель на функцию мы опять попадём в "свои" коды). Но это уже начинает выглядеть коряво. Т.е. конкретно здесь при реализации системных интерфейсов я бы выбрал Си++. Я пишу про Си++, но здесь имеется ввиду конкретная техническая реализация объектно-ориентированного подхода Скрытие полей (private, public) - тоже довольно удобная вещь. И полезно в том числе и для себя, когда проект уже реализуется несколько лет и ты с трудом вспоминаешь конкретику того, что было год назад. В этом месте наличие идиотов необязательно.
1
|
|
|
2451 / 362 / 9
Регистрация: 27.06.2009
Сообщений: 880
|
||||
| 10.02.2010, 13:22 | ||||
|
1
|
||||
| 10.02.2010, 13:22 | |
|
Помогаю со студенческими работами здесь
20
Стоит ли учить ООП в одно время с Яп Как использовать ООП в WinAvr Js class как правильно использовать ООП Когда следует использовать ООП в РНР? WITH AS стоит ли использовать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Программа предоставляет более. . .
|