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

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

16.05.2014, 16:35. Показов 22967. Ответов 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
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.06.2014, 13:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Просто от того что создана общность "муравей" - ничего особо не изменилось
Ну почему же. Однотипность – это как раз то, что и объединяет объекты в систему и позволяет им взаимодействовать друг с другом. А различие подтипов – для выполнения в ней различных функций. Так что оба аспекта одинаково важны и находят отражение в ОО-модели.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
09.06.2014, 19:49
Цитата Сообщение от Igor3D Посмотреть сообщение
ООП все-таки что-то предлагает
и что же нам прелагает ООП для решения указаной задачи https://www.cyberforum.ru/post6293286.html ?
чет я от ООП никак вменямной реализации не дождусь
0
1979 / 835 / 115
Регистрация: 01.10.2012
Сообщений: 5,179
Записей в блоге: 2
10.06.2014, 09:34
Цитата Сообщение от pycture Посмотреть сообщение
и что же нам прелагает ООП для решения указаной задачи Недостатки ООП ?
чет я от ООП никак вменямной реализации не дождусь
Кто-то там живет на каком-то этаже Так можно привести пример куда проще, напр проверить что строка имеет такой вид
C++
1
*z*.e?e
И на языке общего назначения придется потрудиться, в то время как с RegExp это решается одной строкой. Это замена программирования "технологией", которая может быть эффективна но всегда узко ограничена. Типа "не нужно писать программы, вот выучите правила и по ним составьте выражение". Поэтому восхищается этим не стоит
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
10.06.2014, 10:44
Igor3D, суть не в решении задачи, а в построении кода, которым можно будет легко описывать новые правила т.е. создать внутренний DSL. Второе, я показал решение на языке общего назначения, именно языке, а не какой то там "технологии", может чтото подобное выродить ООП? Третье...
Впрочем ладно. Уже очевидно, что ООП ничего не предлагает, даже попыток нет, даже для элементарных задач (типа построения DSL), что уж можно говорить о сложных системах?
0
1979 / 835 / 115
Регистрация: 01.10.2012
Сообщений: 5,179
Записей в блоге: 2
10.06.2014, 17:41
Цитата Сообщение от pycture Посмотреть сообщение
Igor3D, суть не в решении задачи, а в построении кода, которым можно будет легко описывать новые правила т.е. создать внутренний DSL. Второе, я показал решение на языке общего назначения, именно языке, а не какой то там "технологии", может чтото подобное выродить ООП? Третье...
Не знаю сколько Вам лет - но видно маловато. Вас не смущает легкость решения? А может Вы еще думаете какой Вы умный, ловкий, нашли "золотой ключик", а другие (вот дураки) все парятся с допотопным ООП!

Все это повторяется только на моей памяти уже лет 25. Не нужно даже не знать никаких подробностей DSL, и так ясно - эта вещь заточена на пример что Вы привели. Это ее дом родной, Вас здесь давно ждали. И цель у нее гораздо прозаичнее - заменить программиста на девочку-секретаршу, которой платить можно меньше (ну и вообще). А чего - задавать правила и она сможет. В каких-то (достаточно узких) областях это возможно. Не стройте иллюзий, бесплатный сыр бывает только в...
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
10.06.2014, 20:37
Цитата Сообщение от Igor3D Посмотреть сообщение
Вас не смущает легкость решения?
Не смущает. Почему меня должно смущать решение на технологиях, которые чуть ли не старее того же ООП? Ну а то, что без ООП многие вещи делаются легко и непринуждено, у ООПшников обычно вызывает шок и отрицание - это тоже не новость.
Жалуетесь что взамен ООП вам ничего не предлагают, а когда начинают предлагать вещаете совершенно странные вещи о какомто узком применении, заточке под чтото, слишком простых задачах и пр.
...эта вещь заточена на пример что Вы привели. Это ее дом родной, Вас здесь давно ждали....
Что вообще значит заточена? Это язык общего применения такой же как C++ или C#. Они тоже под чтото заточены?
И цель у нее гораздо прозаичнее - заменить программиста на девочку-секретаршу, которой платить можно меньше (ну и вообще). А чего - задавать правила и она сможет
У кого "у нее"? У языка общего назначения? Т.е. у ЯОН одни цели а у ООП другие? Оригинально.
эта вещь заточена на пример что Вы привели
Ну так приведите другой пример, где ООП уделает всех и вся, только в разумных пределах, под что оно там заточено, только что б форум не помер от кол-ва кода (а еще лучше чтоб ideone переварил, чтоб результаты было видно). А то складывается впечатление, что простые задачи на ООП не решают потому как это слишком просто, а сложные - потому как слишком сложно.
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.06.2014, 07:24
Цитата Сообщение от pycture Посмотреть сообщение
Ну а то, что без ООП многие вещи делаются легко и непринуждено, у ООПшников обычно вызывает шок и отрицание - это тоже не новость.
Что удивительно, это свойственно только ООПшникам (не всем поголовно, но большинству), ведь они думают
Цитата Сообщение от Igor3D Посмотреть сообщение
какие они умные, ловкие, нашли "золотой ключик"
в виде ООП, «а другие (вот дураки) все парятся с изучением различных вычислительных моделей», дабы найти более оптимальные способы решения проблем.
0
1979 / 835 / 115
Регистрация: 01.10.2012
Сообщений: 5,179
Записей в блоге: 2
11.06.2014, 13:05
Цитата Сообщение от pycture Посмотреть сообщение
Ну так приведите другой пример, где ООП уделает всех и вся, только в разумных пределах, под что оно там заточено, только что б форум не помер от кол-ва кода (а еще лучше чтоб ideone переварил, чтоб результаты было видно).
Так это запросто. Возьмем любой приличный фреймворк, напр Qt, а можно и wxWidgets (скромнее но тоже неплохо). Что это? Набор С++ классов (ООП). Используя его любой (даже знающий программирование поверхностно) может напр за день сбацать приличное кросс-платформенное UI - и еще очень много чего.

Где же аналог этого на Вашей вещи ? (вещь - она, поэтому "ее"). Нарисуйте мне окно с пятком контролов на OSX и Вындоуз - и я поверю что это действительно "язык общего назначения". А до этого - да, штука интересная, но видимо на том же уровне и останется. Все эти "предикаты" на практике кончаются тем что Мухтар оказывается... собака
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.06.2014, 14:06
Цитата Сообщение от Igor3D Посмотреть сообщение
Где же аналог этого на Вашей вещи ? (вещь - она, поэтому "ее"). Нарисуйте мне окно с пятком контролов на OSX и Вындоуз - и я поверю что это действительно "язык общего назначения".
Tcl/Tk. Никакого ООП, простой, компактный, легкопереносимый (и таки перенесенный на Windows и OSX).

Цитата Сообщение от Igor3D Посмотреть сообщение
Все эти "предикаты" на практике кончаются тем что Мухтар оказывается... собака
На практике люди не только окошки рисуют, да.

btw, HTML: никакого ООП.
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
11.06.2014, 16:25
Цитата Сообщение от Igor3D Посмотреть сообщение
Так это запросто. Возьмем любой приличный фреймворк, напр Qt, а можно и wxWidgets (скромнее но тоже неплохо). Что это? Набор С++ классов (ООП). Используя его любой (даже знающий программирование поверхностно) может напр за день сбацать приличное кросс-платформенное UI - и еще очень много чего.
Т.е. как и предполагалось. Вместо нормальной задачи, которую можно было б решить и рассмотреть, явилось сверхпреложение померяться у кого биндинги к легаси шлаку круче. Ну биндинги так биндинги http://www.haskell.org/haskellwiki/WxHaskell.
Haskell
1
2
3
4
hello
  = do f    <- frame    [text := "Hello!"]
       quit <- button f [text := "Quit", on command := close f]
       set f [layout := widget quit]
остальные 4 из 5 контролов сами можете дорисовать.
Где же аналог этого на Вашей вещи ?
Провакационные вопросы только лишний раз подверждают, что ваше мировоззрение ограниченно только узкими рамками ООП. (А ведь за 25 лет много чего нового и полезного можно было узнать, а такое ощущение что последние 10 лет вы из ООП вообще не вылезали). Как выше уже сказали, в современном мире довольно много кроссплатформенности (ну если это только не поделка для дома или курсач какой) делается на HTML (и даже игры), и выглядит это на порядки приличнее и удобнее тех же Qt и оных.
... - и я поверю что это действительно "язык общего назначения"
ООПшники настолько ленивые что даже гуглить леняться. Наверно паттерн "Google" в банде четырех не описали. Вы б хоть почитали про то что вам показывают. А то ниче не предлагают, а гуглить ломает.
Все эти "предикаты" на практике кончаются тем
А мужики то не знали http://msdn.microsoft.com/ru-r... 10%29.aspx

Ну и все-таки. Нормальная задача будет или как? Биндинги не показатель крутости ООП. Они вообще ничего не показывают.

Добавлено через 52 минуты
Да. Не забудьте приложить код на ООП эквивалентный приведеным 4 строкам. Все же должны узреть мощи ООП.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.06.2014, 17:44
Цитата Сообщение от pycture Посмотреть сообщение
Почему меня должно смущать решение на технологиях, которые чуть ли не старее того же ООП?
ООП: Simula 67 год, Smalltalk 69 год.
ЯОН: Prolog 72 год, ML 73 год.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
11.06.2014, 18:40
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Prolog 72 год, ML 73 год.
Только идея и математический аппарат для этого был разработан за 30 лет до этого.
И в результате этого ML и Prolog практически не изменившись дожили до наших дней.
А ООП это такие макросы над процедурным программированием, в них ничего нет.
В 60-х и появились, угу, но языков с синтаксисом Simula и Smalltalk сейчас вроде как и нет.
С чего бы это?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.06.2014, 19:58
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
ООП: Simula 67 год, Smalltalk 69 год.
ЯОН: Prolog 72 год, ML 73 год.
LISP: 59-й год.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.06.2014, 20:00
Цитата Сообщение от pycture Посмотреть сообщение
Только идея и математический аппарат для этого был разработан за 30 лет до этого.
Без реализации идеи ничего не стоят.
Цитата Сообщение от pycture Посмотреть сообщение
В 60-х и появились, угу, но языков с синтаксисом Simula и Smalltalk сейчас вроде как и нет.
А причем тут синтаксис? Синтаксис может быть какой угодно.

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
LISP: 59-й год.
Его уже стали причислять к ЯОП?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.06.2014, 20:04
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Его уже стали причислять к ЯОП?
Что такое ЯОП?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.06.2014, 20:07
Пардон ЯОН.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.06.2014, 20:19
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
ЯОН
Язык Общего Назначения? А когда Лисп перестали причислять к таковым?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
11.06.2014, 21:12
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Без реализации идеи ничего не стоят
Учитывая, что в 30-х годах как бы компьютеров не было, желать реализацию именно в то время несколько странно, а как появились компы появились и реализации.
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
А причем тут синтаксис? Синтаксис может быть какой угодно
Язык определяет сознание. Или наоборот - не суть. Постоянная смена синтаксиса означает отсуствие общей идеи и кашу в головах тех кто эти идеи реализует. Соотвественно каша из головы изобретателей плавно перетекает в головы программеров.

Добавлено через 1 минуту
На питоне кстати хорошо заметно. Надо ж учудить что версии 2 и 3 одного и того же языка несовместимы. Зато ООП.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.06.2014, 22:07
Цитата Сообщение от korvin_ Посмотреть сообщение
А когда Лисп перестали причислять к таковым?
LISt Processing language — «язык обработки списков», какой он ЯОН?

Цитата Сообщение от pycture Посмотреть сообщение
Учитывая, что в 30-х годах как бы компьютеров не было, желать реализацию именно в то время несколько странно, а как появились компы появились и реализации.
Если мы говорим о Domain Specific language, DSL — «предметно-специфичный язык» и его представителе ML, который был создан для автоматического доказательства теорем(это если берем 1930), лямбда исчисления 58г.
При этом корректность программы не говорит об отсутствие багов.

Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его. Дональд Кнут.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
12.06.2014, 07:17
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
LISt Processing language — «язык обработки списков», какой он ЯОН?
Ты это серьезно? Печаль. LISP больше ЯОН, чем Пролог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2014, 07:17

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru