UML已死,UML万岁
Dawn Chan 高中生

前言

UML是好是坏、有用无用,从来没有过统一的意见;我想未来也不会有。有人把UML捧上神坛,也有的人高举“UML无用论”的大旗。当然,从辩证的角度来看,UML绝对不是“有用”或“没有用”就可以概括的;它有贡献,也有缺陷。

于我而言,我则想套用一句著名的话来概括:

UML已死,UML万岁。

贡献和意义

建模,就是建立模型,就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。

思考,而非写

文学创作是写字吗?显然不是;文字只是文学创作的突出特征和最主要载体。

开发软件是写代码吗?这显然也是片面的。代码是软件的原材料,但是代码并不能指定自身的组织方式、实现功能种种。

我们需要思考软件,而不只是写软件。

UML就给人们提供了思考软件的范式,也就是建模思路。这是UML的核心和真正价值所在。

思想价值

UML给人们提供了连接宏微观的、多样而全面的、广泛认同的、图形完整的思考软件本身的角度,奠定了大型软件开发设计的思想基础。

连接宏微观

人的思维具有天生的宏观性,一个看似小巧的功能往往是许多代码的集合。但是人的思维也具有陷入微观的惯性,一个设计决策的会议很容易变成技术细节的争论,尽管设计的确需要技术层面的支持。

而UML很好的统一了宏观和微观两者。

一方面,UML使得人们能够较为流畅和完整地表达想法,而不会受限于语言、平台等技术细节。

另一方面,在人们利用UML表达的同时,其实也就开始思考软件的实现,为软件的开发制定了一个并不完善、但是非常重要的蓝图

多样性和普适性

软件除了代码之外,还包括它的实现功能、组织方式种种。我们不可能找到一颗“银弹”,用一种统一的方式来描述这个软件。这是由软件本身传达的信息类型的多样性决定的;更根本地说,是由于人的意识本身的复杂性决定的。

UML对于人们找到的一些描述软件的模型进行了修改与筛选,使得这些模型在现有范围内能够以较少类型传递尽可能多的信息,同时避免大量的交集冗余

广泛认同性

UML的建模思想和角度不是独创的,而是总结出来的,是人们在长期历史实践当中产生的,是符合人们的思维的,因此有着良好的基础,很容易理解,也很容易应用

图形完整性

软件的本质是信息。软件建模的关键就是保障信息传递的损耗达到最小

举一个例子说,我经常会遇到不同东西之间的交互。在了解“序列图”之前,我往往会画几个方块来表示这些事物,用一些相连的线来表达通信。但是如果我想要表示一个有多个事物多次协作完成的完整过程,我往往无法表达,甚至于遗漏信息。序列图则列举了这些信息,可以达到“最低损耗”的要求。

现实的证明

类图随着类图思想的深入人心早已普及。
上面举到的“序列图”的例子确实帮助我用更完整的头脑思考交互。
状态图、配置文件图等等也是对软件各个方面非常优秀的建模方案,可以很好地满足软件建模的需求。

UML的很多思想早已经渗透,只是被它的有些可笑的学究表面遮盖了而已。

缺陷和边缘化

UML作为一个促进思考的工具是具有突破性意义的。但是作为一门“图形建模语言”,它是失败的——或者更根本地说,本身就是不合适的。除此之外,它也遗留了一些其它问题,同时还面临着形式被时代抛弃的窘境。

图形系统膨胀

本来用图形语言进行建模是一种非常自然的行为,但是过于死板、复杂、细碎的图形标准会让建模过程变得脱离自然、甚至枯燥。

商业化严重

作为一项建模语言,商业化既满足了一段时间内个人或企业对于使用UML的需求,同时却也将UML推向了产业化使用的坟墓。

究其原因,是因为:UML商业化——即UML工业制作软件的需求本质上源于UML图形系统的膨胀。这让UML并没有集中力量解决这一自身问题,导致它没能做到与时俱进。

当代软件需求变化

当代软件用户群体的变化导致了软件类型、特征在比例上的变化,导致了开发过程的改变,削弱了UML作为一门语言的用处。

态度

世界观决定方法论。
“哲学家的工作是认识世界,但更重要的是改造世界!”

扬弃

说英语的人比说中文的人对于时态有更加清晰的概念。就算会很多单词,如果没有掌握时态,不过也是Chinglish,不是真正的English speaker。

UML给人们最大的宝藏,就是建模语言本身。作为一门语言,它显得过于臃肿、并不那么实用;但是其中的建模概念为人们打开了一扇窗户,让人们得以用“专业术语”观察和思考软件。换句话说,这个语言不是让人们说的,而是让人们用这种方式思考。说出来反而影响了思考。

另外,UML作为展示软件架构的载体也是一个非常好用的工具。

与其它的关系

UML应当吸收系统论、控制论等等学科。因为软件开发本身就是一门交叉学科。

UML已死,UML万岁!

  • 本文标题:UML已死,UML万岁
  • 本文作者:Dawn Chan
  • 创建时间:2020-12-24 00:00:00
  • 本文链接:https://dawnchan030920.github.io/posts/1503/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!