3

设想

我正在使用在 Eclipse 中从头开始构建的 Java 模型。在这个模型中重要的是我们将输出保存到 MATLAB (.mat) 文件中。我不断添加新功能,这些新功能需要新字段,而这些新字段又必须在每次迭代时导出到 .mat 文件中。重新启动崩溃的模拟后,我可能必须导入 .mat 文件。要导出或导入我的 .mat 文件,我使用JMatIO

例如,如果我要在我的 CModel 类中添加一个新字段rho_m(一个简单的double),我必须添加到我的 Save() 方法中:

mlModel.setField("rho_m", new MLDouble(null, new double[] {rho_m}, 1));

对于我的 Load() 方法:

rho_m = ((MLDouble)mlModel.getField("rho_m")).getReal(0);

请注意,即使rho_m是 a double,也需要在 JMatIO 中将其视为 a double[]。这可能与 MATLAB 面向矩阵和矩阵运算有关。

问题

我不想手动执行此操作(容易出错,维护烦人),我想自动化此过程。理想情况下,我希望我的 IDE 检测 CModel 中的所有字段并根据字段的名称和类型编写代码。有没有办法在 Java/Eclipse 中做到这一点?

到目前为止的想法

我没有接受过低级编程语言的正式培训(是的,Java 对我来说是低级的)并且对 Java 还是比较陌生。我确实有一些使用 MATLAB 的经验。在 MATLAB 中,我认为我可以在 for 循环中使用eval()andfieldnames()来执行我提到的操作。我最后的手段是将 Java 代码复制粘贴到 MATLAB 中,然后使用一个巨大而丑陋的脚本从那里生成代码。每次我想对模型进行更改时,我都会重新运行 MATLAB 脚本。

除了这个想法,我还找到了像 UML 这样的术语,但没有背景知识来确定这是否是我正在寻找的东西。

任何帮助,即使只是朝着正确方向的一小步,也将不胜感激。如果我需要进一步澄清任何事情,请告诉我。

4

1 回答 1

2

看你的场景,你在做模型驱动的代码生成,也就是说,你有一个模型,想要得到一些根据你当前的模型生成的代码。因此,您需要一个模型驱动的代码生成器。

我领导 ABSE/AtomWeaver 项目,所以我将概述使用 AtomWeaver 可以做些什么来获得想要的东西(但是还有其他解决方案,如 MetaEdit+、XText 或 Eclipse 自己的 GMT/EMF 子系统)。

AtomWeaver 是一个 IDE,您可以在其中构建模型并从该模型生成代码。您可以根据需要多次更改模型,然后单击“生成”按钮以获取代码的更新版本。ABSE 是建模方法的名称。

我们不需要详细介绍,但本质上 ABSE 遵循“构建块”方法。您创建一个模板来表示模型的特征或概念。然后,您可以将迷你代码生成器与该概念相关联。然后,您可以“实例化”并结合这些构建块来快速构建您的模型。变量增加了模型的灵活性。

您还可以更改模型,或添加新功能(“块”)并再次生成。生成器是使用 Lua 编程语言构建的,这是一种非常简单的语言,具有类似 C 的语法。

了解ABSE 开发方法AtomWeaver IDE的最佳方式是下载 IDE 并查看示例或尝试教程。是的,您可以免费使用 AtomWeaver。

于 2012-08-07T13:41:26.057 回答