1、 第5章 面向对象软件工程 内容提要内容提要5.1 面向对象软件工程方法简介5.2 面向对象分析5.3 面向对象的设计5.4 统一建模语言UML 5.5 用例分析实例5.6 软件复用技术面向对象软件工程面向对象软件工程 在软件的开发和设计中,对一个系统的认识是一个逐在软件的开发和设计中,对一个系统的认识是一个逐步完善的过程,是在积累了以往知识的基础上,多次迭代步完善的过程,是在积累了以往知识的基础上,多次迭代后形成的。在这种逐步深化的过程中,有从一般到特殊的后形成的。在这种逐步深化的过程中,有从一般到特殊的演绎和从特殊到一般的归纳。传统的用于分析、设计和实演绎和从特殊到一般的归纳。传统的用于分
2、析、设计和实现一个系统的过程和方法大部分是瀑布型的,即后一步的现一个系统的过程和方法大部分是瀑布型的,即后一步的工作依赖于前一步工作的完成。因此,越接近系统设计的工作依赖于前一步工作的完成。因此,越接近系统设计的后期,对系统设计的前期结果要做修改就会越困难。而一后期,对系统设计的前期结果要做修改就会越困难。而一般地,只有在系统设计的后期才会发现前期工作所形成的般地,只有在系统设计的后期才会发现前期工作所形成的一些差错。所以当系统越大,问题越复杂时,这种因对系一些差错。所以当系统越大,问题越复杂时,这种因对系统的认识过程和对系统的设计或实现过程不一致而引起的统的认识过程和对系统的设计或实现过程不
3、一致而引起的困扰就会越大。困扰就会越大。面向对象软件工程面向对象软件工程 为了解决这个问题,就应使分析、设计和实现一个系为了解决这个问题,就应使分析、设计和实现一个系统的方法尽可能一致,使描述问题和解决问题的空间尽可统的方法尽可能一致,使描述问题和解决问题的空间尽可能一致,使分析、设计和实现系统的方法学原理与认识客能一致,使分析、设计和实现系统的方法学原理与认识客观世界的过程尽可能一致。这就是面向对象方法学的出发观世界的过程尽可能一致。这就是面向对象方法学的出发点和所追求的基本原则。点和所追求的基本原则。.1面向对象软件工程方法简介 面向对象软件工程方法简介 5.1 面向对象软件工程方法简介面
4、向对象软件工程方法简介 5.1.1 面向对象方法概述面向对象方法概述 近几年,面向对象方法已经深入到计算机科学技术的近几年,面向对象方法已经深入到计算机科学技术的许多领域,应用相当广泛,因此很难清晰地描述它的作用许多领域,应用相当广泛,因此很难清晰地描述它的作用范围。范围。20世纪世纪80年代初期,人们认为,面向对象是一种新年代初期,人们认为,面向对象是一种新兴的程序设计方法,其基本思想是使用对象、类、继承、兴的程序设计方法,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。自封装、消息等基本概念来进行程序设计。自20世纪世纪80年代年代后期以来,面向对象方法已经深入到计算机
5、软件领域的几后期以来,面向对象方法已经深入到计算机软件领域的几乎所有分支,远远超过了程序设计语言和编程技术的范畴。乎所有分支,远远超过了程序设计语言和编程技术的范畴。同时,也深入到了计算机软件设计以外的一些领域。同时,也深入到了计算机软件设计以外的一些领域。面向对象软件工程方法简介 但从目前看,面向对象方法最主要的应用范围仍然是但从目前看,面向对象方法最主要的应用范围仍然是软件开发,它在软件生命周期的各个阶段(包括分析、设软件开发,它在软件生命周期的各个阶段(包括分析、设计、编程、测试与维护)以及它所涉及的各个领域(如人计、编程、测试与维护)以及它所涉及的各个领域(如人机界面、数据库、软件复用
6、、形式化软件方法和机界面、数据库、软件复用、形式化软件方法和CASE工具工具等),都已经形成或正在形成面向对象的理论与技术体系。等),都已经形成或正在形成面向对象的理论与技术体系。面向对象不仅是软件开发的技术与策略,而且是一整面向对象不仅是软件开发的技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,以什么观点套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解的工具,是一种运用对象、类、继来研究问题并进行求解的工具,是一种运用对象、类、继承、封装、聚合、消息传送和多态性等概念来构造系统的承、封装、聚合、消息传送和多态性等概念来构造系统的软件开发方法。软件开发方法。
7、面向对象软件工程方法简介 面向对象方法的基本思想是面向对象方法的基本思想是:从现实世界中客观存在的从现实世界中客观存在的事物出发来构造软件系统,并在系统构建中尽可能运用人事物出发来构造软件系统,并在系统构建中尽可能运用人类的自然思维方式。面向对象方法的主要特点如下类的自然思维方式。面向对象方法的主要特点如下:从客观存在的事物出发来构造软件系统,用对象作为从客观存在的事物出发来构造软件系统,用对象作为这些事物的抽象表示,并以此作为系统的基本构成单位。这些事物的抽象表示,并以此作为系统的基本构成单位。事物的静态特征(一些可用数据表示的特征)用对象事物的静态特征(一些可用数据表示的特征)用对象的属性
8、来表示,动态特征(即事物的行为)用对象的服务的属性来表示,动态特征(即事物的行为)用对象的服务(或操作)来表示。(或操作)来表示。对象的属性和服务结合为一个独立的实体,对外屏蔽对象的属性和服务结合为一个独立的实体,对外屏蔽其内部细节,称为封装。其内部细节,称为封装。把具有相同属性和相同服务的对象归为一类,类是这把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。些对象的抽象描述,每个对象是它的类的一个实例。面向对象软件工程方法简介 在不同程度上运用抽象的原则,可以得到较一般的类在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的
9、属性和服务。和较特殊的类。特殊类继承一般类的属性和服务。对象之间通过消息进行通信,实现对象之间的动态关对象之间通过消息进行通信,实现对象之间的动态关系。通过关联表达对象之间的静态关系。系。通过关联表达对象之间的静态关系。从以上几点可以看出,在面向对象开发的系统中,以从以上几点可以看出,在面向对象开发的系统中,以类的形式描述并通过对类的引用而创建的对象是系统的基类的形式描述并通过对类的引用而创建的对象是系统的基本构成单位。这些对象对应着问题域的各个事物,它们的本构成单位。这些对象对应着问题域的各个事物,它们的属性刻画了事物的静态特征和动态特征。对象之间的继承、属性刻画了事物的静态特征和动态特征。
10、对象之间的继承、聚合、消息和关联如实地反映了问题域事物之间存在的各聚合、消息和关联如实地反映了问题域事物之间存在的各种关系。因此,面向对象方法可描述为种关系。因此,面向对象方法可描述为:一种使用对象(其属性和操作封装在一起)、消息传一种使用对象(其属性和操作封装在一起)、消息传送、类、继承、多态和动态绑定等概念来开发问题域模型送、类、继承、多态和动态绑定等概念来开发问题域模型之间关系的范例。之间关系的范例。一种基于对象、类、实例和继承等概念的技术。用对一种基于对象、类、实例和继承等概念的技术。用对象作为建模的原子。象作为建模的原子。面向对象软件工程方法简介 5.1.2 面向对象软件开发方法面向
11、对象软件开发方法 自计算机诞生以来,程序员一直在内存和外存容量苛自计算机诞生以来,程序员一直在内存和外存容量苛刻的工作环境中劳作,编写出许多在各个领域中发挥了巨刻的工作环境中劳作,编写出许多在各个领域中发挥了巨大作用的工程软件。他们用有限的计算机资源编制出了许大作用的工程软件。他们用有限的计算机资源编制出了许多杰出的应用软件。在这些软件中,除了必要的功能模块多杰出的应用软件。在这些软件中,除了必要的功能模块外,程序中没有任何装饰性的可有可无的东西。外,程序中没有任何装饰性的可有可无的东西。后来,随着高性能计算机的普及和应用,内存、外存后来,随着高性能计算机的普及和应用,内存、外存容量的不断增加
12、,编程发展到了一个较高层次。程序员发容量的不断增加,编程发展到了一个较高层次。程序员发现,传统的结构化设计方法存在着下列问题现,传统的结构化设计方法存在着下列问题:它不允许最后它不允许最后完成的应用程序具有太大的灵活性,而面向对象技术能够完成的应用程序具有太大的灵活性,而面向对象技术能够提供所需的灵活性。结构化技术和面向对象技术的比较提供所需的灵活性。结构化技术和面向对象技术的比较:在面向对象技术出现以前,一切程序都是围绕着结构在面向对象技术出现以前,一切程序都是围绕着结构化体系模型设计的。这种模型背后的推动力就是化体系模型设计的。这种模型背后的推动力就是“过程过程”。面向对象软件工程方法简介
13、 图图5.1描述了一个简化了的订单处理过程。描述了一个简化了的订单处理过程。图图5.1 订单处理过程订单处理过程 从图从图5.1中可以看出,在订单处理中可以看出,在订单处理中,并非每一个过程都要与数据库交互。但通过使用数据中,并非每一个过程都要与数据库交互。但通过使用数据库,每个持有密码的过程都可以跟踪客户的订单。通常,库,每个持有密码的过程都可以跟踪客户的订单。通常,与信息仓库的交互接口会提供一整套具有普遍意义的信息与信息仓库的交互接口会提供一整套具有普遍意义的信息处理方法,例如设置一些事情(访问信息的密码或某些属处理方法,例如设置一些事情(访问信息的密码或某些属性值)。如果再考虑其他一些比
14、较特别的问题,最后的接性值)。如果再考虑其他一些比较特别的问题,最后的接口程序可能比应用程序还大得多。口程序可能比应用程序还大得多。图5.1订单处理过程面向对象软件工程方法简介 面向对象技术的驱动力是信息面向对象技术的驱动力是信息它在系统中到处它在系统中到处“流动流动”。相关的信息都被。相关的信息都被“绑绑”为一为一“束束”,每个新的,每个新的订单都是系统中的一订单都是系统中的一“束束”新信息,就像在数据库表中增新信息,就像在数据库表中增加一行记录一样。加一行记录一样。另外一个变化是,尽管不像外部过程那样容易地直接另外一个变化是,尽管不像外部过程那样容易地直接处理信息本身,但每一处理信息本身,
15、但每一“束束”信息都提供一套接口访问的信息都提供一套接口访问的方法,以允许其他方法,以允许其他“束束”按照可以控制的方式来处理信息。按照可以控制的方式来处理信息。就如同数据库本身具有处理信息的方法一样,知道如何处就如同数据库本身具有处理信息的方法一样,知道如何处理信息。理信息。至此,我们已有了至此,我们已有了“对象对象”的概念,即信息束,它包的概念,即信息束,它包含处理信息的方法。含处理信息的方法。面向对象软件工程方法简介 结构化设计与面向对象设计的另一个不同之处是结构化设计与面向对象设计的另一个不同之处是:如果如果一个不同类型的订单进入系统,面向对象系统更能适应这一个不同类型的订单进入系统,
16、面向对象系统更能适应这种变化。系统只需要从现有订单中派生出一个新订单,改种变化。系统只需要从现有订单中派生出一个新订单,改变其中的数量和类型数据,并根据情况采用适当的方法。变其中的数量和类型数据,并根据情况采用适当的方法。这就是面向对象系统的运作方式。这就是面向对象系统的运作方式。正如我们看到的一样,这就是一系列在系统中正如我们看到的一样,这就是一系列在系统中“流动流动”的对象。在这里,过程的概念用对象的状态来标识的对象。在这里,过程的概念用对象的状态来标识即原来那些被描述为即原来那些被描述为“核对核对”的过程,现在被描述为的过程,现在被描述为“一一个正在根据自己的信息执行核对方法的对象个正在
17、根据自己的信息执行核对方法的对象”。旧的过程。旧的过程的完成标志着一个新的过程的开始。在面向对象系统中,的完成标志着一个新的过程的开始。在面向对象系统中,一个对象本身可以标识并改变自己的状态,如从一个对象本身可以标识并改变自己的状态,如从“正在核正在核对的对的”到到“核对完成的核对完成的”。面向对象软件工程方法简介 使用面向对象技术,还具有其他一些优势,如源代码使用面向对象技术,还具有其他一些优势,如源代码的复用、可维护性、创建已有的对象和使用纯粹的面向对的复用、可维护性、创建已有的对象和使用纯粹的面向对象的语言等。象的语言等。5.1.3 面向对象开发方法中的基本概念面向对象开发方法中的基本概
18、念 1.对象对象 对象是一个真实的或抽象的元素项,它包含信息(即对象是一个真实的或抽象的元素项,它包含信息(即描述对象的属性)和处理对象的方法。对象既可以表示有描述对象的属性)和处理对象的方法。对象既可以表示有形实体(例如,电视机、汽车和房屋等),也可以表示抽形实体(例如,电视机、汽车和房屋等),也可以表示抽象的规则、计划和事件(例如,产品性能、合同和演出象的规则、计划和事件(例如,产品性能、合同和演出等)。根据以上的说明,对象的定义应该是等)。根据以上的说明,对象的定义应该是:对象是某个事对象是某个事物在系统中需要保存的信息和相关的操作物在系统中需要保存的信息和相关的操作;它是一组属性和它是
19、一组属性和有权对这些属性进行操作的一组服务的封装体。有权对这些属性进行操作的一组服务的封装体。面向对象软件工程方法简介 对象的属性与方法对象的属性与方法:(1)属性)属性 属性是对象的一个特征并在系统的具体环境中有其对属性是对象的一个特征并在系统的具体环境中有其对应的数值。例如,某人的性别属性可以是应的数值。例如,某人的性别属性可以是Male或或Female。再比如汽车这一对象,它的属性可以是制造商、型号、再比如汽车这一对象,它的属性可以是制造商、型号、车龄、颜色和发动机规格等。车龄、颜色和发动机规格等。(2)方法)方法 方法(方法(Method)是一个对象允许其他对象与之交互的)是一个对象允
20、许其他对象与之交互的方式。一个对象定义的方法被称为方式。一个对象定义的方法被称为“接口接口”。接口用于规。接口用于规定如下几个方面的内容定如下几个方面的内容:对象支持什么样的方法。方法是如对象支持什么样的方法。方法是如何被使用的。还需要哪些附加信息。预计会发生什么事件。何被使用的。还需要哪些附加信息。预计会发生什么事件。返回什么结果给调用者(如果有的话)。返回什么结果给调用者(如果有的话)。面向对象软件工程方法简介 对象之间通过发送消息进行通信,当发送一条消息时,对象之间通过发送消息进行通信,当发送一条消息时,该消息中至少应包含消息名称(即对象名该消息中至少应包含消息名称(即对象名.方法名)以
21、及接方法名)以及接收消息的对象名,一般还应有参数说明。当一个对象接收收消息的对象名,一般还应有参数说明。当一个对象接收到一条消息时,消息中所包含的方法决定该对象如何动作。到一条消息时,消息中所包含的方法决定该对象如何动作。2.类类 人类在认识客观世界时经常采用的思维方式是把众多人类在认识客观世界时经常采用的思维方式是把众多的事物归纳、划分成一些类。具体来说是依据抽象的原则的事物归纳、划分成一些类。具体来说是依据抽象的原则进行分类,即忽略事物的非本质特征,只注意那些与当前进行分类,即忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同目标有关的本质特征,从而找
22、出事物的共性,把具有共同本质特征的事物划分为一类,得出一个抽象的概念。本质特征的事物划分为一类,得出一个抽象的概念。面向对象软件工程方法简介 例如例如:张某某、李四和王三等都是中国人,虽说每个人张某某、李四和王三等都是中国人,虽说每个人职业、性格、爱好和特长等各有不同,但他们的基本特征职业、性格、爱好和特长等各有不同,但他们的基本特征是相似的,都是黄皮肤、黑头发、黑眼睛,于是人们把他是相似的,都是黄皮肤、黑头发、黑眼睛,于是人们把他们统称为们统称为“中国人中国人”。人类习惯于把拥有相似特征的事物。人类习惯于把拥有相似特征的事物归类,分类是人类认识客观世界的基本方法。在面向对象归类,分类是人类认
23、识客观世界的基本方法。在面向对象的方法中,类(的方法中,类(class)的定义是)的定义是:具有相同属性和服务的一具有相同属性和服务的一组对象的集合。它为属于该组的全部对象提供了统一的抽组对象的集合。它为属于该组的全部对象提供了统一的抽象描述,包括属性和服务两个主要部分。象描述,包括属性和服务两个主要部分。图5.3 类与实例面向对象软件工程方法简介 类与对象的关系如同一个模具与用这个模具铸造出来类与对象的关系如同一个模具与用这个模具铸造出来的铸件的关系。如图的铸件的关系。如图5.3所示,给出了属于该类的一个实例所示,给出了属于该类的一个实例(Instance),也有人把类称作对象的模板),也有
24、人把类称作对象的模板(Template)。对象与类的区别对象与类的区别:类和该类的对象之间的关系是示例(类和该类的对象之间的关系是示例(Instantiate)关)关系。而关系被定义为系。而关系被定义为“建模元素之间的联系建模元素之间的联系”。在。在UML(统一建模语言)中存在很多类型的关系,我们将在以后(统一建模语言)中存在很多类型的关系,我们将在以后研究它们。对象和类之间的示例关系如图研究它们。对象和类之间的示例关系如图5.4所示。所示。面向对象软件工程方法简介图5.4 对象和类的示例关系 面向对象软件工程方法简介 3.继承继承 面向对象方法中的一个重要概念是继承。继承描述的面向对象方法中
25、的一个重要概念是继承。继承描述的是类之间的一种相互关系。一般的讲,当类是类之间的一种相互关系。一般的讲,当类a继承类继承类b时,时,类类a的对象便具有了类的对象便具有了类b的一切数据属性和操作功能。此时,的一切数据属性和操作功能。此时,称类称类b为基类、父类或超类为基类、父类或超类;而类而类a为类为类b的派生类或子类。的派生类或子类。继承所具有的作用是继承所具有的作用是:一方面可以减少代码冗余一方面可以减少代码冗余;另一方面可另一方面可以减少类之间的接口和界面。以减少类之间的接口和界面。从继承的源头来划分,继承可以分为单继承和多重继从继承的源头来划分,继承可以分为单继承和多重继承。所谓单继承是
26、指一个派生类只能有一个直接基类。例承。所谓单继承是指一个派生类只能有一个直接基类。例如一个人只能继承一个人的财产。所谓多重继承是指一个如一个人只能继承一个人的财产。所谓多重继承是指一个派生类可以有两个或两个以上的直接基类。例如一个人可派生类可以有两个或两个以上的直接基类。例如一个人可以同时继承多个人的财产。以同时继承多个人的财产。面向对象软件工程方法简介 4.封装封装 封装是信息隐蔽技术和面向对象方法的一个重要原则。封装是信息隐蔽技术和面向对象方法的一个重要原则。它有两个涵义它有两个涵义:把对象的全部属性和全部服务结合在一起,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位形成
27、一个不可分割的独立单位;尽可能隐蔽对象的内部细尽可能隐蔽对象的内部细节,只保留有限的对外接口使之与外界发生联系。节,只保留有限的对外接口使之与外界发生联系。封装的信息隐蔽作用反映了事物的相对独立性。封装封装的信息隐蔽作用反映了事物的相对独立性。封装的原则在软件上的反映是的原则在软件上的反映是:要求对象以外的部分不能随意存要求对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误取对象的内部数据(属性),从而有效地避免了外部错误对它的对它的“交叉感染交叉感染”,使软件错误能够局部化。,使软件错误能够局部化。封装的定义封装的定义:封装就是把对象的属性和服务结合成为一封装就是把对
28、象的属性和服务结合成为一个独立的系统单位,并尽可能隐蔽对象的内部细节。个独立的系统单位,并尽可能隐蔽对象的内部细节。面向对象软件工程方法简介 对象的封装概念可以和集成电路芯片作一类比。一块对象的封装概念可以和集成电路芯片作一类比。一块集成芯片由陶瓷封装起来,其内部电路是不可见的,也是集成芯片由陶瓷封装起来,其内部电路是不可见的,也是使用者不关心的。芯片的使用者只关心芯片引脚的个数、使用者不关心的。芯片的使用者只关心芯片引脚的个数、引脚的电气参数以及引脚提供的功能,通过这些引脚,硬引脚的电气参数以及引脚提供的功能,通过这些引脚,硬件工程师就能对这个芯片有一个全面的了解。而软件工程件工程师就能对这
29、个芯片有一个全面的了解。而软件工程师也是通过使用类来达到这个目的的。师也是通过使用类来达到这个目的的。图图5.7说明了对象的属性是怎样通过方法被访问的。方说明了对象的属性是怎样通过方法被访问的。方法有多种类型,它包括向属性赋值的方法、获取属性值的法有多种类型,它包括向属性赋值的方法、获取属性值的方法以及以某种方式处理属性并返回一个合成结果的方法。方法以及以某种方式处理属性并返回一个合成结果的方法。面向对象软件工程方法简介图图5.7 数据抽象和封装数据抽象和封装面向对象软件工程方法简介 5.消息消息 面向对象方法的另一个原则是通过消息进行对象之间面向对象方法的另一个原则是通过消息进行对象之间的通
30、信。它与封装的原则有密切的关系。封装使对象成为的通信。它与封装的原则有密切的关系。封装使对象成为互不干扰的独立单位互不干扰的独立单位;而消息通信则为它们提供合法的动态而消息通信则为它们提供合法的动态联系途径,使它们互相配合构成一个系统。联系途径,使它们互相配合构成一个系统。面向对象方法中对消息的定义是面向对象方法中对消息的定义是:向对象发出的服务请向对象发出的服务请求。它包含如下信息求。它包含如下信息:提供服务的对象标识、服务标识、输提供服务的对象标识、服务标识、输入信息和回答信息。入信息和回答信息。例如例如“发邮件发邮件”是一条消息,是用户向电子信箱发出是一条消息,是用户向电子信箱发出的服务
31、请求。消息的接收者是提供服务的对象。对外提供的服务请求。消息的接收者是提供服务的对象。对外提供的每个服务应规定消息的格式,这种规定称作是消息协议。的每个服务应规定消息的格式,这种规定称作是消息协议。面向对象软件工程方法简介 一个消息模式定义对象的一种处理能力,这种处理能一个消息模式定义对象的一种处理能力,这种处理能力是通过该模式及消息引用表现出来的。所以,只要给出力是通过该模式及消息引用表现出来的。所以,只要给出对象的所有消息模式及相应于每一个消息模式的处理能力,对象的所有消息模式及相应于每一个消息模式的处理能力,也就定义了一个对象的外部特性。消息模式不仅定义了对也就定义了一个对象的外部特性。
32、消息模式不仅定义了对象所能受理的消息,而且还定义了对象的固有处理能力,象所能受理的消息,而且还定义了对象的固有处理能力,它是定义对象接口的惟一信息。使用对象只需要了解它的它是定义对象接口的惟一信息。使用对象只需要了解它的消息模式,所以对象具有极强的黑盒性。消息模式,所以对象具有极强的黑盒性。面向对象软件工程方法简介 6.结构与连接结构与连接 通过前面的介绍可以看出,是消息将独立的对象联系通过前面的介绍可以看出,是消息将独立的对象联系起来的。在构造系统中,为了使系统能够有效地映射问题起来的。在构造系统中,为了使系统能够有效地映射问题域,系统开发者需要认识并描述对象之间的分类关系、对域,系统开发者
33、需要认识并描述对象之间的分类关系、对象之间的组成关系、对象属性之间的静态联系和对象行为象之间的组成关系、对象属性之间的静态联系和对象行为之间的动态联系。之间的动态联系。面向对象方法运用分类结构、组装结构、实例关联和面向对象方法运用分类结构、组装结构、实例关联和消息连接描述对象之间的关系。消息连接描述对象之间的关系。面向对象软件工程方法简介(1)分类结构(一般)分类结构(一般/特殊结构)特殊结构)分类结构也叫一般分类结构也叫一般/特殊结构,是由一组具有一般特殊结构,是由一组具有一般.特殊特殊关系的类组成的结构。例如,轿车是一种运输工具,其中关系的类组成的结构。例如,轿车是一种运输工具,其中运输工
34、具是一般的,轿车是具体的。由一些存在单继承关运输工具是一般的,轿车是具体的。由一些存在单继承关系的类形成的分类结构又称作层次结构或树型结构系的类形成的分类结构又称作层次结构或树型结构;由一些由一些存在多重继承关系的类形成的分类结构又称作层次结构或存在多重继承关系的类形成的分类结构又称作层次结构或网状结构。网状结构。面向对象软件工程方法简介 (2)组装结构(整体部分结构)组装结构(整体部分结构)图图5.9 整体部分结构整体部分结构 组装结构又称为整体部分结构,它描述了对象之间组装结构又称为整体部分结构,它描述了对象之间的组成关系,即一个对象是另一个(组)对象的组成部分。的组成关系,即一个对象是另
35、一个(组)对象的组成部分。如图如图5.9所示,存储器是由内存储器和磁盘组成的,磁盘是所示,存储器是由内存储器和磁盘组成的,磁盘是由软盘和硬盘组成的。由软盘和硬盘组成的。存储器存储器内存储器内存储器磁盘磁盘软盘软盘硬盘硬盘面向对象软件工程方法简介(3)实例关联)实例关联 实例关联反映对象与对象之间的静态联系,例如教师实例关联反映对象与对象之间的静态联系,例如教师和学生之间的关系。这种双边关系在实现中可以通过对象和学生之间的关系。这种双边关系在实现中可以通过对象的属性表达出来,所以这种关系称作实例关联。常见的实的属性表达出来,所以这种关系称作实例关联。常见的实例关联分为例关联分为1:1,1:m,m
36、:1,m:n四种。四种。(4)消息连接)消息连接 描述对象之间的动态联系要用消息连接。如果一个对描述对象之间的动态联系要用消息连接。如果一个对象在执行自己的服务时,需要请求另一个对象为它完成某象在执行自己的服务时,需要请求另一个对象为它完成某个服务,那么这两个对象之间存在的消息连接就是有向的,个服务,那么这两个对象之间存在的消息连接就是有向的,方向是从消息发送者指向消息接收者。方向是从消息发送者指向消息接收者。面向对象软件工程方法简介 7.多态性多态性 当许多派生类由于继承了共同的基类而发生联系时,当许多派生类由于继承了共同的基类而发生联系时,每一个派生类的对象都可以被当作基类的对象来使用,所
37、每一个派生类的对象都可以被当作基类的对象来使用,所以这些派生类对象能对同一函数调用作出不同的反应,这以这些派生类对象能对同一函数调用作出不同的反应,这就是多态性。多态性是通过虚函数和动态联编实现的。因就是多态性。多态性是通过虚函数和动态联编实现的。因此对象的多态性可以定义为此对象的多态性可以定义为:在一般类中定义的属性或服务在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。殊类中具有不同的语义。.2
38、面向对象分析面向对象分析面向对象分析 分析的过程是提取系统需求的过程,主要包括理解、分析的过程是提取系统需求的过程,主要包括理解、表达和验证。面向对象的分析主要由定义对象模型、动态表达和验证。面向对象的分析主要由定义对象模型、动态模型和功能模型组成。模型和功能模型组成。面向对象分析的关键是识别出问题域内的对象,并分面向对象分析的关键是识别出问题域内的对象,并分析它们之间的关系,最终建立起问题域的简洁、精确、可析它们之间的关系,最终建立起问题域的简洁、精确、可理解的正确模型。在用面向对象观点建立起的模型中,对理解的正确模型。在用面向对象观点建立起的模型中,对象模型是最基本、最重要、最核心的模型。
39、象模型是最基本、最重要、最核心的模型。面向对象分析过程从分析用户需求陈述的文件(也称面向对象分析过程从分析用户需求陈述的文件(也称作需求规格说明书)开始。用户需求陈述可能由用户单方作需求规格说明书)开始。用户需求陈述可能由用户单方面写出,也可能由系统分析员配合用户共同写出。当软件面写出,也可能由系统分析员配合用户共同写出。当软件项目采用招标方式确定开发单位时,项目采用招标方式确定开发单位时,“标书标书”往往可以作往往可以作为初步的需求陈述。为初步的需求陈述。面向对象分析面向对象分析 需求陈述的内容包括需求陈述的内容包括:问题范围、功能需求、应用环境问题范围、功能需求、应用环境及假设条件等。总之
40、,需求陈述应该阐明及假设条件等。总之,需求陈述应该阐明“做什么做什么”而不而不是是“怎么做怎么做”。它应该描述用户的需求而不是提出解决问。它应该描述用户的需求而不是提出解决问题的方法。应该指出哪些是系统必要的属性,哪些是任选题的方法。应该指出哪些是系统必要的属性,哪些是任选的属性。应该避免对设计策略施加过多的约束,也不要描的属性。应该避免对设计策略施加过多的约束,也不要描述系统的内部结构,因为这样做将限制系统实现的灵活性。述系统的内部结构,因为这样做将限制系统实现的灵活性。对系统性能及系统与外界环境交互协议的描述,是最需要对系统性能及系统与外界环境交互协议的描述,是最需要的。此外,对采用的软件
41、工程标准、模块构造准则、将来的。此外,对采用的软件工程标准、模块构造准则、将来可能做的扩充以及可维护性要求等方面的内容,也都要做可能做的扩充以及可维护性要求等方面的内容,也都要做适当描述。适当描述。面向对象分析面向对象分析系统分析员与其他人员的交流包括系统分析员与其他人员的交流包括:(1)与用户和领域专家的交流,是为了了解用户的需求)与用户和领域专家的交流,是为了了解用户的需求和理解问题域。和理解问题域。(2)系统分析人员之间的交流,是为了分工、合作、问)系统分析人员之间的交流,是为了分工、合作、问题切磋和系统衔接。题切磋和系统衔接。(3)与用户和领域专家的再交流,是为了检验对用户需)与用户和
42、领域专家的再交流,是为了检验对用户需求和问题域的理解是否正确求和问题域的理解是否正确;为了帮助用户更改和放弃某些为了帮助用户更改和放弃某些需求,或改进现实系统的某些制度。需求,或改进现实系统的某些制度。(4)与管理人员的交流,是对工作的审核、认可、进度)与管理人员的交流,是对工作的审核、认可、进度检查、计划调整等。检查、计划调整等。面向对象分析面向对象分析 近几年在国际软件工程学术会议上很重视对近几年在国际软件工程学术会议上很重视对“非技术非技术因素因素”的讨论。分析工作中人与人之间的交流在很大程度的讨论。分析工作中人与人之间的交流在很大程度上属于非技术因素,其中与技术因素密切相关的一个问题上
43、属于非技术因素,其中与技术因素密切相关的一个问题是是:有关人员需要有一套共同的思维方法和一种便于交流的有关人员需要有一套共同的思维方法和一种便于交流的共同语言。这里的共同语言。这里的“语言语言”是广义的,它包括是广义的,它包括:系统模型、系统模型、术语、表示符号和文档书写格式等。术语、表示符号和文档书写格式等。面向对象分析面向对象分析 面向对象分析(面向对象分析(OOA)过程包括以下主要活动。)过程包括以下主要活动。(1)发现对象,定义它们的类)发现对象,定义它们的类;(2)识别对象的内部特征)识别对象的内部特征:定义属性,定义服务定义属性,定义服务;(3)识别对象的外部关系)识别对象的外部关
44、系:建立一般建立一般.特殊结构特殊结构;整体整体.部分部分结构结构;建立实例关联和消息连接建立实例关联和消息连接;以上活动的总目标是建立以上活动的总目标是建立OOA的基本模型的基本模型:类图。类图。(4)划分主题,建立主题图)划分主题,建立主题图;(5)定义用例,建立交互图)定义用例,建立交互图;(6)建立详细说明)建立详细说明:对模型进行详细定义和解释,这一对模型进行详细定义和解释,这一步可以作为一个独立的活动,也可以分散在其他活动之中步可以作为一个独立的活动,也可以分散在其他活动之中说明说明;(7)原型开发)原型开发:可在可在OOA过程中反复进行。过程中反复进行。面向对象分析面向对象分析
45、以上各个活动以及它们的子活动,没有特定的次序要以上各个活动以及它们的子活动,没有特定的次序要求,可以交互地进行,分析员也可以按照自己的工作习惯求,可以交互地进行,分析员也可以按照自己的工作习惯决定采用什么次序以及如何交替。图决定采用什么次序以及如何交替。图5.10给出了一种给出了一种OOA过程模型,图中只画了过程中的活动而没有表示角色、资过程模型,图中只画了过程中的活动而没有表示角色、资源等因素,主干线上的活动体现了一种可供参考的次序,源等因素,主干线上的活动体现了一种可供参考的次序,其拓扑结构表明这些活动可以回溯,也可以交替进行。其拓扑结构表明这些活动可以回溯,也可以交替进行。面向对象分析面
46、向对象分析图图5.10 OOA过程模型过程模型 面向对象分析面向对象分析 5.2.2 对象与类的识别和表示对象与类的识别和表示 1.确定对象确定对象 确定对象时,一般有下面几种类型。确定对象时,一般有下面几种类型。实体对象实体对象:这些对象保存信息,最终可能映射到数据库这些对象保存信息,最终可能映射到数据库中的表和字段。事件流中许多名词提供实体对象。例如航中的表和字段。事件流中许多名词提供实体对象。例如航空公司中实体对象有空公司中实体对象有357航班,乘客李明和航班,乘客李明和150A号机票。号机票。这些业务实体是最终用户感兴趣的。这些业务实体是最终用户感兴趣的。边界对象边界对象:这些对象位于
47、系统与外部世界之间的边界上。这些对象位于系统与外部世界之间的边界上。换句话说,这是应用程序的窗体与其他应用程序的接口。换句话说,这是应用程序的窗体与其他应用程序的接口。窗体可能在事件流中显示,而接口则不一定在事件流中显窗体可能在事件流中显示,而接口则不一定在事件流中显示。访问事件流中的逻辑时,看看其他系统是否需要执行示。访问事件流中的逻辑时,看看其他系统是否需要执行事件流中的逻辑,如果需要,则可能需要一个或多个接口事件流中的逻辑,如果需要,则可能需要一个或多个接口对象。对象。面向对象分析面向对象分析 控制对象控制对象:这是可选对象,控制用例的流程。它们本身这是可选对象,控制用例的流程。它们本身
48、没有任何业务功能,但可以协调其他对象和控制总体逻辑没有任何业务功能,但可以协调其他对象和控制总体逻辑流程。例如,控制对象知道用户安全级要先检查之后才能流程。例如,控制对象知道用户安全级要先检查之后才能运行特定报表。控制对象不检查安全级或运行报表,只是运行特定报表。控制对象不检查安全级或运行报表,只是持有顺序逻辑和业务规则,它首先让另一个对象检查安全持有顺序逻辑和业务规则,它首先让另一个对象检查安全级,然后让报表运行。控制对象不在事件流中出现。控制级,然后让报表运行。控制对象不在事件流中出现。控制对象的使用是个设计策略。对象的使用是个设计策略。如果决定使用控制对象,则要将控制对象加进如果决定使用
49、控制对象,则要将控制对象加进Sequence框图(简称顺序图或时序图)或框图(简称顺序图或时序图)或Collaboration框图(简称协作图)中。框图(简称协作图)中。面向对象分析面向对象分析 2.将对象抽象为类,建立类图的对象层将对象抽象为类,建立类图的对象层 把陆续发现的属性和服务填写到类符号中,就可以得把陆续发现的属性和服务填写到类符号中,就可以得到这些对象的类。在定义对象的类时,需要对一些异常情到这些对象的类。在定义对象的类时,需要对一些异常情况进行检查,必要时做出修改或调整。具体步骤如下况进行检查,必要时做出修改或调整。具体步骤如下:(1)异常情况的检查和调整)异常情况的检查和调整
50、 类的属性或服务不适合该类的全部对象类的属性或服务不适合该类的全部对象:例如,例如,“计计算机算机”和和“空调空调”差别虽然较大,但是当它们在系统中仅差别虽然较大,但是当它们在系统中仅仅被作为商品出售时,属性和服务就可能完全相同。对这仅被作为商品出售时,属性和服务就可能完全相同。对这种情况可以考虑把它们合并为一个类,如把它们合并为种情况可以考虑把它们合并为一个类,如把它们合并为“商品商品”类。类。属性和服务相似的类属性和服务相似的类:如果两个(或两个以上)类的如果两个(或两个以上)类的属性和服务有许多是相同的,则可以考虑建立一般属性和服务有许多是相同的,则可以考虑建立一般.特殊结特殊结构或整体
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。