写点什么

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

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

关注

评论

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

高性能存储SIG月度动态:io_uring支持nvme直通,DSMS完成开发测试

OpenAnolis小助手

开源 io_uring 高性能存储 anck 龙蜥sig

组合框架:融合创新技术,实现一次编码多平台运行

FinFish

flutter 跨端开发 小程序容器 跨端框架 跨端应用开发

复杂的舆论场,企业该如何保障内容审核安全?

平平无奇爱好科技

DevOps|从腾讯TEG CDC解散聊技术中台价值和建设

laofo

DevOps 研发效能 技术中台 组织建设

自从前端用上了低代码,开发速度直接起飞

伤感汤姆布利柏

蓬勃发展的数智革命:低代码开发平台开启制造业繁荣新纪元!

EquatorCoco

人工智能 低代码 制造业 数智转型

华为云语音交互服务SIS——与人打交道的智慧软件,非常值得一试

平平无奇爱好科技

华为云视频封面&摘要服务:让视频内容更具吸引力

平平无奇爱好科技

低代码云里雾里,如何择优选择,且看这里

高端章鱼哥

低代码 低代码开发 JNPF

MQTT 性能测试入门:常见测试场景和指标

EMQ映云科技

物联网 性能测试 mqtt

人工智能泡沫:揭秘低代码开发平台的革命性崛起

快乐非自愿限量之名

人工智能 低代码 数智化 ChatGPT

POCO库的安装与基础知识说明

梦笔生花

华为开发者大会2023(Cloud):华为云邀您共话开源

华为云开源

开源 云原生 HDC.Cloud

数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等

汀丶人工智能

人工智能 数据挖掘 机器学习 深度学习 决策树

追击策略?微软云服务器业务2022年规模少于亚马逊AWS一半

B Impact

算法复杂度介绍

宁静知行者

算法

2023-07-03:讲一讲Redis缓存的数据一致性问题和处理方案。

福大大架构师每日一题

redis 底层原理 福大大架构师每日一题

华为云图像识别Image:技术服务提供商的首选

平平无奇爱好科技

​瓶颈期别挣扎了,低代码或许可以帮到你

伤感汤姆布利柏

通过容器化实现前端微服务化架构设计

FinFish

小程序容器 小程序化 小程序技术 前端服务化

[杂谈] pdfbox 2.0.28 文字水印移除操作(Acrobat/WPS)

alexgaoyh

Java PDF remove pdfbox text watermarker

想要快速上线网站?香港虚拟主机助你一臂之力!

一只扑棱蛾子

香港虚拟主机

华为云CodeArts Artifact 5大特性,揭秘大型企业制品管理面纱

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023

创新引擎加速数字时代:揭秘JNPF平台与云计算的完美共舞!

不在线第一只蜗牛

云计算 低代码 数字化

和鲸科技 ModelWhale 入选北京市人工智能行业赋能典型案例(2023)丨2023全球数字经济大会人工智能高峰论坛

ModelWhale

人工智能 AI 数字化 大模型 论坛

多项目管理难在哪,多项目同时进行该如何做好进度管理?

优秀

项目管理 项目进度管理

Flink-Learning 实战营在升级!更多精美好礼等你来!

Apache Flink

大数据 flink 实时计算

营销SaaS SemRush 2.9 亿美元年收入的五个经营数据分析

B Impact

Spring Boot中如何优雅地实现异步调用?

快乐非自愿限量之名

前端 spring-boot

代码随想录训练营 Day06 - 哈希表(上)

jjn0703

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