欢迎光临散文网 会员登陆 & 注册

设计原则(二)——类与类之间的关系

2023-07-21 11:29 作者:香草味的lollipop  | 我要投稿

类与类之间的六种关系:

泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)、依赖(Dependency)

UML中常用符号含义:

        + public

        - private

        # protected

一、泛化(继承)

        继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,C#中通过:来标识继承。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。

        UML类图表示

        Animal是Tiger的泛化,Tiger是Animal的特化

二、实现

        实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,C#中使用:来标识,在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。

        UML类图表示

类与接口的关系,表示类实现了接口


三、依赖

        类A的实现需要引用类B,这就是依赖,这种使用关系是具有偶然性的、临时性的、非常弱的,而B类的变化会影响到A,则A与B存在依赖关系,依赖关系是弱的关联关系。例如:人依赖计算机去做软件开发。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示

        UML类图表示

依赖是一种使用关系

四、关联

        关联体现的是两个类之间语义级别的一种 强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

        关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示

        UML类图表示

关联是一种拥有关系,它使一个类知道另一个类的属性或方法


五、聚合

        聚合是关联关系的一种特例,它体现的是整体与部分的关系,即 has-a 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。此时整体与部分之间是可分离的,即没有了整体,局部也可单独存在。比如计算机与CPU、公司与员工的关系等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,聚合关系以空心菱形加实线表示(菱形指向整体)

        UML类图表示

        

个体有独立的生命周期,聚合是把个体对象的指针(引用)作为整体类的属性,弱拥有关系

六、组合

        组合也是关联关系的一种特例,这种关系比聚合更强,是一种contains-a的关系,部分不能脱离整体存在。这是一种比聚合更强的关系,所以也称为强聚合。

        整体的生命周期即为组成部分的生命周期。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,组合关系以实心菱形加实线表示

        UML类图表示

个体/部分 不存在独立的生命周期,个体/部分的生命周期,与整体的生命周期保持一致,强拥有关系



全图 看你掌握了没~

————————————————

参考文章:https://blog.csdn.net/weixin_43819566/article/details/111795638



设计原则(二)——类与类之间的关系的评论 (共 条)

分享到微博请遵守国家法律