聚焦UML实践第一步
我独不解中国人何以于旧状况那么心平气和;于较新的机运就这么疾首蹙额;于已成之局那么委曲求全;于初兴之事就这么求全责备?
——鲁迅
引子
前段时间和一个朋友在MSN上聊到UML,他一声叹息:“知道UML是好东西但是用不起来。尝试过,结果领导要求文档中要充分使用UML,事无巨细皆UML,结果本来很简单的一份设计文档加了一堆图。评审的时候团队还有牛人指出UML图中这里的菱形应该是实心的,那里的要用半个箭头… …结果开会大部分时间都在炒图怎么画。领导觉得这也没带来什么好处,同事们乐得摆脱,后来就不了了之了”
然后顺便抱怨了我一下: “你给我推荐的《UML Distilled》也不怎么样… …”
这个抱怨让我很恼火,断定他看得是中文版,果然!我毅然用货到付款的方式为他定了一本英文影印版《UML Distilled》.问题还要解决, 故有此文
- 为什么要用UML
- 定位:怎么用UML
- UML规范=束缚?
- UML第一步
为什么要用UML?
1970年以前,软件开发人员把软件开发工作比作探险活动,但是由于系统日趋复杂,个人英雄主义的时代在软件危机的爆发中宣告终结。危机引出了工程化方法,并催生了各种图形符号工具。面向对象理论出现之后,相关设计方法层出不穷,存在多种设计格式。
多种设计格式带来交流的不便,沟通的障碍,一个统一的建模语言需求已经是迫在眉睫。所以可以这样讲,UML的意义不在于它提供的内容而在于它的规范性和统一性。为了得到更好的设计我们需要更好的沟通,更好的沟通需要基于共同的语言进行,方便沟通这是创建UML的初衷,也是应该是使用UML最佳理由。后面的论述中希望你不要忘记了我们最初是为什么而出发的
UML还继承了图形建模语言(graphical modeling language )的优良传统:高屋建瓴的抽象能力。而普通的编程语言恰恰缺乏这种描述设计思想的能力:"The fundamental driver behind them all is that programming languages are not at a high enough level of abstraction to facilitate discussions about design."抽象化主要是为了使复杂度降低,以得到论域中较简单的概念,好让人们能够控制其过程或以综观的角度来了解许多特定的事态。抽象过程必然包含舍弃的细枝末节,是一个裁剪的过程。抽象的结果,决定于从什么角度上来抽象,抽象的角度取决于分析问题的目的。
关于视角,《UML Distilled》有一段精彩的三层视角的论述,这段文字被无数设计模式、领域建模的书引了又引,比如《Design Patterns Explained》。《视角的力量--再说OO设计原则 》一文中我曾经探讨过下面的三个问题:1.为什么我们过早的纠缠于细节?问题的本质是什么?2.救命稻草--Martin Fowler的三层视角理论3.三层视角--回头再说OO设计原则文中的最后我完整引用了作者三层视角的论述,我是把它作为走出思维泥沼的明灯来看的。这里不再赘述,详情请查看:源文档 <http://www.cnblogs.com/me-sa/archive/2008/04/15/ooview.html>在第三版中,作者对视角的观点做了修正:规约视角和实现视角之间的界限是很难划分清楚的.实践过程中发现也没有做这种界限的划分的必要.