第7章 面向对象分析与设计
第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 图7.28 聚合 ⑴ 聚合与组合 事实上,如果只有从整体到部分的导航性,那么部分甚至不知道自己是整体的一个部分。这是一种松散的对象之间的关系,如图7.28所示的计算机与打印机的关系。在此关系中,我们看到: ① 一台Coumputer可能连接到零台或多台Printers. ② 任何时候一台Printer连接到零台或是一台Computer。 ③ 许多台Coumputers 可以使用一台给定的Printer. ④ 即使没有所连接的Computers,那台Printer也可以存在。 ⑤ 在客观意义上,这台Printer是独立于这台Computer的。 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 ⑴ 聚合与组合 由此例看出,聚合语义如下: ① 聚合能够不依赖于部分而存在。 ② 部分可以独立于聚合而存在。 ③ 如果有一些部分遗失,聚合会给人不完整的感觉。 ④ 部分的所有权可以由几个聚合来共享。 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 ⑴ 聚合与组合 组合是一种更强形式聚合,也具有类似的语义。它也是整体与部分关系中的一种,二者的关键区别在于,在组合中的部分脱离了整体就不能存在。此外,组合中每个部分属于一个整体,也只能属于一个整体,而在聚合中一个部分可以由几个整体共享。例如鼠标和它的按钮之间的关系以及人和他的手的关系。 组合的语义是:部分在某一时刻仅仅只能属于一个整体;整体惟一地负责处理它的所有部分;倘若对于部分的职责由其他对象来承担的话,组成也就可以放松这些职责;如果一个整体销毁的话,它必须将它所有的部分销毁,或者把负责处理它们的权利交给其他的一些对象。 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 在设计中,在任何时候要将关联精化成聚合或组合关系。而且,分析关联往往以聚合或组合结束。在确定使用聚合或者组合之后,应当按照下面的步骤进行精化: ① 添加多重性和角色名称到关联。 ② 确定关联的哪一端是整体,哪一端是部分。 ③ 考虑整体一端的多重性。如果正好是1,那么可能使用组合;否则就必须使用聚合。 ④ 添加从整体到部分的导航性,即设计关联必须是单向的。 ⑵ 如何精化分析关系 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 图7.29 多对一关联 ⑶ 一对一关联 一对一关联意味着两个类之间的一种非常强的关系,在不违背设计原则下,可以将二者合并成一个类。假如它们不能合并,可以把它们设计成组合关系,或者一个类进一步精化成另一个类的属性。 ⑷ 多对一关联 多对一关联发生在整体一端的多重性大于1,而部分一端的多重性恰好是1的情况。显然,这时部分被许多整体共享,要使用聚合。如图7.29所示。 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 在一对多关联中,在关系的部分一端多重性大于1。为了实现这一关系我们要使用实现语言提供的集合实用类。这时整体一端是组合关系,部分一端要有一个对象汇集。 目前,一些流行的面向对象语言,如C#、Java都提供了泛型的集合支持,可以直接提供使用。 ⑸ 一对多关联 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计 设计关联 普遍使用的OO语言当中没有一种能直接地支持多对多关联,它们是纯分析关系。因此,它们必须具体化成正常的类、聚合、组合或者依赖。 在分析中,可能对所有权和导航性非常模糊,但是在设计中必须进行详细地说明。所以,必须确定多对多关联的哪一端是整体,然后再使用恰当的聚合或者组合。 ⑹ 多对多关联 第7章 面向对象分析与设计 * * 结束 返回 7.2.2 详细设计
原创力文档

文档评论(0)