Процедурное программирование - это парадигма программирования, полученный из структурного программирования, основанный на концепции o f вызов процедуры . Процедуры (тип подпрограммы или подпрограммы ) просто содержат серию вычислительных шагов, которые необходимо выполнить. Любая данная процедура может быть вызвана в любой момент во время выполнения программы, в том числе другими процедурами или самой собой. Первые основные процедурные языки программирования появились примерно в 1957–1964 годах, включая Fortran, ALGOL, COBOL, PL / I и . BASIC. Pascal и C были опубликованы примерно в 1970–1972 годах.
Компьютерные процессоры обеспечивают аппаратную поддержку процедурного программирования через стековый регистр и инструкции для вызова процедур и возврата из них. Возможна аппаратная поддержка других типов программирования, но ни одна попытка не увенчалась успехом (например, машины на Лиспе или процессоры Java ).
Модульность обычно желательна, особенно в больших и сложных программах. Входные данные обычно указываются синтаксически в форме аргументов, а выходы доставляются как возвращаемые значения.
Объем - еще один метод, который помогает сохранить модульность процедур. Он предотвращает доступ процедуры к переменным других процедур (и наоборот), включая предыдущие экземпляры самой себя, без явной авторизации.
Менее модульные процедуры, часто используются в небольших или быстро написанных программах, имеют тенденцию взаимодействуют с большим количеством переменных в среде выполнения , которые другие процедуры также могут изменять.
Благодаря возможности определять простой интерфейс, быть автономным и повторно использоваться, процедуры являются удобным средством создания фрагментов кода, написанных разными людьми или разными группами, в том числе с помощью библиотеки программирования.
Процедурные языки программирования также являются императивными языками, поскольку они явно указывают на состояние среды выполнения. Это может быть что угодно, от переменных (которые могут соответствовать регистрам процессора ) до чего-то вроде положения «черепахи» в языке программирования Logo.
Часто термины «процедурное программирование» и «императивное программирование» используется как синоним. Однако процедурное программирование в значительной степени полагается на блоки и область действия, тогда как императивное программирование в целом может иметь или не иметь таких функций. Таким образом, процедурные языки обычно используют зарезервированные слова, которые действуют на блоки, такие как if
, , а
и для
, для реализации потока управления, тогда как не- В структурированных императивных языках для той же цели используются операторы goto и таблицы переходов.
Целью процедурного программирования является разбиение задачи программирования на набор переменных, структур данных и подпрограммы, тогда как в объектно-ориентированном программировании это разделение задачи программирования на объекты, которые раскрывают поведение (методы) и данные (элементы или атрибуты) с помощью интерфейсов. Наиболее важным отличием является то, что в то время как процедурное программирование использует процедуры для работы со структурами данных, объектно-ориентированное программирование связывает их вместе, так что «объект», который является экземпляром класса, оперирует своей «собственной» структурой данных. 121>
Номенклатура этих двух вариантов различается, хотя они имеют схожую семантику:
Процедурные | Объектно-ориентированные |
---|---|
Процедуры | Метод |
Запись | Объект |
Модуль | Класс |
Вызов процедуры | Сообщение |
Принципы модульности и повторного использования кода в практических функциональных языках по сути являются то же, что и в процедурных языках, поскольку оба они происходят из структурного программирования. Так, например:
Основное различие между стилями состоит в том, что языки функционального программирования удаляют или, по крайней мере, не уделяют внимания императивным элементам процедурного программирования.. Таким образом, набор функций функциональных языков разработан для поддержки написания программ в максимально возможной степени с точки зрения чистых функций :
Однако многие функциональные языки на самом деле не совсем функциональны и предлагают императивные / процедурные конструкции, которые позволяют программисту писать программы в процедурном стиле, или в сочетании обоих стилей. Обычно код ввода / вывода на функциональных языках написан в процедурном стиле.
Существует несколько эзотерических функциональных языков (например, Unlambda ), которые избегают заповедей структурированного программирования ради сложности программирования. (и поэтому сложно). Эти языки являются исключением из общего правила между процедурными и функциональными языками.
В логическом программировании программа - это набор предпосылок, и вычисления выполняются путем попытки доказать теоремы-кандидаты. С этой точки зрения логические программы декларативны, фокусируясь на том, в чем проблема, а не на том, как ее решить.
Однако метод обратного рассуждения, реализованный с помощью разрешения SLD, используемый для решения проблем в языках логического программирования, таких как Prolog, обрабатывает программы как целеполагающие процедуры. Таким образом, предложения формы:
имеют двойную интерпретацию, обе как процедуры
и как логические следствия:
Опытные программисты логики используют процедурную интерпретацию для написания программ, которые являются эффективными и эффективны, и они используют декларативную интерпретацию, чтобы гарантировать правильность программ.