- •Программирование на языке Паскаль
- •Содержание
- •Введение. Структура программы. Типы данных
- •Структура программы в зыке Паскаль
- •Комментарии
- •Раздел описания переменных
- •Имена идентификаторов в языке Паскаль
- •Типы данных в языке Паскаль
- •Целые типы
- •Вещественные типы
- •Раздел описания констант
- •Оператор ввода
- •Составной оператор
- •Условный оператор
- •Выражения
- •Арифметические операции
- •Логические выражения
- •Логические операции
- •Приоритеты операций
- •Стандартные математические и арифметические функции
- •Структурированные операторы
- •Оператор выбораCase
- •Оператор циклаFor
- •Оператор циклаWhile
- •Inc(n); { Увеличение значения пременнойnна 1 }
- •Оператор циклаRepeat
- •Пользовательские порядковые и составные типы. Процедуры и функции
- •Раздел описания типов
- •Интервальный тип
- •Перечислимый тип
- •Тип массив
- •Строковый тип
- •Процедуры и функции для работы со строками
- •Типизированные константы
- •Процедуры и функции
- •Обращение к процедурам и функциям
- •Процедуры и функции. Процедурные типы. Тип указатель
- •МодификаторыVar иConst в описании формальных параметров
- •Локальность и область действия
- •Процедурные типы
- •Тип указатель
- •Нулевой указатель
- •Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки
- •Файловые типы
- •Процедуры и функции для работы с текстовыми файлами
- •Стандартные текстовые файлы
- •Тип запись
- •Обращение к элементам записи
- •Алгоритмы сортировки
- •Алгоритмы сортировки
- •Алгоритмы сортировки сравнениями
- •Объектно-ориентированное программирование. Структура программного модуля
- •Тип данных «объект»
- •Тип данных «класс»
- •Классификация стилей программирования
- •Структура программного модуля
- •Основы визуального программирования
- •Элемент управления «Поле ввода»
- •Элемент управления «Кнопка»
- •Элемент «Метка»
- •Элемент «Группа переключателей»
- •0:ShowMessage('Выбран вариант 1');
- •Виды изображений
- •КлассTPicture
- •КлассTBitmap
- •ОператорWith
- •КлассTCanvas
- •Библиографический список
- •620002, Екатеринбург, Мира, 19
Объектно-ориентированное программирование. Структура программного модуля
Тип данных «объект»
Объектные типы данных, по сути, являются логическим продолжением рассмотренного ранее типа запись. Если тип запись позволял группировать вместе данные различного типа, то объекты могут содержать не только данные, но и метолы (процедуры и функции) для работы с этими данными. Объектные типы описываются с помощью ключевого слова OBJECT.
Синтаксис
TYPE
<Имя>=OBJECT
<Данные и методы>
END;
Пример
TYPE
Point=OBJECT
x,y:Real;
PROCEDURE Move(Dx,Dy:Real);
END;
Методы описываются вне объектов.
Пример
PROCEDURE Point.Move(Dx,Dy:Real);
BEGIN
x:=x+Dx;
y:=y+Dy;
END;
Объекты также могут наследоваться.
Синтаксис
TYPE
<Имя>=OBJECT(<Имя родительского объекта>)
<Данные и методы>
END;
В результате наследования в так называемом дочернем (или порожденном) объекте будут присутствовать данные и методы родительского объекта, к которым будут добавлены данные и методы, описанные в дочернем. Методы родительского объекта могут быть перекрыты.
В параграфе 7.3 «Стандартные текстовые файлы» был рассмотрен пример со списком студентов. В каждой строке таблицы содержались данные различных типов, которые были сгруппированы при помощи типа запись. Однако в таблице содержались данные об объектах одинаковой структуры – студентах. Как же поступать в случаях, когда необходимо хранить список объектов, имеющих различную структуру, например геометрических фигур (прямоугольников, треугольников, кругов и т.д.), причем для любой фигуры необходимо, к примеру, вычислять площадь.
Можно представить такой набор объектов несколькими таблицами (т.е. массивами записей):
Прямоугольники |
|
Треугольники |
|
Круги | ||||||
a |
b |
S = a∙b |
|
a |
b |
c |
S = … |
|
r |
S = πr2 |
3 |
5 |
15 |
|
3 |
4 |
5 |
6 |
|
10 |
314.16 |
… |
… |
… |
|
… |
… |
… |
… |
|
… |
… |
Однако может потребоваться иметь единый список всех объектов (например, если важен порядок следования объектов друг за другом). Можно попытаться представить такой список в виде единой таблицы следующим образом:
Фигура |
a |
b |
c |
r |
S |
Прямоугольник |
3 |
5 |
— |
— |
15 |
Треугольник |
3 |
4 |
5 |
— |
6 |
Круг |
— |
— |
— |
10 |
314.16 |
… |
… |
… |
… |
… |
… |
При таком способе организации, как видно из таблицы, остается много неиспользуемых данных, добавление новых объектов ведет к изменению структуры таблицы, необходимости добавлять туда новые столбцы (т.е. добавлять новые элементы в тип запись, описывающий строку таблицы). Количество неиспользуемых данных при этом также значительно возрастает. Кроме того, иногда вообще невозможно представить данные в таком виде.
Итак, в большинстве случаев приведенные выше примеры являются крайне неудобными для представления такого рода данных. В этом случае используется так называемый объектно-ориентированный подход, реализованный в языке Паскаль при помощи типов объект и класс. Например, у рассмотренных выше объектов есть схожие черты: они являются геометрическими фигурами и для каждой из этих фигур известен алгоритм вычисления ее площади. Таким образом, структуру этих объектов можно представить при помощи следующей схемы:
В программе реализуется базовый объект «Геометрическая фигура», который содержит только функцию для вычисления площади, причем неопределенную (так называемую, абстрактную). Далее создаются три объекта, которые наследуются от общего базового объекта, содержат соответствующие данные, и самое главное, конкретизируют функцию вычисления площади, описанную в базовом объекте.
После реализации классов можно описать массив геометрических фигур. В этот массив можно будет добавлять любую из описанных геометрических фигур со своими параметрами, и для любой фигуры из этого массива можно будет вычислять площадь. При добавлении новых объектов описываются только новые типы, наследованные от базового. Структура массива при этом не изменяется.