日期:2014-05-20  浏览次数:20716 次

求教基础问题:类之间的关系:依赖(uses-a)和聚合(has-a)的区别. 谢谢~~
如题,这两种关系从业务逻辑上的分别比较容易理解,我想知道的是从代码层面上可以表现出两者的区别吗?请代码示例

请各位不吝赐教,十分感谢!

------解决方案--------------------
代码就不写了,简单举例下
uses-a强调是一种引用关系,比如常见的UserManager引用了一个UserDAO来进行用户登录验证

has-a,组合(或者按《设计模式》里面的说法叫聚合),强调是一个局部和整体的关系,比如一辆car由引擎、四轮、底盘、电子设备等组合而成。
------解决方案--------------------
哈哈,这样的代码 我也没做过

但是我觉得代码上应该没有什么区别。

还是上面的例子

单独的实例化一个车轮是没有意义的
------解决方案--------------------
学习……
------解决方案--------------------
依赖,顾名思义就是一个东西要靠另一个才行
聚合,是一种整体和局部的关系
------解决方案--------------------
依赖

class B extend A{}

聚合

class B{
A a;
... ...
}
------解决方案--------------------
xiao7cn(o(∩_∩)o... 哈哈!兄的 "依赖 "其实是泛化.

1. 聚合分聚集和组合:
Class A;
class B;

class C
{
private A a;//该成员不能为空(NULL/null),则为组合
private B b;//该成员可以为空(NULL/null),则为聚集
}

上述内容中, A,B的实例 1:1 地聚合于 C.

2. 依赖
class D
{
// D 与 A, B, C 没有聚集,泛化关系

//下面这个成员函数充分说明 D 和 A/B/C 的依赖关系: ABC 既不是 D 的泛化和具化,也不是D的任何成员,但 D 用到了它们
A textFunction( B b)
{
C = new C;
.....
}
}
------解决方案--------------------
这两个从代码上理解是不太容易的, java编程思想里的is a 和is like a也是做了java很长一段时间才理解的.楼主不用急代码写多了代码看多了,自然就会理解.
不过记住能用合成尽量用合成(虽然不如继承用得顺手在刚开始的时候),继承只是在合成实在不好用的情况下才用(一般用实现接口).