ООП технологии смерти [закрыто]

9

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

Это правильно? ООП умрет или в чем может быть причина?

Dehumanizer
источник

Ответы:

40

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

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

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

Кривая обмана

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

Но у него уже есть свое место, как ООПрограммирование, как общее программирование, как функциональное программирование, как процедурное программирование и т. Д.

Заметили ли вы, что языки, которые более широко используются (и пользуются большой популярностью) и широко распространены в реальной жизни, «не чисты»? Это потому, что использование нескольких парадигм делает их более гибкими для изменения контекста во времени, и они занимают больше ниш использования.

Klaim
источник
1
+1 за «не чистый». Чистые ООП языки особенно мертвы, за исключением очень нишевых применений / академиков.
jv42
Что бы мы считали чистым ОО-языком? Болтовня?
Чжэхао Мао
20

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

user281377
источник
1
Это очень субъективно. Я не думаю, что ООП хорошо подходит для конкретной проблемной области, это хорошо подходит для того, как конкретный разработчик делает решение. ООП не умрет, потому что разработчики не могут переключать парадигмы.
Рэйнос
6
Классический пример, где ООП хорошо подходит, это GUI. Трудно представить API для инструментария GUI, который не является OO, даже если язык не такой. (Конечно, это не то, как обычно используется термин проблемная область). Чтобы привести пример реальной проблемной области, где ООП хорошо подходит: автоматизация хранилища. Моделирование транспортных и складских транспортных средств и их деятельности - то, где ООП чувствует себя как естественная подгонка
user281377
2
@ammoQ, GUI ужасны, когда выражены в ОО. Вот почему все API смещаются в сторону DSL (WPF и т. Д.). Нетрудно представить, скажем, Tk - там нет ни единого следа ООП, но, тем не менее, он великолепен (для программирования, а не для его внешнего вида), намного лучше, чем любой из переполненных инструментариев ООП Java. ООП очень хорошо вписывается в любые агентные симуляции (например, те, что вы перечислили), но это небольшая часть существующих проблем.
SK-logic
6
Глядя на первые примеры ТК, я смог найти, как это не ОО? Из учебника: «Виджеты - это объекты, экземпляры классов, которые представляют кнопки, рамки и т. Д.» tkdocs.com/tutorial/concepts.html Более того, сами DSL очень зависят от программирования ОО. Так что я не совсем понимаю, что ты пытаешься сказать?
Инка
3
@ Sk-logic, @ammoQ, @Raynos, @jkocking, я выдвинул его в свой собственный вопрос: programmers.stackexchange.com/questions/88385/… Мне было бы очень интересно получить больше объяснений по этому поводу, я очень интересно учиться.
Инка
12

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

Джон Боде
источник
6
+1 за действительно блестящую фразу: «Парадигмы приходят и уходят, но унаследованный код вечен»
NoChance
8

Краткий ответ: нет, я так не думаю.

Более длинный ответ: из того, что я понимаю об АОП, это не парадигма программирования сама по себе (как, например, она не заменяет ООП), а скорее дополнение, инструментарий, который помогает вам писать более короткие методы, более простые классы с одной ответственностью и так далее. Но это не заменит ООП.

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

Ктулху
источник
Функциональный <-> императив - линия. ООП параллельно с этим. Я думаю, что процедурный находится на другом конце ООП, но я не уверен. Конечно, забавно, что функциональная парадигма старше, чем парадигма ООП :)
Raynos
2
@Raynos, прямой линии нет. ООП - это всего лишь одна крошечная металингвистическая абстракция внутри огромного (бесконечного) множества возможных абстрактных языков. И, конечно, крайне глупо ограничивать себя одним из них.
SK-logic
6

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

http://imgur.com/9VmKC


источник
5

Я помню, как впервые услышал об аспектно-ориентированном программировании, сидя в учебнике OOPSLA '97. Они сказали, что тогда убьют ОО. С тех пор OO только превзошло самые смелые ожидания. АОП до сих пор практически не известен и практически не влияет на компьютерную индустрию. Я думаю, что ответ очевиден, что АОП не является убийцей ОО.

Замочить
источник
1

Посмотрите на некоторые существующие системы АОП. Они зависят от того, что у вас есть код, написанный в какой-то форме - например, Spring AOP полагается на то, что ваши методы определены в классе. Castle Windsor поддерживает его в C #, который является объектно-ориентированным языком.

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

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

Таким образом, с точки зрения общей реализации, АОП требует ООП.

dhasenan
источник
0

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

Кроме того, AOP и проектирование на основе компонентов поддерживают Anemic Data Model, которую критикуют более умные люди, чем я.

http://martinfowler.com/bliki/AnemicDomainModel.html

(Я знаю, что статья выше старая, но на удивление актуальная)

Суть в том, что системы АОП здесь, чтобы остаться, но они также далеки от совершенства. Ни одна система не идеальна.

maple_shaft
источник