Рубрики
Без рубрики

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

Поскольку корпорация Oracle представила некоторые функциональные конструкции в Java SE 8, в настоящее время большинству интервьюеров интересно задать некоторые вопросы

Автор оригинала: Pankaj Kumar.

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

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

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

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

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

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

Проще говоря, Функциональное программирование (FP) является одной из популярных парадигм программирования, которая выполняет вычисления, подобные Математическим функциям без Изменения состояния и Изменения данных .

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

Примеры языков FP:- Scala, Haskell, Erlang и т.д. Являются популярными языками FP. Java SE 8 также имеет некоторые функциональные конструкции (Пожалуйста, обратитесь к сообщениям Java 8 для получения более подробной информации)

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

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

  1. Государства не существует.
  2. Программы FP не содержат состояния. Это означает, что все данные являются Неизменяемыми Данными, и функции не могут изменять состояние.

  3. Низкая важность порядка исполнения
  4. На языках FP мы пишем программы с набором независимых функций. Функции содержат набор операторов. В FP порядок выполнения этих функций не имеет большого значения, потому что у них нет состояния, и все функции работают независимо. Даже если мы изменим порядок выполнения, они все равно дадут те же результаты.

  5. Модель программирования без сохранения состояния
  6. Все программы FP используют Неизменяемые данные и функции, которые не могут изменять эти данные. Это означает, что языки FP поддерживают модель программирования без состояния.

  7. Функции являются гражданами первого класса
  8. В языках FP функции являются объектами первого класса. Функции являются независимыми единицами, мы можем выполнять их в любом порядке.

  9. Блоки Первичных Манипуляций
  10. В языках FP Основными единицами управления являются функции и структуры данных, поскольку все Программы состоят из использования этих единиц.

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

  13. Функции более высокого порядка и ленивая оценка
  14. Функциональные языки программирования должны поддерживать функции более высокого порядка и функции отложенной оценки.

  15. Первичные Регуляторы Расхода
  16. Языки FP не используют элементы управления потоком, как для…Зацикливайся, Делай…Пока Зацикливайся, Пока…Цикл и т.д., А также не используйте условные операторы, такие как If..Else или операторы переключения. Все языки FP пишут программы, используя следующие вещи:

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

На чем сосредоточена основная деятельность FP?

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

  • Какая информация требуется, которая является входными данными.
  • Какие преобразования требуются, это и есть Реальная Логика.

Это означает, что FP в основном сосредоточен на “Что нужно сделать” . В нем не уделяется особого внимания “Как это должно быть сделано” . То есть мы можем писать Функциональное программирование точно так же, как описание проблемной области. Вот почему не только разработчики, но и другие люди могут очень легко понять код FP.

Теперь мы обсудим “Плюсы и минусы” (Преимущества и недостатки) функционального программирования.

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

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

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

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

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

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

  • Поддерживает Вложенные Функции
  • Вложенные функции означают создание функций внутри других функций для решения задач. FP поддерживает вложенные функции.

  • Повышение Возможности Повторного Использования
  • Поскольку программы FP состоят из независимых блоков, то есть “Функций”, мы можем очень легко использовать их повторно.

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

  • Простая Ленивая Оценка
  • На языках FP очень легко написать Ленивую оценку. Они поддерживают Ленивые функциональные конструкции, такие как Ленивые списки, Ленивые карты и т.д.

  • Повышение удобочитаемости и ремонтопригодности
  • Функциональное программирование (FP) также улучшает читаемость и удобство обслуживания, поскольку они работают независимо и не изменяют состояние.

  • Повышение Тестируемости
  • Поскольку мы пишем наши программы FP, используя независимые единицы измерения, то есть “Функции”, мы можем очень легко их тестировать.

  • Поддерживает абстракцию над поведением
  • В отличие от ООП, FP поддерживает как “Абстракцию над данными”, так и “Абстракцию над поведением”. Потому что Реальный мир содержит и то, и другое.

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

  • Надежный и надежный код
  • Поскольку FP использует Неизменяемые данные, мы можем легко разработать надежный и надежный код с помощью FP.

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

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

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

  • НЕ концентрируется на замене Лискова

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

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

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

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

Императивное программирование (IP) – одна из популярных парадигм программирования, которая выполняет последовательность шагов/инструкций/инструкций в определенном порядке.

Примеры языков IP:- Java, C, C++ и т. Д

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

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

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

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

Объектно-ориентированное программирование-это еще один вид парадигмы программирования. Он представляет все как Объект. Каждый объект содержит Некоторые поля данных и Методы. Все программы ООП содержат состояние. Они используют Изменяемые данные и структуры данных. Как и FP, мы можем писать полные программы, используя Неизменяемые данные, но это не обеспечивает соблюдение этого правила.

Объектно-ориентированное программирование (ООП) – это надмножество императивного программирования. Он соответствует всем характеристикам IP с некоторыми дополнительными функциями.

Эти дополнительные функции включают:

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

В отличие от функциональных языков программирования, Языки ООП в основном ориентированы на “Как это сделать” . Это означает, что как разработчик мы фокусируемся на том, “Как у вас дела”.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Существует Состояние Не существует состояния
Использует изменяемые данные Использует неизменяемые данные
Это следует модели Императивного программирования Он следует Декларативной модели программирования
Модель программирования с отслеживанием состояния Модель программирования без сохранения состояния
Основное внимание уделяется “Как у вас дела” Основное внимание уделяется: “Что вы делаете”
Плохо подходит для параллельного (параллельного) программирования Хорошо подходит для параллельного (параллельного) программирования
НЕ подходит для обработки и анализа больших данных Подходит для обработки и анализа больших данных
Это нарушает концепцию инкапсуляции Поддерживает чистую инкапсуляцию
Методы с побочными эффектами Функции без побочных эффектов
Объекты являются первоклассными гражданами Функции являются гражданами первого класса
Основной единицей манипулирования являются Объекты(Экземпляры классов). Основным блоком манипуляции является “Функция”
Управление Потоком: Циклы, Условные операторы Управление потоком: Вызовы функций, Вызовы функций с рекурсией
Он использует концепцию “Цикла” для повторения данных сбора. Например:-Для-каждого цикла в Java Он использует концепцию “рекурсии” для повторения данных сбора.
Порядок исполнения является обязательным и очень важным. Порядок исполнения имеет меньшее значение.
Поддерживает только “Абстракцию над данными”. Поддерживает как “Абстракцию над данными”, так и “Абстракцию над поведением”.
Мы используем ООП, когда у нас мало операций с большим количеством вещей. Например: Вещи-это классы, а операции-методы в Java. Мы используем FP, когда у нас мало вещей с большим количеством операций.

Вот и все о трех популярных парадигмах программирования.

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

Пожалуйста, напишите мне комментарий, если вам нравится мой пост или у вас есть какие-либо сомнения или предложения.