关于UML和图灵完整性的一个天真的问题

时间:2010-10-22 10:55:37

标签: uml turing-complete

众所周知,UML没有图灵完整(与通常的编程语言形成对比)。但在我看来,UML比传统语言更灵活。我无法想象你可以通过C ++(f.e)等语言描述的问题,但同时也无法通过UML来描述。恰恰相反,我更容易想象一下UML中存在的构造,但在C ++(Java,Delphi,VB等等)中不可构建的构造。 你能帮我理解这一刻吗?我真的无法抓住它。

3 个答案:

答案 0 :(得分:3)

我说UML是一个图灵完整的语言,因为添加了Action Semantics包(这发生在UML 1.5版本中)。

现在,UML包含一种命令式动作语言(不要与OCL混淆),它允许精确定义类方法的行为。这种命令式动作语言包括典型的赋值集,如果条件,迭代器,......你期望从任何编程语言。

这种动作语言是可执行UML方法的流行组件之一,但现在它已成为UML标准本身的一部分

答案 1 :(得分:1)

有趣的问题。我想到了几点,尽管可能还有更多。道歉,这很长。

您可以用什么来描述您无法用UML描述的C ++?

首先,您必须定义“UML”的含义。一般来说,人们倾向于表示“核心”元素 - 类图,状态图,活动图等 - 加上OCL(约束语言)。

鉴于这些元素,您无法指定命令式算法。特别是,任何需要分配的东西。然而,您可以非常接近:步骤和决策逻辑可以使用例如表达。活动图,以及在OCL中定义为前后条件的每个步骤的功能。但是,您永远无法完全指定行为。举一个原子步骤的例子,其目的是增加整数的值。输入是一个整数 - 比如X。输出由后置条件X == X@pre+1描述。但是,UML中没有任何内容可以实际实现步骤。

现在可以完全考虑扩展UML的使用以解决上述问题。 UML Action Semantics的开发正是为了实现动作的规范。这样做可以使语言在计算上完整。问题仅仅是实际的:

  1. 没有普遍认可和采用的语义语法;
  2. 实施很少
  3. 您可以用UML描述哪些内容无法实现,例如C ++吗

    本质上没什么。但是有两个实际限制:

    1. UML“规范”通常不精确,含糊不清和/或不完整。例如,活动图通常会留下悬空的路径。它可以直接用C ++表示吗?是。会编译吗?否。
    2. UML构造到命令式,基于堆栈的语言的一些映射是非常重要的。状态模型就是一个例子:虽然有众所周知的模式,但映射非常复杂。对于分层和/或并发行为尤其如此。在活动图中,很容易表示两个活动并行发生,然后在进入下一步之前进行同步。这当然可以用C ++完成,但需要使用例如线程库。
    3. 然而,它可以做到。事实上,它是可执行UML工具的功能:模型编译器采用可执行的UML模型并将其转换为100%正常运行的命令式代码。

      第h

答案 2 :(得分:1)

顾名思义,UML是一种建模语言。它有时可以用作设计软件的方法。

曾几何时他们正在梦想自动代码生成的方法,他们被称为CASE工具。他们没有让代码生成器有效地工作,尽管他们确实从语言中删除了大量的锅炉板代码。这种扩充成为UML的关键,因为它提供了一种增强软件设计和编程经验的方法。

我不知道UML是否是“Turing Complete”,我希望通过以图片形式向计算机描述问题并让计算机尽力做到这一点来提出解决方案不是很好讨厌的节目。

UML是代码中的元语言。它描述了人工制品,它们之间的关系/互动以及它们的作用。

UML正在被添加,新的设计文物正在逐年添加,如果它还没有图灵完全,我不明白为什么它不可能。

然而,我认为,如果他们能够表达和解决相同的解决方案,那么我会在某些地方阅读有关语言“图灵等效”的内容。

由于UML是设计语言,代码是基于UML设计的实现语言,我会说UML和代码(c#,java等)是图灵等价的。如果他们同意图灵等效,那么UML必须是Turing Complete。