Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定面向对象类中的方法依赖关系_Java_Oop_Code Analysis_Static Analysis - Fatal编程技术网

Java 确定面向对象类中的方法依赖关系

Java 确定面向对象类中的方法依赖关系,java,oop,code-analysis,static-analysis,Java,Oop,Code Analysis,Static Analysis,有没有人知道有什么方法可以尝试确定面向对象类中单个方法的方法和实例变量依赖关系?例如,如果我有以下代码: public class Foo { private int x; private int y; public Foo() { x = 1; y = 2; } public void doFoo() { doJaa(x); x++; } private void doJaa(int x

有没有人知道有什么方法可以尝试确定面向对象类中单个方法的方法和实例变量依赖关系?例如,如果我有以下代码:

public class Foo {
   private int x;
   private int y;

   public Foo() {
      x = 1;
      y = 2;
   }

   public void doFoo() {
      doJaa(x);
      x++;      
   }

   private void doJaa(int xVar) {
      System.out.println("x is: " + xVar);
   }

   private void nop() {
      System.out.println("Nada!");
   }
}
我想做的是采用一个方法,比如说方法“doFoo”,并确定其所有实例变量和方法依赖项(我希望在构建时确定这些依赖项)。在本例中,这些依赖项将是“intx”、“Foo()”和“doJaa(intx)”。但是,方法“nop”和“doJaa”之间没有依赖关系。这种类型的分析是否有一个名称,以便我可以搜索有关它的更多信息?我了解以下分析技术

  • 控制流图(对我没有用处)
  • 程序依赖图
  • 系统依赖图

  • 1对我没有多大用处,因为它与控制流有关。2涉及单个方法内或跨方法边界的控制和数据依赖关系。我对此进行了研究,但它并不是我真正想要的,因为它太细了。3是2的后续版本,对于我所需要的东西来说,它的粒度太细了。

    我只知道一个工具JDepend:


    但我怀疑它在一种方法基础上是否有效。如果它不能帮助您实现您自己的逻辑,您可能需要使用字节码操作(工程)库。

    对于这种特殊用途,很难找到任何现成的软件供您使用


    它可以通过静态分析java字节码来完成,我不知道为什么需要这样的函数,分析它的真正好处是什么。如果这只是你的一个特殊目的,我认为你需要自己编写这样的工具

    谢谢,小伙子们。我想我自己来做。烟尘API将为我提供所需的分析。我只是希望有一些关于这个话题的论文,但我似乎找不到。我只能找到有关程序依赖图、系统依赖图和控制流图的信息。请原谅我的一个问题,但为什么需要这个?因为我想从类中提取只与特定方法相关的代码。换句话说,给定一个方法,我想从它所依赖的类中提取所有代码,以便获得一个可执行程序片段。