Основы объектно-ориентированного программирования: Методические указания к выполнению лабораторной работы по дисциплине «Информатика», страница 7

Tуре ТМаterial = (Сu, А1 , Fе, Ni);

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

Так как отличие между изображением заготовки до и после ударного воздействия молота состоит в разнице значений высоты и размера основания, а также цвета линий, то для рисования заготовки предлагается использовать метод Show. В качестве передаваемых ей параметров можно использовать значения геометрических параметров заготовки и цвет линий.

Для правильного размещения на экране изображений заготовок до и после удара молотом, запрограммируем еще один метод - Draw. В этом методе определим масштаб и дважды произведем вызов методов Showс параметрами заготовки до и после удара.

Чтобы иметь возможность создать экземпляр объекта в программе,   к  методам   каждого   объекта  добавляется специальный метод-конструктор Create. Часто он остается пустым, но может использоваться нами и для задания начальных значений свойствам нового экземпляра.

На основании вышесказанного, возможное описание объекта «Абстрактная заготовка» выглядит следующим образом:

Type

  TMaterial = (Cu, Al, Fe, Ni);

  TZagot = class

    Structure: TMaterial;

    SHeight, DHeight, SOsnov, DOsnov: real;

    Constructor Create;

    Procedure Deform; virtual;

    Procedure Show (Heig, Osn: real; Zc: TColor); virtual; abstract;

    ProcedureDraw;

End;

Приведенный фрагмент текста программы следует набрать в разделе реализации модуля:

Implementation

{$R  *.DFM}

здесь!

end.

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

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

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

Чтобы   отразить   порядок  наследования   между объектами, после ключевого слова class объекта-потомка в круглых скобках указывается имя объекта-предка. После описания объекта-предкаTZagon опишем объекты-потомки TCil и TPar, т.е. объекты «Цилиндр» и «Параллелепипед»:

TCil = class(TZagot)

   constructor Сreate;

   procedure Deform; override;

   procedure Show(Heig, Osn: real; Zc: TColor); override;

  end;

  TPar = class(TZagot)

   constructor Сreate;

   procedure Deform; override;

   procedure Show(Heig, Osn: real; Zc: TColor); override;

end;

После описания объектов помещается их реализация, т.е. кодируются методы объектов:

 


var m:real;

constructor TZagot.create;

begin

 inherited;

 SHeight:=30;

 DHeight:=1;

 SOsnov:=10;

 DOsnov:=1;

 Structure:=Cu;

end;

constructor TCil.create;

begin

 inherited;

end;

constructor TPar.create;

begin

 inherited;

end;

procedure TZagot.Deform;

var k:real;

begin

 k:=1;

 case structure of

   Cu: k:=2;

   Al: k:=3;

   Fe: k:=4;

   Ni: k:=5;

 end;