UML类图基础-依赖,关联,泛化,聚合,组合,实现
转载自:https://www.cnblogs.com/mingorun/p/11029640.html
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 }
二 关联:
1 // 双向关联 1 public class Team { 2 2 private String name; 3 3 private String address; 4 4 5 5 private Player[] players; 6 6 } 7 7 8 8 public class Player { 9 9 private String name; 10 10 private Team team; 11 11 12 12 }
1 // 单向关联 1 public class Customer 2 2 { 3 3 private Address address; 4 4 …… 5 5 } 6 6 7 7 public class Address 8 8 { 9 9 …… 10 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;//创建Car对象时,可以传入一个engine对象 7 } 8 9 public void setEngine(Engine 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();//在创建一个Head对象同时也去创建一个Mouth对象,同生同死 7 } 8 …… 9 } 10 11 public class Mouth 12 { 13 …… 14 }
依赖--》关联--》聚合--》组合 集中关系中类 与类之间的耦合关系逐步增强(即一个类发生变化另一个类收到的影响程度逐步增强)