UML类图
UML类图:用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系。
类之间的关系主要有:依赖、关联、泛化、实现、聚合、组合。
依赖(使用)
定义:A类中用到了B类,则说A依赖于B idea的PlantUML插件用 …>表示依赖
class A{
B b; //B类作为A类的成员
C returnC(){ //C类对象作为A的方法的返回值
return new C();
}
void play(D d){}; //D类对象作为参数
void test(){
E e = new E(); //A的一个方法体中使用E类(虽然违反了迪米特法则)
e.method();
}
}
UML类图:
class A{
B b
C returnC()
void play(D d)
void test()
}
class B{
}
class C{
}
class D{
}
class E{
}
A..>B
A..>C
A..>D
A..>E
关联
关联关系实际是类和类之间的联系。关联关系是一种特殊的依赖。
关联具有导航性:即单向关系或双向关系。
关系具有多重性:可以一对多,多对多
单向一对一关联:
class Person{
private IDCard idCard;
}
class IDCard{
}
UML类图:
class Person{
IDCard idCard;
}
class IDCard{
}
Person --> IDCard
双向一对一关联:
class Person{
private IDCard idCard;
}
class IDCard{
private Person person;
}
多对多双向关联:
class Teacher{
List<Student> studentList;
}
class Student{
List<Teacher> teacherList;
}
单向一对一关联:
泛化(继承)
泛化关系实际上就是继承关系。泛化是一种特殊的依赖。 <|- - 用于表示继承
class A{
}
class Aa extends A{
}
UML类图:
class A{
}
class Aa{
}
A<|--Aa
实现
一个类实现抽象类或者是接口;实现是依赖关系的一个特例。 用<|…表示实现
interface interf{
}
class Aimpl implements interf{
}
interface interf{
}
class Aimpl{
}
interf <|.. Aimpl
聚合(Aggregation)
聚合关系表示的是整体和部分的关系。整体与部分可以分开。聚合关系是关联关系的特例,因为它具有关联关系的导航性和多重性。 用 --o 表示聚合
class Computer{ //电脑聚合了鼠标和屏幕,而且鼠标和屏幕可以与电脑分开
private Mouse mouse; //鼠标和电脑可以分离
private Moniter moniter; //屏幕和电脑可以分离
public void setMouse(Mouse mouse){
this.mouse = mouse;
}
public void setMoniter(Moniter moniter){
this.moniter = moniter;
}
}
class Mouse{
}
class Moniter{ //屏幕
}
UML类图:
class Computer{
Mouse mouse;
Moniter moniter;
}
class Mouse{
}
class Moniter{
}
Mouse --o Computer
Moniter --o Computer
组合(Composition)
如果整体和部分不可分割,则为组合关系。 用 --* 表示组合关系。
class Computer{
Mouse mouse = new Mouse(); //鼠标和电脑同生同死,当电脑对象被创建,鼠标对象也被创建,当电脑被销毁,鼠标对象也被销毁。
Moniter moniter = new Moniter();
}
class Mouse{
}
class Moniter{ //屏幕
}
UML类图:
class Computer{
Mouse mouse = new Mouse();
Moniter moniter = new Moniter();
}
class Mouse{
}
class Moniter{
}
Mouse --* Computer
Moniter --* Computer
组合和聚合
class Person{
private String IDCard; //Person和IDCard是聚合关系,因为人可以没有身份证
private Head head = new Header(); //Person和Head是组合关系,不可分割,因为人不能没有头
}
注:如果在程序其他地方有写,当Person创建的同时创建IDCard,且销毁Person的同时销毁IDCard,同生共死,则Person和IDCard上升为为组合关系
可参考:
https://www.cnblogs.com/liruilong/p/11506280.html