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

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

16.05.2014, 16:35. Показов 21757. Ответов 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
Заблокирован
06.11.2016, 01:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shamil1 Посмотреть сообщение
Почти во всех языках программирования можно создавать пользовательские типы
"В огороде бузина, а в Киеве - дядько"©?
К чему Вы это сказали?

Добавлено через 43 секунды
Shamil1, Ответьте на вопрос: что является интерфейсом не абстрактного класса в С++?

Добавлено через 1 минуту
Цитата Сообщение от Shamil1 Посмотреть сообщение
то недостатки дизайна, а не недостатки ООП
Это недостатки ОО подхода к разработке дизайна

Добавлено через 4 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
у Вас "Короче, получается, что ВСЕ СВЯЗАНО СО ВСЕМ."
Кто-то не знаком с такими литературными приемами как "гипербола", "аллегория" и "сарказм"?
Нельзя же все буквально понимать
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,893
06.11.2016, 03:33
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
"В огороде бузина, а в Киеве - дядько"©?
К чему Вы это сказали?
Вы написали, что то, что метод класса может принимать аргументы пользовательских типов (классов) - это проблема ООП.
Функции могут принимать аргументы пользовательских типов. И это 1) не является недостатком, и 2) присуще не только ООП.

Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Это недостатки ОО подхода к разработке дизайна
При ОО подходе эти проблемы возникают не всегда, а только при некоторых вариантах дизайна. Значит, это проблемы дизайна, а не проблемы ОО.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.11.2016, 07:26
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Кто-то не знаком с такими литературными приемами как "гипербола", "аллегория" и "сарказм"?
Нельзя же все буквально понимать
Напишите минимальный, самодостаточный и компилируемый пример кода, иллюстрирующий проблему из сообщения: https://www.cyberforum.ru/post9724306.html

Чтобы в нем не было «гиперболы», «аллегории», «сарказма», демагогии в духе «а есть ли у абстрактного класса интерфейс» и прочей шелухи.

Для примера кода сформулируйте конкретную проблему, которая мешает жить.
0
Заблокирован
06.11.2016, 11:19
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы написали, что то, что метод класса может принимать аргументы пользовательских типов (классов) - это проблема ООП.
Функции могут принимать аргументы пользовательских типов. И это 1) не является недостатком, и 2) присуще не только ООП.
На что я же Вам сказал:
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Ну если ограничиваться только базовыми/встроенными типами и писать программы уровня "Халоу Ворлд" - то нет проблем. А если ты разрабатываешь (как я) систему искусственного разума, то быстро упираешься в ограничения и проблемы ООП
Но Вы все равно упорствуете

Добавлено через 1 минуту
Цитата Сообщение от Shamil1 Посмотреть сообщение
При ОО подходе эти проблемы возникают не всегда, а только при некоторых вариантах дизайна. Значит, это проблемы дизайна, а не проблемы ОО.
"При ОО подходе" проблемы с дизайном не возникают только в самых простых, вырожденных случаях ("если ограничиваться только базовыми/встроенными типами и писать программы уровня "Халоу Ворлд").
Так что проблема именно в ООП

Добавлено через 4 минуты
0x10, Т.е. Вы НАМЕРЕННО уклоняетесь от ответа на поставленный Вам вопрос и уводите обсуждение в сторону?

Если Вы забыли вопрос - вот он:

У НЕ абстрактного класса нет интерфейса?
Ответьте только "ДА" или "НЕТ". Больше мне ничего от Вас не надо.

Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Напишите
Не вижу смысла Вам что-то писать и отвечать. Так как Вы не отвечаете на вопросы
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.11.2016, 11:23
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Не вижу смысла Вам что-то писать и отвечать.
Взаимно.
0
Заблокирован
06.11.2016, 11:40
Цитата Сообщение от 0x10 Посмотреть сообщение
Взаимно.
Т.е. ответа на простой вопрос не будет?
И то, что Вы сказали хрень вы не признаете?
Ну тогда да. Общение с Вами я закончил.
Не вижу смысла общаться с человеком, когда его спрашиваешь об одном, а он соскакивает с им же поднятой темы и уводит тему в сторону

Добавлено через 5 минут
Господа!
Может кто-нибудь другой хочет высказаться раз уж 0x10 слился?
Краткое содержание в чем спич вышел.

Я по простому, "на пальцах", без наукообразия и затуманивания смысла сказал:
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А что такое «интерфейс» класса?
А это ни что иное как список заголовков PUBLIC методов.
На что 0x10, возразил:
Цитата Сообщение от 0x10 Посмотреть сообщение
Учите матчасть
Цитата Сообщение от 0x10 Посмотреть сообщение
интерфейс, с формальной точки зрения, — это просто чистый абстрактный класс
На что я возразил:
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
И не надо мне цитировать то, что Вы сами не понимаете.
Вы своими словами, на пальцах, объясните, что такое интерфейс класса в С++, как это сделал я
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А если класс не "чисто абстрактный", то у него и иникакого интерфейса нет?
И тут он слился. Стал уклоняться от ответа на вопрос, "переводить стрелки" на другие проблемы.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,893
06.11.2016, 13:28
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
На что я же Вам сказал:
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Но Вы все равно упорствуете
В моём ответе было "пользовательские типы". Зачем Вы повторяете свою цитату, в которой написано "если ограничиваться только базовыми/встроенными типами"?

Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
"При ОО подходе" проблемы с дизайном не возникают только в самых простых, вырожденных случаях ("если ограничиваться только базовыми/встроенными типами и писать программы уровня "Халоу Ворлд").
Безосновательное, ничем не подтверждённое утверждение.
0
Заблокирован
06.11.2016, 13:46
Цитата Сообщение от Shamil1 Посмотреть сообщение
Безосновательное, ничем не подтверждённое утверждение.
Ваше ничем не лучше
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
06.11.2016, 15:19
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А если ты разрабатываешь (как я) систему искусственного разума, то быстро упираешься в ограничения и проблемы ООП
искусственного разума... на ооп... дети играют игрушками прибитыми к полу.
0
1976 / 832 / 115
Регистрация: 01.10.2012
Сообщений: 5,054
Записей в блоге: 2
06.11.2016, 15:32
Возможно человек стал задумываться над вещами на которые раньше не обращал внимания. Напр, да, каждое полезное действие так или иначе создает "зависимость" и далеко не всегда безобидную. Сама по себе это полезная процедура осмысления, если бы не одно "но" - грубо говоря, "чувак борзый". Начал он вообще с того что объявил всех программистов "недо-инженерами". Попытки чего-то обсуждать неизменно "переходят на личности", т.к. человек не хочет понять что его мнение пока наивно и незрело, объяснять ему это бесполезно.

Коллеги, ну и смысл его трогать? Пусть поразмышляет и подумает еще N лет о том кто он на земле этой грешной. Потом может и поговорим (если научится себя вести)
2
Заблокирован
06.11.2016, 16:22
Цитата Сообщение от pycture Посмотреть сообщение
искусственного разума... на ооп.
Я сказал, что ООП для этого СОВСЕМ не годится.
Что утыкаешься в ряд проблем и ограничений.
Я не прав?

Добавлено через 2 минуты
Igor3D, Может начнете с простого вместо того, чтобы "переходить на личности"?
Не абстрактный класс имеет интерфейс или не имеет?
ДА?
или НЕТ?
Спасибо
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
06.11.2016, 16:33
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
ООП для этого СОВСЕМ не годится.
не годится. ооп на цепепе и его клонах много для чего не годится. риторический вопрос - на кой использовать инструменты которые не предназначены для решения задачи. или у вас там "модно молдежно"?
вы это.. не говорите на чём ир пишете. взрослые люди смеятся (не обязательно открыто) будут.
0
Заблокирован
06.11.2016, 17:07
pycture, Давайте все же "вернемся к нашим баранам"(с)
То бишь недостаткам объектно-ориентированного программирования в С++.
Вы согласны, что говорить, как пишут в книгах, что интерфейс класса, это, грубо говоря, просто список заголовков его методов - не верно?
Что говорить об инкапсуляции, когда у тебя классы-параметры и классы-пеоля описываются во вне, тоже не верно.
Хотя они фактически тоже являются частью интерфейса
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2016, 06:22
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
То бишь недостаткам объектно-ориентированного программирования в С++.
вы только время потеряете. ну узнали вы о недостатках. дальше то что? инструмент будете менять? так меняйте сразу - что старый не подойдет вам уже понятно (хотя вы може просто не умеете его готовить, что очень весьма вероятно)
что интерфейс класса, это, грубо говоря, просто список заголовков его методов
публичных методов. и? что не так?
Что говорить об инкапсуляции, когда у тебя классы-параметры и классы-пеоля описываются во вне, тоже не верно.
где описыватся ? пример в студию
0
Заблокирован
07.11.2016, 11:22
Цитата Сообщение от pycture Посмотреть сообщение
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Что говорить об инкапсуляции, когда у тебя классы-параметры и классы-пеоля описываются во вне, тоже не верно.
где описыватся ? пример в студию
Вовне. Т.е. вне класса.
Что тут непонятного?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2016, 13:30
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Вовне. Т.е. вне класса.
Что тут непонятного?
сферический цепепе в вакуме? ну опиши. наверно станешь первым у кого это получится
0
Заблокирован
07.11.2016, 14:05
Цитата Сообщение от pycture Посмотреть сообщение
ну опиши
Ну ладно. Раз Вы так умоляете (хотя ей Богу не пойму: что непонятного-то в том, что я написал выше?)
Самой простой случай.
Есть класс X.
В нем метод g(Y,Z)
Классы Y,Z описаны, естественно, вне класса X.
В теле g вызываются метод h(W) класса Y и метод j(U) класса Z.

Таким образом, класс X уже "завязался" на 4 класса: Y,Z,W,U.
А ведь это очень примитивный пример.
В реале все гораздо сложней и запутанней.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2016, 20:40
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Таким образом, класс X уже "завязался" на 4 класса: Y,Z,W,U.
и что? каким раком тут инкапсуляция? сильная связаность компонентов в твоей кривой архитектуре проекта никаким боком к ней не отностися.
0
Заблокирован
07.11.2016, 22:15
pycture, Ты мне не тыкай.
Я с тобой на брудершафт не пил.
И по возрасту тебе в отцы хожусь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2016, 22:15
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
319
Ответ Создать тему
Новые блоги и статьи
Транскрипция 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
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru