UML 类与类之间的关系

类与类之间存在六种关系

继承(Generalization)

实现(Realization)

依赖(Dependency)

关联(Association)

聚合(Aggregation Association)

组合(Composition Association)

根据语义,分为三类:

  • 泛化(Generalization)
    • 继承
    • 实现
  • 依赖(Dependency)
  • 关联(Association)
    • 关联(Association)
    • 聚合(Aggregation Association)
    • 组合(Composition Association)

语义:

关系 语义
泛化 is a/an
依赖 use a/an
关联 has a/an
聚合 has a/an
组合 contains a/an

比较

依赖和关联

从语义角度看,依赖是使用(use a/an),是临时的;关联是从属(has a/an),是长期的。

从代码角度看,依赖是临时的,通常采用局部变量、方法参数的形式;关联需要长期持有,通常采用实例变量的形式。

从使用者的角度看,依赖使用局部变量、方法参数保存对象,外部无法访问所依赖的对象;关联使用实例变量保存对象,可以通过访问实例变量来访问所关联的对象。

关系 如何保存对象 导航性(Navigable)
依赖 局部变量、方法参数 ×
关联 实例变量

注:这里的关联包括关联、聚合和组合。

关联和聚合

关联和聚合在代码层面是一致的,只能从语义上来区分。关联的两个对象之间是平等的,如我和我的朋友;而聚合则是整体和局部的关系,如公司和公司的员工。

聚合和组合

从语义角度看,聚合是(has a/an),多个整体可以聚合同一个对象;组合是在(has a/an)的基础上,(contains a/an),多个整体不能组合同一个对象。

从生命周期看,聚合对象的生命周期与整体无关,整体消亡后聚合对象能够独立存活;组合对象的生命周期与整体一致,整体消亡时组合对象也应一起消亡。

从代码角度看,聚合对象依赖注入,在析构中不销毁;组合对象由自己创建,在析构中需要销毁。

关系 不同整体能否引用同一个对象 整体消亡后,引用对象是否消亡 引用对象的来源
聚合 × 依赖注入
组合 × 内部创建

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 不知大家有没有这样的想法对于陌生的交谈很想知道他(她)们到底说了什么,很想凑个耳朵去听听看他们一张一合的口型以及各...
    Light晨阅读 247评论 0 0
  • 雪舞霓虹乱影迷, 凌花扑面乐无羁。 天公散下鹅毛柬, 邀我仙宫殿上骑。
    简之宁阅读 332评论 0 10
  • 走过2016年,53周,53篇周记,再回头看,节选部分句子。没有花团锦簇,也没有灯彩佳话,但那一夜,我也曾梦见百万...
    大嘴堂阅读 920评论 3 8