UML类图基础

UML( Unified Modeling Language) 统一建模语言, 它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。
UML类图分为三个部分,最上面部分是类的类名,中间部分是类属性的,最小面部分是类的方法,其中属性和方法分别使用" +”、“#”、“-” 分别表示public、protected、private。
UML图中经常用到的类与类之间的关系: 依赖,关联,泛化,聚合,组合,实现;(具体的关系可以通过类的实现来概括)
 
一 依赖:
 
如果A类的变化引起的B类的变化,则称B类依赖于A类
 
依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
 
UML图中, 依赖关系使用带箭头的虚线表示, 由依赖的一方指向被依赖的另一方。
 
    
 
 1 public class Driver  
 2 {  
 3    public void drive(Car car)  
 4    {  
 5        car.move();  
 6    }  
 7    ……  
 8 }  
 9 public class Car  
10 {  
11     public void move()  
12     {  
13         ......  
14     }  
15     ……  
16 }  
 
 
二 关联:
 
关联( Association )关系  是一种拥有的关系,可以是一对多的拥有,如:篮球队和篮球运动员的关联关系(每个球员都有自己所属的球队,每个球队都有自己的球员),
也可以是一对一的关联关系如 妻子与丈夫的关系; 另外关联关系还可以是单项的关联,如购物用户和用户收货地址。
 
关联关系与依赖关系的区别: 关联关系属于类与类之间的联接,Java语言中关联关系一般使用成员变量来实现 ,即一个类在另一个类中是成员变量。 而依赖关系中,被
依赖类并不出现在依赖类的成员变量中,而只是以传参的方式传入到依赖类中某些方法中,在Java语言中体现为局部变量,方法的形参等
 
在UML类图中, 使用实线连接有关联的对象所对应的类 ,如果是单向关联关系则使用带箭头的实线,如果是双向关联关系就使用无箭头的实线
    
    
    
                             双向关联                                                                                单向关联
 // 双向关联 
1
public class Team { 2 private String name; 3 private String address; 4 5 private Player[] players; 6 } 7 8 public class Player { 9 private String name; 10 private Team team; 11 12 }
    
 // 单向关联
1
public class Customer 2 { 3 private Address address; 4 …… 5 } 6 7 public class Address 8 { 9 …… 10 }
另外还有一种自关联的关系,表现为自身类被定义为自己的一个属性
        
代码实现:
1 public class Node {
2  
3     private Node node;
4  
5 }
 
三 泛化(继承):
 
A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)
 
泛化关系 也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
 
在UML中,泛化(继承)关系使用带空心三角形的实线来表示
 
 
    
 
 1 public class Person   
 2 {  
 3    protected String name;  
 4    protected int age;  
 5    public void move()   
 6    {  
 7        ……  
 8    }  
 9    public void say()   
10   {  
11         ……  
12    }  
13 }  
14 public class Student extends Person   
15 {  
16     private String studentNo;  
17     public void study()   
18     {  
19         ……  
20     }  
21 }
 
 
 
四 实现:
 
实现关系(Implementation) 是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务
 
在UML中,类与接口之间的实现关系 使用带空心三角形的虚线来表示
        
          
 
 1 public interface Vehicle   
 2 {  
 3    public void move();  
 4 }
 5 public class Ship implements Vehicle  
 6 {  
 7     public void move()   
 8     {  
 9       ……  
10     }  
11 }
12 public class Car implements Vehicle  
13 {
14      public void move()   
15      {  
16        ……  
17      }  
18 }
 
 
五 聚合:
        
聚合属于关联关系的一种(是一种 has-a 的关系):聚合是整体与部分之间的关系,与关联关系不同的是,关联关系涉及的两个类是处于相同层级的,而聚合关系中一个是整体另一个是部分。
从代码层面来分析的话,聚合和关联关系是一致的,从语义层面来看的话,聚合关系中的两个类是存在一个(整体)包含另一个(部分)的关系的,这种一个包含另一个(也可以不包含)的关联关系就是聚合关系。
    
聚合关系中整体对部分的这种可包含可不包含的关联体现在, 整体生命周期结束了,部分依然可以继续存在,譬如汽车坏掉了不工作了,把引擎取出来放到另一辆车上仍可以继续工作。
    
聚合关系使用空心的菱形+箭头和实线来表示 ,菱形指向整体,箭头指向部分。
 
    
        
 
 1 public class Car  
 2 {  
 3     private Engine engine;  
 4     public Car(Engine engine)  
 5     {  
 6         this.engine = engine;  
 7     }  
 8       
 9     public void setEngine(Engine engine)  
10     {  
11         this.engine = engine;  
12     }  
13     ……  
14 }  
15 public class Engine  
16 {  
17     ……  
18 }
 
六 组合:
    
组合也 属于关联关系的一种:组合关系体现的是一种contains-a 的关系,同样的组合关系中双方也是一个是整体,一个是部分,但是组合关系中整体和部分是不可分离的
意味着如果整体的生命周期结束,则部分的生命周期也会结束。光是从代码层面也是不能区分这种关联关系是否是组合关系,需要从语义层面分析。
 
UML图中, 组合关系 使用 实心的菱形 + 箭头  以及实线来表示 ,实心菱形指向整体,箭头指向部分。
 
          
     
 1 public class Head  
 2 {  
 3     private Mouth mouth;  
 4     public Head()  
 5     {  
 6     mouth = new Mouth();  
 7     }  
 8     ……  
 9 }  
10   
11 public class Mouth  
12 {  
13     ……  
14 }
 
依赖 -->  关联  -->  聚合 --> 组合  集中关系中类与类之间的耦合关系逐步增强(即一个类发生变化另一个类收到的影响程度逐步增强)。
 
 
参考:
 

猜你喜欢

转载自www.cnblogs.com/mingorun/p/11029640.html