一文看懂UML类图和时序图

        这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对日常的工作和交流; 同时,我们应该能将类图所表达的含义和最终的代码对应起来; 有了这些知识,理解设计模式结构图就没有什么问题了。

从第一个示例开始

请看以下这个类图,类之间的关系是我们需要关注的:

  • 车的类图结构为<<abstract>>,表示车是一个抽象类;
  • 抽象类有两个继承类:小汽车和自行车。表示它们之间的关系为实现关系,使用带空心箭头的虚线表示。
  • SUV继承了小汽车,它们之间的关系为泛化关系,使用带箭头的实线表示。
  • 小汽车与发动机之前是组合关系,使用带实心菱形的实线表示。(此处比喻不太贴切,改为公司和部门比较恰当。公司和部门都不能脱离对方而独立存在。)
  • 学生与班级是之间是聚合关系,使用带空心菱形的实线表示。
  • 学生与身份证之前为关联关系,使用一根实线表示。
  • 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示。

下面我们将具体介绍这7种关系:


类之间的关系

泛化关系(generalization)

        泛化关系也就是继承关系,用于表示子类和父类之间的关系。泛化关系用一条带空心箭头的直线表示,如下图表示(A继承自B)

        在现实世界中,可用汽车定义具体的对象,汽车与SUV之间为泛华关系。


实现关系(realize)

        接口是抽象的,类是具体的,在接口和类之间存在实现关系。实现关系用一条带箭头的虚线来表示。比如“车”为一个抽象概念,在现实中无法直接用来定义对象,只有指明具体的子类(汽车还是自行车),才可以用来定义对象。(在Java中用接口来表示)


聚合关系(aggregation)

        聚合关系用一条带空心菱形的实线表示。下图表示A聚合到B上,或者说B由A组成:

        聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义。例如一个部门由多个员工组成。与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部门仍然存在。例如部门撤销了,人员仍然存在,它们不会消失。


组合关系(composition)

        组合关系用一条带实心菱形的直线表示,下图中表示A组成B,或者说B由A组成。

        与聚合关系相同的是,组合关系同样表示整体由部分组成的语义,比如公司由多个部门组成。但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,那部分也不存在了。公司不存在了,部门也将不存在了。


关联关系(association)

        关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。如汽车和轮胎,班级和学生等。        

        关联关系用一条直线表示,关联关系不强调方向,表示对象之间互相知道对方的存在。如果特别强调方向,例如下图,表示A知道B,但B不知道A。

在Java中实现关联关系时,通常将将一个类的对象作为另一个类的成员变量。


依赖关系(dependency)

        依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象做参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。下图表示A依赖于B。

        在最终代码中,依赖关系通常通过3种方式来实现:第一种(最常用)将一个类的对象作为另一个类中方法的参数;第二种方法是在一个类的方法中将另一个类的对象作为其局部变量;第三种方式是在一个类的方法中调用另一个类的静态方法。


时序图

        时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。

        时序图包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值