加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

聚合,组合,依赖

发布时间:2020-12-13 19:43:48 所属栏目:百科 来源:网络整理
导读:1. 聚合: 是关联关系的一种特例,体现的是整体与部分拥有的关系,即 has-a 的关系,此时 整体与部分之间可以分离 。 [cpp] view plain copy //学校 class School { }; //学生 class Student { private : School*ps; }; 可以看到 Student 类中包含了一个 Sch

1. 聚合:

是关联关系的一种特例,体现的是整体与部分拥有的关系,即 has-a 的关系,此时整体与部分之间可以分离

[cpp] view plain copy
  1. //学校
  2. classSchool
  3. {
  4. };
  5. //学生
  6. classStudent
  7. {
  8. private:
  9. School*ps;
  10. };

可以看到 Student 类中包含了一个 School 类的对象 指针 ,而且在创建一个Student 类对象时一定要对指针进行初始化,就好像当你上学时一定会有一个学校!这个时候,我们可以说 Student 的每一个对象都有一个School 的属性来标识它是属于哪个学校的!
但是两者之间并不存在“同生共死”的关系,也就是说当这个学生不存在的时候,学校还是有的!

2. 组合:

也是关联关系的一种特例,体现在一种 contain - a 的关系,这种关系比聚合更强,整体与部分是不可分的。

copy

    //眼
  1. classEye
  2. //鼻
  3. classNose
  4. };
  5. //头
  6. classHead
  7. private:
  8. Eyem_eye;
  9. Nosem_nose;
  10. 一个head ,一定会有 eye,nose 等。一旦 head 不存在了,eye nose 也没存在的意义了。即 head 拥有 这些对象类。
    3. 依赖:

    当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。

    依赖关系表现在局部变量方法的参数,以及对静态方法的调用

    copy
      //苹果刀
    1. classKnife
    2. public:
    3. paring();//削东西
    4. }
    5. //苹果
    6. classApple
    7. //学生
    8. classStudent
    9. voidDoSomething();
    10. voidEat(Apple*a){...}
    11. Student::DoSomething()
    12. Knifeke;
    13. ke.paring();
    14. }

    上面, 你不能把 apple 看成 student 的一种属性,不存在包含关系。试想哪个人一生下来就一定要吃苹果呢。

    同样,student 每次做事 doSomething() 也不会只去削东西吧。

    通过一个方法,并让 Apple 类指针做形参(引用也可以),这样子就实现了student 吃苹果的过程。为什么要用指针类型做形参?

    因为 student 吃苹果并不只会影响 student 自己,当然苹果本身也会有一些变化,而这些变化都是通过传递过来的指针来间接调用 Apple 类的方法来实现的!


    转自:http://www.52php.cn/article/p-qsjoutrh-nr.html

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读