ООП является доминирующей моделью программирования в реальном мире?


20

Объекты никогда? Ну, вряд ли когда-либо

В разделе VIEWPOINT Communications of ACM я нашел интересную статью под названием « Объекты никогда? Ну, вряд ли когда-либо» ». Это радикально другая перспектива, чем объекты сначала или объекты поздно. Он предлагает «предметы-никогда» или, может быть, «предметы-аспирантуру».

Автор рассказал об ООП и задал вопрос о том, как ООП используется в реальных средах программирования. Он считает, что ООП не является доминирующей моделью программирования. Например, он утверждает, что 70% программирования выполняется для встраиваемых систем, где ООП не очень подходит.

Когда некоторые профессора в университетах хотят поговорить о преимуществах ООП, они говорят о повторном использовании кода. Как еще один пример, он снова заявляет, что это не реальный случай в реальном мире. Повторное использование кода сложнее, чем заявлено в университетах:

Я утверждаю, что использование ООП не так распространено, как полагают большинство людей, что оно не так успешно, как утверждают его сторонники, и, следовательно, его центральное место в учебной программе CS не оправдано.

Мне интересно знать, как люди в переполнении стека думают об этом? Является ли ООП доминирующей моделью программирования с точки зрения программистов?

Если я должен выбрать / изучить / использовать только один подход, это ООП или нет? Почему?


26
«70% программ выполняется для встраиваемых систем»? Это для проекта, для разработчика или для LOC? У меня такое ощущение, что 70% «всех програмингсов» выполняется в Excel. Даже не программисты программируют электронные таблицы.
LennyProgrammers

1
@ Lenny222: Если хотите, я думаю, это 70% распространяемых копий программ во встроенном программном обеспечении или что-то в этом роде. Теперь некоторые встроенные вещи сделаны в C ++, и часто это взломанная версия, которая оставляет C и объекты, поэтому кажется неискренним утверждать, что встроенный никогда не является объектно-ориентированным.
Дэвид Торнли

9
Я думаю, что доминирующей моделью программирования уже давно и будет большой шарик грязи.
whatsisname

В этой статье проводится странное различие между «классами» и «подсистемами», которое я даже отдаленно не понимаю. В нем говорится о том, DiskBrake extends Brakeчто ООП не годится для автомобиля, потому что в «реальном мире» эта связь реализуется «сетевыми сигналами и протоколами шины» - что, как DiskBrake implements BrakeInterface?! Может быть, это мой собственный << 43-летний опыт, но примеры для меня совершенно не подтверждают утверждение автора.
OJFord

2
Теперь ссылка находится за платным доступом. В любом случае, ООП в некоторой степени недооценено и переоценено. Но давайте просто скажем, что «большинство» новых программ там, вероятно, написаны в некотором стиле, вдохновленном Java, с использованием методов получения и установки, а также классов с именем SessionManager
Charles Salvia

Ответы:


19

В разделе VIEWPOINT по коммуникациям ACM

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

Я утверждаю, что использование ООП не так распространено, как полагают большинство людей, что оно не так успешно, как утверждают его сторонники, и, следовательно, его центральное место в учебной программе CS не оправдано.

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

Однако ООП - это не серебряная пуля. Это работает для некоторых разработок, не работает для других. Как и любой другой подход.

Но одну вещь, которую я должен упомянуть, это то, что учебная программа должна передавать знания различных подходов. Если это на основе ООП, это неправильно. Если это основано на FP, это неправильно. Это должно охватывать их всех или не затрагивать эту тему в целом.

PS Зачем заботиться о том, что доминирует, а что нет? Просто возьмите то, что подходит для проекта, и оставьте цифры «исследователям».


3
Это исследовательские работы в области компьютерных технологий, которые еще не получили широкого распространения. Академиям требуется много лет, чтобы отфильтровать их в реальный мир, хотя это происходит регулярно.
Orbling

4
@DeveloperArt: Обратите внимание, что автор статьи имеет 43-летний опыт разработки программного обеспечения!
Эсан

6
Алан Кей добавляет комментарий, по адресу cacm.acm.org/magazines/2010/9/… - «Напротив, я никогда не думал, что большинство систем, которые называют себя« объектно-ориентированными », даже близко к моему значению, когда я изначально придумал срок.' - что косвенно связано с моим постом - "ОО? Чей ОО?"
Фрэнк Шиарар

9
@Developer Art: Что меня (немного) радует в вашем посте, так это часть «исследователей». Эти проклятые академики. Что они когда-либо делали для нас? Ой. Лямбда - исчисление, закупорки, объекты, функциональное программирование, ... Но другое , чем то , что уже академики когда- либо делали для нас?
Фрэнк Шиарар

4
-1 Исследователям информатики нужно напугать? ACM публикует лженауку? Шутки в сторону?
jprete

17

Если ООП является единственным парадигма, которую вы знаете, возможно, вам следует узнать больше. Но на самом деле, что на самом деле означает ООП? Это значит Java или C ++? Это значит Smalltalk? Означает ли это устанавливаемые значения слотов и замыканий? (Привет, Схема!) Это означает отправку сообщения? (Привет, Эрланг!)

Короче говоря, это неинтересный вопрос. "ОО полезен ?" это лучший вопрос. И, ну, похоже, так. (Конечно, это для меня.)


6
+1 Я подозреваю, что на практике ООП перестало означать что-либо кроме «хорошего способа написания кода, использующего вещи, называемые объектами».
Ларри Коулман

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

Возможно, автору следует почитать Уильяма Кука и Матиаса Феллайзена, которые много времени говорят о том, что есть, а что нет в программировании.
Фрэнк Шиарар

9

Где все разработчики делают эти "70% программирования"? Из всех известных мне разработчиков менее 1% работают над встраиваемыми системами.

Итак, у нас есть 3 варианта:

  1. Я уникален, и все ваши друзья действительно занимаются встроенным программированием
  2. В подвале где-то заняты армии разработчиков, которые делают эти 70%
  3. эта статистика составлена ​​и статья чушь

если я не увижу некоторые доказательства того, что варианты 1 или 2 действительно верны, я перейду к варианту 3.

(Кстати, я не считаю современную разработку для мобильных устройств встроенным программированием, а мобильная разработка часто является ОО, ведь Apple заставляет вас использовать * Objective * C для разработки для iPhone)


FWIW, я занял несколько секунд и придумал полдюжины возможных мер для «70% программирований». Автор вполне мог бы использовать седьмой. (Кроме того, встроенные программисты существуют, они просто не собираются зависать в одних и тех же местах и ​​часто считают себя инженерами-электриками или что-то в этом роде, а не программистами.)
Дэвид Торнли

1
@ Дэвид Торнли - ложь со статистикой все еще лжет, автор ясно утверждает, что подавляющее большинство программирования в мире сегодня для встраиваемых систем - и я говорю, что это всего быки # @ $ t, я уверен, что я могу изобрести мера, показывающая, что большинство программ в мире выполняется в той комнате, в которой я сейчас нахожусь (которой я делюсь только с одним другим разработчиком) - но любой вывод, который я строю на основе этого наблюдения, будет столь же бесполезным, как и выдуманная мера ,
Nir

1
Я встроенный парень. Я видел несколько сообщений о том, что около 99% производимых / поставляемых процессоров предназначены для встроенных систем (если это действительно необходимо, я могу вернуться и процитировать отчет (ы)). Сказав это, я уверен, что далеко не 70% всего программирования делается для встраиваемых систем. Я думаю, что около 50% всех поставляемых процессоров являются 4-битными и 8-битными, но они, вероятно, составляют 0,1% (или менее) от всего программирования. Как сказал Дэвид, есть много способов придумать «70% программирования». Я не удивлюсь, если число будет 20-25%.
Радиан

+1 для «лжи со статистикой все еще лжет»; так верно, так верно ...
Донал Феллоуз

8

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

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

В этом нет ничего плохого, есть несколько способов решить одну и ту же проблему. Некоторые лучше подходят, чем другие.

Также, как вы указали, ООП не подходит для всех сценариев. Есть и другие модели.


С другой стороны, может возникнуть вопрос, что необходимо описать как доминирующую модель. Это «количество приложений, разработанных с моделью X», или это «количество кода, разработанного с моделью X»? В любом случае, я все еще думаю, что ООП не будет доминирующей моделью.
Мортен

1
+1 Для того, чтобы выдвинуть мысль, что, хотя ООП может быть почти повсеместно распространен среди обученных специалистов, отрасль во всем мире не совсем это отражает, и существует множество прямых обязательных кодов.
Orbling

5

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

Там нет серебряной пули.

О чем спорит Моти Бен Ари, так это академическое утверждение, которое уже бессмысленно. Тем не менее, он заявляет, что никогда не находил, что ООП «имеет смысл», это очевидно для тысяч разработчиков и разработчиков программного обеспечения и используется во многих системах ...

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


Если многие люди утверждают, что используют одну модель и не делают, это проблема. Вопрос такой же распространенный, как кажется, а не о том, чтобы быть доминирующим / лучше.
Джефф

4

На самом деле это сложный вопрос, чтобы ответить надежно. Самая большая причина - люди вроде меня, которые работают в пользовательских, собственных приложениях, где код никогда не покидает наше здание. Мы используем ОО здесь? Я не говорю. Сколько других программистов имеют подобные работы? Они тоже не говорят. У нас есть сайты вакансий, но не все вакансии публикуются, и не все публикации предназначены для реальной работы, в отличие от вербовщиков, пытающихся собрать списки имен.

Даже если бы я сказал, что мы используем ОО, где я работаю, означает ли это традиционное определение из связанной статьи: Объекты, Классы, Наследование? Или это означает, что я использую объекты в первую очередь как средство организации кода? Или это означает, что я действительно просто программирую на интерфейсы и почти не использую наследование? Я все еще не говорю, но какой из них действительно считается ОО?

Даже бессмысленно спрашивать, полезен ли ОО, пока не будут даны ответы на вышеприведенные вопросы, не говоря уже о доминировании.


2

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

PS2: Если я должен выбрать / изучить / использовать только один подход, это ООП или нет? Почему?

Если вы собираетесь изучать только один, вы должны выбрать другое поле.

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


+1 за комментарий о выборе другого поля, если вы планируете изучить один подход. Это безумно.
Мат Надрофски

1

ООП определенно является одной из наиболее доминирующих моделей программирования в реальном мире.

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

Где ООП не будет использоваться? Хорошо, если вы программируете драйверы устройств, трудно представить, зачем вам нужно общее программирование или множественное наследование, ИЛИ если вы используете методы функционального программирования ИИ, это значительно облегчает задачу. Существует множество других ситуаций, достаточно сказать, что ООП - довольно мощное место в мире олигополистического программирования.


1

Я бы сказал нет.

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

Предполагается, что ОО - это передача сообщений между полностью автономными объектами, и мы видим это в сегодняшнем коде, но на гораздо более детальном уровне - то есть мы видим, что эти объекты реализованы как dll или сборки или объекты COM. «Компоненты» я слышал, как они описаны.

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


0

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

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


0

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

Многие из наших «инструментов», которые мы используем, основаны на ООП, но они работают на ПК, а не на контроллере робота. К ним относятся редакторы, симуляции и утилиты.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.