Вопрос

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

Я читал кое-что на эту тему в WWW и не нашел «точного демотиватора».

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


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

Это было полезно?

Решение

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

Каждая форма ООП имеет свои сильные и слабые стороны;его защитники и недоброжелатели;его сферы полезности и сферы бесполезности.В ООП нет ничего волшебного, что делало бы его парадигмой убийцы, и нет ничего инфернального, что делало бы его парадигмой убийцы (программистов).

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

Другие советы

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

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

  1. Изучите Смолток
  2. Изучите Эрланг
  3. Изучите схему

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

(Намекать:ОО во многом должно было больше напоминать модель вычислений Актера, но общепринятая ее интерпретация фактически является модификацией процедурной/структурированной модели.

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

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

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

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

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

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

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

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

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

file.write(data);

или

data.writeToFile(file);

или

OperatingSystem.write(file, data);

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

write(file, data);

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

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

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

Развенчание мифов ООП

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

http://cat-v.org есть отличная страница на Объектно-ориентированного программирования.

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

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

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

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

  • Любые и все статьи/видео/лекции, написанные Роб Пайк и Стив Йегге.Особый интерес представляет работа Йегге. Языковой тур «Вихрь».

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

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

как насчет Стива Йегга казнь в королевстве существительноедля Java-стиля OO

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top