工学软件工程复习资料.doc
《工学软件工程复习资料.doc》由会员分享,可在线阅读,更多相关《工学软件工程复习资料.doc(45页珍藏版)》请在咨信网上搜索。
1、第六章 面向对象的软件工程一、复习要求1. 了解面向对象的概念,包括什么是范型,面向对象的概念,对象和对象的分类等。2. 了解用面向对象方法构造软件的开发过程,包括应用生存期和类生存期的概念。3. 了解面向对象分析方法,包括论域分析,应用分析的介绍。4. 了解面向对象设计方法,包括高层设计模型和设计原则,类设计的目标和方针,复用设计及类设计的方法。5. 了解有影响的coad方法、Booch方法和OMT方法的基本思想。二、内容提要面向对象技术是一个非常实用而强有力的软件开发方法。它的特征是: 方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑而得到的。 从生存期的一个阶段到下一个阶段的高度
2、连续性,即生存期后一阶段的成果只是在前一阶段成果的补充和修改。 把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。1. 面向对象的概念(1) 范型范型(Paradigm)又称为范例、风范或模式(Pattern)。从软件开发角度来看,范型与问题解决技术有关。范型定义了特定的问题和应用的开发过程中将要遵循的步骤,确定将用于表示问题和它的解决的那些成分的类型,并利用这些成分表示与问题解决有关的抽象,直接得到问题的结构。因此,范型的选择影响整个软件开发生存期。就是说,它支配了设计方法、编码语言、测试和检验技术的选择。 流行的范型 :目前流行多种范型,它
3、们提供了许多方法,可进行系统分解。流行的范型有:过程性的,逻辑的,面向存取的,面向进程的,面向对象的,函数型的,说明性的。每个范型都有它的支持者和用户,每个范型都特别适合于某种类型的问题或子问题。例如,逻辑程序设计范型是基于规则的,它把有关问题的知识分解成一组具体规则,用语言的“if_then”等结构来表示这些规则。面向存取范型是一种在构造用户界面方面很有用的技术。此外,每一个范型都用不同的方式考虑问题,每一个范型都使用不同的方法来分解问题,而且每一个范型都导致不同种类的块、过程、产生规则。下面主要讨论三种范型。研究的目的是帮助我们找到解决问题的入手点。 过程性范型 :过程性范型是使用最广泛、
4、历史最长的软件范型。它产生过程的抽象,这些抽象把软件视为处理流,并定义成由一系列步骤构成的算法。每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构,如图6.1(a)所示。过程性范型侧重建立构成问题解决的处理流,数据抽象、数据结构是根据算法步骤的要求开发的,它贯穿于过程,提供过程所要求操作的信息。系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。过程性范型是一种成熟的应用开发过程。对这种方法已有许多支持工具。然而,在大型系统的开发上存在一些问题。 面向对象范型 :
5、在过程性范型中优先考虑的是过程抽象,而在面向对象范型中优先考虑的是实体,即问题论域的对象。在面向对象范型中,把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。面向对象系统中的对象是数据抽象与过程抽象的综合。系统的状态保存在各个数据抽象的核心所定义的数据存储中。控制流包含在各个数据抽象中的操作内。不像在过程性范型里那样,把数据从一个过程传送到另一个过程,而是把控制流从一个数据抽象通过消息传送到另一个数据抽象。完成的系统体系结构更复杂但也更灵活,如图6.2(b)所示。把控制流分离成块,这样可以把复杂的动作视为各个局部间的相互作用。图6.1过程性系统
6、和面向对象系统的基本构造 面向进程的范型 :面向进程的范型是把一个问题分解成独立执行的模块。让不只一个程序同时运行。这些进程互相配合,解决问题。面向进程范型产生的主要的块是进程。一个进程中的活动独立于其它进程的活动,但可以要求从其它进程得到信息,或为其它进程提供信息。甚至可以异步处理,仅需要进程暂停发送或接收信息。在面向对象范型中,各个对象是相对独立的,但也存在单线索(单线程)控制。面向进程范型支持与面向对象范型相同的封装,但可提供多线索(多线程)执行。图6.2 一个智能数据分析系统 混合范型 :在大型系统的开发中,很难说哪种范型对整个问题的解决最好。系统开发现在有一种补充步骤,可把大型问题分
7、解成一组子问题。对于每个子问题可以采用适当的软件范型。例如,设计一个智能数据分析系统时,可把它分解为4个子系统,如图6.2所示。系统的数据库界面,可以使用面向对象的方法进行设计;智能数据分析用逻辑范型设计;而分析算法则是过程性的;系统通过一个用户界面来实用化,这个用户界面是用面向存取范型设计出来的。这种设计需要有某种实现语言或一组协同语言的支持。许多流行的功能不断增强的语言支持不只一种设计范型。对于混合范型,现在已经存在不少技术。像C+和并发C这样的语言都是多范型语言,支持过程性范型和面向对象范型。并发C还支持面向进程范型。系统可以使用单一的语言,利用两种或多种范型写成。还可以利用可共享数据格
8、式和连接规约的某些语言,把用这些语言分别编写的块链接到某个单一的应用中去。(2) 面向对象的概念关于“面向对象”,有许多不同的看法。Coad和Yourdon给出了一个定义:“面向对象 = 对象 + 类 + 继承 + 消息通信”。如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的消息通信来执行的。(3) 对象(object)图6.3 对象的定义家具属性属性价格尺寸重量位置颜色桌子价格尺寸重量位置颜色一般意义来讲,对象是现实世界中存在的一个事物。可以是物理的,如一个家具或桌子,如图6.3所示,可
9、以是概念上的,如一个开发项目。对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。 例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。 对象、属性、操作、消息定义服务服务购买销售称重移动购买销售称重移动对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,在C+中称为成员函数,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。而所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个
10、操作的规格说明。发送给一个对象的消息定义了一个操作名和一个参数表(可能是空的),并指定某一个对象。由一个对象接收的消息则调用消息中指定的操作,并将传递过来的实际参数与参数表中相应的形式参数结合起来。接收对象对消息的处理可能会改变对象中的状态,即改变接收对象的属性,并发送一个消息给自己或另一个对象。可以认为,这种消息的传递大致等价于过程性范型中的函数调用。 对象的分类 外部实体:与软件系统交换信息的外部设备、相关子系统、操作员或用户等。 信息结构:问题信息域中的概念实体,如信号、报表、显示信息等。 需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的事件,如单击鼠标左键、击打键盘“”键等。
11、角色:与软件系统交互的人员所扮演的角色,如经理、部长、技术支持等。 组织机构:有关机构,如单位、小组等。 位置:作为系统环境或问题上下文的场所、位置,如客户地址、收件人(机构)地址等。 操作规程:如操作菜单、某种数据输入过程等。在标识对象时必需注意遵循“信息隐蔽”的原则:必需将对象的属性隐藏在对象的内部,使得从对象的外部看不到对象的信息是如何定义的,只能通过该对象界面上的操作来使用这些信息。对象的状态通过给对象赋予具体的属性值而得到。它只能通过该对象的操作来改变。对象有两个视图,分别表现在分析设计和实现方面。从分析及设计方面来看,对象表示了一种概念,它们把有关的现实世界的实体模型化。从实现方面
12、来看,一个对象表示了在应用程序中出现的实体的实际数据结构。之所以有两个视图,是为了把说明与实现分离,对数据结构和相关操作的实现进行封装。(4) 类(class)和实例(instance)把具有相同特征和行为的对象归在一起就形成了类。类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例。对象的状态则包含在它的实例变量,即实例的属性中。如图6.4所示。从“李杰”、“王辉”和“杨芳”等对象可得到类“学生”,而这些对象就称为该类的实例。类定义了各个实例所共有的结构,类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。 李杰王辉杨
13、芳学生 属性属性属性属性李杰男广东软件1980.49#楼129室王辉男湖南计算机控制1979.19#楼320室杨芳女北京系统结构1979.125#楼418室姓名性别籍贯专业出生年月住址服务服务服务看书实验上课运动看书实验上课运动看书实验上课运动看书实验上课运动服务图6.4 对象、类与实例面向对象程序设计语言,如C+和 smalltalk都定义了一个new操作,可建立一个类的新实例。C+还引入了构造函数,用它在声明一个对象时建立实例。此外,程序设计语言给出了不同的方法,来撤消(称为析构)实例,即当某些对象不再使用时把它们删去,把存储释放以备其它对象使用。C+给出了一个操作delete,可以释放一
14、个对象所用的空间。C+还允许每个类定义自己的析构方法,在撤消一个对象时调用它。smalltalk没有提供一个机制来撤消对象,但可以进行无用单元收集。类常常可看做是一个抽象数据类型(ADT)的实现。但更重要的是把类看做是表示某种概念的一个模型。事实上,类是单个的语义单元,它可以很自然地管理系统中的对象,匹配数据定义与操作。类加进了操作,给通常的记录赋予了语义,可提供各种级别的可访问性。(5) 继承 (inheritance)如果某几个类之间具有共性的东西(信息结构和行为),抽取出来放在一个一般类中,而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承。如图6.5所示,。各个
15、特殊类可以从一般类中继承共性,这样避免了重复。汽车运货车救火车起重车大轿车图6.5 特殊类对一般类的继承关系图6.6 多继承建立继承结构的好处:教师 易编程、易理解 代码短, 结构清晰;退休者 易修改:共同部分只要在一处修改即可; 易增加新类:只须描述不同部分。(6) 多继承退休教师如果一个类需要用到多个既存类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。(7) 多态性和动态绑定对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。发送消息的对象可能不知道另一个对象的类型是什么。如在
16、C程序中使用命令ClearInt ( ) 时要严格区分该命令适合一个整数,还是一个整数数组。但在C+情形,ClearInt ( ) 对两者都适用,它自己判断对象是哪一个。这就是多态性。它意味着一个操作在不同类中可以有不同的实现方式。如清零操作 ClearInt ( ) 针对消息对象是 int array 还是int,其实现是不同的。在一个面向对象的多态性语言中,可能代替一个特定类型的类型的集合就是它的子类集合。图6.7 4个类的继承层次三角形多边形四边形例如,图6.7给出了 4 个类的继承层次。使用这个继承结构,发送给多边形类的所有消息,它的所有子类都能够响应。又例如,想要在屏幕上画一系列多边
17、形,多态性允许一个表的元素可以属于一组指定的类型而不仅仅是一个类型,可以认为这是一个类族。通过遍历这个表,发送给各个表元素以draw消息,画出所有的多边形。矩形动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。它与多态性可以使我们建立的系统更灵活,易于扩充。做为动态绑定的例子,考虑在多边形类中的方法contains? (aPoint)。这个操作可以在类层次的各层重新实现,以有效利用各个子类的特殊的特征。例如,假定一个矩形有某些边与屏幕的边平行,这时,检查一个点是否包含在矩形内,比检查一个点是否在一个一般的四边形内的效率要高一些。2. 面向
18、对象软件的开发过程面向对象范型不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系以及如何进行系统构造的软件方法学。用面向对象开发方法构造的软件具有以下特点: 面向对象的技术建立的模型与客观世界一致,因而便于理解; 适应变化的需要,修改局限在模块中; 可复用性。(1) 应用生存期图6.8给出应用生存期模型。在图中各个阶段的顺序是线性的,但实际上开发过程不是线性的。还没有办法用图来逼真地反映在面向对象开发过程中各个阶段之间的复杂交互。有一部分分析工作在设计之前实行,但有些分析工作与其它部分的设计与实现并行进行。图6.8 一个基于复用的应用生存期开发可复用的软件构件
19、是软件开发过程的一部分。面向对象方法以类作为单元,并分别考虑类的生存期与应用生存期。类生存期可包含在图6.8中的类开发阶段中,可与应用生存期集成。(2) 类生存期图6.9 类生存期在面向对象软件开发过程中特别重视复用。软件构件应独立于当初开发它们的应用而存在。构件的开发瞄准某些局部的设计和实现,它们可用于当前问题的解决,但为了在以后的项目中使用,它们还应当足够通用。在以后的应用开发中,可以调整这些独立构件以适应新问题的需要。因此,应使得类成为一个可复用的单元,图6.9提出了一个类生存期。类生存期与应用生存期交叉。在应用生存期的每一个阶段都可做类的标识。类生存期有自己的步骤,与任一特定应用的开发
20、无关。按照这些步骤,可以完整地描述一个基本实体。而不仅仅考虑当前正在开发的系统。系统开发的各个阶段都可能会标识新的类。随着各个新类的标识,类生存期引导开发工作逐个阶段循序渐进。例如,在应用分析中已经标识了对一个图形显示设备的要求。如果这样一个图形显示设备类不存在,就应着手开发。但是,用到显示器所有可能操作的应用寥寥无几。若把这些操作的开发当做一个特定应用系统开发的一部分,那么只可能标识和实现该系统所要求的那些操作。但如果考虑让构件独立于应用,就必须能够综合出超出当前系统需求的开发要求,生成一种能表示成一个完全的概念的模型并可建立为以后其它系统复用的类。在纯面向对象的系统开发中,一个应用程序就“
21、是”一个类。基本的类,像list类,可不涉及应用,但基本类的实例要聚合到其它类的定义中。这些类依次又聚合到更复杂的类定义中,最终将会遇到一个类,它涉及整个应用。下面概括了类生存期各个阶段主要做的事情。 类的规格说明 :对每一个类都要开发它的规格说明,无论是在哪一个阶段标识的类都是如此。类的规格说明定义了施加于对象的数据存储上的一组操作。这组操作应工作在封装在对象内部的数据存储上,或返回关于对象状态的信息。操作的名字应能反映这个操作本身的含义。类的规格说明必须足够完整,使得它能够与在类资源库中的那些可复用的类的规格说明做比较。 类的设计与实现 :此时尽可能利用既存类提供为当前应用所需要的功能。图
22、6.9给出了利用既存类的三个途径: 原封不动地复用既存类。 对既存类进行演化以得到满足要求的类。演化可以是横向的,也可以是纵向的。横向的演化生成既存类的一个新的版本,而纵向的演化将从既存类导出新类。 重新开始进行开发。一个新的继承结构将建立两种类:一种是抽象类,它概括了将要表达的概念;另一种是具体类,它要实现这个概念。 求精和维护 :维护活动是针对应用系统的,但求精过程是针对类和结构的。因为我们利用抽象进行开发,因此,维护活动每时每刻都可能修改这些抽象。随着经验的增长,还可以标识抽象的抽象,使得继承结构通过一般化,增加新的层次。为便于类的调整,应尽量做到定义与实现分离,实现概念封装和信息隐蔽,
23、使得类具有更大的独立性。在使用一个类或复用一个类时,类与类之间产生一种相互依赖关系。但对一个类的公有界面所做的多次修改不应影响使用它的那些类,在公有界面上增加新的操作不应改变既存的软件。需要谨慎处理的是删除操作或改变操作的特征。(3) 面向对象软件的开发过程面向对象软件的开发过程开始于问题论域,经历从问题提出到解决的一系列过程。下面具体说明在过程中的这些步骤。 分析阶段 :分析阶段包括两个步骤:论域分析和应用分析。它们都要标识问题论域中的抽象。在分析中,需要找到特定对象,基于对象的公共特性把它们组合成集合,标识出对这个问题的一个抽象。同时要标识抽象之间的关系,并建立对象之间的消息连接。 论域分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 软件工程 复习资料
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。