Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
100
Добавлен:
04.03.2014
Размер:
235.01 Кб
Скачать

Средства объектно-ориентированного программирования. . Определение объекта. Компоненты: поля и методы.

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

Type

<имя объектного типа> = Object

<описание полей объекта>

<заголовки методов объекта>

end;

Например:

Type TRoom=Object

length,wight:real;

Function Square:real;

end;

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

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

Например:

Function TRoom.Square;

Begin Square:=length*wight; end;

. Определение экземпляров объектов. Операция присваивания над объектами. Обращение к компонентам объекта из программы и методов. Неявный параметр Self.

В программе по мере надобности объявляются переменные (экземпляры объектов) определенных ранее объектных типов.

Например:

Var A,B:TRoom; {экземпляры объекта}

pS:^TRoom; { указатель на объект}

C:array[1..10] of TRoom; { массив объектов}

Для экземпляров одного объекта разрешена операция присваивания, при этом выполняется копирование полей одного экземпляра объекта в другой, например:a:=b; {поляaкопируются вb}

Доступ к полям и методам объектов из программы осуществляется с указанием конкретного экземпляра объекта, для чего используется точечная нотация или операторwith(аналогично доступу к полям записей). Например:

а) Ss:=A.Square; {вызов функции-метода объектаTRoom}

б) ReadLn(A.length); {обращение к полю объекта}

в) with A do begin ReadLn(length); Ss:=Square; end; {использование оператораwith }

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

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

Self.length Self.wight

В некоторых случаях параметр Selfиспользуется внутри методов явно.

Пример 1. Использование параметра Self.

{ Программа определения части адреса - смещения экземпляра объекта в памяти}

Program ex;

Type TRoom=Object

length:real;

wight:real;

Function getAddr:Word;

end;

Function TRoom.getAddr;

Begin

getAddr:=ofs(Self); {в данном случае безSelfобойтись нельзя}

end;

Var a:Troom;

Begin writeln('Смещение = ',a.getAddr); end.

. Инициализация полей объектов.

Для записи исходной информации в поля объекта можно использовать три способа:

а) занести необходимую информацию, используя оператор присваивания в основной программе;

б) написать специальную подпрограмму (метод), которая будет инициализировать поля объекта;

с) использовать типизированные константы.

Продемонстрируем вышесказанное на примере.

Пример 2. Доступ к полям данных из основной программы.

{ Программа определения суммарной площади заданных комнат. Вариант 1.}

Program ex;

Type TRoom=Object

length, wight:real;

function square:real;

end;

function TRoom.square:real;

begin

square:=length*wight;

end;

Соседние файлы в папке Методичка С++