Парадигмы программирования: необходимо знать всем программистам


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

Языки программирования — это инструменты, и не все инструменты подходят для любой работы. Некоторые задачи проще решить функционально. Некоторые из них явно подходят для объектно-ориентированного программирования. Другие становятся проще, если вы используете решение ограничений или сопоставление с образцом.

Парадигмы программирования

Давайте совершим головокружительный тур по 4 различным парадигмам программирования — процедурному, объектно-ориентированному, функциональному и логическому . Эта статья поможет вам лучше понять различные парадигмы программирования.

1. Процедурное программирование

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

Примеры Fortran C и Cobol. Вот пример кода на COBOL.

ИДЕНТИФИКАЦИОННЫЙ  ОТДЕЛ. 
ПРОГРАММА-ID.  ПРИВЕТ. 
ПРОЦЕДУРА  ОТДЕЛЕНИЯ. 
 ОТОБРАЖЕНИЕ  «Hello World!». 
 СТОП  БЕГ.

Особенности процессуального кодекса

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

2. Логическое программирование.

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

Чтобы понять, как проблема может быть решена в логическом программировании, вам нужно знать о строительных блоках — Фактах и ​​правилах —

Давайте поймем разницу между императивным и декларативным программированием.

Представьте, что вы заходите в свое любимое кофейное заведение и хотите заказать кофе.

Императивным подходом будет:

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

Декларативный подход:

  • Большой латте на вынос, пожалуйста

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

Prolog следует парадигме логики и, вероятно, является самым известным языком в семействе логического программирования.

Пролог оказал огромное влияние в области доказательства теорем, экспертных систем, обработки естественного языка и в области искусственного интеллекта (особенно Watson2 от IBM ) в целом.

Пролог, как и SQL, имеет два основных аспекта: один для выражения данных, а другой для их запроса. Основные конструкции логического программирования, термины и утверждения унаследованы от логики. Есть три основных утверждения:

  • Факты — это фундаментальные утверждения о проблемной области (например, «Сократ — человек»)
  • Правила — это выводы о фактах в предметной области (например, «Все люди смертны»).
  • Запросы — это вопросы об этой области (например, «Смертен ли Сократ?»)

Особенности логического программирования

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

3. Функциональное программирование

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

Функциональное программирование состоит только из функций PURE. Итак, что вы понимаете под чистыми функциями?

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

Например, если функция полагается на данные глобальной переменной или члена класса, то она не чистая. И в таких случаях возвращаемое значение этой функции не полностью зависит от списка аргументов, полученных в качестве входных данных, а также может иметь побочные эффекты. Итак, что вы понимаете под термином «побочный эффект»? Побочный эффект — это изменение состояния приложения, которое можно наблюдать за пределами вызываемой функции, кроме ее возвращаемого значения. Например: изменение любой внешней переменной или свойства объекта, например глобальной переменной или переменной в цепочке областей видимости родительской функции.

Особенности функциональной парадигмы

  • Чистые функции — как показано выше, если входом является массив, выходом будет новый массив, а входной массив не будет изменен. Таким образом, в случае чистых функций вывод зависит только от ввода.

Вот функция на языке Scala, которая принимает значения и возвращает их сумму.

scala> def  add ( a: Int, b: Int) = a + b
 add: ( a: Int, b: Int) Int

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

  • Рекурсия . Рекурсивная функция — это функция, которая вызывает сама себя во время выполнения. Это позволяет функции повторяться несколько раз, результат выводится в конце каждой итерации. Ниже приведен пример рекурсивной функции.
Функция Count ( целое число N),
  если (N <= 0) возвращает  «Должно быть положительное целое число» ;
 if (N> 9) return  «Подсчет завершен» ;
иначе  вернуть счетчик (N + 1);
 конечная функция

Вышеупомянутая функция Count () использует рекурсию для подсчета от любого числа от 1 до 9 до числа 10. Например, Count (1) вернет 2,3,4,5,6,7,8,9,10. Count (7) вернет 8,9,10.

Вы заметите, что рекурсивные функции распространены в информатике, потому что они позволяют писать эффективные программы, используя минимальное количество кода. Обратной стороной является то, что они могут вызвать бесконечные циклы и другие неожиданные результаты, если они не написаны должным образом. Например, в приведенном выше примере функция завершается, если число равно 0 или меньше или больше 9. Если в функцию не включены соответствующие случаи для остановки выполнения, рекурсия будет повторяться бесконечно, что приведет к сбою программы, или, что еще хуже, повесить всю компьютерную систему.

  • Ссылочная прозрачность — выражение считается ссылочным прозрачным, если его можно заменить соответствующим значением без изменения поведения программы. В результате оценка ссылочно прозрачной функции дает то же значение для фиксированных аргументов. В функциональном программировании рассматриваются только ссылочно прозрачные функции. Их намного легче читать и понимать.
int  добавить ( int a, int b )
 {
 вернуть a + b
 }
int  mult ( int a, int b ) 
 {
 вернуть a * b;
 }
int x = добавить ( 2 , mult ( 3 , 4 ));

В этом примере метод mult является ссылочно прозрачным, потому что любой его вызов может быть заменен соответствующим возвращаемым значением. Это можно увидеть, заменив mult (3, 4) на 12:

int x = добавить ( 2 , 12 )

Таким же образом add (2, 12) можно заменить соответствующим возвращаемым значением 14:

int x = 14 ;
  • Функции являются первоклассными и может быть высшего ПОРЯДКА языка программирования является Говорят, что функции первого класса , когда функции на этом языке рассматриваются как любой другой переменной. Например, в таком языке функция может быть передана в качестве аргумента другим функциям , может быть возвращена другой функцией и может быть присвоена как значение переменной. Высший порядок х УНКЦИЙ являются функциями , которые принимают по крайней мере одну функции первого класса в качестве параметра.
  • Переменные неизменяемы — в функциональном программировании вы не можете изменять переменную после ее инициализации. Вы можете создавать новые переменные, и это помогает поддерживать состояние в течение всего времени выполнения программы.

Строки — это неизменяемые объекты.

var name = «Susie»
 var uppd = name.toUpperCase ()

* name будет иметь значение — Susie
* uppd будет иметь значение — SUSIE

Лисп является вторым по возрасту языком программирования высокого уровня после Фортрана, но все еще используется. Лисп — это функциональный язык программирования; то есть функции — это объекты первого класса в Лиспе. Однако это не чисто функциональный язык, такой как Haskell, потому что операции в Лиспе могут иметь побочные эффекты. Лисп продолжает оставаться популярным в области искусственного интеллекта и по сей день.

Языки программирования, поддерживающие функциональное программирование: Haskell, JavaScript, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.

Пример кода Lisp:

  • Чтобы оценить факториал числа (n)
(defun факториал (п)
( если (<= n 1)
1
(* п (факториал (-n 1)))))
  • итеративная версия, которая использует общий макрос Loop Loop
(defun факториал (п)
( цикл  для I от  1 до n
 для fac = 1,  затем (* fac i)
 finally ( return fac)))
  • с использованием рекурсивной функции
(defun –reverse (список)
( пусть (( возврат - значение '()))
(dolist (e list) (push e return - value ))
 return - value ))

4. Объектно-ориентированное программирование (ОО):

В этой структуре все сущности реального мира представлены классами . Объекты — это экземпляры классов, поэтому каждый объект инкапсулирует состояние и поведение . Состояние подразумевает, что поля, атрибуты объекта и поведение — это то, что вы делаете с состоянием объекта, и они являются методами. Объекты взаимодействуют друг с другом, передавая сообщения.

Особенности ОО:

  • Инкапсуляция — это фундаментальная особенность объектно-ориентированного программирования. Здесь вы скрываете ненужные детали в классах и предоставляете простой и понятный интерфейс для работы. Он описывает идею объединения данных и методов, которые работают с этими данными, в одном модуле. Эта концепция также часто используется, чтобы скрыть внутреннее представление или состояние объекта извне.
  • Наследование. Наследование — одна из основных концепций языков объектно-ориентированного программирования (ООП). Это механизм, с помощью которого вы можете получить класс из другого класса для иерархии классов, которые имеют общий набор атрибутов и методов. В нем объясняется, как иерархии классов повышают удобочитаемость кода и поддерживают повторное использование функциональных возможностей.
  • Абстракция данных — абстракция данных — это сокращение определенного массива данных до упрощенного представления целого. Абстракция данных обычно является первым шагом в проектировании базы данных.
  • Полиморфизм. Полиморфизм — это концепция объектно-ориентированного программирования, которая относится к способности переменной, функции или объекта принимать несколько форм.

Языки программирования, в которых реализована парадигма объектно-ориентированного программирования: Ruby, Java, C ++, Python, Simula (первый язык объектно-ориентированного программирования).

Пример класса:

Учетная запись класса
{
 int account_number;
 int account_balance;
 публичные  недействительные данные  showdata ()
 {
 система. out .println («Номер счета» + account_number)
 system.outprintln («Баланс счета» + account_balance)
 }
}

Здесь у вас есть класс с именем: Account

Атрибуты: account_number, account_balance
Метод / действие: showdata ()

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


Добавить комментарий