类之间的关系

来源:互联网 发布:一人一首成名曲网络篇 编辑:程序博客网 时间:2024/04/18 14:35

在类之间,最常见的关系有

依赖(“uses-a”)

聚合(“has-a”)

继承(“is-a”)

依赖(dopendence),即“uses-a”关系,是一种最明显的、最常见的关系。例如,Order 类使用Account类是因为Order对象需要访问Account对象查看信用状态。但是Item类不依赖于Account类,这是因为Item对象与客户账户无关。因此,如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。

应该尽可能地将相互依赖的类减至最少。如果类A不知道B的存在,它就不会关心B的任何改变(这意味着B的改变不会导致A产生任何bug)。用软件工程的术语来说,就是让类之间的耦合度最小。

聚合(aggregation),即“has-a”关系,是一种具体且易于理解的关系。例如,一个Order对象包含一些Item对象。聚合关系意味着类A的对象包含类B的对象。

注释:有些方法学家不喜欢聚合这个概念,而更加喜欢使用“关联”。从建模的角度看,这是可以理解的。但对于程序员来说,“has-a”显得更加形象。喜欢使用聚合的另一个理由是关联的标准符号不易区分。请参看表4-1。

表4-1   表达类关系的UML符号
 
继承(inheritance),即“is-a”关系,是一种用于表示特殊与一般关系的。例如,Rush Order类由Order类继承而来。在具有特殊性的RushOrder类中包含了一些用于优先处理的特殊方法,以及一个计算运费的不同方法;而其他的方法,如添加条目、生成账单等等都是从Order类继承来的。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能(下一章将详细讨论继承,其中会用较多的篇幅讲述这个重要的概念)。

很多程序员采用UML(Unified Modeling Language)绘制描述类之间关系的类图。图4-2就是这样一个例子。类用矩形表示,类之间的关系用带有各种修饰的箭头表示。表4-1给出了UML中最常见的箭头样式。

 图4-2   类的示意图

注释:有很多专门用来绘制UML类图的工具。有些开发商提供了一些高性能(当然也是昂贵的)的工具旨在辅助开发过程。其中,有Rational Rose(http://www.ibm.com/ software/awdtools/developer/Rose)和Together(http://www.borland.com/us/products/ together)。还有一种选择是使用开放源代码程序ArgoUML(http://argouml.tigris.org)。在GentleWare(http://gentleware.com)提供了一个商业支持版本。如果只想使用UML最粗浅的内容绘制一个简单的UML类图,就可以试试Violet(http://violet.sourceforge.net)。