是否有任何开源工具可以将OOP代码(无论编程语言,即.NET,Java或PHP)转换为AOP?
答案 0 :(得分:1)
你想要一个“AOPizer”。您似乎想要解决的问题有两个部分:
1)第一项任务基本上需要克隆检测器。许多克隆探测器只 找到相同的文字;这些不是很有帮助,因为你的方面很可能 必须从代码中获取参数。 (如果你要记录 函数参数,方面必须通过这些参数以某种方式参数化)。 所以你想要一个能找到参数化克隆的探测器。你也想要 那些克隆是从代码中可提取的,所以无论它发现需要什么 对应于编程语言中一些明确定义的概念(表达式, 语句,块,...)许多基于令牌的克隆检测器可以找到参数化的标识符克隆,但不了解语言结构,因此它们不会 对此任务有效。
我们的CloneDR使用目标语言的抽象语法查找克隆 引导它;这需要精确的语言解析器;它有PHP,Java,VB.net和C#的解析器。它找到的克隆总是对应于上面定义的语言结构。它将找到单个标识符的参数,或任何更大的语言结构(表达式,语句等),它们在克隆中始终不同。它生成一个人类可读的克隆集报告,以及所有实例的精确位置,以及确切的参数值。它还生成相同信息的机器可读报告,使另一个工具能够利用检测过程。 CloneDR过去曾被用来寻找这种交叉技术:From goals to aspects: discovering aspects from requirements goal models(我是CloneDR的作者)。
2)使用克隆数据,您现在需要一个可以将克隆提取到方面的工具。首先,您需要定义方面语言,然后您需要一个可以解析语言的工具,指向克隆,将它们抽象/转换为这些方面。我知道没有现成的工具可以直接执行此操作,因此您需要一个具有所有必要机械的自定义工具。我们的DMS Software Reengineering Toolkit旨在构建完全相同的自定义工具。 (这满足了我的评论的“可能”部分;还有额外的工作要做到你想要的东西)。事实上,DMS已被用于为目前没有它们的语言构建方面工具;见A technique for constructing aspect weavers using a program transformation engine。 [你可能不会感到意外的是,CloneDR实际上构建在DMS之上,而且一个更好的工程路径将运行CloneDR机制并将结果直接传递给自定义AOP提取代码,而不是通过中间导出/导入克隆数据位置)。
你也想要开源(每当我看到这个,我把它读作“免费”的代码字)。唉,这些工具不是免费的。他们需要几十年的博士水平工程来建立和完善(这几十年中的一些是我个人的几十年;我是DMS的架构师)而且我有一些麻烦,想要免费做到这一点。他们确实拥有商业许可证,可以通过我们认为价值适中的价格获得(坦率地说,恕我直言,价值的一个重要部分是允许这些工具以一般方式建立的观点),并且有研究许可证。离线联系我们了解更多详情;看我的生物。