- •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.
7. Операторы Object Pascal
Пустой оператор обозначается знаком "точка с запятой".
Составной оператор представляет собой группу из произвольного числа любых инструкций, ограниченных ключевыми словами begin и end. Сколько бы ни входило инструкций в такой блок, для компилятора он воспринимается как единое целое. Составные операторы могут вкладываться один в другой, при этом глубина таких вложений не ограничена.
Условный оператор if отвечает за ветвление, т.е. выполнение (или невыполнение) того или иного варианта кода в зависимости от условий. В целом синтаксис инструкции:
if <условие> then <код> [else <альтернативный код>]
Оператор выбора case используется, если необходимо проверить большое число условий. Он состоит из выражения, являющегося селектором, списка вариантов, представленного константами или значениями, и необязательной части else.
case [выражение-селектор] of <значение 1>: <код для значения 1>; ... <значение N>: <код для значения N>; [else <код для непредусмотренных явно значений>;] end
Оператор цикла for обычно применяют в тех случаях, когда количество возможных повторов известно заранее. Он имеет 2 варианта написания: в первом случае (с использованием цикла for-to) при каждом проходе цикла, называемом итерацией, значение параметра увеличивается на 1, а во втором (for-downto) - уменьшается на 1.
Операторы циклов while и repeat. Цикл с предусловием - оператор while:
while <Условие> do <тело цикла> Этот цикл будет выполняться до тех пор, пока верно выражение, указанное в качестве условия. В отличие от while, цикл с постусловием, задаваемый при помощи оператора repeat, всегда выполняется хотя бы 1 раз, поскольку проверку на соответствие условию он проходит после того, как будет выполнено его тело:
repeat <тело цикла> until <условие>
Операторы break и continue. Оператор break позволяет завершить цикл досрочно, а оператор continue - выполнить только часть операторов в теле цикла, перейдя к его следующей итерации. Так, досрочный выход из цикла, определяемый при помощи оператора break, происходит в месте вызова этого оператора, и управление будет передано первому оператору, находящемуся после цикла. В отличие от break, оператор continue не завершает цикл, а заставляет программу досрочно перейти к новой проверке условия цикла.
8.Динамическое распределение памяти в Object Pascal. Указатели.
В Object Pascal выделение динамической памяти может происходить одним из нескольких способов. Возможно, лучшим из них является использование функции AllocMem, которая заполняет выделенную память нулями. (Другой способ динамического распределения памяти — это применение процедуры GetMem или функции New.) Давайте снова вернемся к нашей записи TMailingListRecord. В предыдущих примерах мы выделяли память для записей этого типа из стека:
var
MLRecord : TMailingListRecord;
begin
{ Заполнение данными записи MLRecord }
MLRecord.FirstName := 'Per';
MLRecord.LastName := 'Larsen'; { и т.д.}
end;
Теперь мы создадим эту запись динамически:
var
APtr : PMailingListRecord;
begin
APtr := AllocMem(SizeOf(TMailingListRecord));
APtr.FirstName := 'Per';
APtr.LastName := 'Larsen';
{Другой программный код}
FreeMem(APtr);
end;
Обратите внимание, что теперь вместо переменной типа TMailingListRecord мы объявили переменную типа PMailingListRecord (указатель на TMailingListRecord). Кроме того, представляет интерес вызов функции AllocMem. Передаваемый в нее параметр указывает объем памяти, которую надлежит выделить. Для этой цели мы воспользовались функцией SizeOf, которая возвращает размер нашей записи. В результате вызова AllocMem происходит выделение запрошенной памяти и, после динамического создания нового объекта типа TMailingListRecord, инициализация соответствующего указателя. После этого вы можете использовать эту переменную-указатель точно так же, как и любую другую переменную. И наконец, обязательно обратите внимание, что после того, как надобность в созданном объекте отпадает, произво дится освобождение выделенной для него памяти с помощью процедуры Fre-eMem. Отсутствие вызова FreeMem привело бы к "утечке" памяти (поскольку использованная нашей программой память так никогда и не была бы возвращена системе).
Если для записей и массивов динамическое выделение памяти является делом вкуса, то в случае классов оно носит уже обязательный характер. Чуть позже мы обсудим этот вопрос более подробно
Таков, в общих чертах, механизм, с помощью которого вы можете динамически создавать записи и обращаться к ним в языке Object Pascal. Вам, по всей вероятности, придется делать это не так уж часто, но поскольку иногда такая потребность все же возникает, я счел необходимым сказать об этом несколько слов.
С помощью ключевого слова nil можно определить указатель, который не содержит никакого значения Если по каким-либо причинам вы хотите очистить некоторый указатель, вы можете сделать это следующим образом: SomePointer := nil;
Кроме того, с помощью nil можно проверить, была ли выделена для него память:
if SomePointer = nil then
SornePointer := AllocMem (Size);
Здесь происходит проверка указателя на наличие какого-либо значения. Если оно отсутствует, происходит выделение памяти.