随笔-94  评论-56  文章-3  trackbacks-0

UML ------Unified Modeling Language (统一建模语言)

UML诞生于1997年,综合了当时已经存在的多种面向对象的建模语言而形成的图标式软件设计语言.主要功能如下:
1.可视化功能:
可视化将促进对问题的理解和解决,方便设计人员彼此交流和沟通.
可以较容易发现设计草图中可能的逻辑错误,保证最后完成的软件能够按要求运行,避免和减少意外发生.
2.说明功能:
是一个通用的,精确的,没有歧义的对系统进行说明的机制.
3.建造功能:
UML有自己的语法规则,使得人们可以使用建模工具软件对一个系统设计模型加以解释,并将设计模型映射到一种计算机语言(如JAVA)上.
通过UML可以看到系统总体的图像,可以很容易发现可复用的代码,从而使系统更有效率.
4.建文档功能:
使用UML进行设计可以同时产生系统设计文档.
新加入项目的程序员可以借助UML图形文档资料很快熟悉开发中的系统.

UML包括一系列的图:
1.结构型图: 
      类图
      对象图
      构件图
      部署图
2.行为型图:
      使用案例图
      时序图
      合作图
      状态图
      活动图
所有这些图中,类图,使用案例图和时序图是最有用的.

类图,是显示出类和接口以及它们之间的静态结构和关系的图.如下:

----------------------------
          Animal
----------------------------
-age:int
-weight:double
----------------------------
+Animal
+Animal
+grow:void
+getAge:int
+getWeight:double
#die:void
----------------------------
name:String

可见,类图是分层结构,最上面是类名层,往下是属性层,方法层,性质层.
类名层不能省略,其他层都可以省略.
如果类名是正字体,表明类是具体的,如果是斜字体,表明类是抽象的.
注意属性或方法的左边的符号,
   如果是加号(+), 表示它是 public;
   如果是减号(-), 表示它是 private;
   如果是井号(#), 表示它是 protected;
如果在方法下面有下划线,表明这是个静态方法.
性质层是由一个属性(内部变量),一个get方法,一个set方法组成的结构.

上面的UML图可以解析成JAVA代码,如下:

public   class  Animal {
 
// 私有属性
  private   int  age;
 //私有属性
 
private   double  weight;
 //私有属性
 
private  String name;
 
// 公开默认构造子
  public  Animal() {
  
//
 }
 
// 公开构造子
  public  Animal(String name) {
  
this .name  =  name;
 }
 
// 公开方法
  public   void  grow() {
  
//
 }
 //公开方法
 
public   int  getAge() {
  
//
 }
 //公开方法
 
public   double  getWeight() {
  
//
 }
 
// 保护方法
  protected   void  die() {
  
//
 }
 
// 公开方法
  public  String getName() {
  
return  name;
 }
 //公开方法
 
public   void  setName(String name) {
  
this .name  =  name;
 }
}


类图 中的 关 系

 

1 、   一般化 关 系( Generalization )

 

类 与 类 之 间 的 继 承 关 系,接口与接口 间 的 继 承 关 系,或者 对 接口的 实现关 系。

 

方向与 继 承相反。从子 类 指向父 类 。 对应关键 字 为 extends 和 implements.

 

2 、   关联关 系 ( Association)

 

类 与 类 之 间 的 连 接,一个 类 可以知道另一个 类 的属性和方法。

 

关联 用 实线 + 箭 头 来表示。

 

关联 可以双向,也可以是 单 向的。双向 关联 使用两个箭 头 或者没有箭 头 。 单 向 关联 有一个箭 头 ,表示 关联 的方向。一般多使用 单 向 关联 ,不鼓励使用双向 关联 。

 

Java 中, 关联 通 过实 例 变 量 实现 的。在一个 类 A 中,出 现 了 类 型 为 B 的 实 例 变 量,体 现 了两个 类 之 间 的 关联关 系。可以用一个箭 头 指向 B 的 关联 来表示它 们 的 关 系。 关联 都有个名字。而且 还 可以有基数,表示 这 一端的 类 可以有几个 实 例。 记 号 n..m 表示一个取 值 区 间 。

 

关联关 系可以 进 一 步 确定 为 聚合 关 系或合成 关 系。

关联关 系中两个 类处 于同一 层 次。

 

3 、   聚合 关 系 ( Aggregation)

 

聚合 关 系是更 强 的 关联关 系。聚合是整体和部分之 间 的 关 系。聚合 关 系中的两个 类 的 关 系是不平等的,是整体和部分的 关 系。也是通 过实 例 变 量 实现 的。一般的 关联 和聚合 关 系需要通 过 两个 类 的 逻辑关 系来区分。如果不确定,就将聚合 关 系 设 置成 关联关 系。

 

表示方法:空心菱形+ 实线 +箭 头 ,箭 头 指向部分。 整体的一端用空心菱形表示,部分的一端用箭 头 表示。

 

4 、   合成 关 系( Comp os ition )

 

合成 关 系是更 强 的聚合 关 系。合成 关 系不能共享。表示部分的 类 只能与一个表示整体的 类 建立合成 关 系。

 

代表整体的 对 象要 负责 代表部分的 对 象的生命周期。 负责 将代表部分的 对 象湮 灭 掉。也可以将代表部分的 对 象 传递给 另一个 对 象,由后者 负责 此 对 象的生命周期。

 

表示方法: 实 心菱形+ 实线 +箭 头 , 整体的一端用 实 心菱形表示,部分的一端用箭 头 表示。如果不能确定 为 合成 关 系,可以将它 设 置 为 聚合 关 系,甚至是 关联关 系。

 

5 、 依 赖关 系( Dependency )

 

依 赖总 是 单 向的。表示一个 类 依 赖 于另一个 类 的定 义 。与 关联 不同是,此 处 没有 类实 例作 为 属性,而是将 类 B 的 实 例作 为 方法的参数 传 入的。

 

表示方法:虚 线 +箭 头 ,箭 头 指向作参数的 类 一方。

 

一般,在 Java 中表示 为 局域 变 量、方法的参数,以及 对 静 态 方法的 调 用。

 

如果 类 A 的某个局域 变 量的 类 型是另一个 类 B ,那 么类 A 就依 赖 于 类 B 。

 

如果 类 A 方法的参数是 类 B 的 实 例,那 么类 A 依 赖 于 类 B 。

 

如果一个 类 A 调 用另一个 类 B 的静 态 方法,那 么类 A 依 赖 于 类 B 。

 

如果 类 B 出 现 在 类 A 的 实 例 变 量中,那 么类 A 和 类 B 的 关 系就超越了依 赖关 系,而 变 成了某一 种关联关 系。

 

注: 一般 关 系表 现为继 承或 实现关 系 (is   a) , 关联关 系表 现为变 量 (has   a ) ,依 赖关 系表 现为 函数中的参数 (use   a) 。

posted on 2006-07-04 19:00 小言身寸 阅读(567) 评论(0)  编辑  收藏 所属分类: UML

只有注册用户登录后才能发表评论。


网站导航: