以前也看过有关UML的文章,但始终对类间的关系云里雾里,当时还能理解,但过一段时间就没有什么印象了,感性的认识是无效的,特别对那些想真正提高自己各方面能力的程序员更是如此,记忆是需要不断巩固的,最近一直在学习UML方面的知识,总算积累了些这方面的理性认识,谢谢博客强化一下了(其中斜体部分是自我理解,欢迎指正!)。
类间关系从空间上来看分为纵向和横向2种关系
- 纵向关系
纵向关系若无特殊说明就是指一般化关系(Generalization )包括:
类间的继承关系
接口间的继承关系
类对接口的实现关系
2. 横向关系
横向关系较为微妙,按照UML的建议大体上可以分为四种:
依赖(Dependency)
应用场景:类Calculator的实例作为类Employee的方法的参数使用,类Employee依赖于类Calculator
关联(Association)
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
应用场景:类TimeCard的实例作为类Employee的一个字段,并在类Employee中存在一系列操作这个字段的方法,实际上是类Employee对类TimeCard的封装
聚合(Aggregation)
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,
强调的是整体与部分之间的关系。
应用场景:类EmpType的实例作为类Employee的一个字段,并在类Employee中存在一系列操作这个字段的方法,实际上是类Employee对类EmpType的封装,类EmpType是类Employee的一部分
组合(Composition)
关系当中的最强版本,是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
应用场景:在代码中实现和聚合一样,但2个类的关系最强,应用不是很多。