购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.12  UML图

小A:“师兄,我想请你帮我总结和理解一下类图,因为我学了那么久的编程,类图就是学不好,简单的类图我还可以看懂,有些标记很容易混淆。你能给我讲讲吧!”

大B:“先看看UML的定义:统一建模语言(Unified Modeling Language,UML)是一种绘制软件蓝图的标准语言。”

小A:“那它有什么特性?”

大B:“顾名思义,它具备语言的特性:

-标准性:元素、规则、机制

-逻辑性:严谨

-灵活性:同样的事情,不同的正确表述

-方言性:利益驱动;翻译版本的混乱

-不可盲目模仿性:避免片面借鉴,抓住事务本质和思想灵魂”

小A:“嘿嘿,标准性、逻辑性我能理解,什么是灵活性,方言性和不可肓目模仿性?”

大B:“方言性,在一方面是由于软件商家(如微软)追求商业利益、行业标准的制定权和话语权,造成了一些CASE工具未完全遵从UML标准这一混乱现象;另一方面,由于国内翻译的参考教材中文字晦涩难懂、不统一,造成目前的UML的学习门槛高、入门困难的局面。其实,真的,这东西没有这么高深。说到方言性,不得不补充一句,不建议使用VISIO做为UML的CASE工具,UML的三个爸爸早在94、95年分别加入Rational公司,没有理由不使用Rational Rose啊。最值得一提的是它的灵活性、不可盲目模仿性。举个例子吧!”

用例场景:

张无忌,出生于冰火岛,父亲张翠山,母亲殷素素。张无忌的武功大全:武当长拳、九阳神功、武当梯云纵、乾坤大挪移、少林擒龙手、崆峒七伤拳、太极拳剑、圣火令武功。

先画个用例图,描述张无忌他家的情况。如图1-2用例图所示

图1-2 用例图

2)以泛化关系表示继承的时候,用例描述中需要强调描述:儿子继承了爸爸的什么,爸爸有哪些没有被儿子继承,儿子还新增了什么。如图1-3用例图所示

图1-3 用例图

3)这是一个有问题的用例图,看看错误在哪里?提示:聚合关系是一种松散的关联关系,目标元素可有可无。如图1-4用例图所示

图1-4 用例图

想一想,人亡家还在么?所以以上关系用聚合是完全错误的!那么,上面用例场景描述中,哪些可以使用聚合关系描述呢?

图1-5 用例图

没错,张无忌可以不会任何武功,也可以会N多武功;张无忌学习九阳神功,并不妨碍杨过、郭靖去学习嘛!如图1-5用例图所示

4)这还是一个有问题的用例,看看错误在哪里?提示:组合关系是一种强关联,它有一个重要的特性:部分在某一时刻仅仅只能属于一个整体。如图1-6用例图所示

图1-6 用例图

想一想,殷素素不但是张翠山的老婆,还是殷家的女儿,张家的儿媳妇。有人问,这张用例图中并未讲到张家和殷家啊,所以这般描述好像也不错。非也,用例图描述的是实际的、真实的关系,跟“人为地”画或不画是没有任何关系的。所以以上关系用组合是完全错误的!那么,上面用例场景描述中,哪些可以使用组合关系描述呢?

我挖,我挖,我使劲挖,挖掘需求。5分钟过后。突然想到:冰火岛上有树,树上长叶子,嘿,有了!如图1-7用例图所示

图1-7 用例图

现在是不是感觉UML很好玩?想不想了解一下UML的成长历程,想不想认识一下它的三个爸爸?如图1-8用例图所示

图1-8 用例图

UML之父:Grady Booch、James Rumbaugh、Ivar Jacobson

Grady Booch 在他的一本书中说:“如果你有好的思想,那么它也是我们的”。这其实从一方面概括了UML的哲学--它吸取已有的精华并且在其上进行OOA/D(面向对象分析和设计)整合和构造。这是最广泛意义上的复用。

大B:“在正式上手去应用UML之前,再了解一下应用UML的三种方式,包括:

-UML作为草图

非正式的、不完整的图(通常是在白板上手绘草图),借助可视化语言的功能,用于探讨问题或解决方案空间的复杂部分。

-UML作为蓝图(主要方式)

这是UML更加正式和精确的用法,使用UML用于详细规定软件系统。UML模型可被维护,并成为软件的一个重要交付成果。用于:正向工程,逆向工程。这种方法需要使用如Rational Rose建模工具。

-UML作为编程语言

使用模型驱动构架(Model Driven Architecture,MDA),给UMl模型添加足够的细节,使得能够从模型中编译生成系统。这是UML最正式和精确的用法,是软件开发的未来。但目前在理论、工具的健壮性和可用性方面仍处于发展阶段。”

大B:“还有就是,类图这东西你以后看多了,用多了自然就熟悉了。”

小A:“看来UML类图也不太难嘛!嘿嘿!”

大B:“就是啊!以后就要记住了哦!编程是一门技术,也是一门艺术。不能只满足于写代码运行结果正确,要考虑如何让代码更加简练,更加容易维护,容易扩展和复用,这样才可以真正得到提高。UML类图不是一学就会的,要有一个慢慢熟练的过程。学无止境,理解面向对象的才是真正学习编程的开始!” ilAg2mMl2PfDAIF8r5rtpme2pjvXGt6RJId1bnPdiFSduH46WA6xH+5T5bN1oG6o

点击中间区域
呼出菜单
上一章
目录
下一章
×