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

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

16.05.2014, 16:35. Показов 21776. Ответов 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
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.09.2016, 17:29
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Смотря какую ошибку. Если в логике программы ошибку сделаешь тоже часто весь кусок кода нафиг переписывать нужно.
Я не об этом. С логикой ладно, разобраться не проблема. Попробуй в этой штуке, поставить левую стрелку. Перерисовывать будешь, все, что до этого нарисовал.

Добавлено через 2 часа 50 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если в логике программы ошибку сделаешь тоже часто весь кусок кода нафиг переписывать нужно.
Согласен, но когда на бумажке, то не страшно. А когда в проге целый день долбишься, а потом из-за одной стрелочки нужно переписывать кусок размером с небоскрёб, не очень весело. Блин, руки опускаются.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.09.2016, 20:56
Цитата Сообщение от SmittWesson Посмотреть сообщение
А когда в проге целый день долбишься, а потом из-за одной стрелочки нужно переписывать кусок размером с небоскрёб, не очень весело.
Ну скажем так - если реализация начала 80-ых не сильно удобная это не значит что концепция отстой. Даже в том же вордовском редакторе блок-схем не блоки на стрелках растут а стрелки между блоками добавляются. НО он как бы не компилятор и даже не анализатор синтаксиса. Если же сделать добавление соответствующих блокам веток при добавлении блоков управления выполнение и вставку/перетаскивание блоков из ветки в ветку будет гораздо удобнее и продуктивнее.
0
Заблокирован
02.11.2016, 21:48
Вот существует стереотип, что якобы ООП якобы помогает бороться со сложностью задачи.
Что в ООП путем разбивки задачи на классы и уменьшения связности/зависимости мы уменьшаем сложность задачи.

Что разделение задачи на «интерфейс» и «реализацию» упрощает решение задачи.
Вообщем, не буду рассказывать все стереотипы об ООП, про которые мы все знаем.

Но давайте разберемся и вникнем в детали (реализации). Ведь, как известно, «дьявол в деталях»©.

Говорят «интерфейс» и «реализация».
А что такое «интерфейс» класса?
А это ни что иное как список заголовков PUBLIC методов.
А что такое «заголовок метода»?
Это имя метода плюс список ТИПОВ его параметров.
И вот мы подходим к ключевому моменту: А что такое «типы параметров»?
А это не что иное как КЛАССЫ, которые описаны вне данного класса, и которые также имеет интерфейс.

Бинго!
Получается, что раскрутив всю логическую цепочку, мы видим, что фактически интерфейсом класса является СПИСОК ОПИСАННЫХ ВОВНЕ ДРУГИХ КЛАССОВ. А у тех классов интерфейс – это тоже список описанных вне их классов. И т.д.

Короче, получается, что ВСЕ СВЯЗАНО СО ВСЕМ.
Т.е. при ООП никакого упрощения программирования не происходит.
Напротив, из-за того, что «ВСЕ СВЯЗАНО СО ВСЕМ» произошло существенное усложнение программирования.
Миф об ООП развенчан.
Спасибо за внимание.

© Все права защищены.
При цитировании этой информации где-бы то ни было, ссылки на меня обязательны
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
03.11.2016, 10:11
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Короче, получается, что ВСЕ СВЯЗАНО СО ВСЕМ.
Неверно.
(Для доказательства того, что это неверно, достаточно привести пример двух классов, не связанных между собой.)

Соответственно, не верны и все Ваши последующие выводы.
0
Заблокирован
04.11.2016, 10:09
Цитата Сообщение от Shamil1 Посмотреть сообщение
Для доказательства того, что это неверно, достаточно привести пример двух классов, не связанных между собой
Исключение только подтверждает правило

Добавлено через 13 часов 40 минут
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Говорят «интерфейс» и «реализация».
А что такое «интерфейс» класса?
А это ни что иное как список заголовков PUBLIC методов.
А что такое «заголовок метода»?
Это имя метода плюс список ТИПОВ его параметров.
И вот мы подходим к ключевому моменту: А что такое «типы параметров»?
А это не что иное как КЛАССЫ, которые описаны вне данного класса, и которые также имеет интерфейс.
Бинго!
Получается, что раскрутив всю логическую цепочку, мы видим, что фактически интерфейсом класса является СПИСОК ОПИСАННЫХ ВОВНЕ ДРУГИХ КЛАССОВ. А у тех классов интерфейс – это тоже список описанных вне их классов. И т.д.
Т.е. получается, что на самом-то деле, что "интерфейс класса" - это не просто список заголовков методов данного класса (как пишут в книжках). А и еще и список заголовков методов ВСЕХ прямо (или косвенно) используемых в данном классе и описанных ВОВНЕ классов.
Получается что мало того, интерфейс "раздувается" настолько, что с ним просто невозможно работать.
Так еще получается что никакой "инкапсуляции" нет.
Так как ты не можешь ПРОИЗВОЛЬНО менять описанные вовне классы, так как от них у тебя зависят "кишки" данного класса

Добавлено через 5 минут
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
ты не можешь ПРОИЗВОЛЬНО менять описанные вовне классы
Например, переименовать методы "внешнего" класса, изменить их кол-во, изменить их сигнатуры.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.11.2016, 10:38
Булщит начинается со слов:
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А что такое «интерфейс» класса?
А это ни что иное как список заголовков PUBLIC методов.
Учите матчасть: что такое интерфейс в ООП, как реализуется разделение интерфейса и реализации. Весь последующий текст — неверные выводы из-за непонимания основ.
0
Заблокирован
04.11.2016, 20:07
Цитата Сообщение от 0x10 Посмотреть сообщение
что такое интерфейс в ООП
Я Выше уже озвучил его. Оно как раз из "матчасти" по С++.
У Вас есть какое-то альтернативное определение?
Тогда озвучьте. А "посылать в гугль" я тоже умею.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.11.2016, 20:12
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
У Вас есть какое-то альтернативное определение?
Тогда озвучьте. А "посылать в гугль" я тоже умею.
Wiki: Интерфейс.

Можно заметить, что интерфейс, с формальной точки зрения, — это просто чистый абстрактный класс, то есть класс, в котором не определено ничего, кроме абстрактных методов.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
04.11.2016, 20:44
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Исключение только подтверждает правило
Может, когда бабки у подъезда судачат, исключение и подтверждает правило, а в математике один контрпример опровергает правило типа "всегда".
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
04.11.2016, 21:14
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Цитата Сообщение от 0x10 Посмотреть сообщение
что такое интерфейс в ООП
Я Выше уже озвучил его. Оно как раз из "матчасти" по С++.
Как будто C++ имеет какое-то отношение к ООП.

Добавлено через 56 секунд
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Исключение только подтверждает правило
А идеальное правило — это то, для которого есть только исключения и ни одного подтверждения, да?
0
Заблокирован
04.11.2016, 21:21
0x10,
"Существует 4675 определений понятия "вероятность". И что удивительно: все правильные"©
Так что о чем мы спорим?

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
Как будто C++ имеет какое-то отношение к ООП.
Т.е. Вы сейчас так запросто, походя, рвете шаблон нескрльким десяткам миллионов программистов на С++, уверенных что пишут свои программы на объектно-ориентированном языке?
Смело

Добавлено через 1 минуту
0x10, И не надо мне цитировать то, что Вы сами не понимаете.
Вы своими словами, на пальцах, объясните, что такое интерфейс класса в С++, как это сделал я
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
04.11.2016, 21:39
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Т.е. Вы сейчас так запросто, походя, рвете шаблон нескрльким десяткам миллионов программистов на С++, уверенных что пишут свои программы на объектно-ориентированном языке?
Ну, если они настолько глупы, то да, рву. Впрочем, не я, а Алан Кей, автор термина «объектно-ориентированный».
0
Заблокирован
04.11.2016, 21:59
Цитата Сообщение от korvin_ Посмотреть сообщение
не я, а Алан Кей, автор термина «объектно-ориентированный».
Да сейчас этот термин как и термин ООП как-то только не склоняют. В каких смыслах только не используют.

Поэтому я и попросил, чтобы 0x10, не копипасту давал, а то, как он сам это понимает. На пальцах.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
04.11.2016, 23:32
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Да сейчас этот термин как и термин ООП как-то только не склоняют. В каких смыслах только не используют.
Ага, например:

Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А что такое «интерфейс» класса?
А это ни что иное как список заголовков PUBLIC методов.
А что такое «заголовок метода»?
Это имя метода плюс список ТИПОВ его параметров.
И вот мы подходим к ключевому моменту: А что такое «типы параметров»?
А это не что иное как КЛАССЫ, которые описаны вне данного класса, и которые также имеет интерфейс.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
05.11.2016, 02:36
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Вы своими словами, на пальцах
Какое конкретно слово из цитаты непонятно?
0
Заблокирован
05.11.2016, 08:51
0x10, Спасибо за ответ. Он очень информативен.

Добавлено через 42 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
интерфейс, с формальной точки зрения, — это просто чистый абстрактный класс, то есть класс, в котором не определено ничего, кроме абстрактных методов.
Прелестно

А если класс не "чисто абстрактный", то у него и иникакого интерфейса нет?
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
05.11.2016, 13:06
ИсмаилПркопенко,
Функции принимают аргументы. И это 1) не является недостатком, и 2) присуще не только ООП.
Например, метод Sin класса Math принимает аргумент класса Double. Какую проблему Вы в этом видите?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
05.11.2016, 13:06
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А если класс не "чисто абстрактный", то у него и иникакого интерфейса нет?
Вы упорно продолжаете называть интерфейсом не то, о чем идет речь в статье.
0
Заблокирован
05.11.2016, 22:24
Цитата Сообщение от Shamil1 Посмотреть сообщение
метод Sin класса Math принимает аргумент класса Double. Какую проблему Вы в этом видите?
Ну если ограничиваться только базовыми/встроенными типами и писать программы уровня "Халоу Ворлд" - то нет проблем. А если ты разрабатываешь (как я) систему искусственного разума, то быстро упираешься в ограничения и проблемы ООП

Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Вы упорно продолжаете называть интерфейсом не то, о чем идет речь в статье.
Вы упорно продолжаете называть интерфейсом совсем другую парадигму ("Обобщенное программирование", "вынос за скобку" общего функционала) и не то, о чем речь в этой теме.


На вопрос, я так понимаю, не ответите?
У НЕ абстрактного класса нет интерфейса?
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
05.11.2016, 23:57
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Ну если ограничиваться только базовыми/встроенными типами и писать программы уровня "Халоу Ворлд" - то нет проблем. А если ты разрабатываешь (как я) систему искусственного разума, то быстро упираешься в ограничения и проблемы ООП
Почти во всех языках программирования можно создавать пользовательские типы. И это 1) не является недостатком, и 2) присуще не только ООП.

Если у Вас "Короче, получается, что ВСЕ СВЯЗАНО СО ВСЕМ.", то это недостатки дизайна, а не недостатки ООП.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.11.2016, 23:57

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
300
Ответ Создать тему
Новые блоги и статьи
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для 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
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru