Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Процедурное программирование является парадигмой программирования , полученная из императивного программирования , [1] на основе концепции вызова процедуры . Процедуры (тип подпрограммы или подпрограммы ) просто содержат серию вычислительных шагов, которые необходимо выполнить. Любая данная процедура может быть вызвана в любой момент во время выполнения программы, в том числе другими процедурами или самой собой. Первые основные процедурные языки программирования появились примерно в 1957–1964 годах, включая Fortran , ALGOL , COBOL , PL / I и BASIC . [2] Паскаль и Си были опубликованы примерно в 1970–1972 гг.

Компьютерные процессоры обеспечивают аппаратную поддержку процедурного программирования через регистр стека и инструкции для вызова процедур и возврата из них. Возможна аппаратная поддержка других типов программирования, но ни одна попытка не была коммерчески успешной (например, машины на Лиспе или процессоры Java ). [ противоречивый ]

Процедуры и модульность [ править ]

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

Определение объема - еще один метод, который помогает сохранить модульность процедур. Это предотвращает доступ процедуры к переменным других процедур (и наоборот), включая предыдущие экземпляры самой себя, без явной авторизации.

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

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

Сравнение с другими парадигмами программирования [ править ]

Императивное программирование [ править ]

Языки процедурного программирования также являются императивными языками, поскольку они явно ссылаются на состояние среды выполнения. Это может быть что угодно, от переменных (которые могут соответствовать регистрам процессора ) до чего-то вроде положения «черепахи» в языке программирования Logo .

Часто термины «процедурное программирование» и «императивное программирование» используются как синонимы. Однако процедурное программирование в значительной степени зависит от блоков и объема , тогда как императивное программирование в целом может иметь или не иметь таких функций. Таким образом, процедурные языки обычно используют зарезервированные слова, которые воздействуют на блоки, такие как if, whileи for, для реализации потока управления , тогда как неструктурированные императивные языки используют операторы goto и таблицы переходов для той же цели.

Объектно-ориентированное программирование [ править ]

Целью процедурного программирования является разбиение задачи программирования на набор переменных , структур данных и подпрограмм , тогда как в объектно-ориентированном программировании задача программирования состоит в разбиении задачи программирования на объекты, которые раскрывают поведение (методы) и данные (члены или атрибуты) с использованием интерфейсов. Наиболее важным отличием является то, что в то время как процедурное программирование использует процедуры для работы со структурами данных, объектно-ориентированное программирование связывает их вместе, так что «объект», который является экземпляром класса, работает со своей «собственной» структурой данных. [3]

Номенклатура варьируется между двумя, хотя они имеют схожую семантику:

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

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

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

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

  • В то время как процедурные языки моделируют выполнение программы как последовательность императивных команд, которые могут неявно изменять разделяемое состояние, функциональные языки программирования моделируют выполнение как оценку сложных выражений, которые зависят друг от друга только с точки зрения аргументов и возвращаемых значений. По этой причине функциональные программы могут иметь свободный порядок выполнения кода, а языки могут мало управлять порядком, в котором выполняются различные части программы. (Например, аргументы вызова процедуры в Scheme выполняются в произвольном порядке.)
  • Функциональные языки программирования поддерживают (и активно используют) первоклассные функции , анонимные функции и замыкания , хотя эти концепции включены в новые процедурные языки.
  • Языки функционального программирования, как правило, полагаются на оптимизацию хвостового вызова и функции высшего порядка вместо конструкций императивного цикла.

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

Все же существует несколько эзотерических функциональных языков (например, Unlambda ), которые избегают правил структурированного программирования ради того, чтобы их было сложно программировать (и, следовательно, сложно). Эти языки являются исключением из общего правила между процедурными и функциональными языками.

Логическое программирование [ править ]

В логическом программировании программа - это набор предпосылок, и вычисления выполняются путем попытки доказать теоремы-кандидаты. С этой точки зрения логические программы декларативны , они фокусируются на том, в чем проблема, а не на том, как ее решить.

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

H: - B 1 ,…, B n .

имеют двоякое толкование, как процедуры

показать / решить H , показать / решить B 1 и… и B n

и как логические следствия:

B 1 и ... и В п означает Н .

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

См. Также [ править ]

  • Сравнение парадигм программирования
  • Декларативное программирование
  • Функциональное программирование (контраст)
  • Императивное программирование
  • Логическое программирование
  • Объектно-ориентированного программирования
  • Парадигмы программирования
  • Язык программирования
  • Структурированное программирование
  • Процедурные расширения SQL

Ссылки [ править ]

  1. ^ "Парадигмы программирования" .
  2. ^ «Добро пожаловать в IEEE Xplore 2.0: Использование процедурных языков программирования для управления производственными системами». ieeexplore.ieee.org. DOI : 10.1109 / CAIA.1991.120848 . S2CID 58175293 .  Цитировать журнал требует |journal=( помощь )
  3. ^ Стивенсон, Джозеф. «Процедурное программирование vs объектно-ориентированное программирование» . neonbrand.com . Проверено 19 августа 2013 .

Внешние ссылки [ править ]

  • Процедурные языки в Curlie