UML是域特定语言(DSL)吗?

时间:2012-05-09 14:36:22

标签: programming-languages uml dsl

将UML视为DSL是否合适?

我知道每个人都认为UML是一种绘制图片的方式,但是UML图的“视图”背后有一个模型......而UML中的“L”代表语言。

另一个问题 - SysML是DSL吗?

6 个答案:

答案 0 :(得分:7)

UML 是DSL。

“域特定语言”允许人们在狭窄的应用领域中指定问题或解决方案;银行,电话电路设计,......区分DSL的一种方法是它不能进行通用计算(虽然有一些DSL可以)。 Java,C#,Python和COBOL无法通过此测试。 (有人会说COBOL是针对“业务”的域特定的,但它唯一的严重让步是十进制数据类型,而C#也有。)ColdFusion未通过此测试;非标准语法不是DSL制造的,但IIRC ColdFusion对生成HTML有一些支持。 Fortran未通过此测试,但其数组(-section)子语言仅适用于数组而非通用计算。 Verilog非常适合特定领域:它旨在让您记下数字电路。

UML侧重于指定软件结构的不同方面。 [你会注意到它不能做通用计算;一个标志]。 (它实际上有9个或更多不同的方面:类,状态图,部署,......我将坚持这个讨论的类方面)。类图方面可以描述数据的组织方式和对数据的操作。您可以对软件进行争辩,因此它不能“特定于域”。什么,构建软件不是一个问题领域?

SYSML专注于表达系统的连接方式,因此它也符合这一类别。

要问恕我直言的一个更有用的问题是,“如果我认为UML是DSL,我会获得什么?”在这里,我认为你没有得到很多。当你争论一个你没有(设计或拥有)的点时,DSL的概念是有用的,这点对于一个常见问题具有更好的表现力,并且可能对于争论“你不想完全在其中实现你的系统”有用因为它不具备图灵能力“。如果你想解释你的语言会有很多有趣的符号,这也很有用,正是因为它们有特殊用途。人们已经对UML了解了这一点,所以......没有学到什么。

虽然我是DSL的忠实粉丝,但我也是GPL(通用语言)的忠实粉丝。我认为在大型系统中你必然会发现两者兼而有之:用于表达简洁(减少工程和维护成本)的DSL,以及在系统部件之间提供任意计算和粘合的GPL。对我来说,语言中的重要性是:

  • 它声称要解决的问题类别是什么,它有多好?
  • 语法是什么(问题域是否相对标准)?
  • 精确的语义是什么(这是你最了解的地方)?
  • 工具支持有多好?
  • DSL如何整合到大系统的其他部分?
  • 社区有多大和支持?

UML(15年后)对这些问题给出了很好的答案。

本土DSL通常做得不好,部分原因是设计不佳,但往往是因为很难获得工具支持。我公司提供machinery to give DSL builders excellent support来改善这种情况。

答案 1 :(得分:3)

UML不是DSL,因为UML可用于建模任何垂直域(保险软件,嵌入式系统......)

UML是一种(水平)DSL,因为UML是一种专门用于建模软件系统的语言。

所以UML现在和不是DSL,取决于你如何看待它。您可以将相同的推理应用于许多其他语言,如html或SQL。它们是通用的,因为它们可以用来表示/操纵任何类型的数据,但它们是特定的,因为它们专注于一项任务

答案 2 :(得分:1)

简短回答 - 不是 - 两个问题。

将UML视为一种工具,可以让您描述软件架构,软件交互等等......以一般方式描述它们,与语言无关。

DSL是专业语法,旨在让您更轻松地描述一些特定问题

答案 3 :(得分:1)

我认为你的第一个问题的答案取决于如何在“通用语言”一词中定义“一般”。 Wikipedia says它不是DSL:

  

相反的是:

     
      
  • 通用编程语言,如C,Java或Python,

  •   
  • 或通用建模语言,如统一建模语言(UML)。

  •   

答案 4 :(得分:1)

我是MDA爱好者,所以我想我可以为您提供一个非常详细的答案。 什么是UML: 对象管理组(OMG)是一个旨在提供标准语言和技术的公司联盟,它定义了一种名为“元对象工具”或 MOF 的元元建模语言(http://www.omg.org/mof)。元模型是描述模型的模型,或者在其他方面,描述词汇表(您可以在模型中使用的元素),语法(它们彼此相关)和它们的语义(每个实体意味着什么以及如何它的意义在给定的背景下发生变化等)。元模型与无上下文语法在它们产生的语言方面扮演着相同的角色。因此,您可以将元元模型视为可用于定义元模型的语言。这就是OMG实际上用UML做的事情。 UML语言有一个元模型,通过MOF在两个文档中描述: UML基础结构 UML超结构(http://www.omg.org/规格/ UML)。

UML元模型的定义目标是通用性足以应对属于不同域的不同系统的建模。定义新的UML模型时,您将创建UML元模型的实例。您可以这样做有很多原因:分析系统的某些特征,与其他利益相关者分享系统的某些方面等等。但是,OMG愿景最重要的一个方面是模型转换。您可以将转换视为一组规则,告诉解释器如何探索模型并生成其他内容。您基本上可以将模型转换为两种不同的类型,其他模型(Model2Model,M2M转换,通过 QVT 语言定义)或文本(如代码或文档)(Model2Text,M2T,转换定义)通过 MOFM2T转换语言)。因此,了解UML模型不是它的图表是非常重要的。图表只是模型内容的图形表示,对人类有用,但对机器不可读。您无法将变换应用于图表。

Eclipse Modeling Framework (EMF)是一个非常强大(并且免费!)的框架,它实现了我提到的所有技术。 MOF的子集以Eclipse ECORE语言实现。通过ECORE定义UML元模型,因此,重要的UML编辑器(即Papyrus,TopCased等)实际上创建符合UML元模型的ECORE表示的图形定义的UML模型的XMI表示。可以提供这种表示作为变换引擎的输入。 EMF中还提供了两种转换语言和相关引擎,其中包含QVTo插件和 ACCELEO (实现MOFM2T转换语言)。

如上所述,UML是故意通用的。然而,它还提供轻量级扩展机制,以扩展具有特定于域的构造的原始语言词汇。这可以通过刻板印象来完成。构造型是一种标签(实际上具有元属性),您可以附加在模型元素上以在该语言中创建新实体。例如,您可以在模型中说某些类可能是需求或其他类。当然有一些规则,例如当你构造一个元类时,你不能违反其原始语义,只需减少它。

SySML是UML http://www.omgsysml.org/的配置文件。 SysML Block只是一个UML类,它被定型为Block,SysML Requirement只是另一个UML类,它被定型为Block等等。

分析像UML这样的元模型是一种非常简单的方法来创建一种DSL(就像你添加到更通用的语言中的一些构造属于你的域的构造型),它与UML兼容(即你可以一起使用SysML和UML)。还有另一种创建DSL的方法,即通过MOF(ECORE)定义其元模型。在这种情况下,您可以创建一种全新的语言,该语言在概念上与UML本身处于同一级别。

许多人说UML只是关于图表,因为在很多情况下他们不知道他们在说什么。这个主题更加复杂,有趣且充满希望。

答案 5 :(得分:0)

UML是一种通用建模语言,并非特定于任何域,而DSL中的S代表特定。 UML用于建模系统,也可以由多用途编程语言表示。另一方面,DSL是受限制的编程/脚本语言,特定于特定域。