Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Почему объектно-ориентированное программирование провалилось?

Прошло ровно 10 лет со времени публикации известной и классической в мире программирования статьи, написанной Ричардом Гэбриелом (Richard Gabriel), название которой стало уже нарицательным и вынесено в заголовок моей статьи. Статья стала настолько острой и злободневной для своего времени, что вызвала бурный всплеск обсуждений в сообществе программистов, целый ряд известных программистов включился в открытую полемику с автором, от редакции известнейшего американского программистского журнала Dr. Dobb’s Journal до таких ученых как Эндрю Таненбаум (Andrew Tanenbaum).

Автор этой нашумевшей статьи, доктор компьютерных наук Стэнфорда, старший архитектор по разработке ПО сначала Sun, а потом и IBM, Ричард Гэбриел никогда не скрывал своего скептического отношения к парадигме ООП. В 2002 году, по прошествии 2 лет после первоначальной публикации своей критической статьи автора пригласили выступить, теперь уже живьем и перед большой аудиторией, – и изложить свои критические взгляды на ежегодной конференции OOPSLA (центральная конференция IT-специалистов по объектно-ориентированным языкам и методологиям разработки ПО). И, чтобы по старой доброй американской традиции превратить это в горячее шоу, в качестве его оппонента одновременно пригласили Гая Стила (Guy Steele) , отца-разработчика языка Scheme, крупнейшего специалиста-теоретика по ООП, авторитет которого в американской академической среде непререкаем.

Чтобы максимально отразить позиции выступающих, их решили усилить ещё двумя выступающими. В качестве “анти-объектника” дополнительно пригласили Пола Грэма (Paul Graham) , крупнейшего специалиста по Lisp, автора многочисленных книг и стандартизаций Lisp, кстати, согласно Википедии, в 1995 году создавшего вместе с Робертом Моррисом первое в мире web-приложение – Viaweb, которое затем выкупила у них Yahoo (как мы все знаем, Роберт Моррис (Robert Morris), близкий друг и коллега Пола, на этом достижении не остановился, и написал, пожалуй, самый знаменитый червь в истории интернета, но это уже совсем другая история). В стан объектников пригласили Джеймса Ноубла (James Noble), автора одних из первых книг и работ по теории ООП. Многие участники вспоминают, что конференция этого года надолго запомнилась им по тому уровню обсуждения, которое завязалось тогда в этой публичной “интеллектуальной дуэли” фактически диаметрально разных школ программирования.

Но факт остаётся фактом: сторона, представлявшая объектно-ориентированное программирование, во время открытой дискуссии с противниками под смех зала даже запуталась в своих же концепциях. Люди вспоминают, что у всех создалось стойкое впечатление, что аргументация Lisp’еров была куда убедительней и последовательней, чем сторонников ООП (любопытно, что главным докладчиком по ООП был создатель языка Scheme – главного современного диалекта того же Lisp’а).

Пол Грэм утверждал, что половина всех концепций ООП являются скорее плохими, чем хорошими, в связи с чем он искренне сочувствует ООП-программистам, тогда как вторая половина от оставшихся концепций и вовсе не имеет никакого отношения к ООП, с которыми их почему-то постоянно ассоциируют. Например, он говорит: “В восьмидесятых годах метод повторного использования каким-то неясным мне образом связали с объектно-ориентированным программированием, и сколь угодно многочисленные имеющиеся доказательства обратного, по-видимому, уже не избавят этот метод от клейма ООП. Хотя иногда объектно-ориентированный код годится для повторного использования, таким его делает вовсе не объектно-ориентированность, а программирование в стиле "снизу-вверх". Возьмём, например, библиотеки: их можно подгружать и повторно использовать сколько угодно, потому что, по сути, они представляют собой отдельный язык. И при этом совсем неважно, написаны ли они в объектно-ориентированном стиле или нет.”

Другой крупный критик ООП – это известный специалист по программированию Александр Степанов, который, работая в Bell Labs, участвовал в создании C++ вместе c Бьерном Страуструпом (Bjarne Stroustrup), а впоследствии, уже после приглашения в HP Labs, написал Standard Template Library (STL). Александр Александрович полностью разочаровался в парадигме ООП; в частности, он пишет: “Я уверен, что парадигма ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, только тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой. Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы вы приходите к тому, что оказываетесь в состоянии сформулировать четкие и непротиворечивые интерфейсы. Именно из-за этой неразберихи в ООП так популярен рефакторинг – из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда только задумали её спроектировать в ООП-стиле”. Ричард Столлман (Richard Stallman) также известен своим критическим отношением к ООП, особенно он любит шутить насчет того мифа объектников, что ООП “ускоряет разработку программ”: “Как только ты сказал слово "объект", можешь сразу забыть о модульности”.

Томас Поток (Thomas Potok) из Oak Ridge National Laboratory даже провел масштабное прикладное исследование, которое продемонстрировало, что нет никакой заметной разницы в производительности между программистами, работающими в стиле ООП и в обычном процедурном стиле программирования.

Почти все пункты своего выступления и претензии к ООП как к парадигме Ричард Гэбриел позже заново систематизировал с учетом имевшего место широкого обсуждения и критики, после чего все было сведено в брошюру, которую Ричард выложил в свободный доступ вместе с поясняющими ее слайдами (очень краткое содержание его выступления можно найти и в переводе на русский язык). После этого очень сильного выступления у него появилось много последователей, которые попытались систематизировать все мифы и дефекты ООП в своих многочисленных статьях и работах. К сожалению, вероятно, из-за того, что как я уже сказал выше, ответное выступление объектников “Почему ООП не провалилось” получилось несколько скомканным из-за интеллектуального натиска Lisp’еров; выступавшие так и не оформили впоследствии свою позицию преимуществ ООП в развернутом виде. В интернете сохранилось лишь краткое содержание-конспект их выступления, которое также существует как в английской оригинальной версии, так и в русском переводе.

Ричард Гэбриел неожиданно сравнивает нынешнюю ситуацию с ООП с провалом эфиродинамики в физике начала 20 века, когда, в сущности, произошла “тихая революция”. Молодые сторонники теории относительности, массово пришедшие в номенклатуру университетов, тогда постепенно захватили власть в области преподавания физики, навязав свою, столь любимую интеллектуалами того времени, теорию относительности широким массам физиков. На самом деле, в то время имелись как положительные эксперименты и опыты, подтверждавшие существование эфира, так и отрицательные. Первые были полностью проигнорированы и исключены административными мерами из всех учебников физики, после чего эфир был незаслуженно “закрыт” и отправлен в отставку, и вот уже нынешнее поколение студентов-физиков даже и не знает о тех весьма успешных опытах по обнаружению эфирного ветра. “Ну и где мы теперь, с этой вашей красивой теорией относительности, кто-нибудь может мне назвать хоть какие-то реально-практические результаты её применения в вашей обыденной жизни после целого века её ковыряния и массового насаждения?” – как всегда язвительно вопрошает Гэбриел.

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

Только время покажет, кто в итоге окажется правым, а кто в этой горячей методологической дискуссии искренне заблуждался. Но в любом случае, лично я за то, чтобы у нас всегда оставались возможности для альтернативных взглядов, пусть даже отличных от выбора большинства (как провокационно замечают американцы в таких случаях, “лемминги не могут ошибаться”). И да, будьте смелее в своих поисках и размышлениях, не нужно бояться, если в очередной раз в истории вдруг окажется, что… “король-то голый”!

Blogerator.ru

Комментарии

Страницы комментариев: 1 :: 2 :: 3 :: ... :: 148 :: следующая

Z, Сб 07 мар 2015 23:22:15:
"кто-нибудь может мне назвать хоть какие-то реально-практические результаты её применения в вашей обыденной жизни после целого века её ковыряния и массового насаждения?”" - Что за бред? Полно результатов, хотя бы GPS позиционирование. И про ООП - бредятина для дилетантов. ООП - это всего лишь одна из абстракций получившая весьма широкое распространение в современном программировании, и с этим нельзя не считаться.
И вообще, вся эта заметка отдает какой-то брехней.
аноним, Ср 19 фев 2014 17:02:41:
ООП для слабо подготовленных программеров. Позволяет с минимумом знаний делать неуклюжие, но всё же работающие приложения, и это наверно хорошо. А что АСМ? На машкодах и пишу много лет, но не БД, БД не моя стезя.
аноним, Ср 19 фев 2014 14:50:23:
если финтивлюшкой - пишите на асме. Все на свете. Например, базы данных.
аноним, Ср 19 фев 2014 02:25:40:
К глубокому сожалению провалилось, по крайней мере не сбылись предсказания об единоличном царствовании ООП. ООП оказалось забавной финтиклюшкой, которая не сделала революции в программировании.
аноним, Вт 18 фев 2014 16:02:27:
"мифы по поводу ООП... часто забавны и высосаны буквально из пальца"

В том числе - миф о том, что объектно-ориентированное программирование провалилось.
аноним, Пн 17 фев 2014 03:23:52:
ООП это всего лишь очередная абстракция в структурном подходе, ничего принципиально нового оно не принесло. Его проблема не в том что оно плохо, а в том что на него были возложены чрезмерные надежды, и главное что это было широко распиарено.
Александр, Сб 15 фев 2014 23:37:15:
позволяет ли ООП бороться со сложностью и выпускать работающие системы? - пожалуй, что да.
позволяют ли паттерны и подходы упростить разработку и сделать системы проще при грамотном использовании? - да.
можно ли создать области видимости, инкапсуляцию в процедурных языках или функциональных, декларативных? Ну, почему-то зачастую логика сложно реализуется и плохо читается будучи написанной на SQL. кто читал многостраничные запросы или процедуры, думаю что согласится со мною.
аноним, Сб 15 фев 2014 18:08:10:
>Ура! Появился вменяемый автор. Жду продолжения дискуссии.

Автор и оппоненты засмущались женским вниманием и покинули нас.

>Не буду возражать - вы не довольны во вторую очередь.
Суть в том, что вы недовольны всегда, в "первую очередь" другими.

Прямо в яблочко! Поздравляю. Он человек, недовольный всем вокруг.
Алевтина, Чт 09 янв 2014 21:50:33:
Ура! Появился вменяемый автор. Жду продолжения дискуссии.
аноним, Чт 09 янв 2014 20:59:12:
> не поймешь, какой из 15 виртуальных методов будет вызван в данном контексте, и читать текст их всех дело утомительное.

Это легко определить с помощью отладчика.

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

Так и на plain C можно написать много такого, за что нужно увольнять, и в чём сложно разобраться, как и на любом другом языке.

> Хотите проинициализировать переменную? Вызовите процедуру.

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

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

Brainfuck, очень простой язык, описание составляет всего одну страницу.

Очевидно, что баги в библиотеках и компиляторах - это плохо, на причём здесь ООП.

По поводу того, что методологии нужно применять только там, где они подходят согласен полностью.

Страницы комментариев: 1 :: 2 :: 3 :: ... :: 148 :: следующая

Ваш комментарий

Имя:

Текст комментария (HTML-теги не допускаются):

Новости мира IT:

Архив новостей

Последние комментарии:

Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...