Объектно-ориентированное программирование базируется на трех основных понятиях: инкапсуляции, наследовании, полиморфизме.
Инкапсуляция — это комбинирование данных с процедурами и функциями, которые манипулируют этими данными. В результате получается новый тип данных — объект.
Наследование — это возможность использования уже определенных объектов для построения иерархии объектов, производных от них. Каждый из «наследников» наследует описания данных «прародителя» и доступ к методам их обработки.
Полиморфизм — это возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектами иерархии наследования, причем каждый объект иерархии может «заказывать» особенность реализации этого действия над «самим собой».
Объектно-ориентированный подход может заметно упростить написание сложных программ, придать им гибкость. Одним из его главных преимуществ можно назвать возможность расширять область их применения, не переделывая программу, а лишь добавляя в нее новые уровни иерархии.
13.1. Определения объектов
Объект — это такая структура, компонентами которой являются взаимосвязанные данные различных типов и использующие эти данные процедуры и функции. Компоненты-данные называются полями объекта, а компоненты-процедуры и функции называются
- 271 -
методами. Для обозначения типа «объект» в языке имеется служебное слово OBJECT. Тип объекта описывается способом, похожим на задание типа «запись»:
TYPE
ИмяОбъекта = OBJECT
ПоляДанных;
ЗаголовкиМетодов;
END;
Конкретную переменную, объявленную типом ИмяОбъекта, принято называть экземпляром этого типа.
Рассмотрим в качестве примера основные типы объектов для работы с символьной и текстовой информацией. При построении объектов всегда следует начинать с определения самого нижнего (элементарного) уровня данных и действий. Так, при работе с текстовой информацией на дисплее за нижний уровень представления данных можно принять позицию курсора (назовем ее ObjPos), определяемую двумя параметрами: номером строки (Line) и номером позиции в ней, т.е. столбцом (Col). Для задания позиции и символа объявляем процедуру Init, которая должна присваивать значения полям Line и Col, а для определения позиции вводим две функции: GetLine и GetCol (рис. 13.1). Метод Print не выполняет здесь никаких действий, но понадобится в дальнейших примерах.
TYPE
> ObjPos = OBJECT
> Line : Word; { номер строки }
> Col : Word; { номер столбца }
> PROCEDURE Init(init_line, init_col : Word);
> FUNCTION GetLine : Word; { опрос Line }
> FUNCTION