Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/90: Рейтинг темы: голосов - 90, средняя оценка - 4.53
 Аватар для tramp_1-3
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454

Недостатки ООП

16.05.2014, 16:35. Показов 21769. Ответов 318
Метки нет (Все метки)

Задали написать небольшую статью о недостатках этой замечательной парадигмы. В нашей группе прикладной информатики я один более-менее знаком с разработкой, поэтому на придирчивость аудитории можно не рассчитывать, и я решил спросить мнение опытных людей здесь. Я самоучка-теоретик, так и не написавший более-менее достой программы за свою жизнь, поэтому часть этой статьи навеяна из сети, а вот про усложнения - уже исключительной мой загон - не могу просто взять и написать программу. Пишу, думая, что это будет целый Фреймворк. Ну в общем предлагаю вашему вниманию эту коротенькую статью и рассчитываю на объективную критику. Всего полторы страницы - больше просто не знаю к чему придраться.
https://www.dropbox.com/s/m6u9... D0%9F.docx
дропбокс глючит и не дает нормальную ссылку. вот статья под спойлером.
Кликните здесь для просмотра всего текста
Недостатки ООП
Парадима ООП не нова. ООП приобрело популярность во второй половине 80-х вместе с такими языками, как Smalltalk, С++, Objective C (другое расширение C) и некоторыми другими. 25 лет назад никто не ожидал, что “новый” феномен ООП проживет столь долго и сегодня большинство современных языков поддерживают эту парадигму.
ООП стоит на трёх китах:
1.Первый — инкапсуляция — это определение классов — пользовательских типов данных, объединяющих своё содержимое в единый тип и реализующих некоторые операции или методы над ним. Классы обычно являются основой модульности, инкапсуляции и абстракции данных в языках ООП.
2.Второй — наследование — способ определения нового типа, когда новый тип наследует элементы (свойства и методы) существующего, модифицируя или расширяя их. Это способствует выражению специализации и генерализации.
3.Третий, известный как полиморфизм, позволяет единообразно ссылаться на объекты различных классов (обычно внутри некоторой иерархии). Это делает классы ещё удобнее и облегчает расширение и поддержку программ, основанных на них.
Инкапсуляция, наследование и полиморфизм — фундаментальные свойства, которыми должен обладать язык, претендующий называться объектно-ориентированным (языки, не имеющие наследования и полиморфизма, но имеющие только классы, обычно называются основанными на классах). Различные ОО языки используют совершенно разные подходы. Мы можем различать ОО языки, сравнивая механизм контроля типов, способность поддерживать различные программные модели и то, какие объектные модели они поддерживают.
Преимущества этих языков всем известны: повторное использование кода, упрощение разработки больших программ, более логичная структура программы и многие другие. Разберём некоторые недостатки.
Недостатки есть абсолютно у всего – с этим нужно просто смириться. Важно адекватно их оценивать и стараться минимизировать их влияние. То же самое касается и объектно-ориентированной парадигмы программирования.
Есть несколько причин, почему узкие места ООП часто вылазят наружу. Я считаю, что это прежде всего непонимание самой сути объектно-ориентированной техники программирования - восприятие этой парадигмы как серебряной пули. Часто программисты стараются решать абсолютно все задачи, где даже не предвидится конкретных сущностей с их свойствами с помощью объектов, наследования и с помощью объектов. Это очень усложняет процесс. То есть вместо написания парочки функций в процедурной манере и передачи аргументов туда-обратно, программист часто пытается нагромоздить целую иерархию классов и после разгребает проблемы с видимостью классов, доступа к скрытым инкапсуляцией данным.
Таким образом, можно выделить один недостаток объектно-ориентированных языков программирования – избыточность их средств при решении большинства простых задач.
Нужно помнить, что применение ООП это прежде всего моделирование. Для построения хорошей, легко читаемой и сопровождаемой программы необходимо в самом начале разработки предусмотреть сценарии её использования и, что очень важно, изменения – заказчик легко в корне может поменять задачу. Это нетривиальный процесс, в котором часто задействуются даже отдельные языки моделирования. Не каждый способен выделить отдельные сущности и сделать их классами. Ещё меньше людей способны адекватно распределить функции, работающие с данными программы в методы и упаковать их в классы. Для этого нужно уметь мыслить объектно-ориентированными категориями. На всё это уходит драгоценное время. Оно обязательно окупится, если программист имеет дело с большим и сложным проектом, но вряд ли в других случаях, когда требуется просто решить задачу и перейти к другой.
Для меня вывод один, всем известный и общепринятый – не стоит воспринимать парадигмы и языки, их поддерживающие, как божество. Это всего лишь инструмент для решения определенного круга задач. Я думаю, что для объектно-ориентированных языков такие задачи начинаются, когда их решение укладывается более чем в тысячу строк и задачи, которые требуют масштабирования.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2014, 16:35
Ответы с готовыми решениями:

Архитектура с толстым клиентом: какие есть недостатки?
Здравствуйте, коллеги! Сейчас разрабатываем простенькое веб-приложение для учета заказов производственной компании. Функционал несложный:...

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

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

318
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.09.2016, 16:40
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Тогда посоветуйте хороший учебник, в котором бы подробно разбирались все недостатки ООП
В учебниках обычно разбираются методики правильного применения. Это кстати учебники далеко не только по ООП.
0
Заблокирован
12.09.2016, 20:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В учебниках обычно разбираются методики правильного применения
Я просил ХОРОШИЙ учебник.
ХОРОШИЙ учебник подразумевает, что в нем будут описаны не только достоинства того или иного метода/парадигмы, но и его недостатки

Добавлено через 34 секунды
Или хотя ГРАНИЦЫ ПРИМЕНИМОСТИ метода

Добавлено через 3 минуты
Цитата Сообщение от SmittWesson Посмотреть сообщение
Таких нет, увы.
Бывают
Вот пример
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
12.09.2016, 21:47
ИсмаилПркопенко, Скользкие места - это не учебник.
А вот на Озоне появился действительно хорошая книжка по стандартному С++
http://www.ozon.ru/context/detail/id/136427551/
Но там только язык с библиотекой.
Формочек там нет.
По формочкам я вам уже писал: можно книжки Культина, можно книжки Зиборова взять.
Учебник по WinForms - это книжка Петцольда. Посмотрите опять же все это на Озоне.
0
12.09.2016, 21:50

Не по теме:

Этот коричневый поток на обложке символизирует то что я думаю? :D

0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.09.2016, 22:40
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А вот на Озоне появился действительно хорошая книжка по стандартному С++
Что-то она тоненькая какая-то, 500 страниц всего! Любой серьезный учебник по С++ обычно за тысячу переваливает.
Забавляет его фраза в начале, что он, типа, вкратце, а остальное на сайтах по С++ читайте.
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
13.09.2016, 07:03
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Формочек там нет.
И не будет. Формочки, это спецификация среды. Непосредственно к языку, они имеют отношение постольку-поскольку. Ну, типа для того, чтобы нам жизнь облегчить (по-сути - усложнить). И занимаются этим - библиотеки. В дибилдере, в частности, VCL.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.09.2016, 13:16
Цитата Сообщение от SmittWesson Посмотреть сообщение
Непосредственно к языку, они имеют отношение постольку-поскольку.
Ну, визуальный язык - это тоже язык, и уже давно все языки программирования общаются с пользователем в основном визуально.
Я считаю, что давно уже пора визуальную часть тоже как-то стандартизировать, какой смысл придуриваться?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.09.2016, 13:58
Цитата Сообщение от Mr.X Посмотреть сообщение
Я считаю, что давно уже пора визуальную часть тоже как-то стандартизировать, какой смысл придуриваться?
К примеру такой что в большинстве программ работы с СУБД оно по одному должно фунциклить а в САПР абсолютно по другому. В общем с попытками застандартизировать GUI покончили еще в начале 90-ых с переходом оного GUI от псевдографики к графике.

Добавлено через 6 минут
Цитата Сообщение от Mr.X Посмотреть сообщение
и уже давно все языки программирования общаются с пользователем в основном визуально
Далеко не все. Если у MSVC полу-визуальное только формлшлепство, то у билдера/дельфи формошлепство почти на 100% визуальное и при этом это только 10% визуальной технологии. Остальые 90% это преимущественно визуальная разработка бизнес-логики, правда в изкоробочном варианте для определенного класса задач (информационные ситемы крупных и очень крупных корпораций).

Добавлено через 2 минуты
При всем при этом ввод программ текстом это способ ввода эпохи телетайпов. Давно уже эпоха сенсорных панелей. Так что в ближайшем будущем все это должно кардинально измениться. Т.е. прийти к чему то наподобие ДРАКОН+ООП+КОП+визуальная сборка компонентов.
0
Заблокирован
13.09.2016, 14:06
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При всем при этом ввод программ текстом это способ ввода эпохи телетайпов. Давно уже эпоха сенсорных панелей. Так что в ближайшем будущем все это должно кардинально измениться.
Согласен.
Набивать код посимвольно вручную - это просто титаническая работа.
Все равно что зубочисткой пилить дерево в три обхвата.
Давно уже пора придумать более адекватные способы представления программ
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
13.09.2016, 15:32
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Тогда посоветуйте хороший учебник, в котором бы подробно разбирались все недостатки ООП
Вот тут подборка хорошая, правда на английском:http://www.softpanorama.org/SE/anti_oo.shtml

Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Бывают
Вот пример
Это книга про c++, а не про ООП.
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Давно уже пора придумать более адекватные способы представления программ
Придумано уже:http://www.ict.edu.ru/vconf/in... 45&d=light
1
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
13.09.2016, 16:34
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Набивать код посимвольно вручную - это просто титаническая работа.
Чего в этом титанического, если человек набирает быстрее, чем формулирует мысли?
0
Заблокирован
13.09.2016, 16:58
Цитата Сообщение от Shamil1 Посмотреть сообщение
Чего в этом титанического, если человек набирает быстрее, чем формулирует мысли?
Потому и мыслит медленно, потому что мыслит буковками исходника, а не целыми образами

Добавлено через 1 минуту
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это книга про c++, а не про ООП.
Это был ответ на то, что
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В учебниках обычно разбираются методики правильного применения.
Я привел пример, что есть книжки, где описываются "скользкие места" и недостатки той или иной технологии
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
13.09.2016, 17:04
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
потому что мыслит буковками исходника, а не целыми образами
Используйте языки с абстракциями более высокого уровня. Чтобы не приходилось каждый раз цикл расписывать.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.09.2016, 17:15
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Я привел пример, что есть книжки, где описываются "скользкие места" и недостатки той или иной технологии
Это бульварное чтиво, а не техническая литература, так сказать дань моде поругать С++ раз уж осилить не смогли. Т.е. фактически сборник 1001 рецепт как намеренно прострелить себе ногу. То же самое будет касаться и книг в которых расписаны "недостатки" ООП. Я бы сказал у ООП один недостаток: тот кто его применяет должен очень четко понимакть как задачу так и то как комп фунциклит. Хотя ИМХО это главное из достоинств а не недостаток.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
13.09.2016, 17:27
Mr.X, я не писал, что это - учебник.
Но книжка - хорошая.
Это я как эксперт в книжках говорю.
Написана по стандарту 2011 и 2014. Половина книжки - по шаблонам и метапрогроаммированию.
Ориентирована на проги научно-числового программирования.
Как я понял, автор - один из создателей Boost Graph Library, перевод которой я редактировал в издательстве Питер.

Добавлено через 3 минуты
SmittWesson, это понятно, Но в состав библиотек Java формочки входят в нескольких вариантах.
А в стандартной библиотеке С++ формочек нет.
0
Заблокирован
13.09.2016, 19:38
Цитата Сообщение от Shamil1 Посмотреть сообщение
Используйте языки с абстракциями более высокого уровня. Чтобы не приходилось каждый раз цикл расписывать.
Понимаете. Текстом не всегда удобно описывать абстракции.
Бывает маленькая простая картинка/схема/диаграмма несет больше информации, чем 100 страниц кода.
Тот же GUI текстом описывать заколебёсся.

Добавлено через 6 минут
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Но книжка - хорошая.
Это я как эксперт в книжках говорю.
Да мы в курсе что Вы автор книжки по С++.
Беда всех книжек по С++ - нет комплексного изложения.
Ведь чтобы писать на С++ под венду не достаточно просто освоить синтаксис С++ и даже ООП.
Нужно освоить IDE (а они сейчас МОНСТРОобразные) и сопутствующие инструменты (редакторы, отладчики, профилировщики, анализаторы кода и т.д. и т.п..
Нужно освоить событийно-ориентированную модель Windows
Нужно освоить ряд библиотек, фреймворков, надстроек, обёрток, DSL-ей
Нужно освоить языки описания GUI

Да много чего нужно освоить прежде чем ты сможешь что называется "сесть и поехать"©

И таких книжек нет. От слова САПСЕМ. Ну где программирование на С++ описывается в КОМПЛЕКСЕ
Вся инфа РАЗМАЗАНА по десяткам книг.
Это существенно осложняет "быстрый старт" для тех кто изучает программирование "с нуля"
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
13.09.2016, 19:50
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Бывает маленькая простая картинка/схема/диаграмма несет больше информации, чем 100 страниц кода.
Не бывает. Или приведите пример.

Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Тот же GUI текстом описывать заколебёсся.
Как Вы опишите "в картинках" Текстовое поле, в которое можно вводить числа не больше 100?
А вот в коде можно легко описать и это, и внешний вид:
<ТекстовоеПоле Ширина=10 Высота=3 ВалидацияТип=Число ВалидацияИнтервал=(0,100) />
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.09.2016, 20:43
Цитата Сообщение от Shamil1 Посмотреть сообщение
А вот в коде можно легко описать и это, и внешний вид:
Нормальные люди это уже лет 20 не кодом пишут а мышкой на форме расставляют и в полях инспектора объектов указывают. А подобный код если нужен компом генерится.

Добавлено через 2 минуты
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Нужно освоить событийно-ориентированную модель Windows
событийно-ориентированную модель управления нужно освоить в любом случае. Ее эпоха причем не только и даже не столько в оконых фреймверках сколько в средствах автоматики началась еще в 70-е. Причем осваивать нужно в общем, не зависимо от конкретного фреймверка оси и т.п. Тогда для работы с этой системой в рамках любого фреймверка достаточно референса.

Добавлено через 3 минуты
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Да много чего нужно освоить прежде чем ты сможешь что называется "сесть и поехать"©
Для того чтобы ехат не достаточно только уметь крутить руль (знать синтаксис С++ или другого языка). Нужно еще как минимум знать куда ехать (как решать задачу) и правила дорожного движения (взаимосвязь с окружением типа средств предоставляемых осью/библиотеками). И это касается любого языка не только С++. А когда знаешь и понимаешь как решать задачу, то по конкретному языку достаточно одной книги - Language Reference Manual называется. По библиотекам/оси тоже достаточно референса.

Добавлено через 8 минут
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Понимаете. Текстом не всегда удобно описывать абстракции.
Бывает маленькая простая картинка/схема/диаграмма несет больше информации, чем 100 страниц кода.
Тот же GUI текстом описывать заколебёсся.
В общем когда стал вопрос о разработке бортового софта для "Бурана" и ""Энергии" а так же для пускового стола и ЦУП к ним количество потребных высококвалифицированных программистов было оценено в 7-10 тысяч чел на 10 лет. Для совдепии это было непозволительной роскошью и потребный срок был пятилетка. В общем в одном из НИИ по сусекам поскребли и соорудили под это дело систему программирования схемами ДРАКОН. Даже при том что это не ООП язык с задачей управились менее чем 2 тыс человек, причем на год быстрее чем запилили стартовый стол и саму ракету.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
13.09.2016, 20:45
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Нормальные люди это уже лет 20 не кодом пишут а мышкой на форме расставляют и в полях инспектора объектов указывают.
Нормальные люди делают так, как им удобней. В большинстве случаев удобнее кодом. Поэтому люди придумывают такие языки как html, xaml и т.п.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.09.2016, 20:47
Цитата Сообщение от Shamil1 Посмотреть сообщение
Поэтому люди придумывают такие языки как html, xaml и т.п
А потом придумывают визуальные редакторы оных HTML и т.п. Потому как редактирование по принципу "что видишь то и есть" гораздо удобнее чем искать в какой стоке кода один контрол на другой наехал и т.п.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2016, 20:47

Недостатки React
Здравствуйте. Расскажите пожалуйста о недостатках, архитектурный просчетах, неудобствах и т.д. с которыми вы сталкивались при написании...

Укажите на недостатки
Нужна ваша помощь. Написал я программу, которая вычисляет число Pi (в дальнейшем хочу добавить другие числа, и методы вычисления), это моя...

Недостатки AnyLogic
Сразу отмечу - я далёк от программирования и не имеют опыта работы в AnyLogic. Поэтому высказанное ниже носит субъективный характер и...

Какие недостатки
Люди, что можите сказать о http://www.rucar.ru? Заранее спасибо! :)

недостатки системы
Пожалуйста, скажите, кому что не нравится в windows 7 с точки зрения безопасности.


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

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru