UML之类图

前言

       类图是UML之中使用频率极高的图,也是非常重要的图。它能描述一个类的详细信息,包括类名,变量,方法等,它还能描述及类与类之间的泛化、实现等关系,是进行软件分析设计甚至开发的重要依据。如果把软件开发当成修建一座大楼,那类图可以算得上是施工设计架构图。作为软件设计师、架构师,我们可以通过类图清晰地设计并展现整个软件的结构,作为开发者,我们可以根据类图以及类图之间的关系进行编码、实现。

什么是类?

       类是对于具有相同属性、相同行为的一种事物的抽象和封装,是面向对象的重要组成部分。比如我们地球上有着几十亿人,可能每个人都是各不相同的。但几乎所有的人都有眼睛、鼻子、嘴巴等相同的属性,都有吃饭、睡觉这些相同行为,那么我们则可以把这些共性的东西抽象出来,封装成一个Person类。Person类里面拥有eye,mouth等等属性,拥有eat()、sleep()等方法。当然人要分为男人和女人,我们可以封装两个子类Man和Woman继承自Person,把男人和女人特有的属性以及方法封装到子类里面,这便是类的继承。

为什么需要类图?

       从上面可以看出,如果我们用文字想清晰完整的描述一个类,以及类与类相互之间的关系的话,其实是很不形象的,也是很冗长的。因此,UML提供了类图,通过类图,我们可以清晰的看到类的属性、方法等,也能很清晰的看到类与类之间的关系。

类图组成

       类图一般由三部分组成:类名,类的属性,类的方法。如上述的Person类,我们的类图是这样的:
       Person的类图
  第一栏是类名,即Person,第二栏是类的属性,第三栏是类的方法,属性和方法前面的符号代表属性的可见性,+代表public,#代表protected,-代表private。
  属性和方法中,冒号后面的是属性的类型和方法的返回类型。同时,定义属性的时候还可以赋初始值,如ear属性,初始值为2。

类与类之间的关系

       类与类之间的关系,主要有四大类:泛化,实现,依赖,关联。其中关联关系里面又包括聚合,组合,单向关联,双向关联,自关联几种关系。下面我们一一介绍。

一、泛化关系

       泛化关系就是继承关系,用于描述父类与子类的关系,在java中,对应extends关键字。在类图中,泛化关系是用带空心三角形的实线来表示,空心三角形指向父类。如图:
       泛化

二、实现关系

       实现关系用于描述接口和实现类之间的关系,类实现某接口,在java中,对应implements关键字。在类图中,实现关系是用带空心三角形的虚线来表示,空心三角形指向接口。如图:
实现

三、依赖关系

       依赖关系是一种使用关系,某事物的改变可能会影响依赖于它的其他事物,是最弱的关系
  在java中,主要有三种表现形式:
  1、一个类的对象作为另一个类某个方法的参数;
  2、一个类的对象作为另一个类某个方法的局部变量;
  3、一个类的方法中,调用了另一个类的静态方法。
  在类图中,依赖关系用带箭头的虚线表示,箭头指向被依赖的对象。如图:
这里写图片描述

四、关联关系

关联关系是类与类之间比较常见的一种关系,在代码上通常表现为一个类的对象是另一个类的成员变量,关联关系一般又分为普通关联,聚合,组合。聚合与组合是关联关系中关联性比较强的两种特殊情况。
        1、普通关联
  一般包括单向关联、双向关联、自关联三种。在类图中用带箭头的实线表示,如图:
(1)双向关联:
这里写图片描述
(2)单向关联:
这里写图片描述
(3)自关联:
这里写图片描述

       2、聚合
  一种特殊的、较强的关联关系,表示整体与部分的关系,成员对象是整体对象的一部分,但是成员对象也可以单独存在。比如工厂作为整体对象,工人作为成员对象,两者是可以单独存在的,这个工厂倒闭了,工人还可以去另一个工厂。在代码实现上,主要形式为成员对象通常作为构造方法、Setter方法的参数注入到整体对象中。在类图中,聚合带箭头的空心菱形,箭头指向成员对象,空心菱形指向整体对象。如图:
聚合

       3、组合
  一种特殊的、较强的关联关系(比聚合关系还要强),也表示整体与部分的关系,但如果整体对象挂了,那成员对象也就挂了,两者具有相同的生命周期,同生共死!比如头作为整体对象,嘴巴作为成员对象,一旦头都没了,那嘴巴也就没了。在代码实现上,主要形式为在整体对象的构造方法中,直接实例化成员对象。在类图中,用带箭头的实心菱形表示,箭头指向成员对象,实心菱形指向整体对象。如图:
组合

关联关系的多重性

  用于表示两个关联对象在数量上的对应关系,在类图中,可以在两个对象的关联指向上,用数字表示,常见的多重性表示方式如下:

数量关系多重性说明
1..1表示另一个类的一个对象只与该类的一个对象有关系
0..*表示另一个类的一个对象与该类的零个或多个对象有关系
1..*表示另一个类的一个对象与该类的一个或多个对象有关系
0..1表示另一个类的一个对象没有或只与该类的一个对象有关系
m..n表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

类图关系强弱顺序

  泛化=实现>组合 > 聚合>关联> 依赖 (PS:组合跟聚合属于特殊的关联关系,所以单独出来了)

类图关系记忆口诀

       类图关系有这么多种,每种对应的图形也是不一样的,如果你没有经常与类图打交道,其实很容易就会遗忘或者混淆。但无论作为一个软件设计者还是软件开发者,能够画类图都是很有必要的,甚至是必须会的基本功。再退一步讲,在参加笔试或者面试时,经常会被问到设计模式,如果能在写出相应代码的基础上,再附上一个类图的话,那想必是极好的!所以,类图的重要性毋庸置疑,为了方便记忆,下面编了一些小口决,不喜勿喷。
       泛实组合聚关依(记住这一句,就记住了强弱顺序,后面的三句口诀也是跟这个顺序对应的)
  空心三角两心菱(空心三角形说的是泛化和实现,两心菱说的是组合跟聚合,组合是实心菱形,聚合是空心菱形,组合关系更强,显然是实心的)
  三角不箭菱形箭(这一句是对上一句的补充,空心三角形的另一端是不带箭头的,而实心、空心菱形的另一端是带箭头)
  关联实箭依赖虚(这句就很明白了,关联是带箭头的实线,依赖是带箭头的虚线,也很明显,关联比依赖关系更强,显然该是实线)

类图关系思维导图

       下面是整理类图关系时,画的一个思维导图,算是对类图关系的一个总结,方便自己以后复习,有需要的朋友可以下载。http://pan.baidu.com/s/1jGKTfTG
类图关系

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值