Как я могу указать различия в этой ситуации? - PullRequest
1 голос
/ 22 июня 2009

Я строю код для 2D-графа сцены и у меня есть один абстрактный класс Node, который будет использоваться для указания того, что тип элемента может использоваться в графе сцены. Однако классы, которые реализуют это, имеют разные типы, такие как конечные узлы и узлы преобразования. Как бы я указал эти различия? я использовал бы атрибуты, другие интерфейсы, или что?

Редактировать: Похоже, что я дал недостаточно информации. Вот столько информации, сколько я могу предоставить в моей текущей иерархии:

  • Интерфейс INode
    • требуется матрица с именем TransformationMatrix
    • требуется список INodes под названием Children
    • требуется узел с именем Parent
    • требует, чтобы был реализован метод с именем Draw, который принимает одну матрицу в качестве аргумента и ничего не возвращает
  • Класс узла
    • реализует интерфейс INode
    • Вызов Draw (виртуальный void с 1 аргументом матрицы типов) просто вызывает метод Draw каждого дочернего INode.
  • различные классы, производные от Node
    • это фактические узлы и могут быть узлами преобразования, конечными узлами и т. Д.

1 Ответ

0 голосов
/ 22 июня 2009

Сложно дать вам совет, так как вы не предоставили нам слишком много информации о проблемной области. Также вы немного смешиваете свою терминологию, поэтому мне неясно, видите ли вы лист и узлы преобразования как интерфейсы, абстрактные классы или классы.

Я предполагаю, что с точки зрения дизайна вам нужно спросить себя, чем отличается листовой узел от узла преобразования. Если это просто свойства узла, то, возможно, использование атрибутов может быть наиболее элегантным решением, но если они имеют различное поведение, это укажет мне на отдельные классы.

Основываясь на именах, мы можем предположить, что узел преобразования "трансформируемый" и поэтому имеет метод "Преобразование", но лист не является трансформируемым. Тогда я бы предложил, чтобы у конечного узла не было метода преобразования, а был бы другой класс.

...