3)多态(polymorphism) 多态指一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现 出不同的行为。使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接受对象 自行决定,这样同一消息就可以调用不同的方法。多态性不仅增加了面向对象软件系统的灵 活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。 1.4.4类之间的关系 类之间存在三种基本的类关系:①一般-特殊关系,表示“是一种”关系(is),例如,樱花 是一种花,花是一般的类,而樱花是一种特殊的子类;②整体-部分关系,表示“组成部分”关系 (hasa/contains a),如花瓣是花的一部分;③关联关系,表示某种语义上的依赖关系(usea), 相互关联的两个对象一般是平等的,例如,蜜蜂和花之间的关系。 1)一般-特殊关系 (I)继承(inheritance))。继承是面向对象方法学中的一个十分重要的概念,继承是指能够 直接获得已有的性质或特征,不必重新定义。在面向对象的方法学中,其定义是:特殊类(或 称子类、派生类)的对象拥有其一般类(或称父类、基类)的全部属性与服务,称作特殊类对一般 类的继承。比如樱花是子类,花是基类。继承可以表示类与类、接口与接口之间的继承关系, 或类与接口之间的实现关系。继承分为单继承和多继承。当一个类只有一个父类时为单继 承,有多个父类时为多继承。 (2)泛化(generalization)。泛化与继承相反,是指从子类抽取共同的特征形成父类的过 程。例如,从关山樱、菊樱、郁金樱等不同种类樱花中,抽取樱花类。 2)整体-部分关系 (1)聚合(aggregation)。聚合表示整体类和部分类之间的关系为“包含”“组成”的关系。 例如,花包含了樱花、桃花、梅花等,当这些花不构成完整的花类时,也是单独存在的。 (2)组合(composition)。组合表示整体类拥有部分类,部分和整体具有相同的生存期,如 果整体不存在了,部分也随之消失。例如一朵花包含花冠、花萼、花托和花蕊四个部分,花不存 在了,则花冠等也没有意义。组合是一种特殊形式的强类型的聚合。 3)关联关系 (1)关联(association)。关联是体现两个类之间语义级别的一种强依赖关系,一般是长期 的且双方是平等的。关联可以是单向的和双向的。 (2)依赖(dependency)。依赖是类与类之间的连接,表示一个类依赖于另一个类的定义, 其中一个类的变化将影响另外一个类,依赖关系具有偶然性、临时性,是脆弱的。 (3)实现(realization)。指的是一个类实现接口(可以是多个)的功能;实现是类与接口之 间最常见的关系。 1.4.5面向对象的优点 面向对象技术提供了更好的抽象能力和更多的软件开发方法和工具,能够使用各种不同 的设计模式来解决具体问题。而且,在软件实现层面上看,面向对象技术极大地提高了代码复 用,提高了代码的可扩展性,便于软件的维护。 面向对象技术中,对象是整个技术的核心。而整个软件系统,是真实世界的一种抽象。这 |011
011 3)多态(polymorphism) 多态指一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现 出不同的行为。使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接受对象 自行决定,这样同一消息就可以调用不同的方法。多态性不仅增加了面向对象软件系统的灵 活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。 1.4.4 类之间的关系 类之间存在三种基本的类关系:① 一般 特殊关系,表示“是一种”关系(isa),例如,樱花 是一种花,花是一般的类,而樱花是一种特殊的子类;② 整体 部分关系,表示“组成部分”关系 (hasa/containsa),如花瓣是花的一部分;③ 关联关系,表示某种语义上的依赖关系(usea), 相互关联的两个对象一般是平等的,例如,蜜蜂和花之间的关系。 1)一般 特殊关系 (1)继承(inheritance)。继承是面向对象方法学中的一个十分重要的概念,继承是指能够 直接获得已有的性质或特征,不必重新定义。在面向对象的方法学中,其定义是:特殊类(或 称子类、派生类)的对象拥有其一般类(或称父类、基类)的全部属性与服务,称作特殊类对一般 类的继承。比如樱花是子类,花是基类。继承可以表示类与类、接口与接口之间的继承关系, 或类与接口之间的实现关系。继承分为单继承和多继承。当一个类只有一个父类时为单继 承,有多个父类时为多继承。 (2)泛化(generalization)。泛化与继承相反,是指从子类抽取共同的特征形成父类的过 程。例如,从关山樱、菊樱、郁金樱等不同种类樱花中,抽取樱花类。 2)整体 部分关系 (1)聚合(aggregation)。聚合表示整体类和部分类之间的关系为“包含”“组成”的关系。 例如,花包含了樱花、桃花、梅花等,当这些花不构成完整的花类时,也是单独存在的。 (2)组合(composition)。组合表示整体类拥有部分类,部分和整体具有相同的生存期,如 果整体不存在了,部分也随之消失。例如一朵花包含花冠、花萼、花托和花蕊四个部分,花不存 在了,则花冠等也没有意义。组合是一种特殊形式的强类型的聚合。 3)关联关系 (1)关联(association)。关联是体现两个类之间语义级别的一种强依赖关系,一般是长期 的且双方是平等的。关联可以是单向的和双向的。 (2)依赖(dependency)。依赖是类与类之间的连接,表示一个类依赖于另一个类的定义, 其中一个类的变化将影响另外一个类,依赖关系具有偶然性、临时性,是脆弱的。 (3)实现(realization)。指的是一个类实现接口(可以是多个)的功能;实现是类与接口之 间最常见的关系。 1.4.5 面向对象的优点 面向对象技术提供了更好的抽象能力和更多的软件开发方法和工具,能够使用各种不同 的设计模式来解决具体问题。而且,在软件实现层面上看,面向对象技术极大地提高了代码复 用,提高了代码的可扩展性,便于软件的维护。 面向对象技术中,对象是整个技术的核心。而整个软件系统,是真实世界的一种抽象。这
种抽象,是由描述状态的数据,以及描述动作的方法的整体封装。不同的对象之间可以相互传 递消息,类似于现实世界中不同事物之间的交流和联系。因为面向对象理念中,建立起来的模 型是对真实世界的反映,所以开发者可以更多地站在真实世界一软件应用领域一的角度 去看待问题,而不需要把应用领域的问题转化为计算机的角度来考虑。这样的思考方法无疑 更加接近于人的传统思维方式,对于问题的考虑也将更加完善。 传统的软件开发方法是“瀑布”模型的,强调自顶向下完成软件开发过程。然而事实上,人 们对于问题的认识是一个渐进的过程。通过不断深化对问题的理解,人们的思维经历了从特 殊到一般的归纳,也经历了从一般到特殊的演绎,这都是在第一次分析问题时所难以达到的。 人们在认识复杂的问题时,运用最多的方式是抽象,即忽略不关注的方面,而重点分析处理关 注的方面,这与面向对象的思想是一致的。 通过面向对象技术建立起来的模型,可以随着开发者对于问题理解的深入而进行完善和 修改。由于类与类之间是相对独立的,因此不会出现牵一发而动全身的情况。当系统的功能 需求改变时,软件的结构不会出现大的变化,一般情况下只需要进行简单的修改和调整。因为 对象是对真实世界的反映,而真实世界的结构是相对稳定的,因而以面向对象技术构建出的系 统结构也是比较稳定的。 在传统的工业界,用已有的零件来装配新的产品是非常普遍的情况。实际上,新的产品并 不是全新的,仅仅是部分零件做了更新而已。软件开发同样是如此,一个新的软件并不需要完 全重写所有的代码。这种时候,代码复用就可以很大程度地提高生产效率。在传统的软件工 程中,代码的复用是利用标准函数库实现的。但是标准函数库很难适应不同的应用场合和不 同的需求,因而这种复用是很基本的。函数库仅仅能提供最为基础的功能,在一个软件系统 中,绝大多数函数都需由开发者重新编写。然而,面向对象的开发方法在构建软件系统时,可 以通过派生已有的类来实现代码的复用。子类不仅继承了父类的数据和方法,还可以很方便 地进行扩充和修改。可以这么说,在面向对象软件开发中,对象是一个个的细胞,有自己独立 的结构、功能和用途。开发大型软件的过程就是对小“细胞”进行组合的过程。这样就把大型 的软件系统拆分成了相对独立的小“模块”,从而大大降低了开发的难度和管理的复杂度。 基于面向对象技术开发的软件由于稳定性比较好,当出现需求变更时软件也比较容易修 改,因而软件的维护难度也大大降低了。 传统的软件难以维护,另一个重要的原因是整个系统难以理解。尤其是对于比较庞大的 系统,需要修改的部分经常比较分散,而人们又很难了解整个软件的全部内容。面向对象符合 人类惯有的思维方式,在这种方式下建立起来的软件架构与真实世界基本相同,因而减小了理 解的难度,也降低了维护的难度。 由于面向对象开发的软件各个类之间的独立性比较好,在更改时,往往只需要修改类的局 部数据或操作,所以比较容易实现。继承和多态机制能够使得对软件修改和扩充时,需要修改 或增加的代码大量减少。除此之外,为了保证软件的质量,大量的测试是必须的。基于面向对 象技术的软件中,由于类是独立性很强的小模块,因此要完成对类的测试是简单的一创造类 对象,进行各种功能的测试即可,调试难度也比较低,因此可维护性较强。 012
012 种抽象,是由描述状态的数据,以及描述动作的方法的整体封装。不同的对象之间可以相互传 递消息,类似于现实世界中不同事物之间的交流和联系。因为面向对象理念中,建立起来的模 型是对真实世界的反映,所以开发者可以更多地站在真实世界———软件应用领域———的角度 去看待问题,而不需要把应用领域的问题转化为计算机的角度来考虑。这样的思考方法无疑 更加接近于人的传统思维方式,对于问题的考虑也将更加完善。 传统的软件开发方法是“瀑布”模型的,强调自顶向下完成软件开发过程。然而事实上,人 们对于问题的认识是一个渐进的过程。通过不断深化对问题的理解,人们的思维经历了从特 殊到一般的归纳,也经历了从一般到特殊的演绎,这都是在第一次分析问题时所难以达到的。 人们在认识复杂的问题时,运用最多的方式是抽象,即忽略不关注的方面,而重点分析处理关 注的方面,这与面向对象的思想是一致的。 通过面向对象技术建立起来的模型,可以随着开发者对于问题理解的深入而进行完善和 修改。由于类与类之间是相对独立的,因此不会出现牵一发而动全身的情况。当系统的功能 需求改变时,软件的结构不会出现大的变化,一般情况下只需要进行简单的修改和调整。因为 对象是对真实世界的反映,而真实世界的结构是相对稳定的,因而以面向对象技术构建出的系 统结构也是比较稳定的。 在传统的工业界,用已有的零件来装配新的产品是非常普遍的情况。实际上,新的产品并 不是全新的,仅仅是部分零件做了更新而已。软件开发同样是如此,一个新的软件并不需要完 全重写所有的代码。这种时候,代码复用就可以很大程度地提高生产效率。在传统的软件工 程中,代码的复用是利用标准函数库实现的。但是标准函数库很难适应不同的应用场合和不 同的需求,因而这种复用是很基本的。函数库仅仅能提供最为基础的功能,在一个软件系统 中,绝大多数函数都需由开发者重新编写。然而,面向对象的开发方法在构建软件系统时,可 以通过派生已有的类来实现代码的复用。子类不仅继承了父类的数据和方法,还可以很方便 地进行扩充和修改。可以这么说,在面向对象软件开发中,对象是一个个的细胞,有自己独立 的结构、功能和用途。开发大型软件的过程就是对小“细胞”进行组合的过程。这样就把大型 的软件系统拆分成了相对独立的小“模块”,从而大大降低了开发的难度和管理的复杂度。 基于面向对象技术开发的软件由于稳定性比较好,当出现需求变更时软件也比较容易修 改,因而软件的维护难度也大大降低了。 传统的软件难以维护,另一个重要的原因是整个系统难以理解。尤其是对于比较庞大的 系统,需要修改的部分经常比较分散,而人们又很难了解整个软件的全部内容。面向对象符合 人类惯有的思维方式,在这种方式下建立起来的软件架构与真实世界基本相同,因而减小了理 解的难度,也降低了维护的难度。 由于面向对象开发的软件各个类之间的独立性比较好,在更改时,往往只需要修改类的局 部数据或操作,所以比较容易实现。继承和多态机制能够使得对软件修改和扩充时,需要修改 或增加的代码大量减少。除此之外,为了保证软件的质量,大量的测试是必须的。基于面向对 象技术的软件中,由于类是独立性很强的小模块,因此要完成对类的测试是简单的———创造类 对象,进行各种功能的测试即可,调试难度也比较低,因此可维护性较强。
第2章 面向对象软件过程 软件过程给出了为形成最终的软件所需要完成的任务的框架,它包括了整个过程中有哪 些任务,每个任务所需要的资源、角色,每个任务需要使用的工具、方法,任务的输入和输出,任 务之间的相互关系等。软件过程是影响软件开发的全局性因素,软件过程是否合理将给软件 开发带来全面的影响。 不同的软件工程方法学将渗透在软件过程中。软件过程模型是指导软件过程的模板。按 照软件过程模型,依据要开发的软件的特点,将形成具体的软件过程。随着软件开发实践的不 断积累和学术界的总结,目前出现了不同种类的软件过程模型。 面向对象首先作为一种开发思想而存在,然后面向对象思想与开发活动相结合,产生了面 向对象方法,面向对象方法贯穿软件过程的始终,形成了面向对象软件过程。在本章中,我们 将简要介绍面向对象方法的发展,并对面向对象分析、面向对象设计、面向对象实现、面向对象 测试进行介绍,最后介绍面向对象软件过程的整体流程。 2.1面向对象方法的发展 在面向对象方法发展的过程中,有几个方法具有较大的影响力,它们是Grady Booch提出 的面向对象开发方法OOAD、Ivar Jacobson的OOSE方法和James Rumbaugh的OMT方法。 1)Grady Booch的面向对象方法 1986年,面向对象方法的最早倡导者之一Grady Booch提出了面向对象分析与设计方法 (object-oriented analysis and design,OOAD)。Booch认为开发过程为螺旋上升模式,每一步 重复的步骤如下: (1)从应用的问题域发现类和对象。 (2)分析类和对象的功能、行为,确定属性和操作。 (3)找出类、对象之间的关系。 (4)说明每个类和对象的实现。 Booch开发模型包含四种模型:逻辑模型、物理模型、静态模型和动态模型,逻辑模型描 述系统的类结构和对象结构,分别用类图和对象图表示;物理模型描述系统的模块结构和进程 结构,分别用模型图和进程图表示;静态模型描述系统的静态组成结构;动态模型描述系统执 行过程中的行为,用状态图和交互图表示。 |013
013 第2章 面向对象软件过程 软件过程给出了为形成最终的软件所需要完成的任务的框架,它包括了整个过程中有哪 些任务,每个任务所需要的资源、角色,每个任务需要使用的工具、方法,任务的输入和输出,任 务之间的相互关系等。软件过程是影响软件开发的全局性因素,软件过程是否合理将给软件 开发带来全面的影响。 不同的软件工程方法学将渗透在软件过程中。软件过程模型是指导软件过程的模板。按 照软件过程模型,依据要开发的软件的特点,将形成具体的软件过程。随着软件开发实践的不 断积累和学术界的总结,目前出现了不同种类的软件过程模型。 面向对象首先作为一种开发思想而存在,然后面向对象思想与开发活动相结合,产生了面 向对象方法,面向对象方法贯穿软件过程的始终,形成了面向对象软件过程。在本章中,我们 将简要介绍面向对象方法的发展,并对面向对象分析、面向对象设计、面向对象实现、面向对象 测试进行介绍,最后介绍面向对象软件过程的整体流程。 2.1 面向对象方法的发展 在面向对象方法发展的过程中,有几个方法具有较大的影响力,它们是GradyBooch提出 的面向对象开发方法OOAD、IvarJacobson的OOSE方法和JamesRumbaugh的OMT方法。 1)GradyBooch的面向对象方法 1986年,面向对象方法的最早倡导者之一GradyBooch提出了面向对象分析与设计方法 (objectorientedanalysisanddesign,OOAD)。Booch认为开发过程为螺旋上升模式,每一步 重复的步骤如下: (1)从应用的问题域发现类和对象。 (2)分析类和对象的功能、行为,确定属性和操作。 (3)找出类、对象之间的关系。 (4)说明每个类和对象的实现。 Booch开发模型包含四种模型:逻辑模型、物理模型、静态模型和动态模型,逻辑模型描 述系统的类结构和对象结构,分别用类图和对象图表示;物理模型描述系统的模块结构和进程 结构,分别用模型图和进程图表示;静态模型描述系统的静态组成结构;动态模型描述系统执 行过程中的行为,用状态图和交互图表示。
2)Ivar Jacobson的面向对象方法 Jacobson的面向对象软件工程(object--oriented software engineering,OOSE)方法提出了 一种用例驱动的面向对象方法,并提供了相应的CASE工具来建立系统分析模型和系统设计 模型。OOSE方法建立面向对象分析模型包含两个步骤:建立用户需求模型和建立系统分析 模型。建立面向对象设计模型步骤为:创建模块作为主要的设计对象,创建显示消息传递的 交互图,组织模块成子系统和复审设计工作。 3)James Rumbaugh的面向对象方法 对象模型技术(object mode technology,OMT)方法是由James Rumbaugh等提出的。 该技术采用对象模型、动态模型和功能模型来描述系统。对象模型描述系统中对象的结构;动 态模型描述系统与时间和操作顺序有关的系统特征:功能模型描述与数值变化有关的系统 特征。 三者对比,OOAD比较复杂,适合于面向对象的设计,而对分析的支持不够;OMT相对简 单,适合于分析,而对设计的支持不够;OOSE中提出了用例的方法,它适合于高层设计。 这三种方法最后进行了融合,加之其他企业的加入,导致了统一建模语言(unified modeling language,.UML)的诞生。关于UML的具体介绍,我们将在第3章给出。 2.2面向对象分析、设计与实现 2.2.1面向对象分析 面向对象分析(object oriented analysis,OOA)是运用面向对象的方法进行需求分析,抽 取和整理用户需求并建立应用领域的面向对象模型的过程。面向对象分析过程,首先是建模, 通常需要建立四种形式的模型:对象(静态)模型、用例(功能)模型、动态行为模型和物理实现 模型。这四种模型从不同的角度描述目标系统,相互补充,相互配合,使得人们对系统的认识 更加全面。根据所解决的问题类型不同,各模型重要性也不同,其中对象模型是核心,是用例 模型和动态行为模型的框架。 1)对象模型 对象模型是面向对象方法中最基础、最核心的模型。该模型主要考虑系统中对象的结构、 属性与操作,以及对象之间关系的映射。该模型是对客观世界的对象和对象关系的静态描述, 为建立用例模型和动态模型提供了实质性的框架。在UML中,对象模型常用类图和对象图 来描述。 2)用例模型 用例模型一般从用户需求的角度来描述系统,指明系统应该做什么,描述数据在系统中的 变换过程和系统的功能,是整个后续工作的基础,也是测试和验收的依据。在UL中,用例 模型使用用例图来描述。 3)动态模型 在建立起对象模型之后,需要观察对象的动态行为。所有对象都有自己的生存周期。每 个对象在生产周期的每个阶段都有特定的适合的运行规律和行为准则来规范其行为。动态模 014
014 2)IvarJacobson的面向对象方法 Jacobson的面向对象软件工程(objectorientedsoftwareengineering,OOSE)方法提出了 一种用例驱动的面向对象方法,并提供了相应的CASE工具来建立系统分析模型和系统设计 模型。OOSE方法建立面向对象分析模型包含两个步骤:建立用户需求模型和建立系统分析 模型。建立面向对象设计模型步骤为:创建模块作为主要的设计对象,创建显示消息传递的 交互图,组织模块成子系统和复审设计工作。 3)JamesRumbaugh的面向对象方法 对象模型技术(objectmodetechnology,OMT)方法是由JamesRumbaugh等提出的。 该技术采用对象模型、动态模型和功能模型来描述系统。对象模型描述系统中对象的结构;动 态模型描述系统与时间和操作顺序有关的系统特征;功能模型描述与数值变化有关的系统 特征。 三者对比,OOAD比较复杂,适合于面向对象的设计,而对分析的支持不够;OMT相对简 单,适合于分析,而对设计的支持不够;OOSE中提出了用例的方法,它适合于高层设计。 这三种方法最后进行了融合,加之其他企业的加入,导致了统一建模语言(unified modelinglanguage,UML)的诞生。关于UML的具体介绍,我们将在第3章给出。 2.2 面向对象分析、设计与实现 2.2.1 面向对象分析 面向对象分析(objectorientedanalysis,OOA)是运用面向对象的方法进行需求分析,抽 取和整理用户需求并建立应用领域的面向对象模型的过程。面向对象分析过程,首先是建模, 通常需要建立四种形式的模型:对象(静态)模型、用例(功能)模型、动态行为模型和物理实现 模型。这四种模型从不同的角度描述目标系统,相互补充,相互配合,使得人们对系统的认识 更加全面。根据所解决的问题类型不同,各模型重要性也不同,其中对象模型是核心,是用例 模型和动态行为模型的框架。 1)对象模型 对象模型是面向对象方法中最基础、最核心的模型。该模型主要考虑系统中对象的结构、 属性与操作,以及对象之间关系的映射。该模型是对客观世界的对象和对象关系的静态描述, 为建立用例模型和动态模型提供了实质性的框架。在UML中,对象模型常用类图和对象图 来描述。 2)用例模型 用例模型一般从用户需求的角度来描述系统,指明系统应该做什么,描述数据在系统中的 变换过程和系统的功能,是整个后续工作的基础,也是测试和验收的依据。在UML中,用例 模型使用用例图来描述。 3)动态模型 在建立起对象模型之后,需要观察对象的动态行为。所有对象都有自己的生存周期。每 个对象在生产周期的每个阶段都有特定的适合的运行规律和行为准则来规范其行为。动态模
型可以借助顺序图、通信图、状态图或活动图进行建模。 4)物理模型 物理模型关注的是系统实现过程的建模,常用组件图和部署图表示静态物理实现模型,用 交互图和状态图来描述动态实现模型。 2.2.2面向对象设计 面向对象设计(object oriented design,OOD)是面向对象方法的核心阶段,它建立软件系 统的模型。面向对象设计与面向对象分析的建模原则和方法相同,但是面向对象设计模型的 抽象层次较低,包含了与具体实现有关的细节。面向对象设计的准则包含模块化、抽象、封装、 弱耦合、强内聚和可重用等。 面向对象设计的主要任务是将分析模型转换为设计模型,设计的目标是提高生产效率、质 量和可维护性,在面向分析的基础上,考虑如何实现系统。面向对象设计进一步细化为系统设 计和对象设计。系统设计是针对整个系统的,主要包含系统高层结构设计、确定设计元素、确 定任务管理策略、实现分布式机制、设计数据存储方案和设计UI界面六个方面。对象设计是 对每个设计对象进行的详细设计,包含组成系统的类、子系统和接口、包等。 2.2.3面向对象实现 面向对象实现(object oriented implementation,OOI)主要包含两项工作:面向对象编程 (object oriented programming,OOP)和面向对象测试(object oriented testing,OOT)。 1)面向对象编程 面向对象编程首先遇到的问题是程序设计语言的选择。根据语言的功能和产生时间,代 表性的面向对象编程语言如下: (1)面向对象兴盛时期(1980一1990年):①Smalltalk-80,纯面向对象语言;②C十十, 从C和Simula发展而来:③Eiffel,从Ada和Simula发展而来。 (2)框架的出现(1990一现在):①Visual Basic,简化了Windows应用的图像界面(GUI) 开发;②Java,Oak的后续版本;③Python,面向对象的脚本语言;④J2EE,基于Java的企业 级计算框架;⑤Visual C#,NET框架下的Java的竞争者;⑥Visual Basic.NET,针对微软. NET框架的Visual Basic。 2)面向对象测试 完整的面向对象测试类型包括了面向对象分析测试、面向对象设计测试、面向对象编程测 试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 (1)面向对象分析测试。对于一个面向对象系统而言,对象是相对稳定的,关系是相对不 稳定的。所以,面向对象分析的测试需要考虑对分析模型中对象、对象关系、对象属性和方法 进行测试和确认。 (2)面向对象设计测试。面向对象设计是对面向对象分析的进一步细化和抽象。面向对 象设计的测试需要考虑对设计模型中类、类的层次结构、类库进行测试和确认。 (3)面向对象编程测试。面向对象编程阶段是把功能的实现分布在类中。面向对象编程 的测试忽略类的实现细则,主要集中在类功能的实现和相应的面向对象程序风格上,主要测试 两个方面:数据成员是否满足数据封装的要求和类是否实现了要求的功能。 |015
015 型可以借助顺序图、通信图、状态图或活动图进行建模。 4)物理模型 物理模型关注的是系统实现过程的建模,常用组件图和部署图表示静态物理实现模型,用 交互图和状态图来描述动态实现模型。 2.2.2 面向对象设计 面向对象设计(objectorienteddesign,OOD)是面向对象方法的核心阶段,它建立软件系 统的模型。面向对象设计与面向对象分析的建模原则和方法相同,但是面向对象设计模型的 抽象层次较低,包含了与具体实现有关的细节。面向对象设计的准则包含模块化、抽象、封装、 弱耦合、强内聚和可重用等。 面向对象设计的主要任务是将分析模型转换为设计模型,设计的目标是提高生产效率、质 量和可维护性,在面向分析的基础上,考虑如何实现系统。面向对象设计进一步细化为系统设 计和对象设计。系统设计是针对整个系统的,主要包含系统高层结构设计、确定设计元素、确 定任务管理策略、实现分布式机制、设计数据存储方案和设计UI界面六个方面。对象设计是 对每个设计对象进行的详细设计,包含组成系统的类、子系统和接口、包等。 2.2.3 面向对象实现 面向对象实现(objectorientedimplementation,OOI)主要包含两项工作:面向对象编程 (objectorientedprogramming,OOP)和面向对象测试(objectorientedtesting,OOT)。 1)面向对象编程 面向对象编程首先遇到的问题是程序设计语言的选择。根据语言的功能和产生时间,代 表性的面向对象编程语言如下: (1)面向对象兴盛时期(1980—1990年):①Smalltalk 80,纯面向对象语言;②C++, 从C和Simula发展而来;③Eiffel,从Ada和Simula发展而来。 (2)框架的出现(1990—现在):①VisualBasic,简化了 Windows应用的图像界面(GUI) 开发;②Java,Oak的后续版本;③Python,面向对象的脚本语言;④J2EE,基于Java的企业 级计算框架;⑤ VisualC#,.NET框架下的Java的竞争者;⑥ VisualBasic.NET,针对微软. NET框架的VisualBasic。 2)面向对象测试 完整的面向对象测试类型包括了面向对象分析测试、面向对象设计测试、面向对象编程测 试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 (1)面向对象分析测试。对于一个面向对象系统而言,对象是相对稳定的,关系是相对不 稳定的。所以,面向对象分析的测试需要考虑对分析模型中对象、对象关系、对象属性和方法 进行测试和确认。 (2)面向对象设计测试。面向对象设计是对面向对象分析的进一步细化和抽象。面向对 象设计的测试需要考虑对设计模型中类、类的层次结构、类库进行测试和确认。 (3)面向对象编程测试。面向对象编程阶段是把功能的实现分布在类中。面向对象编程 的测试忽略类的实现细则,主要集中在类功能的实现和相应的面向对象程序风格上,主要测试 两个方面:数据成员是否满足数据封装的要求和类是否实现了要求的功能。