Java 如何以图解方式表示重写的方法

Java 如何以图解方式表示重写的方法,java,inheritance,uml,diagram,overriding,Java,Inheritance,Uml,Diagram,Overriding,考虑以下java类: public class GenericActionService { public void runAction(int actionNo) { .... (some stuff) runActionCode(actionNo); .... (some more stuff) } protected void runActionCode(int actionNo) { swi

考虑以下java类:

public class GenericActionService {

    public void runAction(int actionNo) {

        .... (some stuff)

        runActionCode(actionNo);

        .... (some more stuff)
    }

    protected void runActionCode(int actionNo) {
        switch (actionNo) {
            case 100:
                doSomeGenericAction();
                break;
            ....

            default:
                throw new IllegalArgumentException("Invalid Action!");
        }
    }
}
和继承的子类:

public class SpecificActionService extends GenericActionService {

    protected void runActionCode(int actionNo) {
        switch (actionNo) {
            case 1000:
               doSomeSpecificAction();
               break;
            ....

            default:
                super.runActionCode(actionNo);
                break;
        }
    }
}
现在我不关心这是否是一个特别好的设计,这些类是高度虚构的

我想知道的是,你是如何用一些图表来表示这个设计的?这可以用UML序列图来表示吗?如果没有,应该使用什么类型的图表

特别是,我想在
SpecificActionService
实例上调用
runAction()
方法时绘制流程/顺序图

例如,考虑<代码> RunActudio(1000)< /C> >在代码< > ActActudioService < /代码>时调用的执行流程。我希望图表显示以下内容:

  • 调用SpecificActionService.runAction(1000)
  • 它在
    GenericActionService.runAction()中运行一些代码
  • 在调用
    SpecificActionService.runActionCode(1000)
  • 调用
    GenericActionService.runActionCode(1000)
  • 谁来执行这个动作
  • 返回
    SpecificActionService.runActionCode(1000)
  • 返回到
    GenericActionService.runAction(1000)
  • 在返回到原始调用方之前运行更多代码
问题是有些人认为这是“现代意大利面代码”,尤其是那些在这种继承结构上似乎“不懂”的经理,所以我想把这一流程记录下来,以便他们理解。 给那些为我画了一幅美丽图画的人额外加分。:-)

特别是,我想绘制流程/序列图

所以我会使用序列图。这可以显示对象如何协同工作。它没有向您展示继承结构以及如何编写类,但是对于这一点,您也可以稍后添加类图

这是一幅奇特的简单图像,它看起来是什么样子:

如果这还不够好,并且您想用它进行实验,那么请参阅源代码:)


是的,这和我想展示的非常接近。但是它没有显示在调用
runActionCode
方法之前,对
runAction()的两个调用如何在
GenericActionService
中执行一些代码。事实上,对
runAction(1000)
的调用似乎从未接近
GenericActionService
。请参阅我的问题的编辑部分,以了解我试图展示的内容的更具体示例。此外,您的图表显示了对
runActionCode()
(受
保护的
)而不是
runAction()的调用
。既然您对代码和序列流有了更好的理解,我建议您尝试绘制这样一个图表,如果结果中有什么困扰您,我可以尝试给出一些提示。使用我使用的工具(当然你可以使用UML的其他功能)很容易得到一些第一个图是的,你给我展示的很好,因为它展示了我可以使用序列图来显示继承。当我在互联网上搜索时(谷歌图片搜索“uml序列图继承被覆盖”),我看不到任何合适的。干杯
otherObject->SpecificActionService:runActionCode(1000)
SpecificActionService->SpecificActionService:doSomeSpecificAction()

otherObject->SpecificActionService:runActionCode(100)
SpecificActionService->GenericActionService :runActionCode(100)
GenericActionService->GenericActionService:doSomeGenericAction()