Все фигуры могут реализовать интерфейс IShape
.Для IShape
потребуется метод Area()
и метод IsIntersectingWith(IShape otherShape)
.Однако это упрощенное представление поднимает некоторые другие вопросы о том, как вы будете реализовывать динамическую диспетчеризацию (для пересечения треугольника / треугольника требуется алгоритм, отличный от треугольника / сегмента).
Это, конечно, предполагает, что вам действительно нужны эти функции.Предполагая графически ориентированную библиотеку форм, вы можете определить такие преобразования, как Rotate
, Translate
, Scale
.Вы также можете принудительно использовать Union
, Intersect
или любую другую операцию множества (но эти две могут выражать все, что вам может понадобиться).
Вы также можете основывать вещи на вычислительной геометрии и предоставлять функции метода, которыепреобразовать любой IShape
в Polygon
.
Моя точка зрения заключается в том, что функциональность, которая может быть реализована через IShape
, должна соответствовать ожидаемому использованию.Если у вас нет ожидаемого использования (так как оно начинается с обучения), вы должны использовать его как часть самого упражнения или как поле для обнаружения (как насчет этого использования или того использования, можем ли мы выразить всю эту функциональностьв одном интерфейсе или мы должны разделить его на несколько)