this, previous: POINT
do
from
vertices.start; this := vertices.item
check not vertices.after end -- Следствие условия at_least_three
until
vertices.is_last
loop
previous := this
vertices.forth
this := vertices.item
Result := Result + this.distance (previous)
end
Result := Result + this.distance (vertices.first)
end
В этом цикле просто последовательно складываются расстояния между соседними вершинами. Функция
Прямоугольники
Предположим теперь, что нам требуется новый класс, представляющий прямоугольники. Можно было бы начать его проектировать заново. Но прямоугольники это специальный вид многоугольников и у них много общих компонент: их также можно сдвигать, поворачивать и выводить на экран. С другой стороны, у них есть ряд специфических компонентов (например, диагонали), специальные свойства (число вершин равно четырем, а углы являются прямыми) и возможны специальные варианты некоторых операций (вычисление периметра можно устроить проще, чем в приведенном выше алгоритме).
Преимущества такой смеси общих и специфических компонентов можно использовать, определив класс
class RECTANGLE inherit
POLYGON
feature
... Компоненты, специфичные для прямоугольников ...
end
В предложении feature класса-наследника компоненты родителя не повторяются: они автоматически доступны благодаря предложению о наследовании. В нем будут указаны лишь компоненты, специфичные для наследника. Это могут быть новые компоненты, такие как
Вторая возможность полезна для такого компонента, который уже имелся у родителя, но у наследника должен быть описан в другом виде. Рассмотрим периметр
class RECTANGLE inherit
POLYGON
redefine perimeter end
feature
...
end
Это позволяет включить в предложение feature класса
Класс
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
-- Длины двух сторон
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии