Создание объектов
Чтобы создать объект-линию, необходимо ввести два новых поля для хранения координат второго конца. Дополнительные поля требуется наполнить конкретными значениями, поэтому нужно перекрыть конструктор родительского объекта:
type TLine = object(TGraphObj) dX,dY: Integer; {Приращения координат второго конца} Constructor Init(X1,Y1,X2,Y2: Integer; aColor: Word); Procedure Draw(aColor: Word); Virtual; end;, Constructor TLine.Init; {Вызывает унаследованный конструктор TGraphObj для инициации полей X, Y и Color. Затем инициирует поля dX и dY} begin {Вызываем унаследованный конструктор} Inherited Init(XI,Yl,aColor); {Инициируем поля dX и dY} dX: = Х2-Х1; dY: = Y2-Y1 end; Procedure Draw; begin SetColor(Color);{Устанавливаем цвет Color} Line(X,Y,X+dX,Y+dY){Вычерчиваем линию} end;
В конструкторе TLine.Init для инициации полей X, Y и Color, унаследованных от родительского объекта, вызывается унаследованный конструктор TGraph.Init, для чего используется зарезервированное слово inherited (англ. – унаследованный):
Inherited Init(XI,Yl,aColor);
С таким же успехом мы могли бы использовать и составное имя метода:
TGraphObj.Init(Xl,Yl,aColor);
Для инициации полей dX и dY вычисляется расстояние в пикселах по горизонтали и вертикали от первого конца прямой до ее второго конца. Это позволяет в методе TLine.Draw вычислить координаты второго конца по координатам первого и смещениям dX и dY. В результате простое изменение координат реперной точки X, Y в родительском методе TGraph.MoveTo перемещает всю фигуру по экрану.
Теперь нетрудно реализовать объект TCircle для создания и перемещения окружности:
type TCircle = object(TGraphObj) R: Integer; {Радиус} Constructor Init(aX,aY,aR: Integer; Procedure Draw(aColor: Virtual); end; Constructor TCircle.Init; begin Inherited Init(aX,aY,aColor); R: = aR end; aColor: Word) Procedure TCircle.Draw; begin SetColor(aColor); {Устанавливаем цвет Color} Circle(X,Y,R) {Вычерчиваем окружность} end;