关联关系(Association)
概念
关联关系实际上就是类与类之间的联系,是依赖关系的特例
单向一对一关系
代码
public class Person { private IDCard idCard; } public class IDCard{}
对应的类图
双向一对一关系
代码
public class Person { private IDCard idCard; } public class IDCard{ private Person person; }
对应的类图
小结
关联关系就比较容易,强调的是类与类之间的联系,符号用直线表示
聚合关系(Aggregation)
概念
聚合关系表示的是整体和部分的关系,整体与部分可以分开
代码
假设一台电脑由键盘,显示器,鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的。
public class Computer { private Mouse mouse; //鼠标可以和computer分离 private Monitor monitor;//显示器可以和Computer分离 public void setMouse(Mouse mouse) { this.mouse = mouse; } public void setMonitor(Monitor monitor) { this.monitor = monitor; } } public class Mouse{} public class Monitor{}
对应的类图
小结
聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
组合关系(Composition)
概念
组合关系是整体与部分的关系,但是整体与部分不可以分开。
代码
根据现实,一个人不能没有脑袋,但是可以没有身份证(可以补办)
public class Person { private Head head = new Head(); private IDCard idCard; } public class IDCard{} public class Head{}
注意:如果在程序实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除,那么IDCard和Person就是组合关系了。
对应的类图
小结
如果把private IDCard idCard;改为 private IDCard idCard = new IDCard();表示IDCard与Person不可分开,是组合关系。
总结
类图不难,整理一下大纲: