熟练运用UML是今年给自己在技术上的一个目标--希望达到的目标是在讨论任何技术业务问题时,第一时间想到、用到UML的方式和大家沟通和交流。
以前有过学习UML的经历,也在项目中断断续续采用一些,可能是现在用的越来越少,很多符号都变得越来越生疏,或许本来就没有学好,看到一些牛人随时使用UML的方式进行沟通,还是挺羡慕的。与其说回顾,不如说重新学习来的更加实际些。
静态视图的类就不再学习了,从关系开始吧...
对于UML的关系很多地方都定义四类关系:依赖、泛化、关联、实现。有些地方可能会更多些,于是去参考了权威之作《UML参考手册》。先附张官方的图看看
- 关联(association): 系统中对象或实例之间的离散连接。这次放弃使用rose,改用ArgoUML来画UML图
public class App {
public AppCategory myAppCategory;
}
public class AppCategory {
public Vector myApp;
}
关联中有两种特殊的关联是聚合(Aggregation) 和合成(Composition)
区别 | 聚合 | 合成 |
含义 | has-a | contains-a |
整体与部分关系 | 比较弱(弱关联) | (强关联) |
生存关系 | 部分事物的对象与代表聚合事物的对象的生存期无关, 一旦删除了聚合对象不一定就删除了 代表部分事物的对象 | 一旦删除了组合对象, 同时也就删除了代表部分事物的对象 |
???关联类
- 依赖(Dependency ):是一种使用关系,说明一个事物使用另一个事物的信息和服务。只有在使用时,他们才存在关系。例如生产零件的机器和零件,机器负责构造零件对象。再例如充电电池和充电器,充电电池通过充电器来充电。再例如自行车Bicycle和打气筒Pump,自行车通过打气筒来充气。下图为Bicycle类与Pump类的类框图。
public class Bicycle {
private void expand(Pump pump) {
pump.blow();
}
}
public class Pump {
public void blow() {}
}
- 泛化(generalization) :is-a-kind-of ,一般事物和较为特殊事物的的种类之间的关系,在Java中描述为“extends”。
- 实现(realization ): 描述接口和实现类或构件之间的关系。Java中描述为"Implement"。