- •Система Pascal abc
- •Редактор
- •Горячие клавиши
- •Окно вывода
- •Окно ввода
- •Запуск и остановка программы
- •Программа прервана пользователем
- •Пошаговое выполнение программы
- •Pascal abc Язык Pascal abc Структура программы
- •Идентификаторы и служебные слова
- •Окно отладки
- •Выражения и операции
- •Арифметические операции
- •Операция @
- •Операции с указателями
- •Операции с множествами
- •Приоритет операций
- •Описание переменных и констант
- •Описание типов
- •Обзор типов
- •Все порядковые типы, а также типы boolean, real и complex называются простыми типами. Порядковые типы
- •Типы boolean, real и complex
- •Строковый тип
- •Массивы
- •Множества
- •Указатели
- •Процедурный тип
- •Эквивалентность типов
- •Неявное приведение типов
- •Явное приведение типов
- •Область действия идентификатора
- •Ввод и вывод. Форматы вывода
- •Оператор присваивания
- •Условный оператор
- •Составной и пустой операторы
- •Оператор выбора
- •Оператор цикла for
- •Оператор цикла repeat
- •Оператор вызова процедуры
- •Операторы break, continue и exit
- •Оператор with
- •Оператор безусловного перехода goto
- •Оператор try ... Except
- •Оператор try ... Finally
- •Оператор raise
- •Описание процедур и функций
- •Параметры процедур и функций
- •Локальные и глобальные переменные
- •Общие стандартные процедуры и функции
- •Стандартные процедуры и функции для работы со строками
- •Стандартные процедуры и функции для работы с файлами
- •Стандартные процедуры и функции для работы с памятью
- •Системные процедуры и функции
- •Стандартные константы
- •Обзор классов и объектов
- •Конструкторы и деструкторы
- •Свойства
- •Переменная Self
- •Наследование
- •Видимость членов класса
- •Переопределение методов
- •Приведение типов объектов
- •Операции is и as
- •Виртуальные методы и полиморфизм
- •Модуль crt
- •Модуль Timers
- •Модуль Sounds
- •Модуль Utils
- •Модуль PointRect
- •Модуль GraphAbc
- •Графические примитивы
- •Цветовые константы и функции для работы с цветом
- •Действия с пером
- •Действия с кистью
- •Действия со шрифтом
- •Действия с рисунками
- •Действия с графическим окном
- •Задание режимов вывода
- •Класс Picture
- •Описатели рисунков и класс Picture
- •Исполнитель Робот
- •Алгоритмизация
- •Алгоритм и его свойства
- •Способы описания алгоритмов
- •Линейные алгоритмы
- •Разветвляющиеся алгоритмы
- •Алгоритмы циклической структуры
- •Подчиненные алгоритмы
- •Системы программирования
- •Лабораторная работа № 1 Программирование линейных алгоритмов
- •Лабораторная работа № 2 Программирование разветвляющихся алгоритмов
- •Лабораторная работа № 4 Одномерные массивы - вектора
- •Литература Основная литература:
- •Дополнительная литература:
- •Лабораторная работа № 3 Программирование циклических алгоритмов
Переменная Self
Внутри каждого метода неявно определяется переменная Self, ссылающаяся на объект, вызвавший этот метод. Например:
type A=class i: integer; constructor Create(i: integer); begin Self.i:=i; end; end;
В момент вызова конструктора Create объект будет уже создан. Конструкция Self.i ссылается на поле i этого объекта, а не на параметр i функции Create.
Наследование
Класс может быть унаследован от другого класса. Например, при объявлении
type MyClass=class(BaseClass) ... end;
класс MyClass наследуется от класса BaseClass.
Класс-потомок называется также производным классом или подклассом, а класс-предок - базовым классом или надклассом. Потомок автоматически наследует все поля и методы своего предка. Он может также определять новые поля и методы, а также переопределять (замещать) методы предка.
Имена полей и методов, объявленные в классе, доступны до конца объявления класса, а также во всех его потомках.
Все классы неявно наследуются от класса Object. Этот класс объявлен следующим образом:
type Object=class constructor Create; destructor Destroy; function TypeName: string; function ToString: string; end;
Таким образом, любой класс может создавать свои объекты, вызывая конструктор Create без параметров, и уничтожать их, вызывая деструктор Destroy, даже если эти методы не приведены в его описании:
var m: MyClass; ... m:=MyClass.Create; ... m.Destroy;
В конце работы программы все созданные объекты должны быть разрушены. Поэтому для каждого созданного объекта рекомендуется явно вызвать деструктор. Однако, если этого не сделать, то система Pascal ABC после завершения программы автоматически вызывает деструкторы всех созданных объектов.
Метод TypeName возвращает имя класса объекта, а метод ToString - строковое представление объекта. В классе Object метод ToString также возвращает имя класса объекта, но это поведение может быть переопределено в потомках. Например:
type MyClass=class i: integer; constructor Create(i: integer); begin Self.i:=i; end; function ToString: string; begin Result:=IntToStr(i); end; end; var a: MyClass; ... a:=MyClass.Create(3); writeln(a.TypeName); // MyClass writeln(a.ToString); // 3
Видимость членов класса
Каждое поле, метод или свойство класса имеет атрибут, называемый видимостью. В Pascal ABC существуют три типа атрибутов видимости: public (открытый), private (закрытый) и protected (защищенный). К члену класса, имеющему атрибут public, можно обратиться из любого места программы, члены класса с атрибутом private доступны только внутри методов этого класса, члены класса с атрибутом protected доступны внутри методов этого класса и всех его подклассов. Атрибуты видимости могут находиться внутри класса, при этом все дальнейшие члены приобретают этот атрибут. Например:
type A=class private x: integer; protected a: integer; public constructor Create(xx: integer); begin x:=xx; // верно, т.к. мы внутри метода класса, которому принадлежит закрытое поле x a:=0; // верно end; procedure print; end; B=class(A) procedure print; begin writeln(a); // верно, т.к. a - защищенное поле writeln(x); // неверно, т.к. х - закрытое поле end; end; ... var a1: A; ... writeln(a1.x); // неверно, т.к. х - закрытое поле writeln(a1.a); // неверно, т.к. a - защищенное поле a1.print; // верно, т.к. print - открытый метод
По умолчанию все члены являются открытыми. В частности, метод print класса B - открытый.
Если x - закрытый или защищенный член класса, то доступ к нему с использованием явного указания объекта невозможен: запись a.x вызовет ошибку при компиляции "поле x недоступно".
