代码之家  ›  专栏  ›  技术社区  ›  WeNeedAnswers

UML是编程语言吗?

  •  19
  • WeNeedAnswers  · 技术社区  · 15 年前

    UML可以单独用于编程一个计算机系统,而不需要支持实现语言,例如直接映射到机器代码(也许通过C或C++等),而不需要人为编码干预。

    12 回复  |  直到 15 年前
        1
  •  23
  •   Eric J.    15 年前

    我将与大家分享一个经验,展示UML现在可以做什么,以及未来的UML版本(或其他建模方法)可以做什么。

    首先是一些历史。

    回来的时候,人们在组装中对电脑进行编程(不会一直回到这里)。然后出现了更高级的语言,如C和BASIC。在汇编方面表现出色的程序员认为,你不能用更高级的语言完全表达处理器所能做的一切(以优化的方式)。事实上,他们是对的。在高级语言中,从内存和性能的角度来看,有些事情并不是最佳的,因为您无法完全控制发送给处理器的指令。

    问题是,高级语言提供了一种更抽象的表达形式。因此,他们抓住了这个机会,过了一会儿,人们真的不在乎你不能完全控制处理器的每一个方面,因为开发人员的工作效率要高得多。( Moore's Law 也有帮助)。

    类似的情况也发生在面向对象的语言上,同样也发生在托管语言上。每一次,更高级别的抽象都变得可用,并最终胜出,因为作为开发人员使用它更有效。事实上,随着编译器的改进和优化技术的改进,更高层次的表达效率通常会降低。

    模型驱动开发是一种更高层次的表达。你不能完全代表你可以写的任何代码,比如C或Java。尤其是不开箱。但是,可以直接从UML模型生成应用程序的一个非常重要的部分。

    我为几个相当大的项目领导了基于UML的代码生成工作。在许多情况下,我们可以生成(真实的、企业级的)应用程序整个源代码的30%到60%。这只是一个小团队为一个特定的领域编写生成器。最终,整个行业将成为从模型中生成越来越多实际应用程序的工具的后盾。

    这是我们在我们的行业中一次又一次看到的自然进化的下一步,自从第一个汇编代码抽象了操作码以来(这可能是之前的事情,但那是在我的时代之前)。

        2
  •  10
  •   Michael Aaron Safyan    15 年前

    简短的回答:没有。一些UML建模工具可以用其他编程语言生成Java、C++和代码。然而,它生成的通常是接口和类关系。这些工具生成的存根仍然需要提供实现,因此需要人为干预。

        3
  •  5
  •   Justin Ethier    15 年前

    有一些工具可以将UML建模图转换为代码——特别是UML状态图。例如,我在2000使用了一个名为“RiPoSoDy”的工具(I-Logix),它将把UML图转换成C++。它很酷,因为该工具可以直接运行状态机,也可以在远程机器上运行代码(在本例中,是一个运行VxWorks的板)。

    但一般来说,UML最好用作建模工具。使用它来为您的系统建模,并为您的设计文件提供图表,或者其他什么。然后利用这些知识以有组织的方式开发您的系统。

        4
  •  2
  •   Michael Madsen    15 年前

    理论上?是的-你可以用gajillion state machine diagrams 并详细地指定所有内容,然后将状态机图连接到类图中的方法,并运行一些非常复杂的工具来生成所有这些内容。

    但这不是你想做的。你不会在表达自己的方式上获得更多的自由,因为你必须使用正确的语法,这样工具才能理解你所写的一切。不仅如此,你还可以在比制作所有这些图表所需的时间短得多的时间内自己编写实际的代码——而且它给你的唯一东西就是代码是规范的副本(因为规范生成了代码)。这可能是一件好事,但由于您没有实际的代码,这也意味着调试意味着调试图表——这几乎肯定是不可能的。

        5
  •  1
  •   Jeff Meatball Yang    15 年前

    UML可以为状态机建模。 因此,它可以表示图灵机。 具有足够复杂度的编译器可以读取此表示并创建 图灵 机器。

    所以,我的回答是肯定的。

    编辑

    因为我的回答似乎有些人不同意…让我澄清一下,这个“足够复杂的编译器”是完全虚构的,可能在未来很长一段时间…但从其他答案来看,有些程序可以生成一些样板代码,甚至可以生成并运行整个程序。

    我认为这证明了UML(或它的某个子集)是一种编程语言,但可能不是一种好的语言。

        6
  •  1
  •   Jordi Cabot    15 年前

    是的,这是可能的,只需检查一些方法,比如可执行的UML(以及一个沿着同一行的新标准)就可以了,这些方法依赖于使用操作语言来表示系统行为的细节(类似于使用迭代器、条件的psedocode,以及创建、读取、更新和销毁操作)。

    一个完全不同的讨论是值得的。以足够的精度和细节对系统进行建模,以生成100%的代码并不总是有回报的。 对于模型驱动的开发,我更倾向于遵循帕累托原理(或80-20规则):20%的建模工作足以生成80%的应用程序代码。

    更详细的解释如下: http://modeling-languages.com/blog/content/pareto-principle-applied-mdd

        7
  •  1
  •   Ed Seidewitz    15 年前

    现在有了一个完全OMG标准化、图灵完整的UML 2.3子集的执行语义,称为“基础UML”(fuml)。看 here 对于一个参考实现和指向OMG规范的指针,还有一个关于OMG标准UML动作语言的正在进行的工作。

    不管好坏,当这项工作完成后,fuml会 一种程序设计语言。

    ——Ed

        8
  •  0
  •   Ray Lu    15 年前

    类关系图可以根据您使用的UML工具被转发到编程语言中。我认为您仍然需要编写自己的业务逻辑等代码。

        9
  •  0
  •   Chris H    15 年前

    不是这样。一点也不。

    它不能做决定(如果)或运行循环。与有限状态机相比,它不是一种编程语言。至少FSM可以做出决定。uml-dosen甚至没有状态。

        10
  •  0
  •   Anzurio    15 年前

    简短的回答:现在,您不能生成100%的代码。

    您可以通过类图生成系统的类结构,也可以通过交互图和/或状态图生成方法体的一部分,但我认为这就是问题所在。

        11
  •  0
  •   Community CDub    8 年前
        12
  •  0
  •   Rafael Chaves    15 年前

    UML动作语义支持对象分配/处理、读/写属性和局部变量、调用操作、抛出和捕获异常、导航关系、块、循环和条件行为等等。

    见:

    http://abstratt.com/blog/2008/11/02/what-can-uml-do-for-you/

    http://abstratt.com/blog/2008/11/07/executable-models-with-textuml-toolkit-12-m1/

    对于那些说“不”的人:问题是 UML 不是“你使用的UML工具”,伙计们。UML是一种巨大的语言,工具实现了它的一个子集,通常很小。

    推荐文章