【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

建模语言应该是什么样子?UML 又处于何种位置?

  • 2008-11-13
  • 本文字数:1316 字

    阅读完需:约 4 分钟

根据 Steven Kelly 和 Juha-Pekka Tolvanen 所著的《Domain Specific Modeling》一书,Learning Lisp 博客的作者 Lispy 提出了一些对“建模语言应该是什么样子”的想法:

1) 它应该映射到领域问题的概念,而非实现细节。

2) 它必须形式化,不仅要有利于与领域专家之间的沟通,还要能够从模型生成可执行代码、文档和某些测试类,免除实现其它一些测试的需要,并为维护人员提升代码的抽象层次。

3) 它需要有单独的工具支持,能让领域专家“在模型能‘编译’为完全的功能代码的方式下组织框架和库”,而又不需要他们从代码的角度去考虑。为了说明这一点,Lispy 拿将 C 编译为机器代码作为类比,C 在某种程度上“对机器代码来说就是一种建模语言”,C 程序员不必修改由编译器编译的机器代码,而编译器则由机器语言专家来创建。

因此,要获得真正有用的建模语言,你必须从问题的两个方面来同时考虑“领域特定”:建模语言必须直接映射到问题领域,而生成的代码则必须映射到目标环 境。[……] 如果代码生成过程过于复杂,你在框架级别可能需要更好的抽象。如果代码生成过程不可行,那么建模语言可能并没有提供足够详细的需求描述。如果模型中出现太多重复,那就需要扩展建模语言以覆盖更多的概念。

考虑到这些观点,那 UML 又处于什么位置呢?据作者所说,UML 并不是适用于模型驱动开发的工具。UML 不能被编译、执行或解释,那它就“只剩文档编制的作用”,而且“对项目来说,除了作为详尽的代码注释外别无他用”。根据 Lispy 的观点,UML 的抽象应用在了“错误的一方”,UML“是设计用来映射到代码架构的——因此 UML 并不能提升抽象的层次”。

Seven Kelly 最近也表达了类似的观点

我一直认为 UML 对实现的选择约束得更加具体 [……]——比如限定在面向对象语言,比如在模型中直接指定了实现中的个别类、属性和方法。[……]UML 中能算是高层次抽象的部分只有用例图,而这是在完全失却精确性的情况下。

然而,Franco Civello 在他的帖子中对此做出了回应,他认为倘若一个人只使用“UML 适用于精准阐释的那些部分”,仍然有可能在模型驱动开发中成功使用 UML “在高层次的抽象上表达精准的模型”:

我将给出一个例子来证明我的观点,这个例子使用 UML 编写精准的模型,而没有实现细节。

[……] 产出非正式的用例来阐明需求,以及领域模型来获得对主题范围的初步认识,分析师用 UML 生成一个精确的规格说明模型,其中要开发的系统被表示为对象,并属于某个类型(注意,不是一个类,因为系统是用来定义可见行为的抽象,而不是用某种语言(比如 Java)直接实现的软件实体)。

用例流程中的步骤接着形式化为基于系统类型的操作,并附带有对行为的声明性说明,行为则基于功能契约的概念,而且这些步骤会在底层模型之上(系统类型模型,从领域模型驱动)写成前置条件和后置条件。

Lispy 觉得这种做法很有意思,他认为这不一定就与 Kelly 和 Tolvanen 在其书中建议的相矛盾。UML 用来映射到领域问题,而不用来描述代码架 构,它一定程度上是形式化的,而且正如 Franco Civello 强调的那样,“UML 有一个可执行子集——xUML,并且已经具备了一些工具支持”。

查看英文原文: How a Modeling Language Should Look Like and where UML Stands with Regard to this?

2008-11-13 20:211592
用户头像

发布了 151 篇内容, 共 60.1 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

干货|什么是特性团队/功能团队(FeatureTeam)

laofo

Scrum 研发效能 PMO 敏捷精益 敏捷研发

cstdio的源码学习分析10-格式化输入输出函数fprintf整体分析

桑榆

源码刨析 10月月更 C++

跟着卷卷龙一起学Camera--夜景拍照04

卷卷龙

ISP camera 10月月更

支撑阿里“双十一”的消息中间件,带你云淡风轻面对高并发

图灵教育

RocketMQ 中间件 架构师 消息中间件

利用fs-extra实现"yarn create tlist"创建项目

小鑫同学

前端 Node 10月月更

这是我见过的,最好的工作流设计

跟YY哥学Jira

设计 Jira workflow

Babel 插件开发&访问节点

小鑫同学

前端 Node 10月月更

【PPT下载】杭州ACE三周年活动

跟YY哥学Jira

Atlassian Jira ITSM jsm ITSM解决方案

开发 Babel 插件可以试试这个 CLI 工具

小鑫同学

前端 Node 10月月更

OptaPlanner 和 商人旅行问题(TSP)

成长兔🐇

架构实战营模块九作业(毕业设计)

zhihai.tu

OptaPlanner和网球俱乐部排程问题

成长兔🐇

【抓包】青花瓷实战教程②

小鑫同学

前端 Node 10月月更

走进“yarn create vite”的源码学习

小鑫同学

前端 Node 10月月更

【实战】自定义 Github Action 库

小鑫同学

前端 Node 10月月更

算法 _【实验5.2】1-深度优先搜索暴力求解旅行商问题

清风莫追

算法 深度优先搜索 10月月更

Java 如何将 List 转换为 MAP

HoneyMoose

io的实质

wzh

Linux 面试 后端 io java 编程

Spring之注解开发

楠羽

笔记 Spring 框架漏洞 10月月更

【抓包】青花瓷使用教程①

小鑫同学

前端 Node 10月月更

read、select、poll、epoll区别

wzh

网络 Linux Kenel epoll IO多路复用 poll

跟着卷卷龙一起学Camera--夜景拍照03

卷卷龙

ISP camera 10月月更

【uniCloud】云对象的应用与提升

小鑫同学

前端 Node 10月月更

面试官:你说说var、let、const三者的区别

CoderBin

JavaScript 面试 前端 10月月更

【入门】你连Babel都不会配?那插件不成乱装了

小鑫同学

前端 Node 10月月更

【入门教程】Rollup模块打包器整合

小鑫同学

前端 Node 10月月更

跟着卷卷龙一起学Camera--夜景拍照02

卷卷龙

ISP camera 10月月更

【Serverless】前端上 Ali 云必备指南

小鑫同学

前端 Node 10月月更

🧩 Vue 深入组件开发☞#异步组件#

小鑫同学

前端 Node 10月月更

开源项目站点必备&交流区功能

小鑫同学

前端 Node 10月月更

CLI新功能之多项目启动器

小鑫同学

前端 Node 10月月更

建模语言应该是什么样子?UML又处于何种位置?_编程语言_Sadek Drobi_InfoQ精选文章