UML类图-类的关系图

愈来愈发现UML的重要性, 作一个项目作好的是在开始码代码以前画出项目主要业务逻辑的关系图, 而后用类图来详细描述类之间的关系. 这样才能更好的作一个符合软件设计思想的软件项目. 本文做为本身之后的参考学习, 也分享出来让更多的人学习.编程

我参考一个博客开始学习的:http://blog.csdn.net/lovelion/article/details/7838679编程语言

推荐一个画类图的工具, StarUML, 我的感受仍是很好用的.工具

1. 一个简单类的UML图示

以下所示, 是用UML画的一个简单的类的图示.学习

UML类图中, 类由三部分构成: 类名, 类的属性, 类的操做

1.1 类名

类名就是类的名字, 是一个字符串.atom

1.2 类的属性(Attributes)

UML规定属性的表示方式为:.net

可见性  名称:类型 [ = 缺省值 ]
  • 可见性: 包括, 共有的(public), 私有的(private), 保护类型(protected), 在类图中分别用 +, -, # 表示.
  • 名称: 名称就是名字, 属性的名字.
  • 类型: 类型就是属性的数据类型, 能够是基本的数据类型也能够是自定义的类型.
  • 缺省值是一个可选项, 就是属性的初始值

1.3 类的操做(Operations)

UML规定操做的表示方式为:设计

可见性  名称(参数列表) [ : 返回类型]

操做是类的任意一个实例对象均可以使用的行为,是类的成员方法。code

  • 可见性, 名称, 与属性的中可见性和名称定义是彻底相同的.
  • 参数列表: ƒ参数列表表示方法的参数,其语法与属性的定义类似,参数个数是任意的,多个参数之间用逗号“,”隔开。
  • 返回类型: 返回类型是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,能够是基本数据类型,也能够是用户自定义类型,还能够是空类型(void),若是是构造方法,则无返回类型。

2. 类和类之间的关系

在软件系统中, 类并非孤立存在的, 类和类之间有各类不一样的关系, 对于不一样类型的关系, UML提供不一样的表示方式.对象

2.1 关联关系

2.1.1 双向关联

以下所示是一个双向关联的例子, 父亲有一个孩子, 孩子有一个父亲. 双向关联, 简单的说, 就是一个对象中包含另外一个对象的引用, 另外一个对象也包含此对象的引用.blog

双向关联用OC代码表示以下:

#import <Foundation/Foundation.h>

@class Child;

@interface Father : NSObject

@property (nonatomic, strong) Child *child;

@end


@interface Child : NSObject

@property (nonatomic, strong) Father *father;

@end

2.1.2 单向关联

单向关联用箭头和实线表示, 单向关联比较简单, 如图所示, 父亲有一辆小汽车.

2.1.3 自关联

自关联, 好比组合模式里面的树状结构, 一个节点里面是包含了一个自身类型对象的引用的.

2.1.4 多重性关联

多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。

2.1.5 聚合关系

聚合(Aggregation)关系表示总体和部分的关系. 在聚合关系中, 成员对象是总体对象的一部分, 可是成员对象能够脱离总体对象而存在. 在UML中, 聚合关系用空心菱形的直线表示.

聚合对象图示以下:

2.1.6 组合关系

组合(Composition)关系, 也是表示总体和部分的关系. 在组合关系中, 总体对象能够控制成员对象的生命周期, 一旦总体对象不存在, 成员对象也将不存在, 成员对象和总体对象是生死与共的关系. 在UML中, 组合关系用, 实心菱形加直线表示.

组合模式的代码实现中, 通常在总体部分的初始化时候去建立成员部分.

组合模式图示以下:

2.2 依赖关系

依赖(Dependency)关系是一种使用关系. 特定事物的改变, 有可能会影响到使用该事物的其它事物. 在须要表示一个事物使用到另外一个事物时候使用依赖关系. 大多数状况下, 依赖关系体如今, 某各种的方法使用另外一个类的对象做为参数.

在UML中依赖关系由带箭头的虚线表示, 由依赖一方指向被依赖一方.

依赖关系UML图示以下:

依赖关系一般有三种实现方式:

  • 第一种就是如图所示的, 将一个类的对象做为另外一个类中方法的参数.
  • 在一个类的方法中, 将另外一个类的对象做为其局部变量.
  • 在一个类的方法中调用另外一个类的静态变量.

依赖关系代码示例(Objective-C):

//----------------.h文件-----------
@class Car;

@interface Driver : NSObject

- (void)drive:(Car *)car;

@end


@interface Car : NSObject

- (void)move;

@end
//----------------.m文件-----------
@implementation Driver

- (void)drive:(Car *)car
{
    [car move];
}

@end


@implementation Car

- (void)move
{
    NSLog(@"汽车动了一下");
}

@end

2.3 泛化关系

泛化(Generalization)关系又被称为继承关系, 用于描述父类和子类的关系, 父类做为基类或者超类, 子类又被称为派生类.UML中泛化关系用带空心三角形的直线表示.

泛化关系UML图示:

2.4 接口和实现关系

不少面向对象的语言中都有接口的概念, 接口中一般没有属性, 并且全部操做都是抽象的, 只有操做的声明, 没有操做的实现. 接口之间也有相似于类之间关系的继承关系和依赖关系, 接口和类之间还存在一种实现(Realization)关系. 在UML中类与接口的实现关系用带空心三角形的虚线表示.