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

关于UML和图灵完整性的天真问题,uml,turing-complete,Uml,Turing Complete,众所周知,UML并没有图灵完成(与通常的编程语言相反)。但在我看来,UML比传统语言更灵活。我无法想象你可以用C++语言来描述一个问题,但同时也不能用UML来描述。恰恰相反,我更容易想象UML中存在的一个构造,但是在C++(java、delphi、VB等……)中不可重置。 你能帮我理解这一刻吗?我真的听不懂。这个问题很有趣。我想到了几点,尽管可能还有更多。抱歉,时间太长了 强>你能用C++描述什么,你不能用UML描述? < /P> 首先,您必须定义“UML”的含义。通常,人们倾向于指“核心”元素

众所周知,UML并没有图灵完成(与通常的编程语言相反)。但在我看来,UML比传统语言更灵活。我无法想象你可以用C++语言来描述一个问题,但同时也不能用UML来描述。恰恰相反,我更容易想象UML中存在的一个构造,但是在C++(java、delphi、VB等……)中不可重置。
你能帮我理解这一刻吗?我真的听不懂。这个问题很有趣。我想到了几点,尽管可能还有更多。抱歉,时间太长了

<>强>你能用C++描述什么,你不能用UML描述?<强> < /P> 首先,您必须定义“UML”的含义。通常,人们倾向于指“核心”元素——类图、状态图、活动图等上的元素——加上OCL(约束语言)

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

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

  • 语义上没有普遍认同和采用的语法
  • 很少有实现
  • <>强>你能用UML描述哪些不能在C++中实现?< /强> < /P> 本质上什么都没有。但是,有两个实际限制:

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


    这是一个有趣的问题。我想到了几点,尽管可能还有更多。抱歉,时间太长了

    <>强>你能用C++描述什么,你不能用UML描述?<强> < /P> 首先,您必须定义“UML”的含义。通常,人们倾向于指“核心”元素——类图、状态图、活动图等上的元素——加上OCL(约束语言)

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

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

  • 语义上没有普遍认同和采用的语法
  • 很少有实现
  • <>强>你能用UML描述哪些不能在C++中实现?< /强> < /P> 本质上什么都没有。但是,有两个实际限制:

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


    hth.

    我想说,自从添加了动作语义包(这发生在UML1.5版本中)以来,UML是一种图灵完整语言

    现在UML包括一种命令式操作语言(不要与OCL混淆),它允许精确定义类方法的行为。这种命令式操作语言包括典型的