前言
本文主要包含两部分。UML语法,类与类之间的6种关系。
它们分别为:依赖,关联,聚合,组合,继承,实现。他们的耦合度依次增强。
一、UML语法
设置权限:+ 代表 public 公共,- 代表 private 私有,# 代表 protected
设置属性:变量名在前,变量类型在后。如-car:Car
设置方法:方法名在前,后跟参数(参数名在前,类型在后),返回值在方法后面。如+driver(car:Car):void
二、依赖(Dependence)
定义
假设A类的变化引起了B类的变化,则说名B类依赖于A类。这种关系非常弱,具有临时性。
项目P依赖xx.1.1.jar包,也可以依赖xx.1.2.jar包。
图例:
UML图,由依赖方指向被依赖的一方。
依赖项可以随着被替换掉,与依赖方的生命周期无关
使用
class Person{ //通过形参方式发生依赖关系 public void drive1(Car car) { car.run(); } //通过局部变量发生依赖关系 public void drive2() { Car car = new Car(); car.run(); } //通过静态变量发生依赖关系 public void drive3() { Car.run(); }}
三、关联(Association)
定义
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。一般是长期性。
图例
在UML类图中,通常将一个类的对象作为另一个类的属性。
通常依赖项是被依赖方的属性。
使用
class Driver { private Car car = new Car(); public void drive() { car.run(); }}class Car { public void run(){}}
四、聚合(Aggregation)
定义
表示的是整体和部分的关系,整体与部分 可以分开。
图例
聚合关系中作为成员变量的类一般使用 set 方法赋值
使用
class Person{ private Car car = null; public void drive() { car.run(); } public void setCar(Car c){ car = c; }}class Car { public void run(){}}
五、组合(Composition)
定义
整体与部分的关系,但是整体与部分不可以分开。部分和整体具有统一的生存期。
图例
关联、聚合、组合只能配合语义,结合上下文才能够判断出来
使用
class Person{ private Hair hair; private Eye eye; public void(Hair hair) { this.hair= hair; } public void(Eye eye) { this.eye= eye; } public void breathe() { }}class Hair{}class Eye{}
六、继承(Generalization)
定义
继承表示类与类 (或者接口与接口) 之间的父子关系。
也称泛化关系,“is-a-kind-of”关系
图例
使用
class Person{ public void eat(){} public void sleep(){}}class Chinese extends Person{ }class American extends Person{ }
七、实现(Implementation)
定义
是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。
耦合度最强,如果实现了接口,就要实现接口中所有的方法。
图例
使用
interface Cloneable { }class ArrayList implements Cloneable{}