Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПО / Материалы по ТП / Гафаров_Metod_OOP_1.doc
Скачиваний:
123
Добавлен:
12.03.2015
Размер:
2.48 Mб
Скачать

2.2. Проектирование структуры объектов

1. Объект типа TPoint является точкой с координатами x,y вещественного типа и цветом Pcolor. Вещественный тип координат точки определяется тем, что этот объект предназначен для описания вершин квадрата, а при вращении они могут принимать вещественные значения. Кроме очевидных необходимых методов Init, Show и Destructor добавим в их число и виртуальный метод Rotate реализующий плоское вращение точки вокруг заданной оси. Координаты оси вращения имеют целый тип и задаются извне (являются входными параметрами метода). Целые значения координат оси обусловлены тем, что размер as квадрата в дальнейшем будем выбирать среди целых значений.

2. Объект типа TLine наследует все поля и методы TPoint, но перекрывает своими виртуальными методами Show и Rotate соответствующие методы родителя. Отметим, что перекрываются и другие одноименные методы (например, Constructor Init, Destructor), но как указывалось ранее, в программе с ними будет установлена статическая связь и они останутся вне рамок, обеспечивающих полиморфизм объектов. Обратите внимание, что заголовки виртуальных методов должны оставаться неизменными. Тип TLine, кроме унаследованных полей x и y, содержит два поля pn и pk типа TPoint, которые являются объектами и описывают две точки, задающие отрезок прямой на плоскости – будущую сторону квадрата. Виртуальные методы Show и Rotate позволяют отображать этот отрезок на экране цветом Lcolor и поворачивать его вокруг заданной оси. На первый взгляд, непонятна роль унаследованных полей x и y. Тем более что можно было в типе TLine обойтись только одним полем pn, а координаты конца отрезка поместить в x и y. Однако, такой подход привел бы к разным синтаксическим конструкциям при обращении к начальной и конечной точкам отрезка, что повлияло бы на единообразие стилистики программы и затруднило бы ее восприятие. Кроме того, потомки данного типа могут использовать эти поля для своих специфических нужд, например, помещая в них координаты середины отрезка.

3. Объектный тип TSquare (квадрат) конструируется из 4-х отрезков типа TLine, длины стороны квадрата as и переменной Scolor для задания его цвета, а виртуальные методы Show и Rotate обеспечивают его полиморфические свойства отображения и поворота.

4. Тип TScreen, находясь на самом нижнем уровне иерархии, описывает самый сложный объект – экран, со всеми его «действующими лицами»: катящимся квадратом и поверхностью качения. Кроме квадрата, унаследованного из родительского типа, в данном типе имеются О-поля для задания положения и цвета поверхности качения (поля Gdisp и Gcolor) и соответствующий метод DrawGround ее прорисовки на экране, а также поля OsX,OsY и angle для текущих координат положения оси вращения и текущего значения угла поворота квадрата соответственно. Метод GraphInit инициализирует графический режим монитора VGAHi и сделан виртуальным, так как тип TScreen сам, в дальнейшем, может использоваться как родительский для создания других объектов, использующих другие графические режимы. Метод ShiftOsXY отвечает за своевременное перемещение оси вращения квадрата при его качении по поверхности и тоже является виртуальным, поскольку условия перемещения оси вращения квадрата зависят от рельефа качения и в потомках может возникнуть необходимость его модификации. Вообще, во всех случаях, когда возникают сомнения относительно того, сделать метод статическим или виртуальным, лучше сделать выбор в пользу виртуальности, поскольку «все течет – все изменяется» и нельзя исключать, что в дальнейшем данный объект, уже в другой Вашей программе, может пригодиться как прародительский и сэкономит Ваши время и усилия. Метод Go реализует основные действия при качении квадрата: анимацию, регенерацию сцены при достижении квадратом края экрана, реакцию на завершение программы и т.п.