写点什么

建模语言应该是什么样子?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:211582
用户头像

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

关注

评论

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

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

Serverless Devs

云计算 Serverless AIGC 沙龙预告

MATLAB R2023b mac最新中文激活版资源

影影绰绰一往直前

故障发现、定位提效超70%,去哪儿可观测体系做了哪些优化?

TakinTalks稳定性社区

为何选择独立服务器?稳定、高效、安全等优势一览

一只扑棱蛾子

独立服务器

观测云产品更新 | 监控、图表、服务管理、单点登录、Pipeline 等优化

观测云

数据库 pipeline 单点登录

SCSS 进阶之道:探索更多样式表达的可能性

伤感汤姆布利柏

Colibri for Mac(原生无损音频播放器) 2.1.9永久激活版

mac

苹果mac Windows软件 Colibri 音频播放器软件

Mini PCIe WiFi card SOC-QCA9880 vs. QCA9882: 802.11ac Dual-Band Wireless Chipset Sh

wifi6-yiyi

QCA9880 Mini PCIe WiFi card

你真的了解@Async吗? | 京东云技术团队

京东科技开发者

spring 注解 Async 企业号11月PK榜

21 天技术人写作行动营招募中

InfoQ写作社区官方

AI 写作 写作技巧 热门活动 活动预告

OpenCL任务调度基础介绍 | 京东物流技术团队

京东科技开发者

gpu 编程语言 企业号11月PK榜 OpenCL

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

TakinTalks稳定性社区

TiDB 在安信证券资产中心与极速交易场景的实践

TiDB 社区干货传送门

实践案例

TiDB Cloud 上 Tiflash 列存功能初体验

TiDB 社区干货传送门

版本测评 性能测评 新版本/特性解读

TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进

TiDB 社区干货传送门

实践案例

一张图厘清各大操作系统的发展脉络

巫山老妖

体验函数计算 FC 3.0,写测评赢取索尼头戴式耳机

Serverless Devs

云计算 Serverless AIGC

PON网络应用场景

小魏写代码

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

OpenTiny社区

开源 Vue 前端 测试

提升提测质量之研测共建 | 京东云技术团队

京东科技开发者

测试 研发 企业号11月PK榜

来文心中国行厦门站,感受大模型落地生花的进展!

飞桨PaddlePaddle

文心一言 文心中国行

精彩回顾|从架构到实践,AntDB融合型数据库揭秘

亚信AntDB数据库

数据库 AntDB AntDB数据库

欢迎提报 | 2023年龙蜥社区优秀贡献者评选正式启动

OpenAnolis小助手

开源 操作系统 龙蜥社区 最佳案例 突出贡献

同城双机房公网环境下搭建TIDB集群

TiDB 社区干货传送门

数据库架构设计

aiohttp - Python 异步 HTTP 客户端库入门教程

Liam

Python 编程 程序员 后端 aiohttp

TiDB x CAPCOM丨为在线游戏提供灵活、可靠、可扩展的数据库服务

TiDB 社区干货传送门

实践案例

如何搞砸一场面试?

王磊

Java 面试

微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题

JackJiang

网络编程 即时通讯 IM

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

袋鼠云数栈

Kubernetes 运维 集群管理

微众银行 TiDB HTAP 和自动化运维实践

TiDB 社区干货传送门

实践案例

同城双机房公网+阿里云ECS搭建混合云TIDB集群

TiDB 社区干货传送门

数据库架构设计

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