2010-08-12 1 views
55

ООП, вероятно, является наиболее часто используемой парадигмой программирования в современном программном обеспечении. Мой вопрос: какая другая парадигма (ы) может конкурировать с ней и может стоять на месте oop? Чтобы уточнить этот вопрос, я не спрашиваю о том, какие существуют другие парадигмы. Их много, и я хотел бы знать, какой из них:Альтернативы объектно-ориентированному программированию?

  • Использовано на практике не только теоретически.
  • Может конкурировать с oop, поэтому его можно использовать в большом проекте без или с минимальной болью.
  • Может использоваться для разработки настольного приложения с бизнес-логикой, базами данных и т. Д.
  • Не используется с компаньоном oop, но может заменить oop.

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

+1

@ Justin Ardini: Я знаю, что их много, но которые можно конкурировать с oop? @Tobiasopdenbrouw & Macros: Хорошо, изменилось. –

+0

OOP популярен, потому что он популярен, если вы не проглотите OOP koolaid, у вас не будет никаких проектов для работы ... – aoeu256

+0

Информационно-ориентированное программирование проще, когда вам интересны коллекции объектов и их отношения, а не одиночные объекты, где методы «db object» обеспечивают инкапсуляцию. JSON и sexpressions подслащивают SQL, CSS, HTML, Excel, скрипты оболочки популярны и полезны, но «программирование» означает ООП или процедурный. ООП благодарит за поддерживаемые программы Python/JavaScript, несмотря на то, что ООП составляет 20% кода. Closures & JSON можно использовать в 90% случаев вместо объектов и проще и проще в использовании. – aoeu256

ответ

32

Functional programming - еще одна парадигма программирования, которая популярна, в основном в академических кругах. Лучший пример функционального языка программирования - Haskell и Standard ML.

Фундаментальное различие между функциональным программированием и объектно-ориентированным программированием является то, что вы программирование в смысле потока данных вместо потока управления. См. Презентацию Taming Effects with Functional Programming от Саймон Пейтон-Джонс для хорошего ознакомления.

Хорошим примером функционального программирования, используемого в отрасли, является Erlang. Он в основном используется в телекоммуникационных, распределенных и отказоустойчивых системах. См. Презентацию Erlang - Software for a concurrent World от Joe Armstrong.

Есть также более новые функциональные языки программирования, которые сочетают функциональное программирование с ООП. Два хороших примера: F# для платформы .NET и Scala для платформы Java; они часто могут использовать существующие библиотеки на платформе, написанные на других языках.

Тенденция новых языков программирования теперь Multi-paradigm, где несколько парадигм, таких как объектно-ориентированное программирование и функциональное программирование, объединены на одном языке.

+0

Может ли функциональное программирование заменить oop или оно используется с oop? Есть ли реальные примеры приложений, написанных в этой парадигме? Как насчет дизайна? –

+4

Scala стремится интегрировать функции объектно-ориентированных и функциональных языков. – Philipp

+4

Хороший ответ, но я думаю, что функциональное программирование и объектно-ориентированное программирование - это не две стороны медали, они могут прекрасно сосуществовать (как вы упомянули). Это примерно так: Процедурный VS Объектно-ориентированный, Imperative VS Functional. Lisp - популярный процедурный функциональный язык, Java - объектно-ориентированный императивный язык. – fhd

1

FP - Функциональное программирование - чрезвычайно популярная парадигма программирования, которая существует очень давно и в последние годы стала становиться все более заметной. FP поддерживает неизменность по сравнению с изменчивостью, рекурсией и функциями без побочных эффектов. Некоторыми примерами популярных языков fp являются Erlang, Scala, F #, Haskell и Lisp (среди прочих).

+1

Scala является хорошим примером комбинации ООП/ФП. –

8

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

Это, безусловно, может быть использован в больших масштабах продуктов с минимумом боли и максимум производительности

+4

Да, и бесчисленные исследования метрик показали, что у него заканчивается газ около 150 км LOC. Посмотрите на Windows SDK около времени Петцольда для трактата о том, как структурированное программирование распадается при нагрузках сложности: функции с 8 аргументами, 2 - структуры с 6-10 членами. Нажатие данных в каждую единицу вычислений и из них в конечном итоге просто не работает. – Rob

+1

Хорошо, но - сколько приложений получило это большое? Проблема с ООП чрезвычайно сложна для понимания и предназначена для больших приложений, но по умолчанию даже для небольших. Это имеет противоположный эффект от чрезмерного усложнения меньшего приложения. – niico

+0

Объектно-ориентированное программирование иногда заставляет приложения быть более длинными из-за необходимости в конструкторах и длинных методах getter/setter. Эти ранние процедурные языки, такие как C, не поддерживали метапрограммирование, систему полиморфизма, закрытие или простой синтаксис для представления JSON/общих данных. C даже не поддерживал дополнительные аргументы. Моноды и макросы могут использоваться для создания мощных встроенных доменных языков. – aoeu256

-5

Там нет парадигм в настоящее время, что может действительно заменить ООП.Проблема с OOP заключается в том, что он выполняет огромную работу для вас - автоматически освобождает ресурсы, проверяет данные и т. Д., И это упрощает проверку кода, не говоря уже о том, что подавляющее большинство существующих в мире библиотек написаны на языке OOP, таком как C++, C# или Java. Реальность ужина без таких масштабных библиотек и т. Д. Чрезвычайно сомнительна.

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

Я думаю, что общее программирование станет новой парадигмой. Тем не менее, он действительно находится на стадии разработки, и только C++/D предлагает действительно хорошее общее программирование.

+3

ООП не делает ничего из этого.Это может сделать их проще, но только в том случае, если дизайн OO-структуры включает их, например, в .Net, или если вы готовы их написать. –

+0

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

+2

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

2

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

Смежные вопросы