Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 175

> GetCol : Word; { опрос Col }

> PROCEDURE Print { зарезервировано }

END;

PROCEDURE ObjPos.Init( init_line, init_col : Word );

BEGIN

> Line := init_line; { метод задания номера строки }

> Col := init_col; { метод задания номера столбца }

END;


Рис. 13.1

- 272 -

FUNCTION ObjPos.GetLine : Word;

>BEGIN

> GetLine := Line { метод опроса номера строки }

>END;

FUNCTION ObjPos.GetCol : Word;

>BEGIN GetCol := Col { метод опроса номера столбца }

>END;

PROCEDURE ObjPos.Print;

> { пустая процедура вывода }

>BEGIN

> Write( #7 ); { это вызовет звуковой сигнал }

>END;

>VAR ObjPosVar : ObjPos;

> { объявление экземпляра объекта }

> (*Прочие описания типов, переменных, процедур, функций*)

>BEGIN

> { Пример вызова метода назначения позиции: }

> ObjPosVar.Init( 5, 15 );

> ...

>END.


Рис. 13.1 (окончание)


В описании объекта фиксируется только название метода, в то время как его реализация в виде процедуры или функции может находиться в каком-либо из блоков описания процедур и функций. При реализации метода перед его именем обязательно указывается имя типа объекта, которому принадлежит метод. Разделителем имен служит точка «.». Обращаем внимание на то, что после объявления конкретного экземпляра объекта (на рис. 13.1 это переменная ObjPosVar) вызов метода предваряется уже не именем типа, а именем конкретного экземпляра.

Задание заголовка метода в описании типа объекта можно считать опережающим описанием (FORWARD), и поэтому при реализации метода можно не включать в его заголовок список формальных параметров.

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

- 273 -

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

ObjPosVar.Line := 5;

ObjPosVar.Col := 15;

Но в таком случае мы, во-первых, как бы «выносим» метод за границы объекта, а во-вторых, метод назначения позиции может быть гораздо более сложным (и мы это покажем позже), и в случае его изменения придется переделывать все присваивания вместо одного единственного метода. В ООП должно выполняться «джентльменское» соглашение: доступ к полям-данным объекта должны иметь только методы этого объекта. Нарушение этого правила может свести на нет все преимущества объектного подхода.

При объявлении объектов должны выполняться следующие требования:

— описание типа «объект» может производиться только в блоке определения типов