前言
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 许可协议。转载请注明出处!