软件工程第七讲教案 下载本文

· 是否提供了有价值的抽象

同样,将每个对象看成部分的前提下对每个潜在的整体考虑同样的问题。 (4)多重结构

多重结构包括一般 /特殊结构、整体/部分结构或两者的各种组合结构。多重结构通常是自底向上的,但有时也可以用实例连接来依次映射。 2.识别主题

在面向对象分析中,主题是一种指导读者或用户研究大型复杂模型的机制。在初步面向对象分析的基础上,主题有助于分解大型项目以便建立工作小组。主题所提供的机制可控制一个用户必须同时考虑的模型数目。同时它还可以给出面向对象分析模型的总体概貌。

主题所依据的原理是整体 /部分关系的扩充。因此,识别主题的主要基础是以一般/特殊结构和整体/部分结构为标志的问题域复杂性。在这种方式下,主题就是用来同整个问题域和系统任务这个总体进行通讯的部分。 真实系统有着大量的对象和结构。比如本书所述的空中交通管制系统就有数以百计的对象。任何方法及其应用是否成功的一个重要标志就是它应该提供好的通信条件以避免分析人员和用户的信息过量。

人类的短期记忆能力似乎限于一次记忆 5~9个对象。这就是著名的7士2原则,它可从不同的方面来解释并得到验证。面向对象分析从两个方面来贯彻这一原则,即控制可见性和指导读者的注意力。

首先通过控制分析人员能见到的层次数目来控制可视性。例如在分析的 5个层次中读者可选择只看对象和结构层,并在该层操作,也可能只考虑对象、结构和属性这三个层次。因而事实上可在任何抽象层次上进行操作。 其次可以对读者进行引导。主题层可以从一个相当高的层次来表示总体模型。该主题层能指导读者观察模型,总结问题域中的主题。 3.实例连接

这里讨论对象之间的另一种关系,实例连接。实例连接又称为链,用于表达对象之间的静态联系。所谓静态联系是指最终可通过对象属性来表示的一个对象对另一个对象的依赖关系,与它形成对照的是对象之间的动态联系,即对象之间在行为(服务)上的依赖关系,这种关系在现实中是大量存在的,并常常与系统责任有关。例如:教师为学生指导毕业论文,人员承担一项工作任务,司机驾驶某辆汽车,一家公司订购另一家公司的产品,两个城市之间有航线连通等等,都属于这种关系。如果这些关系是系统责任要求表达的,或者为实现系统责任目标提供了某些必要的信息,则 OOA应该把它们表示出来,即在以上每两类对象之间建立实例连接。

实例连接是对象实例之间的一种二元关系,在实现之后的关系中它将落实到每一对具有这种关系的对象实例之间,例如具体地指明哪个教师为哪个学生

37

指导毕业论文。但是在 OOA中没有必要作如此具体的表示,只需在具有这种实例连接关系的对象类之间统一地给出这种关系的定义。

1)表示法:在这里只讨论实例连接中的一种最简单的情况。即两类对象之间不带属性的实例连接,其表示法如图7-19(a)所示;在具有实例连接关系的类之间画一条连接线把它们连接起来;连接线的旁边给出表明其意义的连接名(无误解时可以缺省);在连接线的两端用数字标明其多重性。这种多重性有三种情况:一对一的连接、一对多的连接和多对多的连接(如图7-19(c)所示)。(b)和(d)是两个具体的例子。

图 7-19 实例连接的表示及例子

实例连接线每一端所标的数,其方式和整体 /部分结构一样,可以是一个固定的数、一个不定的数、一对固定的或不固定的数,各种方式的涵义也和整体/部分结构一样。线的一端所标的数表明本端的一个对象将和另一端几个对象建立连接,即它是本端对另一端的要求。例如,一个教师可能指导0到m个学生的论文,所以在教师端标为0,m,一个学生的论文只由一个教师指导,所以在学生端标为l。

2)实现方式:分析员在工程实践中应独立于具体的实现条件去建立OOA模型,但是当学习一种OOA方法时,则应适当地了解这种方法提供的OOA概念可以用什么技术来实现。这将有助于分析员更恰当地运用各种OOA概念。 实例连接一般可用对象指针(也可用对象标识)来实现。即在被连接的两个类中选择其中一个,在它的对象中设立一个指针类型的属性,用于指向另一个类中与它有连接关系的对象实例。

这种属性一般只要在一个类的对象中设立就够了(除非系统要求从两个方向都能快速地相互查找和引用)。若连接线的某一端标注的多重性是固定的,且数量较少,则在这一端的对象中设立指针对实现较为有利。例如,在图 7-19(b)的例子中,在学生对象中设立指向教师对象的指针较好,若在教师对象中设指针,则将因数量不定而带来空间浪费或处理上的麻烦。

3)实例连接与整体/部分结构的异同:实例连接与整体/部分结构有某些相似之处,在概念上它们都是对象实例间的一种静态关系,并且都是通过对象的

38

属性来体现的。但是,整体/部分结构中的对象在现实世界中含有明显的“has-a”语义,实例连接中的对象之间则没有。

39