Конкретные классы, порождаемые от TFigure.

Лабораторная работа №3

"Наследование, полиморфизм".

Обрисовать типы и привести реализацию 3-х классов: 1-го абстрактного (родительского) и 2-ух определенных (дочерних).

В отдельном модуле Figures.pas обрисовать абстрактный класс TFigure и три его определенных потомка.

Абстрактный класс, некие способы абстрактные.

Класс – геометрическая фигура на плоскости (TFigure).

Характеристики – X,Y – координаты центра (RW, ограничены числом 8 по Конкретные классы, порождаемые от TFigure. модулю);
– S – площадь фигуры (RW, не больше 100).

Способы – MoveTo(NewX,NewY) – перенос центра в обозначенную точку;
– MoveRel(dX,dY) – перенос центра на обозначенный вектор;

– Equal(f:TFigure) – функция сопоставления с другой фигурой (правда, когда совпадают и тип и размеры);
– Crossing(f:TFigure) – функция проверки скрещения с Конкретные классы, порождаемые от TFigure. другой фигурой (правда, когда есть хотя бы одна общая точка);
– ZeroIn – функция, проверяющая, содержит ли фигура начало координат;
– Info – функция информация (выводит вид фигуры, координаты, размеры, площадь и значение функции ZeroIn).

Определенные классы, порождаемые от TFigure.

Требуется обрисовать тип (с добавлением 1-го характеристики) и, по мере надобности, переопределить некие способы Конкретные классы, порождаемые от TFigure..

Идентификатор типа Описание класса
TPoint Точка на плоскости (площадь всегда 0).
TCircle Круг на плоскости. Дополнительное свойство – R – радиус круга (RW, вначале = 1).
TSquare Квадрат, стороны параллельны осям координат. Дополнительное свойство – A – сторона квадрата (RW, вначале = 1).

Работоспособность классов проверить в консольной программке Lab_4.dpr, текст которой приведён ниже (текст не поменять):

program Конкретные классы, порождаемые от TFigure. Lab_4;

{$APPTYPE CONSOLE}

uses

SysUtils,

Figures in 'Figures.pas';

const N=10;

var p : array [1..N] of TFigure;

procedure Finish;

var i : byte;

begin

Writeln('3. Finish');

for i:=1 to N do p[i].Free;

end;

procedure Table(k:byte);

var i,j : byte;

begin

if k=1 then Write(' Equal ')

else Write(' Cross ');

for Конкретные классы, порождаемые от TFigure. j:=1 to N do Write(j:6); Writeln;

for i:=1 to N do begin

Write(i:7,' ');

for j:=1 to N do

if k=1 then Write(p[i].Equal(p[j]):6)

else Write(p[i].Crossing(p[j]):6);

Writeln;

end;

Writeln

end;

procedure Show;

var i : byte;

begin

Writeln('------------ F I G U Конкретные классы, порождаемые от TFigure. R E S -------------');

for i:=1 to N do Writeln(i:3,' ',p[i].Info);

writeln;

Table(1);

Table(2);

end;

procedure Creation;

var i : byte;

begin

Writeln('1.Creation');

for i:=1 to N do

case Random(3) of

0: p[i]:=TPoint.Create;

1: p[i]:=TCircle.Create;

2: p[i]:=TSquare.Create;

end;

end;

procedure Moving;

var i : byte;

begin

Writeln('2.Moving');

for Конкретные классы, порождаемые от TFigure. i:=1 to N do begin

p[i].MoveTo(Random(10),Random(10));

if p[i] is TCircle then TCircle(p[i]).r:=Random(20);

if p[i] is TSquare then TSquare(p[i]).a:=Random(15);

end;

end;

begin

Randomize;

Creation; Show;

Moving; Show;

Finish;

Readln;

end.

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

Итог представлен на рисунке ниже:

На первой таблице виден итог работы конструкторов (центр – начало координат, сторона либо радиус равны 1, все содержат начало координат.

2-ая таблица (демо для способа Equal) указывает их тождества. Видно, что тождественны фигуры 1 – 3 (это Конкретные классы, порождаемые от TFigure. две окружности), фигуры 2 – 4 – 6 – 9 – 10 (это все точки) и фигуры 5 – 7 – 8 (это три квадрата).

3-я таблица (демо для способа Crossing) указывает, какие пары фигур имеют общие точки. Т.к. начало координат принадлежит всем фигурам, то таблица содержит только TRUE.

Дальше, ко всем (процедура Moving) объектам были использованы способы, изменяющие их характеристики Конкретные классы, порождаемые от TFigure. случайными значениями.. Итог представлен на рисунке ниже. Для наглядности показана также схема расположения фигур после преобразования.

Как видно, круг 1 не поменялся, а круг 3 просто передвинулся (новые характеристики оказались недопустимыми). Из 5 точек только две (9 и 10) остались на месте, а точки 2, 4 и 6 переместились. Все три квадрата (5, 7 и 8) передвинулись и изменили размеры.

Из первой Конкретные классы, порождаемые от TFigure. таблицы видно, что начало координат (IN) содержат непереместившиеся фигуры (1, 9 и 10), также большой голубий квадрат 7.

2-ая таблица (демо для способа Equal) указывает, что только 2 фигуры (точки 9 и 10) тождественны друг дружке, другие же равны только самим для себя.

Обоюдное скрещение фигур указывает 3-я таблица (демо для способа Crossing). Видно Конкретные классы, порождаемые от TFigure., что фигура 7 (большой голубий квадрат) пересекается со всеми фигурами, а точка 6 только с этим квадратом.

Добейтесь того, чтоб и у Вас содержание обоих таблиц соответствовало характеристикам фигур.


konkurentosposobnost-produkcii.html
konkurentosposobnost-rossii-v-mirovoj-ekonomike-stranica-3.html
konkurentosposobnost-tovara-i-firmi.html