Создание объектов
В объекте TRect, с помощью которого создается и перемещается прямоугольник, учтем то обстоятельство, что для задания прямоугольника требуется указать четыре целочисленных параметра, т.е. столько же, сколько для задания линии. Поэтому объект TRect удобнее породить не от TGraphObj, а от TLine, чтобы использовать его конструктор Init:
type TRect = object(TLine) Procedure Draw(aColor: Word); end; Procedure TRect.Draw; begin SetColor(aColor); Rectangle(X,Y,X+dX,Y+dY) {Вычерчиваем прямоугольник} end;
Чтобы описания графических объектов не мешали созданию основной программы, оформим эти описания в отдельном модуле GraphObj:
Unit GraphObj; Interface {Интерфейсная часть модуля содержит только объявления объектов} type TGraphObj = object … end; TPoint = object(TGraphObj) … end; TLine = object(TGraphObj) … end; TCircle = object(TGraphObj) end; TRect = object(TLine) … end; Implementation {Исполняемая часть содержит описания всех объектных методов} Uses Graph; Constructor TGraphObj.Init; … end.
В интерфейсной части модуля приводятся лишь объявления объектов, подобно тому как описываются другие типы данных, объявляемые в модуле доступными для внешних программных единиц. Расшифровка объектных методов помещается в исполняемую часть implementation, как если бы это были описания обычных интерфейсных процедур и функций. При описании методов можно опускать повторное описание в заголовке параметров вызова. Если они все же повторяются, они должны в точности соответствовать ранее объявленным параметрам в описании объекта. Например, заголовок конструктора TGraphObj.Init может быть таким:
Constructor TGraphObj.Init;
Или таким:
Constructor TGraphObj.Init(aX,aY: Integer; aColor: Word);