Процедурное программирование
Эта статья нуждается в дополнительных цитатах для проверки . ( апрель 2008 г. ) |
Процедурное программирование — это парадигма программирования , классифицируемая как императивное программирование . [1] это предполагает реализацию поведения компьютерной программы в виде процедур (также известных как функции, подпрограммы), которые вызывают друг друга. Полученная программа представляет собой серию шагов, образующих иерархию вызовов составляющих ее процедур.
Первые крупные процедурные языки программирования появились ок. 1957–1964 , включая Fortran , ALGOL , COBOL , PL/I и BASIC . [2] Паскаль и C были опубликованы c. 1970 –1972.
Компьютерные процессоры обеспечивают аппаратную поддержку процедурного программирования посредством регистра стека и инструкций для вызова процедур и возврата из них. Возможна аппаратная поддержка других типов программирования, таких как машины Lisp или процессоры Java , но ни одна попытка не имела коммерческого успеха. [ противоречивый ]
Практики разработки [ править ]
Определенные методы разработки программного обеспечения часто используются вместе с процедурным программированием для повышения качества и снижения затрат на разработку и обслуживание.
Модульность и область применения [ править ]
Модульность — это организация процедур программы в отдельных модулях, каждый из которых имеет определенную и понятную цель.
Минимизация количества переменных и процедур может повысить качество программного обеспечения за счет снижения когнитивной нагрузки на процедуры и модули.
Программа, лишенная модульности или широкой области действия, обычно имеет процедуры, которые используют множество переменных , которые также используют другие процедуры. Полученный код относительно сложен для понимания и поддержки.
Делюсь [ править ]
Поскольку процедура может определять четко определенный интерфейс и быть автономной, она поддерживает повторное использование кода – в частности, через программную библиотеку .
Сравнение с другими парадигмами программирования [ править ]
Императивное программирование [ править ]
Процедурное программирование классифицируется как императивное программирование , поскольку оно предполагает прямую команду выполнения.
Процедурный является подклассом императива, поскольку процедурный включает в себя концепции блока и области действия , тогда как императив описывает более общую концепцию, которая не требует таких функций. В процедурных языках обычно используются зарезервированные слова, определяющие блоки, например if
, while
, и for
, для реализации потока управления , тогда как неструктурированные императивные языки (т. е. язык ассемблера ) используют перехода и для этой цели таблицы ветвления .
Объектно-ориентированное программирование [ править ]
(ООП), также классифицируемое как императивное, Объектно-ориентированное программирование предполагает разделение реализации программы на объекты, которые предоставляют поведение (методы) и данные (члены) через четко определенный интерфейс. Напротив, процедурное программирование заключается в разделении реализации программы на переменные , структуры данных и подпрограммы . Важным отличием является то, что, хотя процедурный подход включает в себя процедуры работы со структурами данных, ООП объединяет их вместе. Объект — это структура данных и поведение, связанное с этой структурой данных. [3]
Некоторые языки ООП поддерживают концепцию класса, которая позволяет создавать объект на основе определения.
Номенклатура варьируется между ними, хотя они имеют схожую семантику:
процедурный | Объектно-ориентированный |
---|---|
Процедура | Метод |
Записывать | Объект |
Модуль | Сорт |
Вызов процедуры | Сообщение |
Функциональное программирование [ править ]
Принципы модульности и повторного использования кода в функциональных языках по сути такие же, как и в процедурных языках, поскольку оба они вытекают из структурного программирования . Например:
- Процедуры соответствуют функциям. Оба допускают повторное использование одного и того же кода в разных частях программы и на разных этапах ее выполнения.
- Точно так же вызовы процедур соответствуют применению функций.
- Функции и их модульность отделяются друг от друга одинаковым образом с помощью аргументов функций, возвращаемых значений и областей видимости переменных.
Основное различие между стилями состоит в том, что языки функционального программирования удаляют или, по крайней мере, принижают значение императивных элементов процедурного программирования. Поэтому набор функций функциональных языков предназначен для максимально возможной поддержки написания программ с использованием чистых функций :
- В то время как процедурные языки моделируют выполнение программы как последовательность императивных команд, которые могут неявно изменять общее состояние, языки функционального программирования моделируют выполнение как оценку сложных выражений, которые зависят друг от друга только с точки зрения аргументов и возвращаемых значений. По этой причине функциональные программы могут иметь свободный порядок выполнения кода, а языки могут мало контролировать порядок выполнения различных частей программы; например, аргументы вызова процедуры в Scheme оцениваются в произвольном порядке.
- Языки функционального программирования поддерживают (и активно используют) первоклассные функции , анонимные функции и замыкания , хотя эти концепции также были включены в процедурные языки, по крайней мере, начиная с Algol 68 .
- Функциональные языки программирования, как правило, полагаются на оптимизацию хвостовых вызовов и функции более высокого порядка, а не на конструкции императивного цикла.
Однако многие функциональные языки на самом деле нечисто функциональны и предлагают императивные/процедурные конструкции, которые позволяют программисту писать программы в процедурном стиле или в комбинации обоих стилей. Обычно код ввода/вывода на функциональных языках пишется в процедурном стиле.
Действительно существует несколько эзотерических функциональных языков (таких как Unlambda ), которые избегают принципов структурированного программирования ради того, чтобы на них было сложно программировать (и, следовательно, это было сложно). Эти языки являются исключением из общего правила между процедурными и функциональными языками.
Логическое программирование [ править ]
В логическом программировании программа представляет собой набор предпосылок, а вычисления выполняются путем попытки доказать возможные теоремы. С этой точки зрения логические программы являются декларативными , фокусируясь на том, в чем состоит проблема, а не на том, как ее решить.
Однако метод обратного рассуждения , реализованный с помощью разрешения SLD и используемый для решения проблем в языках логического программирования, таких как Пролог , рассматривает программы как процедуры снижения цели. Таким образом, предложения вида:
- Ч:- Б 1 , …, Б н .
имеют двойную интерпретацию: как процедуры
- показать/решить H , покажи/реши В 1 и … и Б н
и как логические последствия:
- B 1 и … и B n подразумевают H .
Квалифицированный программист логики использует процедурную интерпретацию для написания эффективных и действенных программ, а декларативную интерпретацию — для обеспечения корректности программ.
См. также [ править ]
- Сравнение парадигм программирования
- Декларативное программирование
- Функциональное программирование (контраст)
- Императивное программирование
- Логическое программирование
- Объектно-ориентированное программирование
- Парадигмы программирования
- Язык программирования
- Структурированное программирование
- Процедурные расширения SQL
Ссылки [ править ]
- ^ «Парадигмы программирования» .
- ^ «Добро пожаловать в IEEE Xplore 2.0: использование процедурных языков программирования для управления производственными системами». Слушания. Седьмая конференция IEEE по применению искусственного интеллекта . ieeexplore.ieee.org. дои : 10.1109/CAIA.1991.120848 . S2CID 58175293 .
- ^ Стивенсон, Джозеф (август 2013 г.). «Процедурное программирование против объектно-ориентированного программирования» . neonbrand.com . Проверено 19 августа 2013 г.