Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике все.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
986.62 Кб
Скачать

Объектный тип в Турбо-Паскале

Введение средств новой технологии - объектно-ориентированного программирования связано в Турбо-Паскале с определением нового типа - объекта, который внешне напоминает запись. Поля записи объединяют данные и методы их обработки. Продемонстрируем основные идеи ООП на примере. Будем решать задачу передвижения символа и строки на экране. Очевидно, что и символ, и строка задаются своими координатами, могут быть видимыми или невидимыми. Поскольку передвижение простейших элементов изображений характеризуется общими свойствами, попытаемся определить некоторый объект - изображение как абстрактный элемент:

type     TImage = object     {объект - изображение TImage}         X, Y: integer;     { координаты левого верхнего угла изображения}         RX, RY: integer;     {размеры изображения по осям X, Y}         V: boolean;     {признак видимости изображения}     end;

Для объявления типа "объект" было использовано ключевое слово Object. Переменная типа TImage может объявляться статически (в секции Var) или динамически (с помощью соответствующего указателя и процедуры New). Обращение к полям объектного типа осуществляется с использованием составного имени или оператора With. В соответствии с концепциями ООП объект содержит не только данные (в нашем примере X, Y, RX, RY, V), но и правила их преобразования, оформленные в виде процедур и функций, например:

type     PImage=^TImage;     {указатель на объект-изображение}     TImage=object     {объект-изображение - предок для символа и строки}         X,Y: integer;     {координаты левого верхнего угла изображения}         RX, RY: integer;     {размеры изображения по осям X,Y}         V: boolean;     {признак видимости изображения}         procedure Init(A,B:integer);     {инициализирует координаты X,Y}         procedure On;     {делает изображение видимым}         procedure Off;     {делает изображение невидимым}         procedure Move(Dx,Dy:integer);     {передвигает изображение на экране}         function GetX:integer;     {определяет координату X}         function GetY:integer;     {определяет координату Y}         procedure PrintImage;     {выводит изображение на экран}     end;

Заголовки подпрограмм, описывающих поведение объекта, всегда следуют за полями данных. При описании объекта (или объектного типа), мы попытались смоделировать возможные действия над абстрактным изображением, каким бы оно не было: символом, строкой или произвольным рисунком из символов, занимающим прямоугольную область на экране, и оформили эти действия в виде процедур и функций. Очевидно, что некоторые из них будут пустыми, т.к. их выполнение целиком определяется типом объекта. Заметим, что в объявлении объекта записываются только заголовки подпрограмм - методов. Полные их описания задаются отдельно в программе или секции Implementation модуля, причем имя подпрограммы формируется из имени объектного типа, символа "точка" и собственно имени подпрограммы. Появление заголовков процедур и функций в объявлении объектного типа эквивалентно опережающему описанию.

Приведем тексты некоторых подпрограмм - методов:

procedure TImage.Init(A,B: integer); begin     X:=A; Y:=B; V:=FALSE; end; procedure TImage.On; begin    end;     {пустая процедура} procedure TImage.Move(Dx,Dy: integer); begin     Off;    {погасить изображение}     X:=X+Dx; Y:=Y+Dy;    {переместить изображение}     On;    {включить изображение} end; function TImage.GetX:integer; begin     GetX:=X; end; procedure TImage.PrintImage; begin    end;    {пустая процедура}

Теперь можно определить в программе экземпляры объекта, например:

Var     TIm: TImage;     PIm: PImage;

и в дальнейшем оперировать с экземплярами объектов, используя объявленные методы:

TIm.Init(1,1); New(PIm); PIm^.Init(1,1); PIm^.Mov(-1,0);    {движение на одну позицию влево}

Отметим, что, определив некоторый объектный тип, можно создавать и использовать в программе сколько угодно экземпляров этого объекта, имеющих свои методы, с помощью которых обрабатываются значения полей.