面向对象编程类间关系_面向对象编程中的类

2020-02-28 其他范文 下载本文

面向对象编程类间关系由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“面向对象编程中的类”。

面向对象的类间关系(关联关系,聚合关系,组合关系)

很多的人都在说聚合和组合关系的区分方法,大部分人都在引用has a和contains a的区别。

我觉得这种说法实在是抄的没意义。接下来,我将用我的理解来解释这几个比较难以区分的关系该怎么判断。

第一、从属关系

关联关系的两个对象几乎没有从属关系。

例如:一个苹果和一碗水。我们不能说一个苹果里有一碗水,也不能说一碗水里有一个苹果。但是在某些特殊情况下,两者是存在关系的。例如,我们可以用水来洗苹果。

Water.wash(Apple)。这就属于关联关系。从代码的角度来说。Apple类不负责创建Water类,但是Apple类可以保存一个Water的指针,在需要的时候调用。

聚合关系和组合关系

这两者都是带有从属关系的,组合要比聚合的关系更加的紧密。

第二、生命周期

关联关系和聚合关系的生命周期没有要求。

组合关系的生命周期是一致的。曾经有这样一个例子经常被提及——Human类和Brain类。很多人认为,生命周期一致,就是大脑死了,人就死了。多么明显的生命周期一致!我觉得这个例子实在是很无聊。仅仅是拿生物的特性作为潜在条件。Human类和Arm类就不是组合关系了呗?因为没有胳膊,人也能活!

个人认为,组合关系就是缺少了部分类,整体类是否完整。换句话说,需要在整体类的构造函数中创建,在整体类的析构函数中销毁。这样的类,属于组合关系。

聚合关系的例子:Company类和Employee类。在Company的构造函数中,没有必要创建Employee类。在Company的使用过程中,可以AddEmployee,可以RemoveEmployee。这样的两个类,就是聚合关系。

组合关系的例子:Computer类和CPU类。在Computer的构造函数中,需要将CPU一起创建出来,否则Computer无法运行。在Computer的使用过程中,不能AddCPU,RemoveCPU(此处不讨论给硬件升级,降级的情况)。这样的两个类,就是组合关系。

当然,一般情况下,不会要求准确的区分到底是组合关系,还是聚合关系。因为组合关系就是关系紧密的聚合关系。现实生活中也没有绝对的所谓的“组合关系”。比如说在未来给一个人移植大脑,难道不可行么?没有大脑的人一定就会死么?总会有各种可能性来破“组合关系”。

如果你有什么想法和看法想跟我交流,可以给我的邮箱发送邮件。

baidu_hmrs@163.com

《面向对象编程类间关系.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
面向对象编程类间关系
点击下载文档
相关专题 面向对象编程中的类 面向对象 关系 面向对象编程中的类 面向对象 关系
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文