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

UptoLike

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

20
Таким образом , первый аргумент просто ставится перед именем подпро-
грам мы и отделяется от него точкой .
Отсюда следует, в частности, что каждому методу передается по
крайней мере один аргумент объект, для которого этот метод вызыва-
ется. Данное правило вполне соответствует пониманию метод а как
свойства объекта: нельзя говорить о свойстве, не указав, к чему именно
оно относится. Становится ясно также, почему в рассмотренном выше
примере методы Square и Perimeter объявлены без параметров : необхо-
димая информация будет передана им автоматически.
Новая, не совсем обычная, форма записи в действительности по-
зволяет несколько сократить количество используемых скобок , увеличи-
вая тем с амым читабельность выражений. В самом деле, если элемент
данных, возвращаемый методом - функцией, в свою очередь является объ -
ектом , то для него снова могут быть вызваны соответствующие методы.
В результате, возникают последов а тельности вида
Объект.Метод1(¼).Метод2(¼).Метод3(¼).¼
где метод с номером k относится к классу, которому принадлежит объект,
возвращаемый методом с номером k
-
1.
Рассмотрим , наконец, небольшую программу, демонстрирующую
работу с объектами класса Triangle. Сама возможность привести такой
пример уже сейчас показывает, что для использования класса достаточ-
но лишь иметь представление о его и нтерфейсе и совершенно не обяз а -
тельно знать, как именно реал изуются методы.
Пример 2.2. Использование класса Triangle.
program TestTriangle;
{$APPTYPE CONSOLE}
uses UnitTriangle; // подключаем модуль, в котором
// определен класс Triangle
var t1, t2: Triangle; // объявление объектных переменных
begin
t1:=Triangle.Create; // объекты размещаются в памяти и их адреса
t2:=Triangle.Create; // присваиваются объектным ссылкам
t1.a:=2; t2.a:=3; // полям объектов приписываются
t1.b:=3; t2.b:=4; // конкретные числовые значения
t1.c:=4; t2.c:=5; //
WriteLn('Square of triangle 1: ', t1.Square);
WriteLn('Perimeter of triangle 1: ', t1.Perimeter);
WriteLn('Square of triangle 2: ', t2.Square);
WriteLn('Perimeter of triangle 2: ', t2.Perimeter);
Т аким образ ом , перв ы й аргум ент прос тос т ав ит с я перед им енем под про-
грам м ы и отд ел яет с я от неготочкой.
          От с юд а с л ед ует, в час т нос т и, чтокажд ом у м етод у перед ает с я по
крайней м ере од ин аргум ент — объект, д л я которогоэ тот м етод в ы з ы в а-
ет с я. Данное прав ил о в пол не с оот в ет с т в ует поним анию м етод а как
с в ойс т в а объект а: нел ь з я гов орит ь ос в ойс т в е, не указ ав , к чем у им енно
оно от нос ит с я. Ст анов ит с я яс но т акже, почем у в рас с м от ренном в ы ш е
прим ере м етод ы Square и Perimeter объяв л ены без парам ет ров : необхо-
д им ая информ ация буд ет перед ана им ав том ат ичес ки.
             Н ов ая, не с ов с ем обы чная, форм а з апис и в д ейс т в ит ел ь нос т и по-
   з в ол яет нес кол ь кос ократ ит ь кол ичес т в оис пол ь з уем ы хс кобок, ув ел ичи-
   в ая т ем с ам ы м чит абел ь нос т ь в ы ражений. В с ам ом д ел е, ес л и эл ем ент
   д анны х, в оз в ращаем ы й м етод ом -функцией, в с в ою очеред ь яв л яет с я объ-
   ектом , тод л я негос нов а м огут бы т ь в ы з в аны с оот в ет с т в ующие м етод ы .
   В рез ул ьт ат е, в оз никают пос л ед ов ат ел ь нос т и в ид а
                  Объект.Метод1(¼).Метод2(¼).Метод3(¼).¼
   гд е м етод с ном ером k от нос ит с я к кл ас с у, котором у принад л ежит объект,
   в оз в ращаем ы й м етод ом с ном ером k - 1.
         Рас с м от рим , наконец, небол ь ш ую програм м у, д ем онс т рирующую
работ у с объект ам и кл ас с а Triangle. Сам а в оз м ожнос т ь прив ес т и т акой
прим ер уже с ейчас показ ы в ает, чтод л я ис пол ь з ов ания кл ас с а д ос т аточ-
нол иш ь им ет ь пред с т ав л ение оегоинт ерфейс е и с ов ерш енноне обяз а-
т ел ь ноз нат ь , как им еннореал из уют с я м етод ы .

Пример 2.2. И с пол ь з ов ание кл ас с а Triangle.

program TestTriangle;
{$APPTYPE CONSOLE}
uses UnitTriangle;                 // подключаем модуль, в котором
                                   // определен класс Triangle
var t1, t2: Triangle;              // объявление объектных переменных
begin
  t1:=Triangle.Create;    // объекты размещаются в памяти и их адреса
  t2:=Triangle.Create;    // присваиваются объектным ссылкам
  t1.a:=2; t2.a:=3;       // полям объектов приписываются
  t1.b:=3; t2.b:=4;       // конкретные числовые значения
  t1.c:=4; t2.c:=5;       //
  WriteLn('Square of triangle 1: ', t1.Square);
  WriteLn('Perimeter of triangle 1: ', t1.Perimeter);
  WriteLn('Square of triangle 2: ', t2.Square);
  WriteLn('Perimeter of triangle 2: ', t2.Perimeter);



                                             20