Какая-то солидная критика ООП? [закрытый]

Я хочу попросить вас предоставить мне некоторые статьи (возможно, книги), которые вы, возможно, нашли очень убедительными, критикуя методологию ООП.

Я прочитал некоторые в WWW на эту тему, и я действительно не нашел "окончательного демотиватора".

Это не так много о моем личном отношении к ООП, но я действительно хотел бы иметь что-то конструктивное, строгое основание для любой дискуссии и просто абстрактное размышляющий.


вы также можете опубликовать некоторые оригинальные исследования, но, пожалуйста, будьте очень конструктивными (как мой личный запрос).

11 ответов


какая версия ООП? Оригинальное видение Алана Кея? Ублюдочная современная форма этого, которая полностью упускает суть и, таким образом, обременяет нас странным контролем доступа, переменными-членами и т. д.? Наследование? Прототипу? Композиционный ОП?

Я не могу указать вам на какие-либо книги или статьи, которые убили мой интерес к ООП как серебряной пуле (в отличие от одного из многих методов, которые я могу использовать, чтобы сохранить мои проекты живыми). Однако я могу указать на самую смешную критику конкретной марки ООП:классическая "казнь в Царстве существительных" Стива Егге.


Рик Хики Мы Уже Там ? - Деконструкция объектно-ориентированного времени был для меня открытием. Это самая логичная критика, с которой я сталкивался.


Если вы хотите критику программирования OO, вот что я бы рекомендовал:

  1. Узнать Smalltalk
  2. Выучить Эрланг
  3. Изучить Схемы

Как только вы это сделаете, у вас будет много критики общей интерпретации программирования OO.

(подсказка: OO был во многих отношениях предназначен для более близкого сходства с моделью вычислений актора, но общая интерпретация этого фактически является модификацией процедурная / структурированная модель)


проблема в том, что большинство людей не знают объектно-ориентированного программирования, поэтому многие проекты сосут.

прочитайте работы Скотта Эмблера, в том числе его (теперь довольно старый) Создание Приложений Объектов, Которые Работают. Это было открытием для многих людей.


возможно, не совсем то, что вы искали, но посмотрите на выпуск Jan/Feb журнала программного обеспечения IEEE: Объектно-Ориентированный Анализ: Это Просто Теория?. Основной вывод заключается в том, что OOA не обеспечивает хорошего соотношения затрат и выгод, поэтому используется плохо.

учитывая, что OOA не эффективно используется или поддерживается в "реальном мире", я подозреваю, что для более крупных проектов развития общая архитектура системы, развернутая объектная модель и класс hiearchy заканчиваются до быть неоптимальным и плохо понимаемым (реализованным) различными частями команды разработчиков. Вторая статья в том же журнале:--5-->четыре тенденции, ведущие к Java Runtime Bloat укажите на некоторые общие проблемы ООП, которые отвлекают от развертывания систем Java (ООП) большого объема. Наблюдения, сделанные в этой статье, возможно обратиться к наиболее разработанных приложений ООП.

Не воспринимайте это как OO bashing, это просто отражает, что в качестве программных практиков у нас есть довольно предстоит проделать большую работу по совершенствованию механизмов межличностного общения для передачи сложных и абстрактных моделей процессов.


когда вы определяете процесс на естественном языке. Вы используете предложения, где вы определяете теме кто будет делать действие на одном или нескольких объекты.

единственная точка фиксации -действие предикат предложения.

Я не думаю, что назначение действий объектам-хорошая идея. Есть только один глагол, но может быть несколько существительных.

в ООП вы можете написать файл по крайней мере в 3 пути:

file.write(data);

или

data.writeToFile(file);

или

OperatingSystem.write(file, data);

какой объект должен реализовывать метод? Тебе тоже нужно об этом подумать. Хотя в процедурном плане вы, вероятно, пишете

write(file, data);

и единственное, что вам нужно думать, это порядок операндов, который обычно не имеет значения.

(Ну файл и данные могут быть не лучшим примером, но вы, вероятно, видите точку)


вы действительно должны увидеть Мистер Б. Джейкобс:

мифы ООП развенчаны

(также известный как перепроданность ООП.)


http://cat-v.org имеет большую страницу на Объектно-Ориентированное Программирование.

большая часть страницы состоит из юмористических, но не очень информативных цитат. Однако в нижней части страницы есть несколько ссылок на статьи, бросающие вызов ООП. Они:

Если вас интересуют альтернативы объектно-ориентированному программированию:

  • cat-v.org. Со страницы "о программе":Cat-v.org хосты серии сайтов, посвященных разнообразным темы, которые разделяют своеобразную интеллектуальную перспективу, ставят под сомнение ортодоксальность и разжигают элитарность и высокие стандарты в темах от разработки программного обеспечения до политики, проходят мимо искусства и журналистики и всего остального интересного.

  • структура и интерпретация компьютерных программ. Специально обучает функциональному программированию. Доступно бесплатно онлайн здесь на продажу здесь. Я не могу рекомендовать это высоко достаточно. Это абсолютно революционно. Это изменит ход ваших мыслей.

  • любые и все сочинения/видео / лекции по Роб Пайк и Стив Yegge. Особый интерес представляет Yegge по Вихрь Языков Тур.


Я бы рекомендовал изучить другую парадигму программирования или прочитать аргументы pro для конкретных парадигм (http://www.info.ucl.ac.be / ~pvr / VanRoyChapter.pdf). Помимо ООП, я думаю, что наиболее широко используется функциональная парадигма (search f.e. "Почему функциональное программирование имеет значение"), но также посмотрите на другие. Когда вы начинаете смотреть на программирование с другой точки зрения, недостатки ООП начинают автоматически появляться.

простое упражнение: определение объектов IPerson, CMale и CFemale и реализуют методы "секс"и " размножение".


Как насчет Стива Йегге исполнение в царстве существительного для стиля java OO


Библия Гидеона объектно-ориентированных шаблонов дизайна, метко названная Шаблоны Проектирования. Одна из лучших книг по разработке программного обеспечения, которые я когда-либо читал.