浅谈UML类图

UML类图

类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。类图(Class diagram)最基本的元素是类或者接口。

UML类图关系包含:泛化、实现、关联、聚合、组合、依赖。

1、泛化关系(继承)

泛化关系指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;UML关系如下图:

2、实现关系

实现关系指的是一个class类实现interface接口的功能;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;UML关系如下图:

小提示:继承和实现关系在UML关系图中相似,继承(空心箭头+实线)、实现(空心箭头+虚线

3、依赖关系

依赖关系就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的;表现在代码层面,为类B作为方法参数|局部变量|静态方法被类A在某个method方法中使用;UML关系如下图:

 

4、关联关系

关联关系是两个类、或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,表现在代码层面,为被关联类B以类成员对象的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量UML关系图如下:

小提示:依赖关系和关联关系的区别,在于对象的引入方式,若被引入对象作为方法参数引入为依赖关系,若作为类属性方式引入为关联关系。

5、聚合关系

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,表现在代码层面,和关联关系是一致的,如果AB聚合成,表现为A包含有B的成员对象,但是B对象可以不在A创建的时刻创建。只能从语义级别来区分; UML关系图如下:

6、组合关系

合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;整体即所有者负责被组合的对象(部分)的生命周期的管理。如果所有者被销毁,被所有者也必须跟着一起被销毁,表现在代码层面,和关联关系是一致的,如果AB组成,表现为A包含有B的成员对象,并且B对象在A创建的时刻创建(即调用A构造方法创建A对象是同时创建B对象)。只能从语义级别来区分;UML关系图如下:

 

7、总结:

聚合组合关系代码举例如下:

聚合关系,大雁与雁群

public class GooseGroup{ 

    public Goose goose;

    public GooseGroup(Goose goose){

        this.goose = goose; 

    } 

 

 

 

 

 

    组合关系,大雁,一只大雁由翅膀、脚...等组成。

public class Goose{

    public Wings wings;

    public Goose(){ 

       wings=new Wings(); 

}

 

聚合关系的类里含有另一个类作为参数
雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在
组合关系的类里含有另一个类的实例化
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。

<!--EndFragment-->

猜你喜欢

转载自zhangw2004.iteye.com/blog/1940502