Поиск по сайту:

Сравните функциональное программирование, императивное программирование и объектно-ориентированное программирование.


Поскольку корпорация Oracle представила некоторые функциональные конструкции в Java SE 8, в настоящее время большинство интервьюеров заинтересованы в том, чтобы задать несколько вопросов о функциональном программировании. Как разработчик Java/Groovy/Scala или любой разработчик функционального программирования, мы должны изучить следующие вопросы и ответы на четкие интервью:

  1. Что такое функциональное программирование?
  2. Каковы «за и против» функционального программирования?
  3. В чем разница между функциональным программированием и императивным программированием?
  4. В чем разница между функциональным программированием и объектно-ориентированным программированием?
  5. В чем разница между функциональным программированием, императивным программированием (IP) и объектно-ориентированным программированием?
  6. Каковы основные преимущества функционального программирования по сравнению с императивным или объектно-ориентированным программированием?
  7. Когда использовать функциональное программирование?
  8. Когда использовать объектно-ориентированное программирование?
  9. Каковы недостатки ООП?
  10. Каковы недостатки ООП-наследования? … И многое другое

В этом посте мы последовательно обсудим следующие три популярные парадигмы программирования, а также ответим на приведенные выше вопросы:

  1. Функциональное программирование (ФП)
  2. Императивное программирование (IP)
  3. Объектно-ориентированное программирование (ООП)

Что такое функциональное программирование?

Проще говоря, функциональное программирование (FP) — одна из популярных парадигм программирования, которая выполняет вычисления, подобные математическим функциям, без изменения состояния и мутации данных. В функциональном программировании функции являются первоклассными кандидатами. Мы пишем программы, определяя набор функций и неизменяемых данных. Примеры языков FP: Scala, Haskell, Earlang и т. д. являются популярными языками FP. Java SE 8 также имеет некоторые функциональные конструкции (пожалуйста, обратитесь к сообщениям Java 8 для получения более подробной информации)

Каковы характеристики ФП?

Языки функционального программирования, такие как Scala, имеют следующие характеристики:

  1. Состояние не существует. Программы FP не содержат состояния. Это означает, что все данные являются неизменяемыми данными, а функции не могут изменять состояние.2. Низкая важность порядка исполнения На языках FP мы пишем программы с набором независимых функций. Функции содержат набор операторов. В FP порядок выполнения этих функций не имеет большого значения, поскольку они не имеют состояния и все функции работают независимо. Даже если мы изменим порядок выполнения, они все равно приведут к тем же результатам.3. Модель программирования без сохранения состояния Все программы FP используют неизменяемые данные и функции, которые не могут изменять эти данные. Это означает, что языки FP поддерживают модель программирования без сохранения состояния.4. Функции являются гражданами первого класса В языках FP функции являются объектами первого класса. Функции являются независимыми единицами, мы можем выполнять их в любом порядке.5. Единицы первичных манипуляций В языках FP основными единицами манипуляций являются функции и структуры данных, поскольку все программы состоят из использования этих единиц. Модульное программирование В языках FP нам нужно написать меньшие и независимые модули, называемые чистыми функциями, для поддержки модели программирования без сохранения состояния. Это означает, что FP лучше поддерживает модульность, чем OOP.7. Функции высшего порядка и ленивые вычисления Функциональные языки программирования должны поддерживать функции высшего порядка и возможности отложенного вычисления. Основные элементы управления потоком Языки FP не используют элементы управления потоком, такие как For…Loop, Do…While Loop, While…Loop и т. д., а также не используют условные операторы, такие как If…Else или операторы Switch. Все языки FP пишут программы, используя следующие вещи:

  • Функции
  • Вызовы функций
  • Вызовы функций с рекурсией

<старт=\10\>

  • Абстракция, инкаспуляция, наследование и полиморфизм Как и ООП, языки FP поддерживают все 4 концепции: абстракцию, инкапсуляцию, наследование и полиморфизм. Языки FP поддерживают наследование с классами типов или неявными. Они поддерживают полиморфизм с помощью дженериков. Он также известен как параметрический полиморфизм.
  • Что является основным фокусом FP?

    В отличие от языков ООП, все языковые программы FP в основном сосредоточены на «Что вы делаете» или «Что нужно сделать». В основном они сосредоточены на следующих вещах:

    • Какая необходимая информация является входными данными.
    • Какие преобразования необходимы, что является фактической логикой.

    Это означает, что FP в основном сосредоточен на том, «Что должно быть сделано». Он не слишком сосредоточен на том, «Как это должно быть сделано». То есть мы можем написать функциональное программирование точно так же, как описание предметной области. Вот почему не только разработчики, но и другие люди могут очень легко понять код FP. Теперь мы обсудим «за и против» (преимущества и недостатки) функционального программирования.

    Преимущества функционального программирования?

    Функциональные языки программирования имеют следующие преимущества или плюсы:

    • Код без ошибок Поскольку языки FP не поддерживают состояние, они не вызывают никаких побочных эффектов, что означает, что мы можем писать код без ошибок, код без ошибок или код с меньшей вероятностью ошибок. Эффективное параллельное программирование Поскольку языки FP не имеют изменяемого состояния, они не вызывают никаких проблем с изменением состояния. Это означает, что они используют только неизменяемые данные. Они используют независимые модули для написания программ, которые являются «функциями». Мы можем писать очень эффективные параллельные или параллельные программы, потому что они работают независимо, не меняя состояния. Лучшая производительность. Поскольку программы FP составляются со всеми независимыми модулями, они могут работать параллельно или одновременно. По этой причине приложения FP получают лучшую производительность. Лучшая инкапсуляция. В отличие от ООП, FP поддерживает лучшую инкапсуляцию с помощью чистых функций. Чистые функции означают отсутствие побочных эффектов. - Поддерживает вложенные функции. Вложенные функции означают составление функций внутри других функций для решения проблем. FP поддерживает вложенные функции. Увеличение возможности повторного использования. Поскольку программы FP состоят из независимых модулей, то есть «функций», мы можем очень легко использовать их повторно. - Лучшая модульность. В языках FP нам нужно написать меньшие и независимые модули, называемые чистыми функциями, для поддержки модели программирования без сохранения состояния. Это означает, что FP поддерживает лучшую модульность, чем ООП. Easy Lazy Evaluation В FP Languages очень легко написать Lazy Evaluation. Они поддерживают ленивые функциональные конструкции, такие как ленивые списки, ленивые карты и т. д. — повышают удобочитаемость и ремонтопригодность. Функциональное программирование (FP) также улучшает читаемость и ремонтопригодность, поскольку они работают независимо и не меняют состояния. Поскольку мы пишем наши программы FP, используя независимые модули, то есть «функции», мы можем очень легко их тестировать. - Поддерживает абстракцию над поведением В отличие от ООП, FP поддерживает как «Абстракцию над данными», так и «Абстракцию над поведением». Потому что в реальном мире есть и то, и другое. Поддержка BigData. Поскольку FP поддерживает параллельное программирование и более высокую производительность, FP очень хорош для разработки приложений BigData. — Надежный и надежный код. Поскольку FP использует неизменяемые данные, мы можем легко разработать надежный и надежный код с помощью FP.

    Недостатки функционального программирования?

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

    • Требуется много памяти FP не имеет состояния. Они всегда создают новые объекты для выполнения действий вместо изменения существующих объектов. Из-за этого FP Applications занимает много памяти.- НЕ концентрируется на замене Лисков

    Каковы основные концепции функционального программирования?

    Следующие концепции являются основными и важными концепциями функционального программирования.

    • Первоклассные функции.
    • Ленивая оценка.
    • Функции высшего порядка.
    • Неизменяемость (неизменяемые данные).
    • Модульность.
    • Без побочных эффектов.
    • Ленивая оценка.
    • Рекурсивные вызовы функций.

    Что такое императивное программирование?

    Императивное программирование (IP) — одна из популярных парадигм программирования, которая выполняет последовательность шагов/инструкций/операторов в определенном порядке. Примеры IP-языков: Java, C, C++ и т. д.

    Основные характеристики императивного программирования?

    Любой язык императивного программирования (IP) может содержать следующие характеристики:

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

    Что такое объектно-ориентированное программирование?

    Объектно-ориентированное программирование — это еще одна парадигма программирования. Он представляет все как объект. Каждый объект содержит некоторые поля данных и методы. Все программы ООП содержат состояние. Они используют изменяемые данные и структуры данных. Как и FP, мы можем писать полные программы, используя неизменяемые данные, но это правило не применяется. Объектно-ориентированное программирование (ООП) — это надмножество императивного программирования. Он соответствует всем характеристикам IP с некоторыми дополнительными функциями. Эти дополнительные функции:

    • Все является объектом.
    • Каждый объект содержит несколько полей данных и методов.
    • Концепции ООП: абстракция, инкапсуляция, наследование и полиморфизм

    В отличие от языков функционального программирования, языки ООП в основном сосредоточены на том, «как это сделать». Это означает, что как разработчик, мы фокусируемся на том, «как у вас дела». Более того, ООП сочетает в себе и «Что вы делаете», и «Как вы делаете». Вот почему мы не можем писать лаконичный и более читаемый код. Только разработчики могут понять код, другие люди могут еще больше запутаться, чтобы понять код приложения, они не могут его понять.

    Недостатки объектно-ориентированного программирования (ООП)?

    Несмотря на то, что ООП решает многие проблемы в реальном времени, у него все еще есть следующие недостатки (по сравнению с FP):

    • Он не поддерживает полное повторное использование.
    • Это не полная модульность.
    • Это нарушает концепцию инкаспляции.
    • У наследования много недостатков.

    Основные недостатки наследства:

    • Нарушает принцип инкапсуляции
    • Когда уровни наследования увеличиваются, становится очень сложно поддерживать и создавать объекты.

    Когда использовать функциональное программирование?

    Мы должны пойти на функциональное программирование (FP) в следующих сценариях:

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

    Когда использовать объектно-ориентированное программирование?

    Мы должны пойти на объектно-ориентированное программирование (ООП) в следующих сценариях:

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

    ПРИМЕЧАНИЕ. Здесь «Вещи» — это объекты реального мира, а операции — это «Действия реального мира». Например, в Java мы представляем эти вещи реального мира как «классы», а действия реального мира как методы (операции).

    Различия между ФП и ООП (IP)?

    Functional Programming OOP
    Does not exist State Exists State
    Uses Immutable data Uses Mutable data
    It follows Declarative Programming Model It follows Imperative Programming Model
    Stateless Programming Model Stateful Programming Model
    Main Fcous on: “What you are doing” Main focus on “How you are doing”
    Good for Parallel (Concurrency) Programming Poor for Parallel (Concurrency) Programming
    Good for BigData processing and analysis NOT Good for BigData processing and analysis
    Supports pure Encaspulation It breaks Encaspulation concept
    Functions with No-Side Effects Methods with Side Effects
    Functions are first-class citizens Objects are first-class citizens
    Primary Manipulation Unit is “Function” Primary Manipulation Unit is Objects(Instances of Classes)
    Flow Controls: Function calls, Function Calls with Recursion Flow Controls: Loops, Conditional Statements
    It uses “Recursion” concept to iterate Collection Data. It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java
    Order of execution is less importance. Order of execution is must and very important.
    Supports both “Abstraction over Data” and “Abstraction over Behavior”. Supports only “Abstraction over Data”.
    We use FP when we have few Things with more operations. We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java.

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