Бояться не надо



Статьи о Delphi

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

   С развитием языков программирования развивались и технологии, используемые при написании программного кода. Первые программы писались сплошным текстом. Это была простая последовательность команд, записанная в столбец. Все это выглядело приблизительно так:

Листинг 1. Текст линейной программы
Начало программы
Команда 1
Команда 2
Команда 3
...
Команда N
Конец программы

   Используя такой подход к программированию, можно было сделать очень мало. Единственное, что было доступно программисту для создания логики в данном случае — это условные переходы. Под условным переходом понимается переход на какую-то команду при определенных условиях, которые сложились в процессе обработки данных на процессоре. Например:

Листинг 2. Пример условного перехода
Если выполнено условие, то перейти на команду 1, иначе на команду 3
Команда 1
Команда 2
Команда 3
...
Команда N.

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

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

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

Листинг 3. Процедурное программирование
Начало процедуры 1
Команда 1
Команда 2
Конец процедуры 1
Начало программы
Команда 1
Команда 2
Если выполнено условие, то выполнить код процедуры 1.
Команда 3
Конец программы.

   В результате появилась возможность использовать один и тот же код в одной программе неоднократно. Код программ стал более удобным и простым для понимания. Именно таким был отец Delphi — язык программирования Turbo/Borland Pascal, который со временем превратился в Object Pascal.

   Но вернемся к процедурам. В процедуры можно передавать различные значения, заставляя их что-то рассчитывать:

Листинг 4. Пример процедур с параметрами
Начало процедуры 1 (Переменная 1:строка)
Команда 1
Команда 2
Конец процедуры 1
Начало программы
Команда 1
Команда 2
Если выполнено условие, то выполнить код процедуры 1.
Команда 3
Конец программы.

   В этом примере после начала процедуры в скобках указан тип передаваемой переменной. Таким образом, в процедуру можно поместить код каких-нибудь расчётов и определить параметры в виде переменных, которые используются в этом коде, а затем только передавать ей разные значения в качестве этих параметров. Процедуры остались и в наше время.

   Использование процедуры часто называют "Вызов процедуры". Это действительно так, т. е. процедура как бы вызывается. Давайте рассмотрим пример процедуры, приближенный к реальности.

Листинг 5. Пример процедуры, приближенный к реальному
Начало процедуры 1 (Переменная 1:Целое число)
Посчитать факториал числа, находящегося в Переменная 1.
Вывести результат на экран.
Конец процедуры 1
Начало программы
Процедура1(10)
Процедура1(5)
Процедура1(8)
Конец программы.

   В этом примере условно используется процедура, которая вычисляет факториал переданного ей значения и потом выводит результат на экран. В самой программе эта процедура используется как процедура1(10), где цифра в скобках означает переданное ей значение. Вот так получается универсальная процедура, которая считает факториал и выводит результат на экран. Как это все работает? Давайте рассмотрим алгоритм.

1. Начало программы.
2. Вызов процедуры процедура1(10) и передача ей значения 10.
3. Процедура вычисляет факториал числа 10 и выводит результат на экран.
4. Выход из процедуры и продолжение выполнения программы.
5. Вызов процедуры процедура1(5) и передача ей значения 5.
6. Процедура вычисляет факториал числа 5 и выводит результат на экран.

И так далее. Как видите, код программы очень удобный.

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

Листинг 4.6. Пример функции
Начало Функции 1: Тип возвращаемого значения — целое число
Команда 1
Команда 2
Конец Функции 1
Начало программы
Команда 1
Команда 2
Если выполнено условие, то выполнить код процедуры 1.
Команда 3
Конец программы.

   Заметьте, что после двоеточия идет описание типа возвращаемого значения. Теперь рассмотрим ту же ситуацию с факториалом. Допустим, нам надо рассчитать факториал для последующего использования, но не для вывода на экран. Такая задача легко решается с помощью функций.

Листинг 7. Расчет факториала с помощью функции
Начало Функции 1 (Переменная 1: Целое число): Целое число
Посчитать факториал числа, находящегося в Переменная 1.
Вернуть результат расчета.
Конец Функции 1
Начало программы
Переменная 1:=Функция 1 (10)
Переменная 2:=Функция 1 (5)
Переменная 3:=Переменная 1+Переменная 2
Вывести на экран Переменную 3
Конец программы.

   В этом примере в "переменную 1" записывается результат расчета факториала 10! (переменная 1—Функция 1 (10)). В "переменную 2" записывается результат расчета факториала 5!. После этого значения переменных складываются и результат сложения записывается в "переменную 3". Последнее действие программы — вывод на экран "переменной 3".



По материалам сайта О Delphi


В начало