Основы объектно-ориентированного программирования



         

Прямоугольники - часть 2


Если не включить объявление redefine, то новое объявление компонента perimeter среди других компонентов класса RECTANGLE приведет к ошибке, поскольку у RECTANGLE уже есть компонент perimeter, унаследованный от POLYGON, т.е. у некоторого компонента окажется два определения.

Класс RECTANGLE выглядит следующим образом:

indexing description: "Прямоугольники, - специальный случай многоугольников" class RECTANGLE inherit POLYGON redefine perimeter end creation make feature -- Инициализация make (center: POINT; s1, s2, angle: REAL) is -- Установить центр прямоугольника в center, длины сторон -- s1 и s2 и ориентацию angle. do ... end feature -- Access side1, side2: REAL -- Длины двух сторон diagonal: REAL -- Длина диагонали perimeter: REAL is -- Сумма длин сторон -- (Переопределение версии из POLYGON) do Result := 2 S (side1 + side2) end invariant four_sides: count = 4

first_side: (vertices.i_th (1)).distance (vertices.i_th (2)) = side1 second_side: (vertices.i_th (2)).distance (vertices.i_th (3)) = side2 third_side: (vertices.i_th (3)).distance (vertices.i_th (4)) = side1 fourth_side: (vertices.i_th (4)).distance (vertices.i_th (1)) = side2 end


Для списка i_th(i) дает элемент в позиции i ( i-й элемент, следовательно это имя запроса).

Так как RECTANGLE является наследником класса POLYGON, то все компоненты родительского класса применимы и к новому классу: vertices, rotate, translate, perimeter (в переопределенном виде) и все остальные. Их не нужно повторять в определении нового класса.

Этот процесс транзитивен: всякий класс, будучи наследником RECTANGLE, например, SQUARE, также обладает всеми компонентами класса POLYGON.




Содержание  Назад  Вперед