Объекты никогда? Ну, вряд ли когда-либо
В разделе VIEWPOINT Communications of ACM я нашел интересную статью под названием « Объекты никогда? Ну, вряд ли когда-либо» ». Это радикально другая перспектива, чем объекты сначала или объекты поздно. Он предлагает «предметы-никогда» или, может быть, «предметы-аспирантуру».
Автор рассказал об ООП и задал вопрос о том, как ООП используется в реальных средах программирования. Он считает, что ООП не является доминирующей моделью программирования. Например, он утверждает, что 70% программирования выполняется для встраиваемых систем, где ООП не очень подходит.
Когда некоторые профессора в университетах хотят поговорить о преимуществах ООП, они говорят о повторном использовании кода. Как еще один пример, он снова заявляет, что это не реальный случай в реальном мире. Повторное использование кода сложнее, чем заявлено в университетах:
Я утверждаю, что использование ООП не так распространено, как полагают большинство людей, что оно не так успешно, как утверждают его сторонники, и, следовательно, его центральное место в учебной программе CS не оправдано.
Мне интересно знать, как люди в переполнении стека думают об этом? Является ли ООП доминирующей моделью программирования с точки зрения программистов?
Если я должен выбрать / изучить / использовать только один подход, это ООП или нет? Почему?
DiskBrake extends Brake
что ООП не годится для автомобиля, потому что в «реальном мире» эта связь реализуется «сетевыми сигналами и протоколами шины» - что, какDiskBrake implements BrakeInterface
?! Может быть, это мой собственный << 43-летний опыт, но примеры для меня совершенно не подтверждают утверждение автора.Ответы:
Если вы интересуетесь практическим программированием , то материалы ACM и тому подобное - это последний источник, который вы хотите прочитать. Это часто псевдонаучные публикации, не имеющие применения в реальном мире. Это довольно часто неортодоксальные мнения, сделанные для рекламы, для автора, чтобы дифференцировать себя от толпы и продвигать свою собственную личность.
Я склонен не соглашаться с вашей точкой зрения. ООП широко распространен и работает просто отлично. По количеству ООП-проектов, вероятно, превзошли разработки, сделанные с помощью других стратегий (давайте поговорим о современном времени, 15-20 лет).
Однако ООП - это не серебряная пуля. Это работает для некоторых разработок, не работает для других. Как и любой другой подход.
Но одну вещь, которую я должен упомянуть, это то, что учебная программа должна передавать знания различных подходов. Если это на основе ООП, это неправильно. Если это основано на FP, это неправильно. Это должно охватывать их всех или не затрагивать эту тему в целом.
PS Зачем заботиться о том, что доминирует, а что нет? Просто возьмите то, что подходит для проекта, и оставьте цифры «исследователям».
источник
Если ООП является единственным парадигма, которую вы знаете, возможно, вам следует узнать больше. Но на самом деле, что на самом деле означает ООП? Это значит Java или C ++? Это значит Smalltalk? Означает ли это устанавливаемые значения слотов и замыканий? (Привет, Схема!) Это означает отправку сообщения? (Привет, Эрланг!)
Короче говоря, это неинтересный вопрос. "ОО полезен ?" это лучший вопрос. И, ну, похоже, так. (Конечно, это для меня.)
источник
Где все разработчики делают эти "70% программирования"? Из всех известных мне разработчиков менее 1% работают над встраиваемыми системами.
Итак, у нас есть 3 варианта:
если я не увижу некоторые доказательства того, что варианты 1 или 2 действительно верны, я перейду к варианту 3.
(Кстати, я не считаю современную разработку для мобильных устройств встроенным программированием, а мобильная разработка часто является ОО, ведь Apple заставляет вас использовать * Objective * C для разработки для iPhone)
источник
У меня нет фактов, чтобы следить за этим, но ООП не является доминирующей моделью программирования. Представьте себе все эти собственные приложения, разработанные кем-то, кто прошел базовый визуальный курс или занимался макропрограммированием в Excel.
Многие приложения просто выполняют императивное программирование, где вся логика собрана в одном классе или представлении. Это, вероятно, подавляющее большинство внутренних простых приложений, работающих на всех предприятиях.
В этом нет ничего плохого, есть несколько способов решить одну и ту же проблему. Некоторые лучше подходят, чем другие.
Также, как вы указали, ООП не подходит для всех сценариев. Есть и другие модели.
источник
Независимо от того, является ли ООП доминирующей моделью программирования, не имеет значения, проще говоря, разные модели подходят для разных случаев.
Там нет серебряной пули.
О чем спорит Моти Бен Ари, так это академическое утверждение, которое уже бессмысленно. Тем не менее, он заявляет, что никогда не находил, что ООП «имеет смысл», это очевидно для тысяч разработчиков и разработчиков программного обеспечения и используется во многих системах ...
Но, на самом деле, смысл моего ответа заключается в следующем: что хорошего в том, чтобы утверждать, что та или иная модель является доминирующей или нет, является ли это хорошим обоснованием для слепого использования? Конечно нет.
источник
На самом деле это сложный вопрос, чтобы ответить надежно. Самая большая причина - люди вроде меня, которые работают в пользовательских, собственных приложениях, где код никогда не покидает наше здание. Мы используем ОО здесь? Я не говорю. Сколько других программистов имеют подобные работы? Они тоже не говорят. У нас есть сайты вакансий, но не все вакансии публикуются, и не все публикации предназначены для реальной работы, в отличие от вербовщиков, пытающихся собрать списки имен.
Даже если бы я сказал, что мы используем ОО, где я работаю, означает ли это традиционное определение из связанной статьи: Объекты, Классы, Наследование? Или это означает, что я использую объекты в первую очередь как средство организации кода? Или это означает, что я действительно просто программирую на интерфейсы и почти не использую наследование? Я все еще не говорю, но какой из них действительно считается ОО?
Даже бессмысленно спрашивать, полезен ли ОО, пока не будут даны ответы на вышеприведенные вопросы, не говоря уже о доминировании.
источник
Конечно, это так, потому что это последнее модное слово, к которому привязалось руководство. Он также предлагает лучшую инкапсуляцию и абстракцию, чем императивное программирование, поэтому я думаю, что переход от следующего к следующему может занять даже больше времени, чем обязательный для выполнения.
Если вы собираетесь изучать только один, вы должны выбрать другое поле.
Вы должны узнать о типах, инкапсуляции и всех других преимуществах ООП, а затем научиться выполнять те же самые вещи, используя функциональный стиль программирования.
источник
ООП определенно является одной из наиболее доминирующих моделей программирования в реальном мире.
Посмотрим правде в глаза, даже люди, которые разрабатывают цифровое оборудование, сами дизайнеры чипов, переходят на дуэт SystemVerilog и SystemC. Это объектно-ориентированные языки программирования.
Где ООП не будет использоваться? Хорошо, если вы программируете драйверы устройств, трудно представить, зачем вам нужно общее программирование или множественное наследование, ИЛИ если вы используете методы функционального программирования ИИ, это значительно облегчает задачу. Существует множество других ситуаций, достаточно сказать, что ООП - довольно мощное место в мире олигополистического программирования.
источник
Я бы сказал нет.
Я понимаю, что существует огромное количество кода, написанного с использованием «объектно-ориентированного» языка, но, как правило, я считаю, что код просто процедурный, заключенный в классы. (не то чтобы это обязательно плохо). Код, который я видел, написан так, чтобы быть более понятным на этих языках, как правило, представляет собой ужасную путаницу зависимостей между классами, которые обычно не поддерживаются.
Предполагается, что ОО - это передача сообщений между полностью автономными объектами, и мы видим это в сегодняшнем коде, но на гораздо более детальном уровне - то есть мы видим, что эти объекты реализованы как dll или сборки или объекты COM. «Компоненты» я слышал, как они описаны.
поэтому я думаю, что на самом деле не имеет значения, используется ОО или нет - если код поддерживается в течение его жизни, может использоваться повторно в той степени, в которой он был разработан, и быстро разрабатывается, тогда мне все равно если это чисто процедурный или полуобъектно ориентированный или полностью ОО. Я сомневаюсь, что кто-либо может сказать вам, является ли преобладающий стиль каким-либо из них, но я рискну предположить, что процедурный стиль будет самым распространенным, даже если он будет разделен на классы вместо функций.
источник
Я думаю, что важно дифференцировать решение, полученное путем применения объектно-ориентированного подхода и решения, реализованного с использованием объектно-ориентированной парадигмы. Мое мнение о хорошем объектно-ориентированном программном обеспечении - объединить оба решения. Если вы мыслите объектами и уважаете определения и взаимодействия объектов, и ваша проблема может быть адаптирована для использования этой структуры, тогда у вас будет гибкий и надежный код. Но если вы используете объекты для решения кода с использованием процедурной парадигмы, вы в конечном итоге получите несколько неприятных миксов, которые не получат преимущества от профессионалов Objects.
Я действительно предпочитаю, чтобы мой код был объектно-ориентированным, и я пришел к выводу, что поначалу было бы немного неприятнее создавать хорошую структуру, но когда я имею дело с гибкостью и требованиями клиента к флэш-памяти сегодня, я думаю, что это стоит усилия.
источник
Я не претендую на то, чтобы знать точные цифры или даже делать грубые предположения, но есть много программных проектов, которые не включают ООП. Я работаю с промышленными роботами. Программы, как правило, являются довольно простым и понятным процедурным кодом. Фактическая операционная система робота даже более того.
Многие из наших «инструментов», которые мы используем, основаны на ООП, но они работают на ПК, а не на контроллере робота. К ним относятся редакторы, симуляции и утилиты.
источник