- •3. Основные проектные операции Delphi. Файлы, генерируемые системой Delphi. Взаимосвязь файлов на этапе проектирования и выполнения программы.
- •4.Модуль. Структура модулей. Интерфейсная часть. Раздел реализации. Компиляция модулей. Ссылки модулей. Области видимости идентификаторов.
- •5. Основные элементы языка Object Pascal. Константы и константные выражения. Переменные.
- •Зарезервированные слова языка Паскаль
- •6. Процедуры и функции. Параметры, механизмы их передачи.
- •7. Операторы Object Pascal
- •8.Динамическое распределение памяти в Object Pascal. Указатели.
- •9.Типы данных Object Pascal. Классификация типов ObjectPascal. Приведение типов.
- •10.Порядковые типы данных. Целые типы данных. Действительные типы данных. Булевы типы данных. Символьные типы данных.
- •11. Перечислимые типы. Ограниченные типы. Типы данных, специфичные для Windows.
- •12. Строки. Традиционные строки Pascal. Длинные строки Delphi.
- •Val(st: string; X: числовая переменная; var code: integer)
- •13.Массивы. Статические массивы. Операции с массивами, передача массивов как параметров. Динамические массивы.
- •14. Множества. Записи.
- •15. Файлы. Типы файлов.
- •16 Тип variant. Массивы типа Variant.
- •Теоретические положения объектно-ориентированного программирования. История, основные принципы ооп.
- •Принцип инкапсуляции в ооп. Принцип наследования в ооп.
- •Понятие полиморфизма в ооп. Языки ооп. Объектно-ориентированный анализ и проектирование.
- •Классы. Объявление классов. Реализация принципа инкапсуляции в Object Pascal. Поля. Директивы private, protected и public. Инкапсуляция и формы. Свойства.
- •21.Понятие объекта и экземпляра объекта в Object Pascal.
- •22.Конструкторы и деструкторы. Ключевое слово self.
- •23.Методы и их наследование. Статические методы.
- •25. Абстрактные методы.
- •33. Общие свойства компонентов: положение, размеры и оформление компонент.
- •35.События клавиатуры. Фокус ввода.
- •36. Механизм перетаскивания Drag&Drop, механизм причаливания Drag&Dock.
- •39. Решение проблемы утечки ресурсов с использованием механизма исключений.
- •42. Класс tList.
- •44.Класс tStream и его потомки – потоки данных.
- •45. Глобальный объект Application.
- •47. Глобальный объект Printer.
5. Основные элементы языка Object Pascal. Константы и константные выражения. Переменные.
Любой естественный язык строится из элементарных составляющих — букв, образующих алфавит языка. Буквы используются для построения слов, слова складываются в предложения. Полезно узнать, что главными элементами любой программы являются переменные, константы и операторы. Переменная — это ячейка (или несколько ячеек) оперативной памяти компьютера. Такой ячейке присвоено определенное имя, ее содержимое может изменяться в ходе выполнения программы. Вид информации, содержащейся в ячейке, набор преобразований, которые можно выполнять над этой информацией, и множество допустимых значений определяются типом переменной. Константа отличается от переменной тем, что ее значение фиксировано и не может быть изменено в ходе выполнения программы. Операторы задают те или иные действия, которые должна выполнять программа.
Язык Паскаль состоит приблизительно из 80 зарезервированных слов и специальных символов.
Зарезервированные слова языка Паскаль
Absolute |
and |
Array |
assembler |
Break |
begin |
Const |
case |
constructor |
continue |
destructor |
div |
Downto |
do |
End |
else |
External |
far |
File |
for |
Goto |
function |
implementation |
if |
In |
inline |
Interface |
interrupt |
Mod |
label |
Nil |
near |
Not |
object |
Of |
or |
Private |
packed |
Program |
procedure |
Public |
record |
Repeat |
set |
Shr |
Then |
string |
To |
type |
Unit |
until |
Var |
uses |
While |
with |
virtual |
Заголовки, то есть первые операторы программ и библиотечных модулей — это program и unit.
Для описания переменных, констант и составных частей программы —
подпрограмм-процедур и подпрограмм-функций — используются зарезервированные слова var, const, procedure, function.
Операторы описания типов переменных, задаваемых пользователем, — это type, array, string, record...end, file of... .
Слова, используемые для программирования составных операторов, а также начинающие и оканчивающие последовательность исполняемых операторов программы, — begin и end.
Операторами, управляющими ходом выполнения программы (они так и называются — управляющие операторы), являются if-then...else, for...to...do, repeat...until, case...of...end, for...downto...do, while...do.
В библиотечных модулях используются зарезервированные слова implementation, interface.
Зарезервированные слова для обозначения арифметических и логических операций — div, mod, shl, shr, and, or, not и некоторые другие.
В программах, написанных с использованием методов объектно-ориентированного программирования, применяются зарезервированные слова object, constructor, destructor, public и virtual.
Операторы ввода и вывода write (writeln), read (readln)
Как уже было отмечено, кроме зарезервированных слов в программах на языке Паскаль используются как отдельные специальные символы, так и пары символов, которые имеют специальное значение.
Одиночные и двойные специальные символы языка Паскаль
:= Присваивание переменной значения выражения
; Разделитель операторов в программе
( ) Скобки для арифметических и логических выражений
: Разделитель в описаниях переменных и формате вывода
.. Многоточие для списков
+,-,*,/ Бинарные операции (не только арифметические!)
= Логическое равенство, элемент описания констант и типов
<> Логическое неравенство
<= Отношения «меньше чем» и «больше чем»
>= Отношения «меньше или равно» и «больше или равно»
. Конец программы /модуля, и десятичная точка в real
' Ограничители константы строкового типа
{} Пары скобок для комментариев
, Разделитель элементов списка
[ ] Указание диапазона значений индекса
Константы и константные выражения
В качестве констант в Object Pascal могут использоваться истинные (целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств) и типизированные.
Целые числа записываются со знаком или без него по обычным правилам и могут иметь значение в диапазоне от -263 до +263-11. Следует учесть, что, если целочисленная константа выходит за указанные границы, компилятор дает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, т. е. определяться как вещественные числа.
Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части.
Экспоненциальная часть начинается символом е или е, за которым могут следовать знаки “+” или “-” и десятичный порядок. Символ е означает десятичный порядок и имеет смысл “умножить на 10 в степени”.
Если в записи вещественного числа присутствует десятичная точка, перед точкой и за ней должно быть хотя бы по одной цифре. Если используется символ экспоненциальной части е, за ним должна следовать хотя бы одна цифра десятичного порядка.
Шестнадцатеричное число состоит из шестнадцатеричных цифр, которым предшествует знак доллара $ (код символа 36). Диапазон шестнадцатеричных чисел - от $ffffffffffffffff до $7FFFFFFFFFFFFFFF
Логическая константа - это либо слово false (ложь), либо слово true (истина).
Символьная константа - это любой символ ПК, заключенный в апострофы. Если необходимо записать собственно символ апострофа, он удваивается.
Строковая константа - любая последовательность символов (кроме символа CR - возврат каретки), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается.
Строка символов может быть пустой, т. е. не иметь никаких символов в обрамляющих ее апострофах. Строку можно составлять из кодов нужных символов с предшествующими каждому коду символами #.
Конструктор множества - список элементов множества, обрамленный-квадратными скобками.
В Object Pascal разрешается в объявлении констант использовать произвольные выражения, операндами которых могут быть ранее объявленные нетипизированные константы, имена типов и объектов, а также следующие функции от них:
Abs - возвращает абсолютную величину отрицательного или положительного числа (модуль). Это реализуется удалением отрицательного знака, если такой обнаружен.
Addr - Функция Addr возвращает адрес переменной, функции или процедуры.
Hi - возвращает 1 байт старшего разряда от переданного 2-х байтового целого числа.
High - возвращает самое высокое разрешённое значение типа или переменной указанного типа. Это относится только к символам, массивам, порядковым и коротким строкам. Для массивов возвращает самый большой индекс.
Exp - является математической функцией, она возвращает экспоненту числа. Берет целое число или число с плавающей точкой и возводит в степень e.
Frac - возвращает дробную часть числа с плавающей запятой.
Int - возвращает целочисленную часть числа с плавающей точкой, как число с плавающей точкой.
Length - возвращает или число символов в SourceString, или число элементов в SourceArray.
Ln - берет целое число или с плавающей запятой и выдает натуральный логарифм этого числа.
Low - возвращает самое низкое позволенное значение или типа или переменной этого типа. Используется только с символами, порядковыми типами данных, массивами и короткими строками. Для массивов, возвращает самый низкий индекс массива.
Odd - возвращает истину, если данное число нечетно.
Pred - уменьшает значение порядковой переменной, и возвращает её значение.
Round - округляет число с плавающей запятой до целого значения.
SizeOf - возвращает количество байт, занимаемое Значением или типом, которое может быть выражением или идентификатором типа.
Trunc - возвращает целочисленную часть числа с плавающей запятой.
Типизированные константы.
Эти константы, в отличие от истинных, могут иметь тип массив, запись, указатель или процедурный. Вообще они могут иметь любой тип, кроме файлового и варианта. По умолчанию (директива компилятора {$J+}) типизированные константы могут изменять свои значения в процессе выполнения программы, т.е. ведут себя как инициализированные переменные. В случае указания директивы компилятора {$J–} они ведут себя как истинные константы, т.е. переменные, доступные только для чтения.
Переменные
Переменные можно разделить на два вида: глобальные и локальные (объявленные в блоке описаний подпрограммы).
Глобальные переменные могут быть инициализированы при описании с использованием такого синтаксиса:
var <идентификатор>: <тип> = <любое константовое выражение>;
Одновременное описание нескольких переменных (var X, Y, Z: Real;) не может включать начальных значений. Так же нельзя инициализировать файловые переменные и варианты. Если глобальная переменная не инициализирована явно, ее инициализирует компилятор нулевым значением. Локальные переменные не могут инициализироваться явно и не инициализируются компилятором, вследствие чего содержат случайные значения.
Память, выделенная для глобальной переменной, освобождается автоматически, когда переменная больше не используется. Локальные переменные существуют только при выполнении той подпрограммы, где они объявлены.
Динамические переменные.
Для динамических переменных память выделяется в динамической области памяти (heap) с помощью процедур New и GetMem. Выделенная таким образом память не освобождается автоматически и программист должен сделать это сам с помощью подпрограмм Dispose и FreeMem. Для управления распределением динамической памяти предназначены также подпрограммы ReallocMem, Initialize, StrAlloc и StrDispose.
Длинные строки и динамические массивы также располагаются в динамической памяти, однако память для них распределяется автоматически и применять к ним New или Dispose нельзя.
Локальные переменные потоков.
Эти переменные используются в многопоточных приложениях. Они подобны глобальным переменным за тем исключением, что каждый поток имеет свою собственную копию переменной и эта копия недоступна другим потокам.
Локальные переменные потоков объявляются с помощью зарезервированного слова threadvar вместо var.
Объявления локальных переменных потоков:
нельзя делать внутри подпрограмм;
не могут включать инициализацию
не могут быть абсолютными переменными.
Переменные, для которых поддерживается механизм подсчета ссылок – длинные строки, динамические массивы и интерфейсы, небезопасно использовать как локальные переменные потоков. Причина состоит в том, что для локальных динамических переменных потоков в общем случае нет хорошего способа освободить динамическую память. Нельзя также создавать локальные переменные потоков типа указателей или процедурного типа.