【问题标题】:Enterprise Architect 8 > Displaying Inheritance Chain for a ClassEnterprise Architect 8 > 显示类的继承链
【发布时间】:2012-09-25 14:20:35
【问题描述】:

我已将 PHP 源文件夹导入 Enterprise Architect。现在,我想看看任何特定类的继承链。换句话说,我希望看到一个显示类的所有关系的大图。大多数类位于与父/子类分开的文件夹中。我该怎么做..?

这就是我安装 Enterprise Architect 的原因:我对冗长的分支继承链感到困惑。如果这样一个能够识别所有关系的强大工具不能提供这些关系的概览,那将是非常令人失望的。

例如,我可以在一个文件夹的根目录中看到一个类图,说明聚合。但是,列出的聚合类仅是与父类位于同一文件夹中的类。

提前谢谢你。

【问题讨论】:

  • 你可以试试 Phpstorm,它也有一些类图:jetbrains.com/phpstorm/webhelp/working-with-diagrams.html
  • 好的,所以我用PHP_UML 生成了一个XMI 文件。我也尝试了 HTML 格式,但它包含文档。我需要一个概述类图。很简单。
  • 我启动了一个并行的、更通用的线程here
  • 请不要重复问题。还要保持你的问题准确,没有必要概括这个话题,事实上我会说这会适得其反。
  • hakra,同意主题的概括会适得其反。但是,我看不到让问题更具体的方法,因为此时标题准确地说明了我想要实现的目标。由于我不知道如何,我无法询问任何具体的方法。如果您发现提出此问题的更好方法,请随时提出建议。

标签: php inheritance uml class-diagram enterprise-architect


【解决方案1】:

此答案适用于 EA 9.3。我没有旧的 EA 8,但 EA 非常向后兼容,所以无论如何你都应该升级。

在 EA 中有几种方法可以遵循继承链。

方法一:在同一张图中添加类。

在包含继承层次结构的根类的图表中,右键单击根类并选择添加 - 相关元素。在“插入相关元素”对话框中,选择所需的链长度(“级别”),最多为 5。指定“链接类型”泛化。您可以保留其他选项,也可以随意尝试。

这将导致 EA 以最多 5 个步骤/级别将那些从根类继承的类添加到图表中。您不必从根类开始;对话框中的“链接方向”选项控制是否应在一个或两个方向上遵循关系。

您可以使用相同的函数添加通过其他关系相关的类,例如聚合。

方法 2:使用 Traceability 窗口。

在主菜单中,选择查看 - 可追溯性。这将打开 Traceability 窗口,这是一个树形视图,顶部是当前选定的元素,以及层次结构中所有相关元素的节点。

选择根类和violà,其所有继承类在Traceability窗口中显示为子节点,您可以依次展开它们以进一步跟踪链。

方法 1 将信息放在图表中,保存并需要更新。方法 2 是动态的,当您需要检查特定的关系链时更有用。

如果底层模型发生变化,图表中的关系会自动更新,因此如果您更改代码并重新导入它,这将反映在图表中。为了安全起见,请始终在与源包不同的包中使用手动创建的图表。

【讨论】:

  • 谢谢,这似乎正是我想要的。但是,如果可能的话,我想看看整个继承链。换句话说,我希望在任何方向上看到比 5 个级别更多的(全部)。可追溯性窗口正在这样做,但不是以图表的形式。如果可以的话,这正是我想要的。
【解决方案2】:

我不确定是否有现成的解决方案,但您可以使用 ReflectionClass 和 Google Graph 轻松实施

例子

class A {
}
class B extends A {
}
class C extends B {
}
class D extends C {
}
class E extends D {
}
class F extends E {
}

function getPath($className) {
    $class = new ReflectionClass($className);
    $name = $class->getParentClass();
    if ($name) {
        echo $class->getName(), " extends ";
        getPath($name->getName());
    } else {
        echo $class->getName();
    }
}

getPath("C");
getPath("F");

输出

C extends B extends A
F extends E extends D extends C extends B extends A

【讨论】:

  • 爸爸,我不需要以编程方式知道这一点。我需要一个可视化的表示,这样我才能更好地了解我正在做的事情。
  • 什么是“谷歌图表”?愿意分享链接吗?
  • 我想this 就是 Google Graph 的意思。看起来很酷。这是一个用于图形服务的 JavaScript API。
猜你喜欢
  • 2012-03-29
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多