
- •Содержание
- •Тема 1. Основные понятия
- •1.2. Задача, алгоритм, программа
- •1.2.Структура модуля исходного кода
- •Тема 2. Линейный блок: оператор присваивания, переменная, процедура и функция
- •2.1 Линейный блок
- •2.2. Переменные и константы
- •Синтаксис объявления переменной в ObjectPascal
- •Синтаксис объявления именной константы в ObjectPascal
- •Синтаксис объявления переменных в VisualBasic
- •2.3Типыпеременныхиконстант
- •Var1: type definitions;
- •Var2, var3: type definition4;
- •Var4 : typel;
- •2.4. Простые типы данных
- •2.4.1. Порядковые типы
- •Поддиапазонные типы
- •Перечислимые типы
- •Операции над порядковыми типами
- •2.4.2. Целые переменные
- •Integer Shortint Smallint Longint Byte Word Cardinal
- •Физические целые типы
- •Логические целые типы
- •2.4.3. Вещественные переменные
- •Вещественные типы.
- •2.4.4. Строковые переменные
- •2.4.5. Булевы типы
- •Размеры переменных булевых типов
- •2.5. Процедуры и функции
- •Описание и вызов процедуры
- •Описание и вызов функции
- •Передача параметров
- •2.6 Область видимости переменных, констант, процедур и функций
- •2.7 Стандартные функции
- •Функции преобразования типов
- •Математические функции
- •Функции вещественных типов
- •Функции обработки строк
- •Строковые функции
- •2.8 Операции над данными
- •2.9 Приоритеты операций
- •2.10. Структурные типы
- •2.10.1. Записи
- •1: Variantnamel: varianttype3;
- •2, 3: Variantname2: varianttype4;
- •1: (KinfWorker: String[15];
- •2: (PosAdmin: String[20]);
- •2.10.2. Массивы
- •Var ИмяМассива: array [ТипИндекса1, ...., ТипИндексаN] of БазовыйТип
- •Var MyArray: Array [1..10] of Integer;
- •2.10.3. Множества
- •Var MyAlphaSet: CharSet;
- •2.10.4. Файловый тип
- •2.11. Указательные типы
- •Средства работы с указателями
- •2.12. Процедурные типы
- •2.13. Тип variant
- •Тема 3. Блок принятия решений: операторы ветвления
- •3.1 Оператор if
- •If условие1 then
- •3.3Операторcase
- •Тема 4. Цикличекий блок: операторы повторяющихся действий
- •4.1.Цикл for
- •4.2. Циклы while и repeat
- •4.3. Операторы break и cont inue
- •Тема 5. Работа с текстовыми файлами
- •5.1. Типы доступа к текстовым файлам
- •5.2. Текстовые файлы
- •5.2.2 Бинарные файлы
- •Id : String[12];
- •Тема 6. Работа с классами
- •6.1. Понятие класса
- •6.2. Классы в object pascal
- •6.3. Свойства класса
- •Способ глобальных и локальных переменных
- •Способ процедуры свойств
- •Создание и удалениеобъектов
- •Inherited Create;
- •Inherited Destroy;
- •6.4. Методы класса
- •6.5. Объявление и удаление объектов
- •Литература
Создание и удалениеобъектов
Для создания и удаления объектов используются специальные методы, называемые конструктором и деструктором. Их синтаксис отличается от синтаксиса обычных методов только тем, что они обозначены ключевыми словами constructorилиdestructor.
constructor Имя_класса.Сreate ;
begin
Inherited Create;
[операторы_инициализации ]
end;
destructor Имя_класса.Destroy;
begin
[операторы_завершения ]
Inherited Destroy;
end;
При создании объекта все его поля автоматически инициализируются. Значения числовых полей устанавливаются в нуль, строковым полям присваивается строка null, а объектным полям —nil. В конструкторе программист может инициализировать поля объекта по-другому.
6.4. Методы класса
Для создания методов в собственных классах нужно добавить процедуры.
С помощью ключевого слова inheritedможно вызвать метод родительского класса. Если послеinheritedрасположено имя метода, то программа выполняет нормальный вызов, за исключением того, что поиск метода начинается с непосредственного предка класса, содержащего вызывающий метод. Если послеinheritedимени метода нет, то вызывается наследуем метод с тем же именем, что и вызывающий метод. В нашем примере имя метода по ключевого словаinheritedможет как присутствовать, так и отсутствовать. Если фактические параметры не указаны, то в наследуемый метод передаются те же параметры что и в вызывающий. Таким образом, ключевое словоinheritedиграет существенную роль в реализации полиморфизма вDelphi
Директива overloadиспользуется для перегрузки методов. Вызов из метода дочернего класса перегруженного метода влечет активизацию той версии метода, список формальных параметров которой совпадает со списком фактических параметров.
Директива overload. Она сообщает компилятору о том, что переобьявленный метод имеет другой список параметров, поэтому он не скрывает наследуемый метод, а перегружает его. Использование ключевого словаoverload(перегрузить) — другой способ реализации принципа диморфизма вDelphi. Если метод перегружен, то вызов метода в классе-потомке активизирует тот метод, список формальных параметров которого совпадает со списком фактических параметров вызова
Необязательная директива reintroduceподавляет предупреждения компилятора о том, что методы с этим же именем уже объявлены в родительских классах..
В ObjectPascalесть два оператора классов:isиas. Операторisвыполняет проверку динамического типа, т.е. проверяет во время выполнения фактический класс объекта. Синтаксис оператораisимеет следующий вид:
экземпляр_объекта is имя_класса
Это выражение возвращает True, еслиэкземпляр_объекта является экземпляром классаимя_классаили одного из его потомков. В противном случае выражение возвращаетFalse. Еслиэкземпляр_объекта равен nil, то выражение возвращаетFalse. Если объявленный класс объектаэкземпляр_объекта не связан с классомимя_класса (т.е. эти классы различны и не являются предком или потомком один другого), то возникает ошибка времени выполнения.
Оператор asвыполняет приведение типа с одновременной проверкой. Это значит, что операторэкземпляр_объекта as имя_классавозвращает ссылку на этот же объектэкземпляр_объекта, но уже с другим типом — с типомимя_класса. Во время выполненияэкземпляр_объекта должен быть экземпляром классаимя_класса или одного из его потомков либо должен содержать значение nil. В противном случае компьютер генерирует исключение. Как и в случае с оператором is, если объявленный класс объектаэкземпляр_объекта не связан с классомимя_класса, то при выполнении оператора as возникает ошибка времени выполнения.