Описания программных элементов
Любая программа состоит из программных элементов и операторов управления этими элементами. К программным элементам относятся константы, типы, переменные, процедуры, функции, объекты и некоторые другие. К операторам управления относятся следующие операторы: присваивания, построения разветвлений в расчетах, построения циклических вычислений и др.
С помощью объявления в программу вводится какой-либо программный элемент. Ему присваивается имя и, возможно, начальное значение. Object Pascal является строго типизированным языком. Это означает, что каждому программному элементу до первого применения необходимо задать его тип, чтобы сообщить компилятору, к какого вида сущностям относится объявленный программный элемент. Эта сущностьопределяет, какие операции можно применить и как эти операции должны интерпретироваться.
ПРОГРАММНЫЕ ЭЛЕМЕНТЫ И АДРЕСА ПАМЯТИ
Каждый программный элемент занимает какую-либо область памяти. Компилятор неявно заменяет каждое имя определенным адресом в памяти. Иногда имя определяет не сам элемент, а “нечто в памяти” – в этом случае имя представляет собой явно указываемый адрес размещения некоторого программного элемента. Такое программный элемент называется ссылкой или указателем. Таким образом, имена могут представлять или программные элементы или адреса размещения этих элементов.
ОБЛАСТИ ВИДИМОСТИ
Объявление вводит имя в областивидимости, т. е. имя может использоваться только в определенной части программы. Для имени, описанного, например, в процедуре кого-либо обработчика событий (такое имя часто называют локальным – Sender в примере 1), область видимости простирается только в блоке процедуры. Имя, описанное, например, в интерфейсной секции модуля (такое имя называют глобальным - TForm, Form1 в примере 1, имена в подключаемых модулях, например в Forms) имеет область видимости, простирающуюся на весь модуль. Области видимости иногда задают с помощью ключевых слов Private, Public, Protected.
ПРАВИЛА ЗАПИСИ ИМЕН
Имя (идентификатор) состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчеркивания “_” считается буквой. Количество символов в имени может быть достаточно большим, но значимыми являются первые 63 символа. Буквы в верхнем и нижнем регистре неразличимы в имени, однако, для удобочитаемости программ следует использовать прописные и строчные буквы.
ВРЕМЯ ЖИЗНИ ИДЕНТИФИКАТОРОВ
Если программист не указал иного, то программный элемент, например локальный, создается, когда встречается его объявление, и уничтожается, когда его имя выходит из области видимости. Элементы с глобальными именами создаются и инициализируются автоматически при объявлении или с помощью инспектора объектов. Иногда они создаются не автоматически, а явно в программе (очень часто один раз) и “живут” до завершения программы. Если элемент создан явно программистом, то при выходе из области видимости его явно необходимо уничтожить, иначе можно непроизводительно занять всю память.
ИСПОЛЬЗОВАНИЕ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 1
Рассмотрим другие варианты решения примера 1. Вначале исследуем понятие локальных переменных, введенное выше. Использование локальных переменных, в данном случае, повышает “наглядность” программного кода. Для реализации этой идеи достаточно изменить один обработчик - нажатие на кнопку Button1 (рис. 13).
procedure TForm1.Button1Click(Sender: TObject);
{объявление локальных переменных}
var a,b,s:integer;
Begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
s:=a+b;
Edit3.Text:=IntToStr(s);
end;
ИСПОЛЬЗОВАНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 1
Как можно заметить из сравнения двух приведенных выше вариантов решения примера 1, применение локальных переменных привело к небольшому изменениию программного кода. Еще один вариант решения можно получить, используя глобальные переменные. Их применение изменяет структуру приложения – добавляются новые обработчики событий.
Глобальные переменные (var a,b,s:integer;)объявляются в интерфейсной секции модуля Unit1 (пример 1). Значения глобальным переменным aи bприсваиваются на уровне работы соответствующих компонентов, в данном случае Edit1 и Edit2. Это означает, что при выходе, например, из элемента Edit1 (при потере фокуса элементом Edit1) необходимо присвоить значение соответствующей числовой переменной. Такое присваивание можно выполнить с помощью обработчика OnExit. Таким образом, структурно приложение дополняется двумя обработчиками Edit1Exit и Edit2Exit. Ниже представлены программные коды этих обработчиков:
procedure TForm1.Edit1Exit(Sender: TObject);
Begin
a:=StrToInt(Edit1.Text);
end;
procedure TForm1.Edit2Exit(Sender: TObject);
Begin
b:=StrToInt(Edit2.Text);
end;
Соответственно в обработчике Button1Click необходимо убрать строчки вычисления значений переменных a и b. Учитывая еще, что переменная s объявлена глобально, перепишем код рассматриваемого обработчика событий:
procedure TForm1.Button1Click(Sender: TObject);
Begin
s:=a+b;
Edit3.Text:=IntToStr(s);
end;
ТИПЫ
Тип в простейшем случае определяет вид конкретно представляемой в памяти информации, например переменных, констант. В более широком смысле тип есть конкретное представление некоторой концепции (понятия), применяемой к тем или иным данным. Например, имеющийся тип double с его операциями +, -, *, / и встроенными математическими функциями вычисления логарифма, синуса и т. д., обеспечивает ограниченную, но конкретную версию математического понятия действительного числа. Язык программирования имеет множество встроенных типов, а также предоставляет инструменты построения собственных типов. Собственный тип создается для того, чтобы дать специальное и конкретное определение понятия, которому среди встроенных типов ничто не отвечает, например, построить отсутствующий в Object Pascal тип, позволяющий работать с комплексными числами. Хорошо выбранные типы делают программу более четкой и короткой.
Итак, каждое имя в программе имеет ассоциированный с ним тип. Этот тип определяет:
- структуру программного элемента, т. е. ту или иную интерпретацию памяти;
- множество допустимых значений;
- совокупность возможных операций с ним.
В Object Pascal можно выделить следующие типы:
o простые;
o структурированные;
o указатели;
o классы;
o вариантный тип
Самую обширную группу представляют структурированные типы. Структурированные типы данных определяют наборы однотипных или разнотипных компонентов. Типы компонентов образуются из других типов данных. Можно выделить следующие структурированные типы:
· массивы;
· строки;
· записи;
· множества;
· файлы.
Задание типа тому или иному элементу в программе необходимо для того, чтобы компилятор мог выделить ему соответствующую память и установить механизм доступа к самому элементу и его компонентам.
ПРОСТЫЕ ТИПЫ
Простой тип определяет множество значений программного элемента, структура которого представляет собой единственную величину. Простые типы (как и другие типы) часто используются в программе для задания переменных и констант. Переменная есть программный элемент, который может в программе принимать различные значения, в отличие от констант, которые в программе сохраняют постоянные значения.
Имеются следующие группы простых типов:
1. целый;
2. логический (булевый);
3. символьный;
4. перечень;
5. интервальный (диапазон);
6. вещественный;
7. дата-время.
Среди простых типов перечень и интервальный определяются программистом, а остальные встроенные. Первые пять типов образуют группу так называемых порядковых типов.
Порядковый тип характеризуется важной отличительной особенностью. Каждое значение порядкового типа (основное) имеет ассоциированное с ним другое значение, представляющее собой порядковый номер - для первого значения – 0, для второго – 1 и т.д. Порядковый номер целого значения равен самому значению. Для порядковых типов существуют встроенные стандартные операции выполнения некоторых действий (табл. 2).
Таблица 2