0

我想生成基于 UML/SysML 的 python 代码。编码主要是命令式的——调用传递结果、切换状态和一些主要部分的函数。

如何创建一些包含我的逻辑的简单主程序(同样是原始的:一些输入收集功能、一些处理功能、一些输出写入器功能)?

在 Enterprise Architect 中,我认为没有类、对象等是不​​可能的。在这个接近硬件/功能安全的领域中,不需要 OOP 的东西、继承、多态。但似乎所有的活动图、序列图等都无法使用。有没有人建议如何使用基于模型的方法来弥补这一差距?

4

1 回答 1

2

1. 如何在 UML 中建模一个内在的命令式/过程式设计?

如果您有一个处理流程,例如:

一些输入收集功能,一些处理功能,一些输出写入功能

您可以使用活动图非常舒适地设计它。它们拥有描述复杂处理所需的一切,将其分解为更小的步骤,无论它是由顺序部分还是并行部分组成。

由于对象流,活动图甚至允许您记录输入/输出数据的流(但您将使用数据结构而不是封装的对象。

很可能,即使您不在 OOP 世界中,您也会对数据结构感兴趣。在程序上,您通常定义一些数据结构,并具有一些旨在管理数据结构的功能。虽然,它并不总是像在 OOP 中那样清晰和封装,因为您可以轻松地让一个函数同时处理多个数据结构。

但是您可以从将数据结构建模为类,在轻量级图中,最终无需任何操作,即使它不像 OOP 那样中心化,也可以从中受益。

现在,如果您有一些非常专用于数据结构的函数/过程,没有什么能阻止您在 UML 类图中将它们指示为操作,即使它不是 OOP。至少它会表明某些函数/过程专用于某些数据结构。这通常在数据库建模中完成,其中纯数据表显示为好像它们是一个类,而与这些表相关的数据库触发器显示为操作,如果触发器根本不是 OOP,则显示为事件。

2.生成代码

对于您的语言,您可能找不到开箱即用的东西。我不确定您的需求对于主要针对 OOP 的 UML 工具制造商是否具有经济利益。

但是,生成 C 结构、Pascal 或 ADA 记录并不比 C++ 或 Java 类难。如果工具制造商不提供它,您至少可以想象一些系统化。

活动图代码生成应该更直接,因为它的概念比其他 UML 概念更不了解 OO。

最后,状态图对你来说也应该是一个有趣的工具。许多代码生成器都在状态机上工作。YACC、Lex、Bison 等实际上是用语言语法构建巨型状态机、自动生成状态转换表并从那里生成无人能手动生成的代码的工具。同样,这不是为 OO 世界保留的东西。

结论

UML 可以成为对您的设计进行建模的有用工具,即使您不在 OOP 中并且您的设计更加程序化。只是您会发现转向实施的自动化程度较低。(但我的印象是代码生成和往返工程在 OOP 中也不那么频繁)。

于 2021-05-10T17:34:47.957 回答