Процедура (программирование) — это… Что такое Процедура (программирование)?
Подпрограмма (англ. subprogram) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
Назначение подпрограмм.
Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти — они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение — структуризация программы с целью удобства её понимания и сопровождения.
- Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.
- Даже в тех случаях, когда в подпрограмму выделяется однократно производимый набор действий, это оправдано, так как позволяет сократить размеры целостных блоков кода, составляющих программу, то есть сделать программу более понятной и обозримой…
Механизм подпрограмм, их описание и вызов
В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма также имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.
Вызов подпрограммы выполняется с помощью команды вызова, включающей в себя имя подпрограммы. В большинстве современных языков программирования команда вызова представляет собой просто имя вызываемой подпрограммы, за которым могут следовать фактические параметры (см. ниже).
В следующем примере на языке Паскаль подпрограмма subprog вызывается из основной программы трижды:
program SubProgExample; // Описание подпрограммы subprog procedure subprog; // Заголовок, включающий имя подпрограммы begin // начало тела подпрограммы WriteLn('Bye'); end; // конец тела подпрограммы begin WriteLn('Hello'); subprog; // 1-й вызов subprog; // 2-й вызов subprog; // 3-й вызов end.
Результатом выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».
Некоторые языки программирования (например, Паскаль, Ада, Модула-2) допускают описание вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм. Такие вложенные подпрограммы могут использоваться только в той подпрограмме, в которой они описаны. В иных случаях (например, в языке Си) вложение подпрограмм не допускается. Никаких принципиальных преимуществ вложение подпрограмм не даёт, но может быть удобно для более логичной структуризации программы (если какая-то подпрограмма используется только в некоторой другой подпрограмме, логично поместить первую во вторую).
Параметры подпрограмм
Назначение параметров
Подпрограммы часто используются для многократного выполнения стереотипных действий над различными данными. Подпрограмма обычно имеет доступ к объектам данных, описанным в основной программе (по крайней мере, к некоторым из них), поэтому для того, чтобы передать в подпрограмму обрабатываемые данные, их достаточно присвоить, например, глобальным переменным. Но такой путь не особенно удобен и чреват ошибками.
Для обеспечения контролируемой передачи параметров в подпрограмму и возврата результатов из неё используется механизм параметров. Параметры описываются при описании подпрограммы (в её заголовке) и могут использоваться внутри процедуры аналогично переменным, описанным в ней. При вызове процедуры значения каждого из параметров указываются в команде вызова (обычно после имени вызываемой подпрограммы).
program SubProgExample2; // Описание подпрограммы subprog procedure subprog(Line: String); // Заголовок, включающий имя подпрограммы begin // начало тела подпрограммы WriteLn(Line); end; // конец тела подпрограммы begin WriteLn('Hello'); subprog('Good bye,'); // 1-й вызов subprog('my love,'); // 2-й вызов subprog('good bye!'); // 3-й вызов end.
В приведённом примере параметр Line подпрограммы subprog в каждом вызове получает различное значение, благодаря чему выводятся не одинаковые строки, а разные.
Формальные и фактические параметры
Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые — фактическими параметрами. Так, в последнем примере параметр Line в заголовке и теле подпрограммы subprog — это формальный параметр, а строка ‘Good bye’ , использованная в первом вызове этой подпрограммы — фактический параметр. При вызове подпрограммы фактические параметры, указанные в команде вызова, становятся значениями соответствующих формальных параметров, чем и обеспечивается передача данных в подпрограмму.
Способ передачи параметров в подпрограмму
Существует несколько способов передачи параметров в подпрограмму.
- Передача параметров по значению. Формальному параметру присваивается значение фактического параметра. В этом случае формальный параметр будет содержать копию значения, имеющегося в фактическом, и никакое воздействие, производимое внутри подпрограммы на формальные параметры, не отражается на параметрах фактических. Так, если в качестве фактического параметра будет использована переменная, и внутри подпрограммы значение соответствующего формального параметра будет изменено, то фактический параметр останется без изменений.
int func1(int x) { x=x+1; return x; }
- Передача параметров по ссылке. В формальный параметр может быть помещён сам фактический параметр (обычно это реализуется путём помещения в формальный параметр ссылки на фактический). При этом любое изменение формального параметра в подпрограмме отразится на фактическом параметре — оба параметра во время вызова подпрограммы суть одно и то же. Параметры, передаваемые по ссылке, дают возможность не только передавать параметры внутрь подпрограммы, но и возвращать вычисленные значения в точку вызова. Для этого параметру внутри подпрограммы просто присваивается нужное значение, и после возврата из подпрограммы переменная, использованная в качестве фактического параметра, получает это значение.
void func2(int &x) { x=x+1; }
- Передача параметров по имени. В формальный параметр может быть помещено произвольное выражение. При этом вычисление этого выражения произойдёт внутри подпрограммы в тот момент, когда потребуется его значение. Если это значение фигурирует несколько раз, то и вычисляться оно будет тоже несколько раз. Параметры, передаваемые по имени, дают возможность писать довольно универсальные подпрограммы. Такой способ передачи параметров используется, к примеру в языках Алгол или Алгол 68.
- Передача параметров через стек. Это фактически разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором. Данный подход реализован в языке Форт.
Язык программирования может предоставлять возможность передавать параметры в подпрограммы либо только по значению (так сделано в языке Си), либо по значению и по ссылке (это реализовано в Паскале, Аде, C++), либо по имени и значению (это реализовано в языках Алгол и Алгол 68). Во последних двух случаях для различения способов передачи параметра используются отдельные синтаксическая конструкции (в Паскале это ключевое слово var при описании параметра). В действительности, если язык содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но эта возможность удобна, так как позволяет работать с формальным параметром-ссылкой без разыменования, а также повышает надёжность и безопасность программы.
На параметры, передаваемые по ссылке, накладываются естественные ограничения: фактический параметр, подставляемый на место такого параметра при вызове, обязан быть переменной (то есть иметь адрес), а в языках со строгой типизацией — ещё и иметь в точности такой же тип данных.
Виды подпрограмм
В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.
- Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания. Подробнее см. в статье Функция (программирование).
- Процедура — это любая подпрограмма, которая не является функцией.
Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами. Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.
См. также
Wikimedia Foundation. 2010.
dic.academic.ru
Чем отличаются понятия функции, процедуры и метода в программировании? — Toster.ru
D3lphiФункция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.
как бы да, но… только на самом начальном этапе, что бы угомонить хаос в голове новичка ))
в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык
в этом случае чаще принято уточнять что метод — это один из видов челнов класса (бывают еще поля, свойства, интерфейсы но это уже контекст конкретного языка) .. и как верно заметил Griboks — он реализуется функцией или процедурой
но .. есть много языков, где понятия метод нет вообще
а еще есть функциональное программирование .. эта парадигма частично присутствует во многих современных языках, однако есть языки, где любой код только функция
2 — из контекста языков:
понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее
сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си
а в нем нет понятия процедуры, только функции.. а на случай, когда функция не обязана возвращать какую либо величину, просто указывается тип возвращаемого значения void
смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)
toster.ru
Избранные докиПодписаться через RSS2Email.ru | Программируем на R: как перестать бояться и начать считать28.11.2014Возможно, вас заинтересовала проблема глобального потепления, и нужно сравнить погодные показатели с архивными данными времен вашего детства. Калькулятором тут не обойтись. Да и такие программы для обработки электронных таблиц, как Microsoft Excel или Open Calc, пригодны только для простых вычислений. Придется изучать специализированный статистический софт. В этой статье мы расскажем об одном из популярнейших решений — языке программирования R. Smart Install Maker. Создаем установщик23.11.2014Появляется все больше инди-разработчиков, которые создают собственное программное обеспечение для компьютеров. Однако, чтобы продукт выглядел качественным, необходимо продумать все до мелочей, в том числе и систему установки программы. Тратить время на написание собственных инсталляторов никто не хочет, поэтому на рынке появляется все больше специализированных утилит, которые все сделают за вас. Они дают целевому пользователю то, что ему необходимо. Функции в языке программирования C++18.11.2014Функцией называют обособленный модуль программы, внутри которого производятся некоторые вычисления и преобразования. Помимо непосредственных вычислений внутри данного модуля могут создаваться и удаляться переменные. Теперь расскажем о том, из каких основных частей состоит функция в C++. Самая первая часть — это тип возвращаемого значения. Он показывает, что будет передавать функция в основную программу после своих внутренних преобразований… Урок «Hello world» на Microsoft Visual Studio 201313.11.2014Статья предназначена для новичков, которые пока не знают даже как создать файл C++ в среде Visual Studio. Перед вводом кода нужно сделать проект: «File — New — Project» или при помощи быстро-вызова через Ctrl+Shift+N. В открывшемся окне слева выбираем шаблоны «Visual C++». В центральной же части нажимаем на «Empty Project». Затем вводим значимое имя проекта, чтобы помнить зачем он создавался (в нашем случае подойдёт Lesson), и нажимаем «OK»… Код, который почти невозможно взломать05.11.2014Современные программы могут хранить в своем коде бесценные секреты. С помощью алгоритмов можно предсказать, какой товар на Amazon будет продаваться лучше всего или станет ли популярным сюжет нового фильма. Само собой, разработчики подобных программ не хотят, чтобы посторонние люди имели возможность изучить их код. Исследователи из Калифорнийского университета, IBM и Техасского университета в Остине не оставляют попыток избавиться от этой угрозы. Программирование на заказ как бизнес10.06.2014Этот вид бизнеса, — программирование на заказ, — распространен не только в режиме оффлайн, но и онлайн. Эффективность бизнеса определяется не только хорошими познаниями и умениями в области составления программ, но и способностью отслеживать инновации, новыми технологиями и инструментами, вовремя проведенным реинжинирингом. Чаще всего эта услуга привлекается небольшими предприятиями и даже физическими лицами для автоматизации бизнес-процессов. Лёгкое создание виртуальных машин с помощью PuPHPet. Часть 314.05.2014Выполнение всех этих шагов может поначалу показаться чересчур долгим. Но когда вы разберетесь с этим лучше, сможете проделывать их быстро. Тем более, что вам ненужно каждый раз пересоздавать все с нуля. Если вы перетащите puppet/hieradata/common.yaml на puphpet.com, он автоматически заполнит форму соответственно этой конфигурации. Вам останется только откорректировать ее как надо. Один раз проделав работу, вы сможете выполнять ее быстрее и легче. Лёгкое создание виртуальных машин с помощью PuPHPet. Часть 212.05.2014Apache или Nginx? В этом руководстве я остановлюсь на Apache. Опции его конфигурирования просты. Сначала укажем модули, которые нужно установить и включить. Для этого наберем их в поле Apache Modules. При этом выпадет список доступных модулей. Это позволяет избежать ошибок при наборе. Далее перейдем к конфигурации Virtual Host. Каким должно быть имя сервера и алиас вашего приложения? Сначала указываем их, потом корневую директорию и порт. Лёгкое создание виртуальных машин с помощью PuPHPet12.05.2014Окружение — одна из моих любимых мозолей в разработке софта. Его каждый раз приходится создавать заново для разных проектов с разными потребностями. Приходится обеспечивать соответствие окружения для всех разработчиков в команде (в том числе и для уделенных). Создавать окружения для разработки, тестирования и продакшена. Вас напрягает создавать и настраивать среду разработки? Это замедляет вашу работу? Если да, могу предложить решение — PuPHPet! Краткое введение в трейты в PHP21.04.2014Трейт, по существу, — это группа чистых методов, которые служат строительным блоком для классов и являются элементарной единицей повторного использования кода. В этой модели классы составляются как наборы трейтов, для чего служит специальный склеивающий код, соединяющий трейты вместе и задающий их нужное состояние. Практическое обоснование трейтов заключается в том, что классы иногда слишком велики для оправданного повторного использования кода. 6 подсказок по отладке для каждого PHP-кодера. Часть 211.04.2014Иногда баги очень хитры или сообщения об ошибках совершенно непонятны. В таких случаях используйте дебагер и точки останова (для этого можно воспользоваться XDebug), добавляйте в лог-файл дополнительную отладочную информацию, помещайте ошибки в песочницу и отлаживайте «с уткой». Я надеюсь, что эти подсказки сэкономят ваше время на отладке и сделают ее чуть приятнее! И не стесняйтесь делиться своими собственными подсказками в разделе комментариев!
6 подсказок по отладке для каждого PHP-кодера09.04.2014Программисты тратят на отладку больше времени, чем на написание кода. Когда я был новичком, я тратил уйму времени на ковыряние кода в надежде, что баги исчезнут сами собой. Не делайте этого! Представьте, сколько времени я потерял! Ваш код не работает, а вы видите лишь то, что браузер не показывает того, что должен был показать? В этой статье я покажу вам пару трюков, которые позволяют работать эффективнее, но ключевая тема — это отладка кода.
Курсоры в хранимых процедурах MySQL. Часть 326.03.2014Мы углубились в хранимые процедуры MySQL, рассмотрели функциональность курсоров. В предыдущих частях статьи мы продемонстрировали, как получать скалярные данные с помощью параметров вывода (заданных как out var_name vartype в объявлении ХП). Теперь рассмотрим, как получать вычисляемые наборы данных посредством временных таблиц. Попутно будут рассмотрены некоторые другие аспекты хранимых процедур. Также продемонстрируем вызов ХП из кода PHP.
Курсоры в хранимых процедурах MySQL. Часть 224.03.2014В данной части статьи на примерах демонстрируется, как создать хранимую процедуру с помощью MySQL Workbench и как использовать в этой хранимке курсор. Построчно объясняется, как работают курсоры в хранимых процедурах MySQL, основные принципы их применения. Затем в статье демонстрируется, как вызывать написанную ХП из кода PHP. В качестве примера используется реальная задача по обработке статистики игр для баскетбольного клуба ЛА Лейкерс.
Курсоры в хранимых процедурах MySQL19.03.2014Курсоры не могут использоваться в MySQL сами по себе. Они — неотъемлемые компоненты хранимых процедур. Я считаю их аналогами указателей в C/C++, или итераторов в цикле foreach. С помощью курсоров мы можем обойти весь набор данных и над каждой записью произвести требуемые действия. Такие операции могут производиться и на стороне PHP, но если мы хотим уменьшить объем передаваемых данных, мы можем просто получить в PHP уже готовые обобщенные данные.
Хранимые процедуры в MySQL и PHP. Часть 212.03.2014В этой статье мы рассмотрим давно забытую составляющую баз данных MySQL: хранимые процедуры. Преимущества использования ХП очевидны, но напомним: Хранимые процедуры позволяют нам применять более строгий контроль доступа к определенным данным, когда это требуется бизнес-логикой. Кроме того, мы продемонстрируем основные шаги в создании хранимых процедур, пользователей и назначения соответствующих привилегий, покажем, как ХП вызываются из PHP.
Хранимые процедуры в MySQL и PHP10.03.2014Проще говоря, хранимые процедуры («ХП») — это сохраненные в базе данных процедуры (написанные с помощью SQL и других управляющих операторов), которые могут быть выполнены движком баз данных и вызваны из программного кода, который с этим движком работает. В этой статье мы рассмотрим создание ХП в MySQL и их выполнение на сервере MySQL из кода PHP. ХП доступны и в других СУБД. Поэтому статья поможет лучше понять работу с базами данных в целом.
WebDAV Mini-Redirector (MRXDAV.SYS). Версии и проблемы28.02.2014WebDAV Mini-Redirector (MRXDAV.SYS) — это компонент Windows, реализующий клиент для серверов WebDAV по технологии «веб-дисков». Протокол WebDAV — это расширение HTTP, реализующее работу с распределенной файловой системой с версионированием. В предлагаемом документе дается список известных версий MRXDAV.SYS и их багов. Этот список полезен, прежде всего, разработчикам, работающим над программным обеспечением, использующем протокол WebDAV. Настройка аутентификации в SabreDAV21.02.2014После того как вы создали свой сервер WebDAV, вы, вероятно, хотите сделать его безопасным. Аутентификация в WebDAV производится с помощью базовой или дайджест-аутентификации. Хотя ее несложно реализовать самостоятельно, SabreDAV предоставляет некоторые средства, которые могут облегчить ваш труд. SabreDAV поставляется с плагином, который производит аутентификацию. Он включает в себя два бэкэнда. Один хранит логины в файле, другой — в БД. Особенности реализации WebDAV в Microsoft Windows. Часть 215.02.2014Во второй части статьи рассказывается о том, 1) как Windows понимает свойства WebDAV; 2) в каких кодировках шлет HTTP-запросы, получает ответы и о связанных с этим проблемах; 3) о баге с поддержкой {DAV:}displayname; 4) о различных других багах; 5) об имеющихся ограничениях на размер сохраняемых файлов; 6) о поддержке аутентификации на сервере WebDAV; 7) прочая информация и ссылки на ресурсы, где можно узнать больше о том или ином аспекте. Особенности реализации WebDAV в Microsoft Windows13.02.2014Windows имеет два клиента WebDAV. Предпочтительным на данный момент является «веб-клиент». Старый известен как «веб-папки». Веб-клиент назначает диску букву, что весьма полезно в плане его интеграции с операционной системой. Веб-папки не позволяют редактировать файлы непосредственно, а только перетаскивать их в/из папки WebDAV. Для работы веб-клиента сервис Web Client должен быть включен и запущен. В некоторых версиях ОС он по умолчанию выключен. Реализация файловой системы WebDAV с помощью PHP и SabreDAV. Часть 629.01.2014Ранее мы добавили поддержку блокировки файлов, требуемую некоторыми клиентами WebDAV. Затем мы реализовали систему HTTP дайджест-аутентификации. Это означает, что пользователи должны вводить свои логины и пароли для доступа к серверу WebDAV. Теперь кратко опишем, как реализовать собственную виртуальную файловую систему с SabreDAV, позволяющую легко добавить WebDAV в уже существующее веб-приложение (такое как Система управления контентом).
Реализация файловой системы WebDAV с помощью PHP и SabreDAV. Часть 527.01.2014Последним шагом в создании нашего сервера WebDAV станет добавление аутентификации. SabreDAV облегчает добавление как базовой, так и дайджест HTTP-аутентификации. Однако пользователи Windows могут использовать базовую аутентификацию только на защищенном сервере. Другими словами, не-SSL сервера WebDAV должны либо не использовать аутентификацию, либо использовать дайджест-аутентификацию. Раз так, покажем добавление дайджест-аутентификации.
Реализация файловой системы WebDAV с помощью PHP и SabreDAV. Часть 424.01.2014Вы можете добавить несколько плагинов к серверу. Они предоставляют такие функции, как обработка блокировки файлов или промежуточные операции над файлами. С SabreDAV поставляется несколько плагинов, включающих: драйвер, который позволяет вам просматривать сервер WebDAV с помощью браузера; драйвер для блокировки файла; драйвер для игнорирования файлов ресурсов (таких, как Thumbs.db в Windows, файлы .DS_Store и «точка-подчеркивание» в Mac OS X.
Реализация файловой системы WebDAV с помощью PHP и SabreDAV. Часть 322.01.2014Начало работы с SabreDAV очень простое. После того как мы сохранили наши файлы на сервере, можно использовать уже готовый обработчик локальной файловой системы. Позже в этой статье мы кратко рассмотрим создание виртуальных файловых систем, если вы хотите хранить файлы в базе данных. В этом же разделе мы начнем пошагово создавать server.php, уже упомянутый в этой статье. Затем покажем вам, как монтировать ново-созданный диск к вашему компьютеру.
Реализация файловой системы WebDAV с помощью PHP и SabreDAV. Часть 220.01.2014Давайте создадим виртуальный хост для сервера WebDAV. Эта статья предполагает, что вы используете HTTP-сервер Apache на Unix-платформе. Если это не так, вам понадобится корректировка. В целях сохранения простоты мы не будем затрагивать SSL в этой статье. Если у вас есть доступный защищенный сервер, вы можете попытаться использовать его. После того, как у нас появится виртуальный хост, назначенный серверу WebDAV, скачаем и установим SabreDAV.
Реализация файловой системы WebDAV с помощью PHP и SabreDAV17.01.2014Покажем вам, как создавать файловую систему WebDAV с помощью PHP и открытой библиотеки SabreDAV. Мы создадим простой веб-диск, который будет сохранять файлы в заданной директории на веб-сервере. К концу статьи вы сможете эффективно примонтировать эту директорию к локальному компьютеру и обновлять в ней файлы из своей операционной системы. WebDAV — это, проще говоря, расширение HTTP, которое позволяет управлять файлами на удаленном веб-сервере.
Дональд Кнут. Человек, книга и программа08.01.2014Есть люди, вклад которых в развитие какой-то области деятельности невозможно не заметить, но трудно оценить. Дональд Кнут, имя которого каждому программисту известно по определению, именно таков. Американский математик и специалист в области компьютерных наук Дональд Кнут является автором самой фундаментальной монографии, посвященной программированию, 4-томного «Искусства программирования», настольной книги и Библии программистов всего мира. Особенности программирования под iOS18.12.2013Если вы никогда не использовали систему Cocoa или её предшественниц NeXTSTEP и OpenStep, то, возможно, среда разработки приложений Cocoa Touch покажется вам недружелюбной. Она отличается от обычных сред разработки, используемых, например, для разработки приложений для платформы .NET или на языке Java. Не стоит беспокоиться о том, что на первых порах вам будет несколько неудобно. Просто покорпите над упражнениями, и всё встанет на свои места. Что такое машина Тьюринга01.04.2013Дело было в 1936-м году. Молодой учёный Алан Мэтисон Тьюринг решил растолковать человечеству принцип алгоритмических вычислений. Дело в том, что мистер Тьюринг являлся пророком компьютерной эпохи, поэтому попросту не мог не поведать людям о том, что такое алгоритм. Вот и придумал абстрактную машину, которую назвали его именем. То бишь фамилией. Следует сразу обозначить важный момент: машина Тьюринга — исключительно умозрительное устройство…
|
xbb.uz
Процедура (программирование) Википедия
Подпрограмма (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
Назначение подпрограмм[ | ]
Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти — они позволили не повторять в программе идентичные блоки а, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение — структуризация программы с целью удобства её понимания и сопровождения.
- Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого а.
- Даже в тех случаях, когда в подпрограмму выделяется однократно производимый набор действий, это оправдано, так как позволяет сократить размеры целостных блоков а, составляющих программу, то есть сделать программу более понятной и обозримой.
Преимущества[ | ]
Преимущества разбиения программы на подпрограммы включают:
- Декомпозиция комплексной программной задачи на простые шаги: это один из двух основных инструментов структурированного программирования и структур данных
- Уменьшение дублированного а
- Возможность повторного использования а в других программах
- Разделение крупной программной задачи между различными программистами, или различными стадиями проекта
- Сокрытие деталей реализации от пользователей подпрограммы
- Улучшение прослеживания (большинство языков предоставляют способ получить след вызова который включает в себя имена задействованных подпрограмм и возможно даже больше такой информации как имена файлов и номера строк). Без декомпозиции а на подпрограммы, отладка была бы серьезно затруднена.
Механизм подпрограмм, их описание и вызов[ | ]
В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма также имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.
Вызов подпрограммы выполняется с помощью команды вызова, включающей в себя имя подпрограммы. В большинстве современных языков программирования команда вызова представляет собой просто имя вызываемой подпрограммы, за которым могут следовать фактические параметры (см. ниже).
В следующем примере на языке Паскаль подпрограмма subprog вызывается из основной программы трижды:
program SubProgExample; // Описание подпрограммы subprog procedure subprog; // Заголовок, включающий имя подпрограммы begin // начало тела подпрограммы WriteLn('Bye'); end; // конец тела подпрограммы begin WriteLn('Hello'); subprog; // 1-й вызов subprog; // 2-й вызов subprog; // 3-й вызов end.
Результатом выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».
Для сохранения и восстановления контекста выполнения вызыва
ru-wiki.ru
Функция (программирование) — Википедия
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 9 мая 2019; проверки требует 1 правка. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 9 мая 2019; проверки требует 1 правка. У этого термина существуют и другие значения, см. функция.Фу́нкция в программировании — фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы. В большинстве случаев с функцией связывается идентификатор[en], но многие языки допускают и безымянные функции. С именем функции неразрывно связан адрес первой инструкции (оператора), входящей в функцию, которой передаётся управление при обращении к функции. После выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана.
Функция может принимать параметры и должна возвращать некоторое значение, возможно пустое. Функции, которые возвращают пустое значение, часто называют процедурами. В некоторых языках программирования объявления функций и процедур имеют различный синтаксис, в частности, могут использоваться различные ключевые слова.
Функция должна быть соответствующим образом объявлена и определена. Объявление функции, кроме имени, содержит список имён и типов передаваемых параметров (или: аргументов), а также, тип возвращаемого функцией значения. Определение функции содержит исполняемый код функции. В одних языках программирования объявление функции непосредственно предваряет определение функции, в то время как в ряде других языков необходимо сначала объявить функцию, а уже потом привести её определение.
В объектно-ориентированном программировании функции, объявления которых являются неотъемлемой частью определения
ru.wikipedia.org
Процедура (программирование) Википедия
Подпрограмма (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
Назначение подпрограмм
Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти — они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение — структуризация программы с целью удобства её понимания и сопровождения.
- Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.
- Даже в тех случаях, когда в подпрограмму выделяется однократно производимый набор действий, это оправдано, так как позволяет сократить размеры целостных блоков кода, составляющих программу, то есть сделать программу более понятной и обозримой.
Преимущества
Преимущества разбиения программы на подпрограммы включают:
- Декомпозиция комплексной программной задачи на простые шаги: это один из двух основных инструментов структурированного программирования и структур данных
- Уменьшение дублированного кода
- Возможность повторного использования кода в других программах
- Разделение крупной программной задачи между различными программистами, или различными стадиями проекта
- Сокрытие деталей реализации от пользователей подпрограммы
- Улучшение прослеживания (большинство языков предоставляют способ получить след вызова который включает в себя имена задействованных подпрограмм и возможно даже больше такой информации как имена файлов и номера строк). Без декомпозиции кода на подпрограммы, отладка была бы серьезно затруднена.
Механизм подпрограмм, их описание и вызов
В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма также имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.
Вызов подпрограммы выполняется с помощью команды вызова, включающей в себя имя подпрограммы. В большинстве современных языков программирования команда вызова представляет собой просто имя вызываемой подпрограммы, за которым могут следовать фактические параметры (см. ниже).
В следующем примере на языке Паскаль подпрограмма subprog вызывается из основной программы трижды:
program SubProgExample; // Описание подпрограммы subprog procedure subprog; // Заголовок, включающий имя подпрограммы begin // начало тела подпрограммы WriteLn('Bye'); end; // конец тела подпрограммы begin WriteLn('Hello'); subprog; // 1-й вызов subprog; // 2-й вызов subprog; // 3-й вызов end.
Результатом выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».
Для сохранения и восстановления контекста выполнения вызывающей процедуры, с целью исключения побочных эффектов, связанных с возможным нежелательным изменением используемых машинных регистров, компилятор формирует для каждой процедуры специальные последовательности команд, называемые прологом и эпилогом процедуры.
Некоторые языки программирования (например, Паскаль, Ада, Модула-2) допускают описание вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм. Такие вложенные подпрограммы могут использоваться только в той подпрограмме, в которой они описаны. В иных случаях (например, в языке Си) вложение подпрограмм не допускается. Никаких принципиальных преимуществ вложение подпрограмм не даёт, но может быть удобно для более логичной структуризации программы (если какая-то подпрограмма используется только в некоторой другой подпрограмме, логично поместить первую во вторую).
Параметры подпрограмм
Назначение параметров
Подпрограммы часто используются для многократного выполнения стереотипных действий над различными данными. Подпрограмма обычно имеет доступ к объектам данных, описанным в основной программе (по крайней мере, к некоторым из них), поэтому для того, чтобы передать в подпрограмму обрабатываемые данные, их достаточно присвоить, например, глобальным переменным. Но такой путь не особенно удобен и чреват ошибками.
Для обеспечения контролируемой передачи параметров в подпрограмму и возврата результатов из неё используется механизм параметров. Параметры описываются при описании подпрограммы (в её заголовке) и могут использоваться внутри процедуры аналогично переменным, описанным в ней. При вызове процедуры значения каждого из параметров указываются в команде вызова (обычно после имени вызываемой подпрограммы).
program SubProgExample2; // Описание подпрограммы subprog procedure subprog(Line: String); // Заголовок, включающий имя подпрограммы begin // начало тела подпрограммы WriteLn(Line); end; // конец тела подпрограммы begin WriteLn('Hello'); subprog('Good bye,'); // 1-й вызов subprog('my love,'); // 2-й вызов subprog('good bye!'); // 3-й вызов end.
В приведённом примере параметр Line подпрограммы subprog в каждом вызове получает различное значение, благодаря чему выводятся не одинаковые строки, а разные.
Формальные и фактические параметры
Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, используются формальные и фактические параметры. Формальные параметры указываются при объявлении или определении подпрограммы, а фактические — непосредственно при её вызове. Так, в последнем примере параметр Line в заголовке и теле подпрограммы subprog — это формальный параметр, а строка ‘Good bye’ , использованная в первом вызове этой подпрограммы — фактический параметр. При вызове подпрограммы фактические параметры, указанные в команде вызова, становятся значениями соответствующих формальных параметров, чем и обеспечивается передача данных в подпрограмму.
Способ передачи параметров в подпрограмму
Существует несколько способов передачи параметров в подпрограмму.
- Передача параметров по значению. Формальному параметру присваивается значение фактического параметра. В этом случае формальный параметр будет содержать копию значения, имеющегося в фактическом, и никакое воздействие, производимое внутри подпрограммы на формальные параметры, не отражается на параметрах фактических. Так, если в качестве фактического параметра будет использована переменная, и внутри подпрограммы значение соответствующего формального параметра будет изменено, то фактический параметр останется без изменений.
int func1(int x)
{ x=x+2; return x;
}
- Передача параметров по ссылке. В формальный параметр может быть помещён сам фактический параметр (обычно это реализуется путём помещения в формальный параметр ссылки на фактический). При этом любое изменение формального параметра в подпрограмме отразится на фактическом параметре — оба параметра во время вызова подпрограммы суть одно и то же. Параметры, передаваемые по ссылке, дают возможность не только передавать параметры внутрь подпрограммы, но и возвращать вычисленные значения в точку вызова. Для этого параметру внутри подпрограммы просто присваивается нужное значение, и после возврата из подпрограммы переменная, использованная в качестве фактического параметра, получает это значение.
void func2(int &x)
{ x=x+2;
}
- Передача параметров по имени. В формальный параметр может быть помещено произвольное выражение. При этом вычисление этого выражения произойдёт внутри подпрограммы в тот момент, когда потребуется его значение. Если это значение фигурирует несколько раз, то и вычисляться оно будет тоже несколько раз. Параметры, передаваемые по имени, дают возможность писать довольно универсальные подпрограммы. Такой способ передачи параметров используется, к примеру в языках Алгол или Алгол 68.
- Передача параметров через стек. Это фактически разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором. Данный подход реализован в языке Форт.
Язык программирования может предоставлять возможность передавать параметры в подпрограммы либо только по значению, либо по значению и по ссылке, либо по имени и значению. В последних двух случаях для различения способов передачи параметра используются отдельные синтаксическая конструкции (в Паскале это ключевое слово var при описании параметра). В действительности, если язык содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но эта возможность удобна, так как позволяет работать с формальным параметром-ссылкой без разыменования, а также повышает надёжность и безопасность программы.
На параметры, передаваемые по ссылке, накладываются естественные ограничения: фактический параметр, подставляемый на место такого параметра при вызове, обязан быть переменной (то есть иметь адрес), а в языках со строгой типизацией — ещё и иметь в точности такой же тип данных.
Виды подпрограмм
В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.
- Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну особенность— она всегда должна возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания.
- Процедура — это независимая именованная часть программы, которую после однократного описания можно многократно вызвать по имени из последующих частей программы для выполнения определенных действий.
В C-подобных языках подпрограмма всегда описывается как функция. Процедура реализуется как функция типа void, то есть имеющая «пустой» тип и, соответственно, не возвращающая никакого значения.
Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами. Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.
См. также
wikiredia.ru
Чем процедура отличается от функции в программировании
Пользователи, далекие от программирования в принципе, сталкиваются с понятиями функции и процедуры редко, и ассоциируются они с чем-то математическим и бюрократическо-медицинским. В программировании же этими понятиями оперирует множество языков, правда, даже специалисты порой не могут четко осознать разницу между функцией и процедурой. Как с тем сусликом: он есть, но его никто не видит. Посмотрим, настолько ли невидимы отличия.
Что означают понятия функция и процедура
- Функция в программировании — подпрограмма, вызываемая из других подпрограмм необходимое число раз.
- Процедура — поименованная часть программы (подпрограмма), многократно вызываемая из последующих частей программы необходимое число раз.
Сравнение функции и процедуры
Основная разница между функцией и процедурой — в возвращаемом результате. По сути, и функции, и процедуры представляют собой логически неделимые блоки, из которых складывается код программы. Функция возвращает значение, процедура в большинстве языков программирования — нет, либо (в Си, например) возвращает пустое значение. В последнем случае (в Си) процедура считается подчиненной разновидностью функции.
Заголовок функции содержит слово “function”, идентификатор (собственное имя функции), вариативно список параметров и обязательно — тип результата. В теле функции обязательно прописывается оператор, присваивающий значение имени функции, которое она вернет в качестве результата. Заголовок процедуры содержит слово “procedure”, идентификатор (имя процедуры) и вариативно список параметров.
Вызов функции осуществляется в составе выражений там, где эти выражения применяются, вызов процедуры требует отдельного оператора.
Вызов процедуры осуществляется только по имени, имя функции же связано с ее значением. На схемах алгоритмов вызов функции изображается в блоке вывода или в блоке процесса, вызов процедуры — в специальном блоке “предопределенный процесс”.
Отличие функции от процедуры в программировании заключается в следующем:
- Функция возвращает значение, процедура — нет.
- Заголовок функции обязательно содержит тип результата.
- В теле функции обязательно наличие оператора, присваивающего значение имени функции.
- Вызов процедуры требует отдельного оператора, вызов функции возможен в составе выражений.
- Имя процедуры необходимо для вызова, имя функции — для присвоения значения.
- На схемах алгоритмов вызов процедуры изображается в отдельном блоке, вызов функции — в блоке процесса или вывода.
Читайте также:
- Чем отличается наука от культуры
На первый взгляд, между наукой и культурой нет ничего общего. Однако, эта связь существует. Наука представляет собой комплекс каких-либо знаний. Многие из этих знаний были получены еще в древности и…
- Чем отличается ромб от квадрата
Взрослому человеку такой вопрос может показаться наивным, а вот школьники и маленькие дети часто задают его. И порой одной лишь демонстрации геометрических фигур может оказаться мало. Поэтому несколько простых закономерностей…
- Чем отличается шашка от сабли
С темой холодного оружия в наших странах знакомы, пожалуй, только ценители искусства, спортсмены-фехтовальщики и собиратели предметов старины. Среднестатистический человек вряд ли может блеснуть глубокими познаниями в этой области, например, рассказать…
imgist.ru