Некоторая твердая критика ООП?
Я хочу попросить вас предоставить мне некоторые статьи (возможно, книги), которые, возможно, вы нашли очень убедительной критикой методологии ООП.
Я прочитал некоторые в WWW по этой теме, и я действительно не нашел "окончательного демотиватора".
Это не очень касается моего личного отношения к ООП, но я действительно хотел бы иметь что-то конструктивное, строгую основу для любого обсуждения и просто абстрактного мышления.
Вы также можете опубликовать некоторые оригинальные исследования, но, пожалуйста, будьте очень конструктивными (как мой личный запрос).
Ответы
Ответ 1
Какая версия ООП? Алан Кей оригинальное видение? Обманутая современная форма, которая полностью игнорирует точку и, таким образом, обременяет нас странным контролем доступа, переменными-членами и т.д.? Наследование-ориентированный? Прототип на основе? Композиционный ООП?
Каждая форма ООП имеет свои сильные стороны и ее слабости; его сторонников и их противников; его областях полезности и ее областях бесполезности. Там нет ничего волшебного в ООП, который делает его "Парадигмой убийцы", и нет ничего инфернального в этом, что делает его "Параллелью" ( "Программистов" ).
Я не могу наказать вас ни в каких книгах или статьях, которые убили мой интерес к ООП в качестве Серебряной пули (в отличие от одного из многих методов, которые я могу использовать, чтобы сохранить жизнеспособность моих проектов). Я могу указать на самую смешную критику конкретного бренда ООП: Стив Йегге классический "Исполнение в Королевстве существительных" .
Ответ 2
Рик Хики Мы еще там? - Деконструкция объектно-ориентированного времени стала для меня открытием для глаз. Это самая логичная критика OO, с которой я столкнулся.
Ответ 3
Если вы хотите критиковать программирование OO, вот что я бы рекомендовал:
- Узнать Smalltalk
- Узнать Erlang
- Узнать схему
Как только вы это сделаете, у вас будет много критики в отношении общей интерпретации программирования OO.
(Подсказка: OO во многом предназначалось для более близкого сходства с моделью вычислений Actor, но общая интерпретация ее фактически является модификацией процедурной/структурированной модели)
Ответ 4
Проблема в том, что большинство людей действительно не знают объектно-ориентированного программирования, поэтому многие проекты SUCK.
Прочитайте работы Скотта Амблера, в том числе его (теперь довольно старого) Приложения для объектов здания, которые работают. Это было замечательно для многих людей.
Ответ 5
Возможно, не совсем то, что вы искали, но посмотрите на журнал журнала IEEE в январе/феврале: Объектно-ориентированный анализ: это просто Теория?. Основной вывод состоит в том, что OOA не обеспечивает хорошее соотношение затрат и выгод, поэтому плохо используется.
Учитывая, что OOA не используется эффективно или не поддерживается в реальном мире, я подозреваю, что для крупных проектов разработки общая архитектура системы, развернутая объектная модель и класс hiearchy оказались недостаточно оптимальными и плохо понятными (реализованными) различные части команды разработчиков. Вторая статья в том же журнале: Четыре тенденции, ведущие к Java Runtime Bloat, указывают на некоторые распространенные проблемы ООП, которые мешают развертыванию высокообъемной Java ( ООП). Замечания, сделанные в этой статье, вероятно, применимы к наиболее высокоархивированным приложениям ООП.
Не воспринимайте это как избиение OO, он просто отражает, что в качестве практиков программного обеспечения мы прилагаем немало усилий для разработки более совершенных механизмов общения от человека к человеку для передачи очень сложных и абстрактных моделей процессов.
Ответ 6
Вы действительно должны увидеть Mr. Б. Джейкобс:
Опущенные мифы OOP
(также известный как OOP Перепродан.)
Ответ 7
Когда вы определяете процесс на естественном языке. Вы используете предложения, в которых вы определяете тему, которая будет выполнять действие над одним или несколькими объектами.
Единственная фиксированная точка - это действие, предикат предложения.
Я не думаю, что назначение действий объектам - хорошая идея.
Существует только один глагол, но может быть несколькими существительными.
В ООП вы можете записать файл по крайней мере тремя способами:
file.write(data);
или
data.writeToFile(file);
или
OperatingSystem.write(file, data);
Какой объект должен реализовать метод? Вам тоже нужно подумать об этом.
В процедурной форме вы, вероятно, пишете
write(file, data);
И единственное, что вам нужно подумать, это порядок операндов, который обычно не имеет значения.
(Файл и данные скважины могут быть не лучшим примером, но вы, вероятно, видите точку)
Ответ 8
http://cat-v.org имеет отличную страницу Объектно-ориентированное программирование.
Большая часть страницы состоит из юмористических, но не очень информативных цитат. Однако в нижней части страницы есть ряд ссылок на статьи, оспаривающие ООП. Это:
Если вас интересуют альтернативы объектно-ориентированному программированию:
-
cat-v.org. На своей странице "about": Cat-v.org размещает серию сайтов, посвященных различным предметам, которые разделяют индивидуальную интеллектуальную перспективу, ставят под сомнение православие и стимулируют элитарность и высокие стандарты по темам от разработки программного обеспечения до политики, проходя мимо искусства и журналистики и ничего интересного.
-
Структура и интерпретация компьютерных программ. В частности, преподаётся функциональное программирование. Здесь можно бесплатно найти здесь, для продажи здесь. Я не могу рекомендовать это достаточно высоко. Это абсолютно революционно. Это изменит ваш образ.
-
Любые и все записи/видео/лекции от Rob Pike и Steve Yegge. Особый интерес представляет Yegge Whirlwind Languages Tour.
Ответ 9
Я бы рекомендовал изучить другую парадигму программирования или прочитать аргументы pro для определенных парадигм (http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf). Помимо ООП, я думаю, что наиболее широко используется функциональная парадигма (поиск f.e. "Зачем важно программирование" ), но и взглянуть на другие. Когда вы начинаете смотреть на программирование с другой точки зрения, ошибки OOP начинают появляться автоматически.
Простое упражнение: определите объекты IPerson, CMale и CFemale и реализуйте методы "секс" и "воспроизводите".
Ответ 10
hows about steve yegge исполнение в царстве существительного
для стиля Java OO
Ответ 11
Гидеонская библия объектно-ориентированных шаблонов дизайна, точно названная Шаблоны проектирования. Одна из лучших книг по дизайну программного обеспечения, которые я когда-либо читал.