Процедурное программирование - Procedural programming

Процедурное программирование это парадигма программирования, происходит от структурное программирование,[нужна цитата ] основанный на концепции вызов процедуры. Процедуры (тип рутинной или подпрограмма ) просто содержат серию вычислительных шагов, которые необходимо выполнить. Любая данная процедура может быть вызвана в любой момент во время выполнения программы, в том числе другими процедурами или самой собой. Первые основные процедурные языки программирования появились примерно в 1957–1964 годах, в том числе Фортран, АЛГОЛ, КОБОЛ, PL / I и БАЗОВЫЙ.[1] Паскаль и C были опубликованы примерно в 1970–1972 гг.

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

Процедуры и модульность

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

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

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

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

Сравнение с другими парадигмами программирования

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

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

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

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

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

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

ПроцедурныйОбъектно-ориентированный
ПроцедураМетод
ЗаписыватьОбъект
МодульУчебный класс
Вызов процедурыСообщение

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

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

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

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

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

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

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

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

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

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

H: - B1,…, Bп.

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

показать / решить ЧАС, показать / решить B1 и и Bп

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

B1 и… и Bп следует H.

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

Смотрите также

Рекомендации

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

внешняя ссылка