Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oaip_2 / Курсовая ОАиП.doc
Скачиваний:
95
Добавлен:
27.05.2013
Размер:
204.8 Кб
Скачать

Описание типов и экземпляров объектов

Переменные объектных типов - экземпляры объектов – также как и записи представляют собой комдбинированные структуры данных. По внешнему виду описания они также похожи на записи. Первым синтаксическим отличием является использование ключевого слова object вместо record.

НапримерЮ в простейшем случае, положение шахматной фигуры на доске с помощью объектного кода может быть описано:

Type

TPosition = object

Column : TColumns;

Rows : TRows;

end;

где типы TСolumns и TRows имеют следующий вид:

Type

TColumns = ‘a’..’h’ ;

TRows = 1 ..8 ;

Второе отличие состоит в том, что объект может включать методы. Чтобы ОО – методология работала четко, требуется чтобы объекты сами выполняли все действия с помощью своих методов. Эти жесткие требования удовлетворяют требованию структурного программирования. Т.о. для любого действия , выполняемого над информационными полями объекта, должен быть написан отдельный метод. В программе описания заголоаков методов располагаются после описаний информационных полей объекта и будут выглять например так:

TPosition = object

Column : TColumns;

Row : TRows;

procedure Init ( Cl : TColumns; Rw : TRows);

function GetRows : TRows;

end;

В разделе типов при описании объектных типов указываются только заголовки методов. Полное же описание методов – их тела – указыватся в разделе объявления процедур и функций.

procedure TPosition.Init ( Cl : TColumns; Rw : TRows);

begin

Column:=Cl;

Rows:=Rw;

end;

function TPosition.GetRows : TColumns;

begin

GetRows:=Column;

end;

Важной особенностью оптсания реализации методов является то, что доступ к информационным полям Column и Row объекта TPosition , которому принадлежат определяемые методы Init, GetRow осуществляется так, как еслибы операторные блоки методов были окружены невидимым оператором with.

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

Если какой-либо экземпляр объектного типа ObjVar вызывает принадлежащий ему метод Method , то выполняется неявный оператор:

with ObjVar do Method

Наптимер при вызове KingPos.Init ( ‘e’ , 1 ) текст прцедуры TPosition.Init будет трактоватся так:

procedure TPosition.Init ( Cl : TColumns; Rw : TRows);

begin

with KingPos do

begin

Column:=Cl;

Rows:=Rw;

end;

end;

На самом деле текст процедуры TPosition.Init не изменится в зависимости от вызова, как показано выше. Это показано для объяснения смысла происходящих действий. В действительности, в заголовках метода всегда присутствует невидимый формальный параметр с индетификатором Self , которому при вызове метода в качестве фактического параметра неявно передается имя конкретного экземпляра объекта. Параметр Self фактически является 32-ух разрядным указателем на экземпляр объекта , осуществляющего вызов метода.

Структуру невидимых описаний можно представить следующим образом:

procrdure MethodName ( Self : Pointer; др. параметры);

begin

with Self do

begin

Операторы метода

end;

end;

Следует заметить , что хотя Self и присутсвует в неявном виде, допускается использовать его и явно:

procedure TPosition.Init ( Cl : TColumns; Rw : TRows);

begin

Self .Column:=Cl;

Self .Rows:=Rw;

end;

Однако применять Self рекомендуется только в случае необходимости, например для устранения неоднозначности в использовании идентификаторов.

Соседние файлы в папке oaip_2