Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 22 стр.

UptoLike

Составители: 

22
2.3. Реализация класса
Реализация класса представляет собой набор определений всех
его методов . В Object Pascal все определения должны находиться за пре-
делами интерфейса класса и не предшествовать ему. Более того, если
интерфейс , будучи объ явлением типа данных, может располагаться как в
разделе интерфейса модуля, так и в разделе реализации, то реализация
класса только в разделе реализ ации модуля.
Синтаксически определения методов отличаются от определений
обычных подпрограм м лишь тем , что их идентификаторам предшеству-
ет имя класса, отделяемое точкой (говорят , что имя метода ква лифициру-
ется именем класса). Последовательность, в которой они приводятся, не
обязана в точности повторять последовательность объявлений в интер-
фейсе класса.
Как уже было отмечено в предыдущем параграфе, каждому мет о-
ду, помимо перечисленных в его объявлении параметров , передается
еще один объект, для которого данный метод вызван. Обратиться к
этому объекту внутри реализации метода можно по имени self (сам ).
Таким образом , для работы с полями и методами текущего объекта при-
меняются выражения вида
self.ИмяПоля и self.ИмяМетода(Параметры)
Пример 2.3. Реализация методов класса Triangle.
function Triangle.Perimeter: Real;
begin
result:=self.a+self.b+self.c; // возвращается сумма значений
// полей текущего объекта
end;
function Triangle.Square: Real;
var p:Real;
begin
p:=self.Perimeter/2;
result:=Sqrt(p*(p-self.a)*(p-self.b)*(p-self.c));
{ Площадь рассчитывается по формуле Герона. Для вычисления
полупериметра используется предыдущий метод, вызываемый
для объекта self. }
end;
                             2.3. Реализац иякласса

         Реал из ация кл ас с а пред с т ав л яет с обой набор опред ел ений в с ех
егом етод ов . В Object Pascal в с е опред ел ения д ол жны наход ит ь с я з а пре-
д ел ам и инт ерфейс а кл ас с а и не пред ш ес т в ов ат ь ем у. Б ол ее того, ес л и
инт ерфейс , буд учи объяв л ением т ипа д анны х, м ожет рас пол агат ь с я как в
раз д ел е инт ерфейс а м од ул я, т ак и в раз д ел е реал из ации, то реал из ация
кл ас с а — тол ь ков раз д ел е реал из ации м од ул я.
         Синт акс ичес ки опред ел ения м етод ов отл ичают с я от опред ел ений
обы чны хпод програм м л иш ь т ем , чтоихид ент ификаторам пред ш ес т в у-
ет им я кл ас с а, от д ел яем ое т очкой (гов орят, чтоим я м ет од а ква л ифициру-
е тся им енем кл ас с а). Пос л ед ов ат ел ь нос т ь , в которой они прив од ят с я, не
обяз ана в точнос т и пов торят ь пос л ед ов ат ел ь нос т ь объяв л ений в инт ер-
фейс е кл ас с а.
         Как уже бы л оот м еченов пред ы д ущем параграфе, кажд ом у м ето-
д у, пом им о перечис л енны х в его объяв л ении парам ет ров , перед ает с я
еще од ин — объект, д л я которого д анны й м етод в ы з в ан. Обрат ит ь с я к
э том у объект у в нут ри реал из ации м етод а м ожно по им ени self (с ам ).
Т аким образ ом , д л я работ ы с пол ям и и м етод ам и т екущегообъект а при-
м еняют с я в ы ражения в ид а
                  self.ИмяПоля    и self.ИмяМетода(Параметры)

Пример 2.3. Реал из ация м етод ов кл ас с а Triangle.

function Triangle.Perimeter: Real;
  begin
    result:=self.a+self.b+self.c; // возвращается сумма значений
                                   // полей текущего объекта
  end;

function Triangle.Square: Real;
  var p:Real;
  begin
    p:=self.Perimeter/2;
    result:=Sqrt(p*(p-self.a)*(p-self.b)*(p-self.c));

  { Площадь рассчитывается по формуле Герона. Для вычисления
    полупериметра используется предыдущий метод, вызываемый
    для объекта self. }

  end;




                                          22