UML类图

通过实例搞清类与类的关系以及类与接口的关系,同时学会类图。

开始:

UML类图_第1张图片

注意:有资料对接口的表示法分为:矩形表示法,棒棒糖表示法,本文用Rational Rose工具画的图,Rational Rose没有矩形表示法表示接口一项。

看上面类图分三层:第一层:表示类名。第二层表示类的特性,通常是字段或属性。第三层表示类的操作,通常指的是方法和行为。

UML类图_第2张图片这张图表示唐老鸭实现了讲人话的接口。用java代码表示为:

接口用一个带有圆圈来进行表示,同过一条Realize线与实现它的类相连接。

interface  Language{
  
  void speak();
}


UML类图_第3张图片 该图表示的是继承关系,用空心三角形和实线来表示。

class  Bird extends Animal{

}
关联关系,用实现箭头表示,企鹅需要知道气候变化来了解气候规律,当一个类知道另一个类时,可有关联表示。

class Penguin extends Bird{

  private Climate climate; //在企鹅中引用到气候Climete 对象。
}


UML类图_第4张图片 大雁是群居动物,每一个大雁属于一个雁群,一个雁群可以有多个大雁。它们属于聚合关系。术语这样讲:聚合表示一种弱的”拥有“关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。刚开始我不太理解这句话,后来想通了,大雁离开了雁群依然是一个独立的个体,从代码上也许更好理解这句话。

class WideGooseAggregate{

  private WideGoose  []  arraryWideGoose; //在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose。
      }
聚合关系用空心的菱形和实现箭头表示。

合成也叫组合是一种强的”拥有关系“体现了严格的部分和整体的关系,部分和整体的生命周期一样。合成关系的连线两端有数字表示基数,表明这一段类可以有几个实例。一个鸟俨然只有两个翅膀。若一个类有无数个实例的话,用n表示。关联关系和聚合关系也可以有基数。合成关系用实心的菱形和实线箭头表示。

class Bird{

 privite Wing wing;
   
   public Bird(){
      wing  = new Wing();//在Bird类中初始化时,实例化wing,它们之间同时生成。
    }
}

UML类图_第5张图片

动物依赖水和氧气才能存在。它们是依赖关系,用虚线箭头表示。

abstract class Bird{

  public metaBolism(Oxygen oxygen,Water water){
}
}

看一个不错的实例分析,加深理解:

UML类图_第6张图片

上图用Enterprise Architect 7.5所画。

1. 通知分为一般通知、割接通知、重保通知。这个是继承关系。

2. NoticeService和实现类NoticeServiceImpl是实现关系。

3. NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。同时调用了BaseDao完成功能,也是依赖关系。

4. 割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。

5. 重保通知和预案库间是聚合关系。因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。在系统中是手工从列表中选择。删除重保通知,不影响预案。

6. 割接通知和需求单之间是聚合关系。同理,需求单可以独立于割接通知存在。也就是说删除割接通知,不影响需求单。

7. 通知和回复是组合关系。因为回复不能独立于通知存在。也就是说删除通知,该条通知对应的回复也要级联删除。


用Rational Rose 工具生成java代码:

注意:工具本身没有达到生成的代码准确无误。

步骤:【1】选择Tools(工具)|java/j2EE|Project Specification(项目规范)命令。

【2】在classpath下添成的路径,可以选择的目标是生成一个jar/zip文件中或在一个目录中

【3】选择Tools|java/j2EE|Generate Code(生成代码命令来生成代码)。

 以下面的类模型为例:

UML类图_第7张图片    生成的代码如下:

//Source file: C:\\Users\\xx\\Desktop\\Book.java

import Title;

public class Book 
{
   private Long bookId;
   private Integer titleId;
   private String iSBN;
   private String author;
   private String publisher;
   private String name;
   private Date publishDate;
   
   /**
    * @roseuid 548EC70F0019
    */
   public Book() 
   {
    
   }
}


也可以逆向工程:

为了方便用刚刚生成的代码来逆向工程。选择工具Tools|java/j2EE|Reverse Engineer命令来逆向工程。

为了避免影响,我们把上面的代码:

//Source file: C:\\Users\\xx\\Desktop\\Book.java
/**
* @roseuid 548EC70F0019
*/     去掉,最后生成的就是我们上面的那个类模型。



结束


参考:

 http://www.uml.org.cn/oobject/201104212.asp


注意注意

注意:

你可能感兴趣的:(UML类图)