1第8章一、复习要求1、了解维护的概念和软件维护的类型二、内容提要软件维护的概念(1)软件维护的定义我们称在软件运行∕维护阶段对软件产品所进行的修改就是所谓的维护。要求进行维护的原因多种多样,归结起来有三种类型:改正在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷;因在软件使用过程中数据环境发生变化或处理环境发生变化,需要修改软件以适应这种变化。用户和数据处理人员在使用时常提出改进现有功能,增加新的功能,以及改善总体性能的要求,为满足这些要求,就需要修改软件把这些要求纳入到软件之中。9、软件维护的类型①纠正性维护也称为改正性维护。在软件交付使用后,必然会有一部分隐藏的错误被带到运行阶段来。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程,就叫做纠正性维护。②适应性维护随着计算机的飞速发展,外部环境(新的硬、软件配置)或数据环境(数据库、数据格式、数据输入∕输出方式、数据存储介质)可能发生变化,为了使软件适应这种变化,而去修改软件的过程就叫做适应性维护。③完善性维护在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。在维护阶段的最初一、二年,纠正性维护的工作量较大。随着错误发现率急剧降低,并趋于稳定,就进入了正常使用期。然而,由于改造的要求,适应性维护和完善性维护的工作量逐步增加。实践表明,在几种维护活动中,完善性维护所占的比重最大,来自用户要求扩充、加强软件功能、性能的维护活动约占整个维护工作的50%。2④预防性维护除了以上三类维护之外,还有一类维护活动,叫做预防性维护。这是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。通常,预防性维护定义为:“把今天的方法学用于昨天的系统以满足明天的需要”。也就是说,采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。在整个软件维护阶段所花费的全部工作量中,预防性维护只占很小的比例,而完善性维护占了几乎一半的工作量。从上图可以看到,软件维护活动所花费的工作占整个生存期工作量的70%以上。3三、例题分析一、选择题1.软件维护的类型有(ABCD)。A)完善性维护B)纠错性维护C)适应性维护D)预防性维护2.各种软件维护的类型中最重要的是(A)。A)完善性维护B)纠错性维护C)适应性维护D)预防性维护3.以下属于完善性维护的有(B)。A)解决开发是未能测试各种可能条件带来的问题B)增加联机求助命令C)考虑未来移植的问题D)改正发现的错误二、判断题1软件维护只需要纠正性维护、适应性维护和完善性维护。(×)2改进程序的执行效率不会引入错误。(×)3强调简明性的程序出错率低。(√)4用面向对象方法开发的软件系统,可维护性好。(√)三、简答题1为什么要进行软件维护?答:软件维护是指软件系统交付使用以后,为了改正错误或满足新的需求而修改软件的过程。一个中等规模的软件,如果其开发过程需要一二年时间,则它投入使用以后,其运行时间可能持续5~10年之久。在这个维护阶段中,人们需要着手解决开发阶段尚未解决的问题,同时,还解决维护工作本身所产生的问题。做好软件的维护工作不仅能够排除软件中存在的错误,使它能够正常工作,而且还可以使它扩充功能,提高性能,为用户带来新的效益。维护阶段的花费约占整个软件生命期花费的67%。因此,应充分认识到维护现有软件的重要意义。第9章面向对象方法学引论一、复习要求1.了解面向对象方法学的出发点和基本原则2、了解面向对象的概念,2.了解统一建模语言UML二、内容提要1、面向对象方法学的出发点和基本原则面向对象方法学(Object-OrientedMethodology,简称OOM)的出发点和基本原则,尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法不同,OOM以数据或信息为主线,把数据和处理结合构成统一体——对象。这时程序4对象的定义不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。面向对象方法学四要素①对象(object):世界由对象组成。②类(class):具有相同属性和操作的对象可划分为类;单个对象可视为某一类的实例(instance)。③继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承。④消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。面向对象技术是一个非常实用而强有力的软件开发方法。它的特征是:方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑而得到的。从生存期的一个阶段到下一个阶段的高度连续性,即生存期后一阶段的成果只是在前一阶段成果的补充和修改。把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。2.面向对象的概念关于“面向对象”,有许多不同的看法。Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+消息通信”。如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的消息通信来执行的。(1)对象(object)一般意义来讲,对象是现实世界中存在的一个事物。可以是物理的,如一个家具或桌子,可以是概念上的,如一个开发项目。对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。①对象、属性、操作、消息定义对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,在C++中称为成员函数,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。而所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个操作名和一个参数表(可能是空的),并指定某一个对象。由一个对象接收的消息则调用消息中指定的操作,并将传递过来的实际参数与参数表中相应的形式参数结合起来。接收对象对消息的处理可能会改变对象中的状态,即改变接收对象的属性,并发送一个消息给自己或另一个对象。可以家具价格尺寸重量位置颜色属性服务购买销售称重移动桌子价格尺寸重量位置颜色购买销售称重移动属性服务5认为,这种消息的传递大致等价于过程性范型中的函数调用。(2)类(class)和实例(instance)把具有相同特征和行为的对象归在一起就形成了类。类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例。如下图所示。从“李杰”、“王辉”和“杨芳”等对象可得到类“学生”,而这些对象就称为该类的实例。类定义了各个实例所共有的结构,类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。对象、类与实例(3)继承(inheritance)如果某几个类之间具有共性的东西(信息结构和行为),抽取出来放在一个一般类中,而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承。如下图所示,。各个特殊类可以从一般类中继承共性,这样避免了重复。特殊类对一般类的继承关系(7)多态性多态性是指相同的操作、函数或过程作用于多种类型的对象上并获得不同的结果。即不同的对象,收到同一消息产生完全不同的结果,这种现象称为多态性。例如,在父类“几何图形”中,定义了一个操作“绘图”,它的子类“椭圆”和“矩形”都继承了几何图形的绘图操作。同是“绘图”操作,分别作用在“椭圆”和“矩形”上,却画出不同的图形。李杰李杰男广东软件1980.49#楼129室看书实验上课运动杨芳服务王辉男湖南计算机控制1979.19#楼320室杨芳女北京系统结构1979.125#楼418室姓名性别籍贯专业出生年月住址学生属性王辉属性属性属性看书实验上课运动服务看书实验上课运动服务看书实验上课运动服务汽车运货车救火车大轿车起重车64.UML统一建模语言用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。这三种模型都涉及到数据、控制和操作等共同的概念,只不过每种模型描述的侧重点不同。软件开发主要是软件需求和软件设计,软件需求和软件设计的关键是软件建模。最时尚的是UML的建模思想和Rose的建模实现方式.统一的建模语言(UML)已经在企业中广泛使用,它把Booch、Rumbaugh和Jacobson等各自独立的OOA和OOD方法中最优秀的特色组合成一个统一的方法。UML允许软件工程师使用由一组语法的语义的实用的规则支配的符号来表示分析模型。UML常用的图:用例图、类图、对象图、包图、顺序图、状态图用例图提供标准病症信号病历管理病人标准病症信号库医生值班护士病症监护病情报告管理中央监护《使用》《使用》《使用》类图订单DateReceivedisPrepaidNumber:StringDispatch()Close()订单项Quantity:IntegerisSatisfied1*1*产品1*客户nameaddressCreditRating()个人客户团体客户7包图顺序图用户医生值班护士病人病历管理病历用户界面病情报告局部监视报警信号病症监视器中央监护系统病人病症信号标准病症信号数据库病历库标准病症信号库用户层用户界面层应用层数据库层病情报告监视器采集信号发送信号信号异常返回打印更新中央监视系统病历报警信号电梯状态图超时在第一层上移向上移动到达上移空闲到达向下移动下移向第一层移动到达8三、例题分析一、选择题1.下列哪些是面向对象方法的基本机制(ABC)。A)继承B)消息C)方法D)结构2.UML语言支持的建模方式有(ABD)。A)静态建模B)动态建模C)模块化建模D)功能建模3.下列各种图可用于动态建模的有(ACD)。A)状态图B)类图C)顺序图D)活动图4.每个对象可用它自己的一组属性和它可执行的一组(C)来表现。A)函数B)功能C)操作D)数据5.面向对象的主要特征除唯一性、继承性、封装性外,还具有(A)A)多态性B)移植性C)完整性D)兼容性6.表示对象交互行为的模型是(D)A)对象模型B)静态模型C)功能模型D)动态模型7、UML的类图、对象图和(D)是“静态图”。A)顺序图B)状态图C)活动图D)包图二、判断题1.面向对象的的方法是以类作为最基本的元素,它是分析问题解决问题的核心。(×)2.类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(√)3.继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。4.多态性就是消息有多种类型。(×)5.类图用来表示系统中类和类与类之间的关系,它是对系统动态结构的描述。(×)6.用例模型的基本组成部件是用例、角色和用例之间的联系。(√)7.Uml的用例图是描述功能的(√)三、简答题1.阐述面向对象的特征,并做简要的解释。答:(1)对象惟一性。每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。(2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。(3)继承性。是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。(4)多态性。是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。2.面向对象程序设计有哪些优点?解:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短开发