java 核心技术-12版 卷Ⅰ- 4.1.4 类之间的关系
类之间最常见的关系有:
依赖(uses-a)
聚合(has-a)
继承(is-a)
依赖(dependence),即 uses-a 关系,是一种最明显的也最一般的关系。例如,Order 类使用了Account 类,因为Order对象需要访问 Account 对象来查看信用状态。但是 Item 类不依赖于 Account类,因为Item 对象不需要考虑客户账户。因此,如果一个类的方法要使用或操作另一个类的对象,我们就说前一个类依赖于后一个类。
应该尽可能减少相互依赖的类。这里的关键是,如果类A 不知道类B 的存在,它就不会关心B的任何变化(这意味着B的改变不会在A中引入bug)。用软件工程的术语来说,就是要尽可能减少类之间的耦合(coupling)。
聚合(aggregation)即has-a 关系,很容易理解,因为这种关系很具体。例如,一个Order 对象包含一些Item对象。包含关系意味着类A 的对象包含类B的对象。
注释:有点方法学家不喜欢聚合这个概念,而更喜欢使用更一般的“关联”关系。从建模的角度看,这是可以理解的。但对于程序员来说,“has-a”关系更加形象。我喜欢使用聚合还有另一个原因:关联的标准记法不是很清楚,请参见4-1:

继承(inheritance),即 is-a 关系,表示一个更特殊的类与一个更一般的类之间的关系。例如,RushOrder 类继承了Order 类。在特殊化的RushOrder 类中包含一些用于优先处理的特殊方法,还提供了一个计算运费的不同方法;而其他的方法,如添加商品、生成账单等都是从Order类继承来的。一般而言,如果类D 扩展了类C,类D会继承类C 的方法,另外还会有一些额外的功能(下一章将详细讨论这个重要的概念)。
很多程序员采用UML(Unified Modeling Language,统一建模语言)绘制类图,来描述类之间的关系。图4-2 就是这样一个例子。类用矩形表示,类之间的关系用带有各种修饰的箭头表示。表4-1给出了UML 中最常用的箭头样式。
