【问题标题】:A naive questioin about UML and Turing completeness关于 UML 和图灵完备性的一个幼稚问题
【发布时间】:2010-10-22 10:55:37
【问题描述】:

众所周知,UML 没有图灵完备(与通常的编程语言相比)。但在我看来,UML 比传统语言更灵活。我无法想象一个问题可以用 C++ (f.e) 之类的语言来描述,但同时又不能用 UML 来描述。恰恰相反,我更容易想象存在于 UML 中但在 C++ 中不可靠的构造(Java、Delphi、VB 等等......) 你能帮我理解这一刻吗?实在是看不下去了。

【问题讨论】:

  • 我很好奇有一个 UML 构造示例,您无法用这些图灵完备语言之一实现......
  • 嘿,埃尔多拉多,如果您要标记为已接受,请给答案投赞成票。
  • 感谢大家的回答。我会试着考虑一下 :) 我希望这次讨论不仅对我有用,而且对其他人也很有趣。
  • 至于注释“我很好奇有一个 UML 构造示例,您无法用这些图灵完备语言之一实现”。我的意思是sfinnie的回答中准确描述的情况,因为“UML“规范”通常不精确、模棱两可和/或不完整。例如,活动图经常让路径悬空”。 "

标签: uml turing-complete


【解决方案1】:

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

现在 UML 包括一种命令式动作语言(不要与 OCL 混淆),它允许精确定义类方法的行为。这种命令式操作语言包括一组典型的赋值、if 条件、迭代器……您可以从任何编程语言中获得。

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

【讨论】:

    【解决方案2】:

    有趣的问题。我想到了几点,尽管可能还有更多。抱歉,篇幅有点长。

    你能用什么来描述,例如无法用 UML 描述的 C++?

    首先,您必须定义“UML”的含义。通常,人们倾向于指“核心”元素——类图、状态图、活动图等上的元素——加上 OCL(约束语言)。

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

    现在完全可以想象扩展 UML 的使用以解决上述问题。 UML 动作语义被精确地开发以支持动作规范。这样做可以使语言在计算上完整。这些问题只是实用的:

    1. 没有普遍认可和采用的语义语法;
    2. 实现的很少

    您能用 UML 描述哪些无法在例如C++?

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

    1. UML“规范”通常不精确、模棱两可和/或不完整。例如,活动图经常使路径悬空。它可以直接用 C++ 表示吗?是的。它会编译吗?没有。
    2. UML 结构到命令式、基于堆栈的语言的一些映射非常重要。状态模型就是一个例子:虽然有众所周知的模式,但映射非常复杂。对于分层和/或并发行为尤其如此。在活动图中,很容易表示两个活动并行发生,然后在进入下一步之前同步。这当然可以在 C++ 中完成,但需要使用例如线程库。

    但是可以做到。事实上,可执行 UML 工具就是这样做的:模型编译器采用可执行 UML 模型并将其转换为 100% 正常运行的命令式代码。

    第一次。

    【讨论】:

    • 非常感谢您的回答。这对我来说变得更清楚了。如果你不介意,再问一个问题。您写“在 UML 中没有任何东西可以实际实现该步骤”(增量)。但是在 C (f.e.) 中实现这一步是什么?
    • 在我看来,这可能是我不确定的重要时刻 :) 提前致谢。
    • C 中的“实现”将是赋值 x = x++。 UML(没有动作语义)不支持赋值;更一般地说,它不支持任何改变状态的操作(例如创建/删除对象,更新对象属性的值)。因此,如果没有动作语义,根本无法在 UML 中表达x=x++。 hth.
    • 感谢您的回复。我想这只是我想抓住。希望很快我能感受到这种微妙的差异。
    【解决方案3】:

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

    曾几何时,他们梦想着自动生成代码的方法,它们被称为 CASE 工具。尽管他们确实从语言中删除了许多样板代码,但他们未能让代码生成器有效地工作。这种增强成为 UML 的关键,因为它提供了一种增强设计和编程软件体验的方法。

    我不知道 UML 是否“图灵完备”,我希望是,通过以图片格式向计算机描述问题并让计算机完成所有工作来提出解决方案不是很好吗给你带来讨厌的编程。

    UML 是代码中执行的元语言。它描述了人工制品、它们如何关联/相互作用以及它们的作用。

    正在添加 UML,正在逐年添加新的设计工件,如果还没有图灵完成,我不明白为什么不能。

    但我认为,如果语言可以表达和解决相同的解决方案,我会读到一些关于“图灵等效”的语言。

    由于 UML 是设计语言,而代码是基于 UML 设计的实现语言,我会说 UML 和代码(c#、java 等)是图灵等效的。如果它们被同意是图灵等效的,那么 UML 必须是图灵完备的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多