UML的学习,也持续了一段时间了。从最初的迷茫,到现在的跃跃欲试。可是,刚想实战,便碰壁了。 看完视频中对9中图的概述,也看完了对Rational Rose软件的使用介绍,于是便想着实战一把,画个图试试。结果就是赠给自己一句话:还没学会走,就别想着跑了。 刚开始觉得示例中画个小人,添个任务,很简单嘛。可是,真准备动手了,却不知道如何下手。最重要的就是关系,几种关系,将会关系到后面每一块领地。 “能用继承表示就一定要用泛化关系,当描述接口与类的实现就用实现关系,两个类之间有结构关系就用关联,除此之外采用依赖关系”,视频中这段话,不止说了一次了。一款好的软件,一定是从最初的需求分析到最后的实施维护的过程中都严格按照规则去做的。就拿需要形成的几种图来说,关系的应用也一定是具体而又经过周全考虑的。所以,每一个图,不仅仅是为了完成它,而且要认真理清每一个接口或类之间的关系。这其中,关联是一定的,但具体是组合呢,还是聚合呢,还是其他关系,都需要仔细思考。 UML 中类与类, 类与接口, 接口与接口之间的关系有: 泛化(generalization) 关系, 关联(association)关系( 关联, 聚合,组合), 依赖(dependency)关系,实现(realization)关系. 下面便一一来总结一下: (一)泛化关系 【含义】一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。用英文描述就是is-a-kind-of。 【表示】带三角箭头的实线,箭头指向父类。 【举例】动物可分为爬行、两栖和哺乳动物,而狗、猫和牛都是属于哺乳动物。不管是爬行、两栖还是哺乳动物,一定都具有动物的特征。而不管是猫、狗还是牛,一定都具有哺乳动物的特征。这样的关系就属于泛化关系。 【图】
(二)关联关系
【含义】一种结构化关系,指一种对象和另一种对象有联系。 【分类】普通关联、聚合、组合。
【普通关联】 【表示】直线 【举例】人与公司之间。其中描述该关系的性质名称为Job,employee与employer为该关系中的两个角色。
【图】
【聚合】 【表示】空心菱形 【举例】书架与书之间。两者为整体与部分的关系,相互联系,但又相互独立。书架没有,书仍存在,反之亦然。 【图】
【组合】 【表示】实心菱形 【举例】书和页之间。两者同样为整体与部分的关系,相互联系,但部分不能离开整体而单独存在。没有书,就没有页。 【图】
(三)依赖关系
【含义】是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
【表示】带箭头的虚线,指向被使用者。
【举例】课程调度。其依赖于课程类。也就是说如果都不存在某一课程,也就不可能对其有所调整了。
【图】
(四)实现关系
【含义】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【表示】带三角箭头的虚线,箭头指向接口。
【举例】圆圈与形状间的关系。Circle类实现了Shape接口。
【图】
各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
“能用继承表示就一定要用泛化关系,当描述接口与类的实现就用实现关系,两个类之间有结构关系就用关联,除此之外采用依赖关系”,再加上“能用组合的就不用聚合关系”,这些也都是因为上面的关系顺序而来。所以,理清了这些关系,才知道在实践中如何去应用了。
学习心得:
这六个关系理论上自己接受了,但在实践过程中可谓一波三折。为了用Rational Rose这款软件画出这六个关系,花了不少时间琢磨。自己也知道,这是前期学习必不可少的。所以,实践很重要。
通过理理这六个看似简单的关系,发现了学习还是一步一个脚印。有时候,新的学习遇到问题了,那么大有可能是前面的学习没有扎实。所以,还是得踏踏实实地走下去。只有知道了关系该怎么样,包括该用什么,也包括该怎么画出来,才能继续去创作更宏伟的UML图。(⊙v⊙)