Предупредить об использовании более эффективной функции в подклассе - PullRequest
0 голосов
/ 25 июня 2018

Я хочу реализовать библиотеку scala для графиков. Эта библиотека также должна содержать различные типы деревьев.

1 дерево классов расширяет граф классов

2 граф классов имеет метод getAllPrecursors (Node n), который возвращает все ноды, которые вы можете получить n.

3 у дерева классов есть метод getParent (Node n), который возвращает родителя узла n (в качестве опции, None, обозначающего корень)

Теперь, если кто-то вызывает метод "getAllPrecursors" для дерева, я хочу отобразить предупреждение типа "деревья имеют не более 1 предшественника, вместо этого используйте getParent".

Есть ли способ сделать это? Есть ли лучший способ построить эту библиотеку? Разве деревья не должны быть подклассом графа?

1 Ответ

0 голосов
/ 25 июня 2018

Во-первых, не беспокойтесь о производительности, если только вы не докажете, что производительность этого кода важна для общей производительности: «Преждевременная оптимизация - корень всех зол»

Однако вы можете делать то, что хотитеперегружая getAllPrecursors и помечая его устаревшим:

class graph {
  def getAllPrecursors(n: Node): List[Node] = ...
}

class tree extends graph {
  def getParent(n: Node) = ...

  @deprecated("Use getParent rather that getAllPrecursors", "1.0")
  override def getAllPrecursors(n: Node) = List(getParent(n))
}

Это выдаст предупреждение об устаревании, если вы используете getAllPrecursors для значения типа tree, но не для значения типа graph (даже если это значение на самом деле является экземпляром tree)

Что касается проектирования, было бы лучше иметь getAllPrecursors и getParent в качестве методов на NodeTreeNode), а не на самом графике.

...