聚合,组合,依赖

原创 2012年03月30日 17:25:58

1. 聚合:

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

//学校
class School
{
};

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

2. 组合:

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

//眼
class Eye
{
};

//鼻
class Nose
{
};

//头
class Head
{
private:
  Eye  m_eye;
  Nose m_nose;
};
一个head ,一定会有 eye,nose 等。一旦 head 不存在了,eye nose 也没存在的意义了。即 head 拥有这些对象类。

3. 依赖:

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

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

//苹果刀
class Knife
{
public:
  paring(); //削东西
}

//苹果
class Apple
{
};

//学生
class Student
{
  void DoSomething();
  void Eat(Apple* a){...}
};

Student::DoSomething()
{
  Knife ke;
  ke.paring();
}

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

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

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

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


UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完...

UML类关系-依赖,关联,聚合和组合

  • 2009年05月28日 23:29
  • 61KB
  • 下载

谈一谈自己对依赖、关联、聚合和组合之间区别的理解

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。他们在编程语言中的体现却是基本相同的,但...
  • zhengzhb
  • zhengzhb
  • 2012年02月07日 15:42
  • 24685

面向对象之依赖、关联、聚合、组合

如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。  如果你确定两件对象之间是has-a的关系,那么此时你应该...
  • t_eel
  • t_eel
  • 2012年09月08日 17:29
  • 2324

谈一谈自己对依赖、关联、聚合和组合之间区别的理解

引用:http://blog.csdn.net/zhengzhb/article/details/7190158 在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:聚合,组合,依赖
举报原因:
原因补充:

(最多只允许输入30个字)