·
Объект типа
TPoint
является точкой с координатами
x,y
вещественного типа и цветом
Pcolor.
Вещественный тип координат точки определяется тем , что этот объект предназначен
для описания вершин квадрата, а при вращении они могут принимать вещественные
значения. Кроме очевидных необходимых методов
Init,
Show
и
Destructor
добавим в их число и виртуальный
метод Rotate
реализующий плоское вращение точки
вокруг заданной оси. Координаты оси вращения имеют целый тип и задаются извне
(являются входными параметрами метода). Целые значения координат оси обусловлены
тем, что размер as
квадрата в дальнейшем будем выбирать
среди целых значений.
·
Объект типа
TLine
наследует все поля и методы
TPoint,
но перекрывает своими виртуальными методами
Show
и Rotate
соответствующие методы родителя. Отметим,
что перекрываются и другие одноименные методы (например,
Constructor
Init,
Destructor),
но как указывалось ранее, в программе с ними будет установлена статическая связь
и они останутся вне рамок, обеспечивающих полиморфизм объектов. Обратите
внимание, что заголовки виртуальных методов должны оставаться неизменными. Тип
TLine,
кроме унаследованных полей
x
и
y,
содержит два поля pn
и
pk
типа
TPoint,
которые являются объектами и описывают две точки, задающих отрезок прямой на
плоскости – будущую сторону квадрата. Виртуальные методы
Show
и Rotate
позволяют отображать этот отрезок на экране цветом
Lcolor
и поворачивать его вокруг заданной оси. На первый взгляд, непонятна роль
унаследованных полей x
и
y.
Тем более, что можно было в типе
TLine обойтись только одним полем
pn,
а координаты конца отрезка поместить в
x
и
y.
Однако, такой подход привел бы к разным синтаксическим конструкциям при
обращении к начальной и конечной точкам отрезка, что повлияло бы на
единообразие стилистики программы и затруднило бы ее восприятие. Кроме того,
потомки данного типа могут использовать эти поля для своих специфических нужд,
например, помещая в них координаты середины отрезка.
·
Объектный тип
TSquare
(квадрат) конструируется из 4-х
отрезков типа ТLine,
длины стороны квадрата as
и переменной
Scolor
для задания его цвета, а виртуальные
методы Show
и
Rotate
обеспечивают его полиморфические свойства отображения и поворота.
·
Тип
TScreen,
находясь на самом нижнем уровне иерархии описывает самый сложный объект – экран
, со всеми его «действующими лицами»: катящимся квадратом и поверхностью
качения. Кроме квадрата, унаследованного из родительского типа, в данном типе
имеются О-поля для задания положения и цвета поверхности качения (поля
Gdisp
и Gcolor)
и соответствующий метод
DrawGround ее прорисовки на экране, а
также поля OsX,OsY
и
angle
для текущих координат положения оси вращения и текущего значения угла поворота
квадрата соответственно. Метод
GraphInit инициализирует графический режим
монитора VGAHi
и сделан виртуальным, так как тип
TScreen
сам, в дальнейшем, может
использоваться как родительский для создания других объектов, использующих
другие графические режимы. Метод
ShiftOsXY отвечает за своевременное
перемещение оси вращения квадрата при его качении по поверхности и тоже является
виртуальным, поскольку условия перемещения оси вращения квадрата зависят от
рельефа качения и в потомках может возникнуть необходимость его модификации.
Вообще, во всех случаях, когда возникают сомнения относительно того, сделать
метод статическим или виртуальным, лучше сделать выбор в пользу виртуальности,
поскольку «все течет – все изменяется» и нельзя исключать, что в дальнейшем
данный объект, уже в другой Вашей программе, может пригодиться как
прародительский и сэкономит Ваши время и усилия. Метод
Go
реализует основные действия при качении
квадрата: анимацию, регенерацию сцены при достижении квадратом края экрана,
реакцию на завершение программы и т.п. |