Из чего состоит программа в процедурном программировании

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

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

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

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

Основы программирования: структура программ

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

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

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

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

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

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

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

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

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

Ликбез программиста #1: Парадигмы программирования — ООП, ФП…

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

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

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

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

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

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

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

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

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

Читайте также:
001 ошибка инициализации программы

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

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

Однако метод обратного рассуждения, реализованный с помощью разрешения 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 г. считают годом рождения этого языка.

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

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

Читайте также:
Программа vba для вычисления значения функции

В начале 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru