聚焦UML实践第一步

简介:

 

       我独不解中国人何以于旧状况那么心平气和;于较新的机运就这么疾首蹙额;于已成之局那么委曲求全;于初兴之事就这么求全责备?

                                                                                                                                                                             ----鲁迅

引子

       前段时间和一个朋友在MSN上聊到UML,他一声叹息:“知道UML是好东西但是用不起来。尝试过,结果领导要求文档中要充分使用UML,事无巨细皆UML,结果本来很简单的一份设计文档加了一堆图。评审的时候团队还有牛人指出UML图中这里的菱形应该是实心的,那里的要用半个箭头… …结果开会大部分时间都在炒图怎么画。领导觉得这也没带来什么好处,同事们乐得摆脱,后来就不了了之了”

     然后顺便抱怨了我一下: “你给我推荐的《UML Distilled》也不怎么样… …

     这个抱怨让我很恼火,断定他看得是中文版,果然!我毅然用货到付款的方式为他定了一本英文影印版《UML Distilled.问题还要解决故有此文.

     

  1. 为什么要用UML
  2. 定位:怎么用UML
  3. UML规范=束缚?
  4. 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>在第三版中,作者对视角的观点做了修正:规约视角和实现视角之间的界限是很难划分清楚的.实践过程中发现也没有做这种界限的划分的必要.

 

定位:怎么使用UML

        "黑夜给了我黑色的眼睛,我却用它寻找光明."同样一件东西怎么用确是不一定的,对于UML怎么使用也要有一个定位。Martin Fowler先生给出了三种使用使用UML的方式:蓝图blueprints 骨架 sketches,编程语言。

        三种使用方式比较容易区分出来的是:作为编程语言使用.ExecutedUML对工具的要求是非常高的-需要处理代码和图的同步问题等等.这里不做展开讨论,大家可以到国家文献中心找到更多相关资料:

源文档 <http://s.wanfangdata.com.cn/paper.aspx?q=executed%20UML&n=10&f=topUML作为编程语言,典型应用时MDA.UMLMDA的事实标准,占领了90%的市场份额.MDA 的愿景是定义一种描述和创建系统的新的途径。MDA 使得UML 的用途走得更远,而不仅仅是美丽的图画。很多专家预言MDA 有可能会带领我们进入软件开发的另一个黄金时代"

Model-driven architecture (MDA) is a software design approach for the development of software systems. It provides a set of guidelines for the structuring of specifications, which are expressed as models. Model-driven architecture is a kind of domain engineering, and supports model-driven engineering of software systems. It was launched by the Object Management Group (OMG) in 2001.

源文档 <http://en.wikipedia.org/wiki/Model-driven_architecture>

 

Executable UML,often abbreviated to xtUML or xUML , is the evolution of the Shlaer-Mellor method[3] to UML. Executable UML graphically specifies a system using a profile of the UML. The models are testable, and can be compiled into a less abstract programming language to target a specific implementation.Executable UML supports MDA through specification of platform-independent models, and the compilation of the platform-independent models into platform-specific models. 

源文档 <http://en.wikipedia.org/wiki/Executable_UML>

 

       难以区分的是蓝图blueprints 骨架 sketches,从中文说文解字的角度我们无法获得一个满意的答案.按照Martin Fowler先生的论述我将二者的区别通过表格的形式列了出来,通过比较还是能看出各中端倪的:

 

    Mode

Essence

Forward engineering

Reverse engineering

Tools

Practice

Sketch

selectivity

communicate ideas and alternatives

 

 

explain how some part of a system works

lightweight drawing tools

To help communicate some aspects of a system.

Do it quickly and collaboratively, so a common medium is a whiteboard.

Blueprint

completeness

detailed design for a programmer to code up

convey detailed information about the code

CASE Tools

(much more sophisticated )

Reducing programming to a simple and fairly mechanical activity

 

从上面的比较中可以看出sketches勾勒重点,蓝图blueprints注重完整性,无微不至.前者是一种探索性的explorative,后者是定义性的definitive。对于后者,一旦蓝图确定,编码工作基本上就没有什么创造性了.

 

UML规范=束缚?

      谈到UML就不难以避开UML规范的话题.多年来学习编程语言的习惯,语言规格说明是必经之路,金科玉律一般.但是UML规范怎么在实践中怎么就成为了束缚了呢?

  1. UML 规范和c#语言规范不同的是:混乱的c#代码可能直接无法通过编译,但是不符合的UML规范的应用却没有那样显示的错误提示
  2. UML1.02.0版本之间就有差异,在新版本中很多规范都是指导性的。”指导性“反而让我们难以抉择。
  3. 有时候你按照规范来做了,但是却大家却不习惯

    大师们是怎么给我们建议的呢?

  1. 习惯用法优于规范
  2. 为了更好的表达你的意图,时刻准备着违反规范
  3. 只要合适,可以引入非UML图表,不要犹豫

     Okay,甩掉包袱,我们可以轻装上阵了.  

 

UML第一步,怎么开始?从哪里开始?

       怎么走出UML应用的第一步呢?像我的朋友遇到的情况先把UML规格说明熟读么?然后发誓把UML各种图表能用的全用上么?

    请注意这里有如下事实:

  • 你已经忘记了目的地,使用UML的目的是更好的沟通,而不是充分使用UML的各种图
  •  即使是UML的发明者们也不能熟练使用UML所有的图,人们需要的往往是一个很小的集合
  • 人们买来电器之后第一件事是全面学习使用手册么?不是,基本规则会了就先用起来,不会的时候再去找,这个就是行动思维

     我们就释然了,没有必要使用所有的图,更没有必要熟悉所有的UML规格说明,不应成为负担。归根究底,成为负担的是对我们没用的东西,铭记奥卡姆剃刀原则Occam's Razor:如无必要,勿增实体,大胆的舍弃对自己没有的东西!

      从哪里开始?Martin先生给出的建议是从类图和序列图开始,这两种图是基本的,常用的,最有用的图形。掌握了这两种图之后,可以尝试其它图,如果新的图没有给你带来什么帮助,大胆的舍弃它!

 

然后呢?Ok,我们行动吧!

    

 

 

参考书目:

目录
相关文章
|
3月前
|
敏捷开发 测试技术 uml
UML 在敏捷开发中的应用与实践
【8月更文第23天】统一建模语言 (UML) 是一种广泛使用的图形化语言,用于描述软件系统的设计。它通过各种图表和符号来帮助开发团队理解系统的架构、行为和交互。而敏捷开发则是一种强调快速迭代、客户反馈和持续改进的软件开发方法论。这两种看似风格迥异的方法实际上可以很好地协同工作,以提高软件项目的效率和质量。
116 4
|
Java 数据库 uml
uml之实践感悟
刚出道的时候,做业务系统很喜欢用uml来做分析和设计模型,很喜欢在rose中作以下事情:1.以用户需求作为输入,做用例分析和领域模型设计,得到一个系统用例模型和领域模型2.接下来就做模型迁移(转换),将用例模型和领域模型转换为特定语言环境的设计模型和数据库模型,比如java和oracle,其中还可以在java组件上直接应用23种设计模式。
934 0
|
6月前
|
uml
UML之类图
UML之类图
97 1
|
6月前
|
数据可视化 Java uml
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
305 1
|
3月前
|
Java uml
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。
|
3月前
|
Java uml
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
该博客文章展示了如何使用简单工厂模式设计一个程序,该程序能够根据用户输入的运算符(加、减、乘、除)对两个数进行计算,并提供了相应的UML类图和Java源码实现。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
|
5月前
|
应用服务中间件 uml
【UML】软件工程中常用图:类图、部署图、时序图、状态图
【UML】软件工程中常用图:类图、部署图、时序图、状态图
605 1
|
3月前
|
数据可视化 Java uml
精通UML:从类图到序列图的实战指南
【8月更文第23天】统一建模语言(Unified Modeling Language, UML)是一种用于软件工程的标准图形化语言,它提供了一套工具来帮助开发团队可视化、构造和文档化软件系统。在UML中,类图和序列图是最常用也是最重要的两种图。类图用于描述系统的静态结构,而序列图则用于表示对象之间的交互和系统的动态行为。
167 5
|
3月前
|
设计模式 uml
设计模式常用的UML图------类图
这篇文章介绍了UML中类图的基本概念和用途,详细解释了类与接口、类之间的关系,包括继承、实现、组合、聚合、关联和依赖等六种关系,并展示了它们在类图中的表示方法。
设计模式常用的UML图------类图
|
3月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
331 0