参考链接:
http://www.uml.org.cn/oobject/201211231.asp 深入浅出UML
http://www.open-open.com/lib/view/open1328059700311.html UML类图几种关系的总结
类的定义:
类是一些数据的以及对这些数据进行操作的方法的封装,它是具有相同属
性、操作、关系的对象集合的总称。类 = 数据 + 方法。
类的优点:
使代码模块化,便于管理和维护,还可以隐藏代码实现细节保护知识产权等。
类与对象的关系:
在软件系统运行时,类将被实例化成对象(Object),对象对应于某个具体的事
物,是类的实例(Instance)。
类的种类:
实体类(学生,商品等),控制类(用户注册类等),边界类(菜单,窗口等)。
(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。实体类来源于需求说明中的名词,如学生、商品等。
(2) 控制类:控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。控制类一般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有一个商品增加类,注册对应有一个用户注册类等
(3)边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单等。
在UML中,我们要表示一个类,那么首先我们得确保UML中表示出的类与代码中的类保持一致,那么我们先看看代码中的类的表示。
public class Employee{
private:
string name;
int age;
string email;
public:
void modifyInfo();
string getName();
......
}
这个类有以下几个属性:
1.名字 Employee
2.可见性 公开
3.数据 name,age,email
4.方法 modifyInfo(),getName()...;
所以我们的UML类图也要保持这些属性。
对比后我们容易发现:
第一个框为类名:然后我们发现Employee 是public 型的,但是UML
类图中是没有反映出这个事实的。
第二个框为属性:这里的’-’号表示公开性为private,除了’-’号,还有其
他符号,如下,然后是属性名称,属性类型。
UML规定属性的表示方式为:
可见性 名称:类型 [ = 缺省值 ]
第三个框为方法,表示方法跟属性差不多。
可见性:
名称 |
缩写形式 |
含义 |
Public |
+ |
可从所有其他类型访问。 |
Private |
- |
只能由此类型的内部定义访问。 |
Package |
~ |
只能在包含此类型的包以及显式导入此类型的所有包中访问。 |
Protected |
# |
只能由此类型以及从其继承的类型访问。 |
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency),在画图过程中一定要搞清楚它们之间箭头的指向以及箭头类型。
1.泛化(Generalization)
【泛化关系】这个就相当于C++类中的继承关系,就是父类和子类的关系。
【箭头指向】带三角箭头的实线,箭头指向父类
2.实现(Realization)
【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【箭头指向】带三角箭头的虚线,箭头指向接口。
这里的实现与泛化有点类似,从目的上来说,类是主要为了使代码模块化,避免重复开发,而接口主要是为了实现不同系统之间的交互,方便他人调用这些方法并且能保护知识产权。
3.关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【箭头及指向】:带普通箭头的实心线,指向被拥有者
3.1双向关联
例如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系,如下图所示:
3.2单向关联
类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系,如下图所示:
4.聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【箭头及指向】:带空心菱形的实心线,菱形指向整体。
5.组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【箭头及指向】:带实心菱形的实线,菱形指向整体
6. 依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助。
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
原文地址:http://blog.csdn.net/mayh554024289/article/details/46444489