Функциональное vs ООП vs Процедурное программирование (Lili Ouaknin Felsen)
Во время интервью на этой неделе меня спросили “в чем разница между функциональным, объектно-ориентированным и процедурным программированием”, и, честно говоря, я действительно не знал, как ответить на этот вопрос (и это был первый раз, когда я услышал о Процедурном программировании ...). Итак, сегодня я решил провести некоторое исследование и (попытаться) понять, в чем заключаются основные различия.
Давайте начнем с некоторых определений:
Функциональное программирование (ФП) — это парадигма программирования — стиль построения структуры и элементов компьютерных программ — который рассматривает вычисления как оценку математических функций и избегает переменных состояний и изменяемых данных.
— Википедия
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на концепции «объектов», которые могут содержать данные в форме полей, часто известных как атрибуты; и код в форме процедур, часто известных как методы.
— Википедия
Процедурное программирование (ПП) — это парадигма программирования, производная от структурированного программирования, основанная на концепции вызова процедуры. Процедуры, также известные как подпрограммы или функции, просто содержат ряд вычислительных шагов, которые необходимо выполнить.
— Википедия
Хорошо, итак, это введение, но давайте рассмотрим его немного подробнее.
Во-первых, что такое парадигма программирования? Это стиль программирования, способ мышления о создании программного обеспечения. Парадигма программирования относится не к определенному языку, а скорее к способу программирования, методологии. Некоторые языки позволяют легко писать в одних парадигмах, но не в других. Для получения более подробной информации смотрите статью в Википедии.
Теперь давайте углубимся в три парадигмы программирования, которые интересуют нас сегодня:
Процедурное программирование (ПП), также известное как встроенное (inline) программирование, использует нисходящий подход. Речь идет о написании списка инструкций, которые будут указывать компьютеру, что делать шаг за шагом. Он опирается на процедуры или подпрограммы.
Объектно-ориентированное программирование (ООП) заключается в инкапсуляции данных и поведения в объекты. Приложение ООП будет использовать коллекцию объектов, которая знает, как выполнять определенные действия и как взаимодействовать с другими элементами приложения. Например, объектом может быть человек. У этого человека было бы имя (которое было бы свойством объекта), и он знал бы, как ходить (это был бы метод). Метод в ООП можно рассматривать как процедуру в ПП, но здесь он принадлежит конкретному объекту. Другим важным аспектом ООП являются классы. Класс можно рассматривать как схему объекта.
Функциональное программирование (ФП) заключается в передаче данных от функции к функции, чтобы получить результат. В ФП функции обрабатываются как данные, что означает, что вы можете использовать их в качестве параметров, возвращать их, создавать функции из других функций и создавать пользовательские функции. Функции в ФП должны быть чистыми функциями, они должны избегать общего состояния, а побочные эффекты и данные должны быть неизменяемыми. Чистая функция - это функция, которая при одном и том же типе входных данных всегда будет возвращать один и тот же вывод, она не зависит от локального или глобального состояния. Общее состояние - это состояние, которое совместно используется более чем одной функцией или более чем одной структурой данных. Таким образом, с общим состоянием, чтобы понять побочные эффекты функции, вам нужно знать все детали по каждой общей переменной. Это добавляет сложности и допускает меньшую модульность.
Вот и все на сегодня! В следующий раз, когда меня (и, надеюсь, вас) спросят, в чем разница между функциональным, объектно-ориентированным и процедурным программированием, я, по крайней мере, смогу объяснить основные моменты каждого из них.
Если у вас есть какие-либо дополнительные пояснения или какие-либо комментарии, пожалуйста, не стесняйтесь добавлять их ниже.
Источник: https://medium.com/@LiliOuakninFelsen/functional-vs-object-oriented-vs-procedural-programming-a3d4585557f3