Процедурное программирование — это парадигма программирования, полученный из структурного программирования, основанный на концепции o f вызов процедуры . Процедуры (тип подпрограммы или подпрограммы ) просто содержат серию вычислительных шагов, которые необходимо выполнить. Любая данная процедура может быть вызвана в любой момент во время выполнения программы, в том числе другими процедурами или самой собой. Первые основные процедурные языки программирования появились примерно в 1957–1964 годах, включая Fortran, ALGOL, COBOL, PL / I и . BASIC. Pascal и C были опубликованы примерно в 1970–1972 годах.
Компьютерные процессоры обеспечивают аппаратную поддержку процедурного программирования через стековый регистр и инструкции для вызова процедур и возврата из них. Возможна аппаратная поддержка других типов программирования, но ни одна попытка не увенчалась успехом (например, машины на Лиспе или процессоры Java ).
Процедуры и модульность
Модульность обычно желательна, особенно в больших и сложных программах. Входные данные обычно указываются синтаксически в форме аргументов, а выходы доставляются как возвращаемые значения.
Основы программирования: структура программ
Объем — еще один метод, который помогает сохранить модульность процедур. Он предотвращает доступ процедуры к переменным других процедур (и наоборот), включая предыдущие экземпляры самой себя, без явной авторизации.
Менее модульные процедуры, часто используются в небольших или быстро написанных программах, имеют тенденцию взаимодействуют с большим количеством переменных в среде выполнения , которые другие процедуры также могут изменять.
Благодаря возможности определять простой интерфейс, быть автономным и повторно использоваться, процедуры являются удобным средством создания фрагментов кода, написанных разными людьми или разными группами, в том числе с помощью библиотеки программирования.
Сравнение с другими парадигмами программирования
Императивное программирование
Процедурные языки программирования также являются императивными языками, поскольку они явно указывают на состояние среды выполнения. Это может быть что угодно, от переменных (которые могут соответствовать регистрам процессора ) до чего-то вроде положения «черепахи» в языке программирования Logo.
Часто термины «процедурное программирование» и «императивное программирование» используется как синоним. Однако процедурное программирование в значительной степени полагается на блоки и область действия, тогда как императивное программирование в целом может иметь или не иметь таких функций. Таким образом, процедурные языки обычно используют зарезервированные слова, которые действуют на блоки, такие как if , , а и для , для реализации потока управления, тогда как не- В структурированных императивных языках для той же цели используются операторы goto и таблицы переходов.
Объектно-ориентированное программирование
Целью процедурного программирования является разбиение задачи программирования на набор переменных, структур данных и подпрограммы, тогда как в объектно-ориентированном программировании это разделение задачи программирования на объекты, которые раскрывают поведение (методы) и данные (элементы или атрибуты) с помощью интерфейсов. Наиболее важным отличием является то, что в то время как процедурное программирование использует процедуры для работы со структурами данных, объектно-ориентированное программирование связывает их вместе, так что «объект», который является экземпляром класса, оперирует своей «собственной» структурой данных. 121>
Ликбез программиста #1: Парадигмы программирования — ООП, ФП…
Номенклатура этих двух вариантов различается, хотя они имеют схожую семантику:
Процедуры | Метод |
Запись | Объект |
Модуль | Класс |
Вызов процедуры | Сообщение |
Функциональное программирование
Принципы модульности и повторного использования кода в практических функциональных языках по сути являются то же, что и в процедурных языках, поскольку оба они происходят из структурного программирования. Так, например:
- Процедуры соответствуют функциям. Оба позволяют повторно использовать один и тот же код в различных частях программы и в различных точках ее выполнения.
- Таким же образом, вызовы процедур соответствуют применению функции.
- Функции и их вызовы модульно отделены друг от друга таким же образом за счет использования аргументов функций, возвращаемых значений и областей действия переменных.
Основное различие между стилями состоит в том, что языки функционального программирования удаляют или, по крайней мере, не уделяют внимания императивным элементам процедурного программирования.. Таким образом, набор функций функциональных языков разработан для поддержки написания программ в максимально возможной степени с точки зрения чистых функций :
- В то время как процедурные языки моделируют выполнение программы как последовательность императивных команд, которые могут неявно изменять общее состояние, функциональные языки программирования моделируют выполнение как оценку сложных выражений, которые зависят друг от друга только с точки зрения аргументов и возвращаемых значений. По этой причине функциональные программы могут иметь свободный порядок выполнения кода, а языки могут мало управлять порядком, в котором выполняются различные части программы. (Например, аргументы для вызова процедуры в Scheme выполняются в произвольном порядке.)
- Функциональные языки программирования поддерживают (и активно используют) первоклассные функции, анонимные функции и закрытие, хотя эти концепции включены в новые процедурные языки.
- Функциональные языки программирования, как правило, полагаются на оптимизацию хвостового вызова и функции высшего порядка вместо конструкций императивного цикла.
Однако многие функциональные языки на самом деле не совсем функциональны и предлагают императивные / процедурные конструкции, которые позволяют программисту писать программы в процедурном стиле, или в сочетании обоих стилей. Обычно код ввода / вывода на функциональных языках написан в процедурном стиле.
Существует несколько эзотерических функциональных языков (например, Unlambda ), которые избегают заповедей структурированного программирования ради сложности программирования. (и поэтому сложно). Эти языки являются исключением из общего правила между процедурными и функциональными языками.
Логическое программирование
В логическом программировании программа — это набор предпосылок, и вычисления выполняются путем попытки доказать теоремы-кандидаты. С этой точки зрения логические программы декларативны, фокусируясь на том, в чем проблема, а не на том, как ее решить.
Однако метод обратного рассуждения, реализованный с помощью разрешения SLD, используемый для решения проблем в языках логического программирования, таких как Prolog, обрабатывает программы как целеполагающие процедуры. Таким образом, предложения формы:
имеют двойную интерпретацию, обе как процедуры
для отображения / решения H, показать / решить B1и… и Bn
и как логические следствия:
B1и… и B n подразумевает H.
Опытные программисты логики используют процедурную интерпретацию для написания программ, которые являются эффективными и эффективны, и они используют декларативную интерпретацию, чтобы гарантировать правильность программ.
См. Также
- Сравнение парадигм программирования
- Декларативное программирование
- Функциональное программирование (контраст)
- Императивное программирование
- Логическое программирование
- Объектно-ориентированное программирование
- Парадигмы программирования
- Язык программирования
- Структурированное программирование
- процедурные расширения SQL
Ссылки
Внешние ссылки
- Процедурные языки на Курли
Источник: alphapedia.ru
Процедурные языки программирования
Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложенафон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Процедурный язык программирования предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Особенность таких языков программирования состоит в том, что задачи разбиваются на шаги и решаются шаг за шагом. Используя процедурный язык, программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов.
Бейсик (от BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих; англ. basic— основной, базовый) — семейство высокоуровневых языков программирования.
Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Куртом (Thomas E. Kurtz) и Джоном Кемени (John G. Kemeny).
Язык предназначался для обучения программированию и получил широкое распространение в виде различных диалектов, прежде всего, как язык для домашних микрокомпьютеров.
Предпосылки
До середины 1960-х компьютеры (ЭВМ) были слишком дорогими машинами, использовавшимися в основном для научно-технических задач, и выполнявшими задачи не в интерактивном режиме (т.н. пакетная обработка), когда общение с машиной осуществлялось через её оператора.
Языки программирования этой поры, как и компьютеры, на которых они использовались, были разработаны для работы с ними обученных технических специалистов и программистов. Поскольку машины были дорогими, то и машинное время было дорого — поэтому на первом месте стояла скорость выполнения программы (скорость счёта).
Однако, в течение 1960-х цены на компьютеры стали падать так, что даже небольшие компании могли их себе позволить; их быстродействие всё увеличивалась и наступило время, когда стало возможно организовать более эффективную непосредственную работу пользователей с компьютерами в так называемом режиме разделения времени (time-sharing).
Бейсик был придуман в 1963 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Куртцом, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, этот «изначальный» диалект стали называть Dartmouth BASIC.
Бейсик был спроектирован так, чтобы студенты могли без затруднений писать программы, используя терминалы с разделением времени. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач не имея специальной подготовки.
При проектировании языка использовались следующие восемь принципов: новый язык должен
- быть простым в использовании для начинающих
- быть языком программирования общего назначения
- предоставлять возможность расширения функциональности, доступную опытным программистам
- быть интерактивным
- предоставлять ясные сообщения об ошибках
- быстро работать на небольших программах
- не требовать понимания работы аппаратного обеспечения
- защищать пользователя от операционной системы
- простую языковую базу, из которой вынесены в библиотеки многие существенные возможности, вроде математических функций или функций управления файлами;
- ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования;
- систему типов, предохраняющую от бессмысленных операций;
- использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;
- непосредственный доступ к памяти компьютера через использование указателей;
- минимальное число ключевых слов;
- передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке выполняется с помощью указателей);
- указатели на функции и статические переменные
- области действия имён;
- записи — определяемые пользователем собирательные типы данных (структуры), которыми можно манипулировать как одним целым;
- автоматическое управление памятью;
- поддержка объектно-ориентированного программирования (при этом первые версии C++ генерировали код программы на языке Си);
- вложенные функции (существуют компиляторы языка Си реализующие эту функцию, например компилятор GNU);
- полиморфизм функций и операторов;
- встроенная поддержка многозадачности и сети
- функции высшего порядка
- карринг.
- применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
- широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
- аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).
Источник: studfile.net
Процедурное программирование
Процедурное пли императивное (от лат. imperativus — повелительный) программирование есть отражение фон Неймановской архитектуры компьютера. Программа на процедурном языке состоит из последовательности команд, определяющих процедуру решения задачи.
Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концепция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, т.е. программа последовательно обновляет содержимое памяти, изменяя его от исходного состояния до результирующего.
Одним из первых процедурных языков программирования высокого уровня стал Фортран (FORmula ZR/LVslation), созданный в начале 50-х гг. в США фирмой IBM. Первая публикация о нем появилась в 1954 г. Основное назначение языка – программирование научно-технических задач. Объектами языка являются целые и вещественные числа и числовые переменные.
Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана – ввод, вывод, присваивание, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире.
За это время накоплена огромная библиотека программ, написанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. В 2000 г. была реализована версия Фортран F2k, имеется стандартная версия HPF (High Performance Fortran) для параллельных суперкомпьютеров. Многие средства Фортрана использованы в языках PL-1 и Бейсик.
Кобол (COmmon business Oriented.Language – общепринятый деловой язык) – язык программирования, ориентированный на решение задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958–1960 гг. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст.
Группы последовательно записанных операторов объединяются в предложения, предложения – в параграфы, параграфы – в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка.
В Коболе были реализованы мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.
Алгол (/itGOrithmic.Language) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотрудничества конца 50-х гг. (Алгол-60). Алгол предназначался для записи алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач.
Специалисты–практики воспринимали этот язык неоднозначно, но тем не менее, он как признанный международный язык сыграл большую роль в становлении основных понятий программирования и для обучения программистов. В нем впервые введены понятия «блочная структура программы», «динамическое распределение памяти».
Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональное происхождение, Алгол-60 получил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансляторы с Алгола-60.
В 1968 г. в результате дальнейшего развития и усовершенствования Алгола-60 была создана версия Алгол-68. Это многоцелевой универсальный расширенный язык программирования. Последнее свойство позволяло с помощью одной и той же программы транслятора осуществлять трансляцию с различных расширенных версий языка без дополнительных затрат на приспособление этого языка к различным категориям пользователей, на получение проблемно-ориентированных диалектов языка. По своим возможностям Алгол-68 и сегодня опережает многие языки программирования, однако из-за отсутствия эффективных компьютеров для него не удалось своевременно создать хорошие компиляторы. В нашей стране в те годы под руководством академика Андрея Петровича Ершова был создан транслятор Альфа, который представлял достаточно удачную русифицированную версию Алгола.
В середине 60-х гг. сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих (beginners ЛИ-purpose Symbolic /nstruction Code) или сокращенно BASIC (Бейсик). 1964 г. считают годом рождения этого языка.
Он получил самое широкое распространение при работе на персональных компьютерах в режиме интерактивного диалога. Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д.
Согласно концепциям, заложенным в Бейсике, в нем широко распространены различные правила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий языка, зачастую мало совместимых друг с другом. Однако, зная одну из версий, можно без особого труда освоить любую другую. Бейсик активно поглощает многие концепции и новинки из других языков. Первоначально интерактивный режим осуществлялся с использованием интерпретатора, в настоящее время для этого языка имеются также и компиляторы.
В начале 60-х гг. каждый из существующих языков программирования был ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предприняты попытки преодолеть этот недостаток путем создания универсального языка программирования.
ПЛ/1 (PL/1 — Programming Language One) — первый многоцелевой универсальный язык, разработан в США фирмой IBM в 1963—1966 гг. Это один из наиболее распространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки систем математического обеспечения.
При разработке PL/1 были широко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. PL/1 — богатый и гибкий язык, дает возможность производить вставки, исправлять текст программы в процессе ее отладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания IBM и сегодня продолжает поддерживать этот язык.
Паскаль (Pascal) является одним из наиболее популярных процедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968-1971 гг. Никлаусом Виртом в Высшей технической школе (ЕТН) в Цюрихе (Швейцария), он был назван в честь французского математика и философа Блеза Паскаля (1623-1662). Целью работы Н. Вирта было создание языка, который
• строился бы на небольшом количестве базовых понятий;
• имел простой синтаксис;
• допускал перевод программ в машинный код простым компилятором.
Лингвистическая концепция Паскаля пропагандирует системный подход, выражающийся, в частности, в расчленении крупных задач на меньшие по сложности и размеру, легко поддающиеся решению. К основным принципам Паскаля следует отнести:
• Структурное программирование. Суть его заключается в оформлении последовательности команд как замкнутых функций или процедур и в объединении данных, связанных по смыслу, в сложные структуры данных. Благодаря этому повышается наглядность текста и упрощается его отладка.
• Программирование сверху вниз, когда задача разбивается на простые, после чего каждая решается в отдельности. Затем компонуются результаты проектирования простых задач, и поставленная задача решается сверху вниз в целом.
В основу разработки языка Паскаль был положен Алгол-60, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его для создания крупных проектов, например, программ-трансляторов. Паскаль реализован для всех типов компьютеров, в настоящее время используется во многих учебных заведениях для обучения программированию, а также для создания больших реальных проектов.
Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождавшим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США.
В январе 1975 г. Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки одного универсального языка. На конкурсной основе комитет рассмотрел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для окончательного рассмотрения было оставлено два проекта.
В мае 1979 г. был объявлен победитель — группа ученых во главе с Жаном Ихбиа. Победивший язык назвали АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему составлять описание машины, а в начале 40-х гг. XIX в. разработала первую в мире программу для вычислительной машины. Язык АДА — прямой наследник Паскаля.
Он предназначен для создания и длительного сопровождения больших программных систем, управления процессами в реальном масштабе времени. В языке четко выражена модульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его достоинством является возможность параллельного программирования ветвей программы, которые затем могут реализоваться
327на многопроцессорных компьютерах. Язык АДА сложен для изучения.
Язык программирования С (Си) был разработан в лаборатории Bell для реализации операционной системы UNIX в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора.
В С сочетаются достоинства современных высокоуровневых языков в части управляющих конструкций и структур данных с возможностями прямого доступа к аппаратным средствам компьютера. Синтаксис языка С обеспечивает краткость программы, его компиляторы генерируют эффективный объектный код.
Одна из наиболее существенных особенностей С состоит в том, что различия между выражениями и операторами нивелируются, это приближает его к функциональным языкам. Например, выражение может обладать побочным эффектом присваивания, а также может использоваться в качестве оператора.
Нет четкого различия между процедурами и функциями, более того, понятие процедуры вообще не вводится. Синтаксис языка затрудняет программирование и восприятие составленных программ. Отсутствует строгая типизация данных, что предоставляет дополнительные возможности программисту, но не способствует созданию надежных программ. Язык С приобрел большую популярность среди системных и прикладных программистов. В настоящее время этот язык реализован для большинства компьютерных платформ.
Источник: infopedia.su