NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

架构师训练营-第二周作业

一个节点

极客大学架构师训练营

架构师训练营 - 第二周总结

一个节点

极客大学架构师训练营

第二周 框架学习-作业

刘希文

架构师训练营第二周学习总结

张荣召

架构师训练营第 1 期 -- 第二周学习总结

发酵的死神

极客大学架构师训练营

架构一期第二周作业

Airs

依赖倒置原则和接口隔离原则练习

知行合一

SOLID原则

通过女朋友来通俗易懂讲解“接口回调”,一不小心就被绿

小松漫步

Java 编程 接口 代码

基于 iOS14 系统的游戏卡顿问题解决方案

白开水

typescript 游戏开发 iOS14 游戏卡顿 ios开发

面向对象设计原则----依赖倒置原则(DIP)

张荣召

架构师训练营,第二周总结

子文

第二周总结

Geek_ac4080

TensorFlow 篇 | TensorFlow 2.x 基于 Keras 的多节点分布式训练

Alex

tensorflow keras 分布式训练 AllReduce

2.框架设计-依赖倒置原则,接口隔离原则

博古通今小虾米

面向对象设计原则--开放关闭原则(OCP)

张荣召

第二周 框架设计作业

蓝黑

极客大学架构师训练营

Serverless 简介

木易杨

云计算 Serverless AWS

架构师训练营第二周学习总结

成长者

极客大学架构师训练营

看动画学算法之:排序-基数排序

程序那些事

算法 数据结构和算法 看动画学算法 算法和数据结构

第二周课后练习

jizhi7

举办线下活动现场管理需要注意哪些事项?

boshi

管理 探索与实践 热门活动

第二周

scorpion

架构师01期,第二周课后作业

子文

极客大学架构师训练营第二周课后总结

jizhi7

优化Banner广告收入的7种策略

易观大数据

揭秘开源项目 Apache Pulsar 如何挑战 Kafka

Apache Pulsar

kafka 开源 云原生 Apache Pulsar 消息中间件

使用Spring Cloud Stream玩转RabbitMQ,RocketMQ和Kafka

Barry的异想世界

kafka RocketMQ RabbitMQ 消息队列 spring cloud stream

编程语言的本质

张荣召

架构师训练营第 1 期 - 第二周学习总结

Anyou Liu

极客大学架构师训练营

架构师训练营第二周课程笔记及心得

Airs

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