有没有开放源码的工具可以把面向对象的代码(不管是.NET,Java还是PHP语言)转换成面向方面的程序设计?
发布于 2011-12-23 01:04:35
你想要一个"AOPizer“。你似乎想要解决的问题有两个部分:
1)第一个任务本质上需要一个克隆检测器。许多克隆检测器只能找到相同的文本;这些不会有太大帮助,因为您的方面可能具有必须从代码中获取的参数。(如果您要记录函数参数,则方面必须通过这些参数以某种方式参数化)。所以你想要一个可以找到参数化克隆的检测器。您还希望这些克隆可以从代码中提取出来,因此无论它找到什么,都需要与编程语言中定义良好的概念相对应(表达式、语句、块等)。许多基于令牌的克隆检测器可以找到按标识符参数化的克隆,但不理解语言结构,因此它们对此任务无效。
我们的CloneDR使用目标语言的抽象语法来找到克隆;这需要精确的语言解析器;它有针对PHP、Java、VB.net和C#的解析器。its发现的克隆总是与上面定义的语言结构相对应。它将查找单个标识符的参数,或任何更大的语言构造(表达式、语句等)。在不同的克隆中都是一致变化的。它生成人类可读的克隆集报告及其所有实例的精确位置,以及准确的参数值。它还生成相同信息的机器可读报告,使另一个工具能够利用检测过程。在过去,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提取代码,而不是通过中间导出/导入克隆数据位置)。
你也想要开源(每当我看到这一点时,我就会把它读作“免费”的代名词)。遗憾的是,这些工具不是免费的。他们需要几十年的PhD级工程来构建和完善(其中一些是我个人的几十年;我是DMS的架构师),我对免费做这件事的想法有一些麻烦。它们确实有商业许可,并且可以以我们认为是中等价格的价格获得所提供的价值(坦率地说,我认为很大一部分价值是允许这些工具以一般方式构建的观点),还有研究许可。有关更多详细信息,请离线联系我们;请参阅我的简历。
https://stackoverflow.com/questions/8585156
复制相似问题