关联
关联类之间的关系是平等的,这与聚合、组合有不同。其中一个类作为另一个类的成员变量,默认情况下时双向关联的。如果时单向关联,需要由箭头指向被包含方
单向关联
UML表示为:
Java代码表示:
public class Customer{
private Address address;
/*
.......
*/
}
public class Address{
/*
......
*/
}
双向关联
UML表示为:
两个类之间相互包含。但是关系是平等的。
public class Customer{
// 一个顾客购买多个产品
private Product product[];
/*
.......
*/
}
public class Product{
// 购买该产品的顾客有多个
private Customer customer[];
/*
......
*/
}
自关联
自己包含自己。是一个递归的定义。比如搜索树中的结点之间的关系。
UML标识为:
Java代码
public class Node{
private Node subNode[];
/*
.....
*/
}
聚合
表示整体与部分的关系。一般是确定了整体类再去分析整体类的组成结构,最后得出成员类。成员类与整体类的关系不平等,整体类是由成员类聚合而成。注意:成员类离开了整体类可以单独存在!
UML表示:
Java代码:
public class Car{
private Engine engine;
/*
.....
*/
}
public class Engine{
/*
.....
*/
}
引擎离开了发动机可以单独存在。
组合
类之间整体与部分的关系,但是部分与整体有相同的生存周期,部分不能离开整体而单独存在!!
UML表示:
Java代码:
public class Head{
private Mouth mouth;
Head(){
mouth=new Mouth();
}
//......
}
public class Mouth{
//......
}
嘴离开了头没有意义。
依赖
表示一种使用关系,它不是组成或者聚合,而是一个类中使用了另一个类。特定的类改变可能会影响使用该类的类。多数情况下,依赖关系体现在一个类某个方法使用另一个类作为参数,而被使用类不是使用类的成员
UML表示:
Java代码:
public class Driver{
public void drive(Car car){
car.move();
}
// .....
}
public class Car{
public void move(){
// ......
}
//.......
}
在这里,Driver类没有把Car作为成员,很明显,司机不能由车组成。。。。但是,司机必须要使用汽车,因此传入汽车作为参数。
继承
又称为泛化关系。。及不在赘述了。。
UML表示:
Java代码
public class Animal{
}
public class Dog extends Animal{
}
接口与实现关系
一个类实现了一个方法。
UML表示:
Java代码:
public interface Vehicle{
public void move();
}
public class Car implements Vehicle{
public void move(){
// ....
}
// ....
}
public class Ship implements Vehicle{
public void move(){
// ....
}
// ....
}