欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第8章 面向对象设计与实现-1.pptx

    • 资源ID:96596049       资源大小:205.92KB        全文页数:35页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第8章 面向对象设计与实现-1.pptx

    第8章 面向对象设计与实现8.1 面向对象设计与结构化设计 与结构化的设计相比,面向对象的设计更符合复杂的、随机性较强和考虑并发性的系统软件设计,而不适合逻辑性很强的系统软件设计。结构化软件设计一般从系统功能入手,按照需求将系统功能分为若干个子功能模块。但是,用户的需求是在不断变化的。需求的改变往往会对功能模块产生影响,从而对整个系统产生影响,而面向对象的设计基于类、对象、封装、继承等概念,相比之下,需求的变化对系统的局部影响并不容易扩展到全局。因此,面向对象设计方法比结构化设计方法更具有优势,使用范围更广。由于在类中封装了属性和方法,因此在面向对象的类设计中已经包含了面向过程中的过程设计。此外,与面向过程中的数据设计所不同的是,面向对象设计中的数据设计并不是独立进行的,面向对象设计中的类图相当于数据的逻辑模型,可以很容易地转换成数据的物理模型。8.2 面向对象设计与面向对象分析的关系 设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。实际上,面向对象的需求分析和面向对象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲,从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。面向对象分析到面向对象设计是一个平滑的过渡,即没有间断没有明确的分界线。面向对象分析建立系统的问题域对象模型,而面向对象设计是建立求解域的对象模型。8.3 面向对象设计的过程与规则 8.3.1 面向对象设计的过程 面向对象的设计过程一般进行以下几个步骤。(1)建立软件体系结构环境图 在软件体系结构设计开始的时候,设计应该定义与软件进行交互的外部实体(其他系统、设备和人员等)以及交互的特性。一般在分析建模阶段可以获得这些信息,并使用软件体系结构环境图对环境进行建模,描述系统的出人信息流、用户界面和相关的支持处理。一旦建立了软件体系结构的环境图,描述出所有的外部软件接口,软件架构师就可以通过定义和求精实现软件体系结构的构件来描述系统的结构。这个过程可一直迭代,直到获得一个完善的软件体系结构。在设计的初始阶段,软件架构师用软件体系结构环境图对软件与外部实体交互的方式进行建模。8.3 面向对象设计的过程与规则 如图所示,与目标系统(即开发软件体系结构的系统)交互的系统可以表示为:上级系统:将目标系统作为某些高层处理方案的一部分。下级系统:被目标系统所使用,并且为完成目标系统的功能提供必要的数据和处理。同级系统:在对等的基础上相互作用(例如,信息要么由目标系统和同级系统产生,要么被目标系统和同级系统使用)。参与者:指通过产生和使用所需的信息,实现与目标系统交互的实体(人、设备)。每个外部实体都通过某一接口(带阴影的小矩形)与目标系统进行通信。8.3 面向对象设计的过程与规则(2)软件体系结构设计软件体系结构环境图建立之后,而且对所有的外部软件接口进行了描述,就可以进行软件体系结构设计了。软件体系结构设计可以自底向上进行,先为系统中最底层细节编程,然后逐步在更高层累计细节直至最终满足系统需求,如将关系紧密的对象组织成子系统或层;也可以自顶向下进行,通过分解功能来解决问题,尤其是使用设计模式或遗产系统时,会从子系统的划分人手;还可以自中向上下进行,先开始做系统中看来容易做的,再向相应的高层或底层扩展。至于选择哪一种方式,需要根据具体的情况来确定。当没有类似的软件体系结构作为参考时,常常会使用自底向上的方式进行软件体系结构设计。多数情况下,使用自顶向下的方式进行软件体系结构设计则更常见。在自顶向下这种方式下,首先要根据客户的需求选择软件体系结构风格,然后对可选的软件体系结构风格或模式进行分析,以建立最适合客户需求和质量属性的结构。需要强调的是,软件体系结构设计这个过程可一直迭代,直到获得一个完善的软件体系结构。有经验的软件设计人员应能按照项目所需的策略进行软件体系结构设计。8.3 面向对象设计的过程与规则(3)对各个子系统进行设计 大多数系统的面向对象设计模型,在逻辑上都由4大部分组成。这4大部分对应于组成目标系统的4个子系统,它们分别是问题域子系统人机交互子系统任务管理子系统数据管理子系统 当然,在不同的软件系统中,这4个子系统的重要程度和规模可能相差很大,规模过大的在设计过程中应该进一步划分成更小的子系统,规模过小的可合并在其他子系统中。某些领域的应用系统在逻辑上可能仅由3个(甚至少于3个)子系统组成。8.3 面向对象设计的过程与规则(4)对象设计及优化 对象设计是细化原有的分析对象,确定一些新的对象、对每一个子系统接口和类进行准确详细的说明。系统的各项质量指标并不是同等重要的,设计人员必须确定各项质量指标的相对重要性(即确定优先级),以便在优化对象设计时制定折衷方案。常见的对象优化设计方法有提高效率的技术和建立良好的继承结构。8.3 面向对象设计的过程与规则 8.3.2 面向对象设计的原则 面向对象的设计原则基本遵循传统软件设计应该遵循的基本原理,同时还要考虑面向对象的特点。设计原则具体如下。(1)模块化(2)抽象化(3)信息隐藏(4)低耦合(5)高内聚(6)复用性8.4 面向对象设计的启发规则 面向对象设计的启发规则是人们在长期的基于面向对象思想的软件开发实践中总结出来的经验,有利于提高开发人员进行软件设计的质量。启发规则具体如下。(1)设计结果应该清晰易懂(2)类等级深度应该适当(3)要尽量设计简单的类(4)使用简单的协议(5)使用简单的操作(6)把设计的变动减至最小8.5 系统设计 一般来说,常用的系统设计的步骤如图所示。8.5 系统设计 8.5.1 系统分解 把系统分解成若干个比较小的部分,然后再分别设计每个部分,这样做有利于降低设计的难度,有利于软件开发人员的分工协作,也有利于维护人员对系统理解和维护。系统的主要组成部分称为子系统,通常根据所提供的功能来划分子系统。各个子系统之间应该具有尽可能简单、明确的接口。接口确定了交互形式和通过子系统边界的信息流,但是无须规定子系统内部的实现算法。因此,可以相对独立地设计各个子系统。在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。采用面向对象方法设计软件系统时,面向对象设计模型针对与实现有关的因素而开展面向对象分析模型的5个活动(主题、类与对象、结构、属性和服务),它包括问题域、人机交互、任务管理和数据管理等4个部分的设计,即针对这4大部分对应于组成目标系统的4个子系统-问题域子系统、人机交互子系统、任务管理子系统和数据管理子系统进行设计。8.5 系统设计 典型的面向对象设计模型8.5 系统设计(1)问题域子系统把面向对象分析模型直接拿来,针对实现的要求进行必要的增补和调整,例如,需要对类、结构、属性及服务进行分解和重组。这种分解是根据一定的过程标准来做的,标准包括可重用的设汁与编码类,把问题域专用类组合在一起,通过增加一般类来创立约定,提供一个继承性的支撑层次改善界面,提供存储管理,以及增加低层细节等。(2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度上依赖于所用的图形用户界面环境,例如Windows、Delphi、C+,而且可能包括“窗口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。(3)任务管理子系统包括任务的定义、通信和协调,以及硬件分配、外部系统及设备约定,可能包括的类有“任务”类和“任务协调”类。(4)数据管理子系统包括永久数据的存取,它隔离了物理的数据管理方法,无论是普通文件、带标记语言的普通文件、关系型数据库、面向对象数据库等。可能包括的类有“存储服务”,协调每个需永久保存的对象的存储。8.5 系统设计 8.5.2 问题域子系统的设计问题域子系统也称问题域部分。面向对象方法中的一个主要目标是保持问题域组织框架的完整性、稳定性,这样可提高分析、设计到实现的追踪性。因为系统的总体框架郜是建立在问题域基础上的,所以,在设计与实现过程中细节无论做怎样的修改,例如增加具体类、属性或服务等,都不会影响开发结果的稳定性。稳定性是在类似系统中重用分析、设计和编程结果的关键因素。为更好地支持系统的扩充,也同样需要稳定性。问题域子系统可以直接引用面向对象分析所得出的问题域精确对象模型,该模型提供了完整的框架,为设计问题域子系统奠定了良好的基础,面向对象设计就应该保持该框架结构。只要可能,就应该保持面向对象分析所建立的问题域结构。通常,面向对象设计在分析模型的基础上,从实现角度对问题域模型做一些补充或修改,修改包括增添、合并或分解类和对象、属性及服务、调整继承关系等。如果问题域子系统相当复杂庞大时,则应把它进一步分解成若干更小的子系统。8.5 系统设计 如何对问题域子系统进行设计在面向对象设计过程中,可能对面向对象分析所得出的问题域模型做的补充或修改如下。调整需求复用已有的类把问题域类组合在一起增添一般化类以建立协议调整继承层次8.5 系统设计 8.5.3 人机交互子系统的设计 在现在的大型软件系统中,人机交互对象(类)通常是窗口或报告。软件设计者至少要考虑以下3种窗口:(1)安全/登录窗口。这种窗口是用户访问系统的必经之路。(2)设置窗口。这种窗口具有以下功能:创建或初始化系统运行必需的对象。例如用来创建、维护和删除持久对象的窗口。持久对象类似于关系数据库信息系统中的数据记录。例如车辆、车主、销售记录和事务。系统管理功能,例如添加和删除授权用户,修改用户使用系统的权限等。启动或关闭设备,例如启动打印机等。(3)业务功能窗口。这种窗口用来帮助完成那些由信息系统和其用户所进行的业务交互所必要的功能。例如,用于人机交互部件的登记、设置、车辆维修和安全事故的窗口。报告是另一种常用的形式,也属于人机交互部件。报告对象(类)可以包括绝大多数用户需要的信息,例如,登记、车辆维修、安全事故和缴费的报告。8.5 系统设计 8.5.4 任务管理子系统的设计 常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务、协调任务等。设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行。(1)确定事件驱动型任务。这类任务可能主要完成通信工作,如与设备、屏幕窗口、其他任务、子系统、另一个处理器或其他系统通信。例如,专门提供数据到达信号的任务,数据可能来自于终端也可能来自于缓冲区。(2)确定时钟驱动型任务。某些任务每隔一定时间间隔就被触发以执行某些处理。例如,某些设备需要周期性地获得数据;某些人机接口、子系统、任务、处理器或其他系统也可能需要周期性的通信。(3)确定优先任务。优先任务可以满足高优先级或低优先级的处理需求。8.5 系统设计(4)确定关键任务。关键任务是有关系统成功或失败的关键处理,这类处理通常都有严格的可靠性要求。(5)确定协调任务。当系统中存在3个以上任务时,就应该增加一个任务,用它作为协调任务。(6)审查每个任务。对任务的性质进行仔细审查,去掉人为的、不必要的任务,使系统中包含的任务数保持到最少。(7)确定资源需求。设计者在决定到底采用软件还是硬件的时候,必须综合权衡一致性、成本、性能等多种因素,还要考虑未来的可扩充性和可修改性。(8)定义任务。说明任务的名称,描述任务的功能、优先级,包含此任务的服务、任务与其他任务的协同方式以及任务的通信方式。8.5 系统设计 8.5.5 数据管理子系统的设计数据管理子系统是系统存储或检索对象的基本设施,它建立在某种数据存储管理系统之上,并且隔离了数据存储管理模式(文件、关系数据库或面向对象数据库)的影响,但实现细节集中在数据管理子系统中。这样既有利于软件的扩充、移植和维护,又简化了软件设计、编码和测试的过程。设计数据管理子系统,既需要设计数据格式又需要设计相应的服务。8.5 系统设计 1.设计数据格式。设计数据格式的方法与所使用的数据存储管理模式密切相关,下面分别介绍每种管理模式的数据格式设计方法。(1)文件系统。文件系统设计数据格式由以下步骤组成。定义第一范式表为每个第一范式表定义一个文件。测量性能和需要的存储容量。修改原设计的第一范式,以满足性能和存储需求。(2)关系数据库管理系统。关系数据库管理系统设计数据格式由以下步骤组成。定义第三范式表为每个第三范式表定义一个数据库表。测量性能和需要的存储容量。修改先前设计的第三范式,以满足性能和存储需求。(3)面向对象数据库管理系统。面向对象数据库管理系统设计数据格式由以下步骤组成。扩展的关系数据库途径:使用与关系数据库管理系统相同的方法。扩展的面向对象程序设计语言途径:不需要规范化属性的步骤,因为数据库管理系统本身具有把对象值映射成存储值的功能。8.5 系统设计 2.设计相应的服务 如果某个类的对象需要存储起来,则在这个类中增加一个属性和服务,用于完成存储对象自身的工作。应该把为此目的增加的属性和服务作为“隐含”的属性和服务,即无须在面向对象设计模型的属性和服务层中显式地表示它们,仅需在关于类与对象的文档中描述它们。这样设计之后,对象将知道怎样存储自己。用于“存储自己”的属性和服务,在问题域子系统和数据管理子系统之间构成一座必要的桥梁。利用多重继承机制,可以在某个适当的基类中定义这样的属性和服务,然后,如果某个类的对象需要长期存储,该类就从基类中继承这样的属性和服务。8.5 系统设计 数据存放设计是按照文件、关系数据库或面向对象数据库来设计数据的存放。1采用文件进行数据管理 被存储的对象需要知道打开哪个(些)文件,怎样把文件定位到正确的记录上,怎样检索出旧值(如果有的话),以及怎样用现有值更新它们。此外,还应该定义一个Object Server(对象服务器)类,并创建它的实例。该类提供下列服务:通知对象保存自身;检索已存储的对象(查找,读值,创建并初始化对象),以便把这些对象提供给其他子系统使用。2采用关系数据库进行数据管理 被存储的对象应该知道访问哪些数据库表,怎样访问所需要的行,怎样检索出旧值(如果有的话),以及怎样用现有值更新它们。此外,还应该定义一个Object Server类,并声明它的对象。该类提供下列服务:通知对象保存自身;检索已存储的对象(查找,读值,创建并初始化对象),以便由其他子系统使用这些对象。3采用面向对象数据库进行数据管理 这是一种扩充的方法,与采用关系数据库进行数据管理所介绍的方法相同。8.6 对象设计 对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型。经过多次反复的分析和系统设计之后,设计者通常会发现有些内容没有考虑到。这些没有考虑到的内容,会在对象设计的过程中被发现。这个设计过程包括标识新的解决方案对象、调整购买到的商业化构件、对每个子系统接口的精确说明和类的详细说明。面向对象分析得出的对象模型,通常并不详细描述类中的服务。面向对象设计则是扩充、完善和细化面向对象分析模型的过程,设计类中的服务、实现服务的算法是面向对象设计的重要任务,还要设计类的关联、接口形式以及设计的优化。对象设计的内容包括:对象中对属性和操作的详细描述;对象之间发送消息的协议;类之间的各种关系的定义;对象之间的动态交互行为等。8.6 对象设计 8.6.1 设计类中的服务 面向对象分析得出的对象模型,通常并不详细描述类中的服务。面向对象设计则是扩充、完善和细化面向对象分析模型的过程,所以,详细描述类中的服务是面向对象设计的重要任务。1.确定类中应有的服务从对象模型中引入服务从动态模型中确定服务从功能模型中确定服务 2.设计实现服务的方法设计实现服务的算法选择数据结构定义内部类和内部操作8.6 对象设计 8.6.2 设计类的关联 在对象模型中,关联是连接不同对象的纽带,它指定了对象相互间的访问路径。在面向对象设计过程中,设计人员必须确定实现关联的具体策略。既可以选定一个全局性的策略统一实现所有关联,也可以分别为每个关联选择具体的实现策略,以与它在应用系统中的使用方式相适应。8.6 对象设计 8.6.3 对象设计优化1.确定优先级系统的各项质量指标并不是同等重要的,设计人员必须确定各项质量指标的相对重要性(即确定优先级),以便在优化设计时制定折衷方案。2.提高效率的几项技术(1)增加冗余关联以提高访问效率在面向对象分析过程中,应该避免在对象模型中存在冗余的关联,因为冗余关联不仅没有增添关于问题域的任何信息,反而会降低模型的清晰程度。但是,在面向对象设计过程中,当考虑用户的访问模式,及不同类型访问之间彼此的依赖关系时,就会发现,分析阶段确定的关联可能并没有构成效率最高的访问路径。为了提高访问效率,需要适当地增加一些冗余关联。8.6 对象设计(2)调整查询次序改进了对象模型的结构,从而优化了常用的遍历之后,接下来就应该优化算法了。优化算法的一个途径是尽量缩小查找范围。(3)保留派生属性通过某种运算而从其他数据派生出来的数据,是一种冗余数据。通常把这类数据“存储”(或称为“隐藏”)在计算它的表达式中。如果希望避免重复计算复杂表达式所带来的开销,可以把这类冗余数据作为派生属性保存起来。3.调整继承关系在面向对象设计过程中,建立良好的继承关系是优化设计的一项重要内容。继承关系能够为一个类族定义一个协议,并能在类之间实现代码共享以减少冗余。一个基类和它的子孙类在一起称为一个类继承。在面向对象设计中,建立良好的类继承是非常重要的。利用类继承能够把若干个类组织成一个逻辑结构。8.8 面向对象实现 面向对象实现主要是指把面向对象设计的结果翻译成用某种程序语言书写的面向对象程序。在开发过程中,类的实现是核心问题。在用面向对象风格所写的系统中,所有的数据都被封装在类的实例中。而整个程序则被封装在一个更高级的类中。在使用既存部件的面向对象系统中,可以只花费少量时间和工作量来实现软件。只要增加类的实例,开发少量的新类和实现各个对象之间互相通信的操作,就能建立需要的软件。在面向对象实现中,涉及到的主要技术有:类的封装和信息隐藏、类继承、多态和重载、模板、持久保存对象、参数化类、异常处理等。8.9 面向对象的软件测试 在基于面向对象思想的软件开发中,由于面向对象的软件工程方法与传统的软件工程方法有诸多不同,传统的软件测试模型对面向对象的软件系统已经不再适用。实际上,在面向对象的软件开发中,人们已经抛弃了传统的测试模型。针对面向对象的开发模型中面向对象分析(OOA)、面向对象设计(OOD)、面向对象实现(OOP)三个阶段,同时结合传统的测试步骤的划分,面向对象的软件测试可以分为:面向对象分析的测试;面向对象设计的测试;面向对象实现的测试;面向对象的单元测试;面向对象的集成测试;面向对象的系统测试及验收测试。8.9面向对象的软件测试 1面向对象分析的测试 结构化需求分析把目标系统看成是一个由若干功能模块组成的集合,而面向对象需求分析以现实世界中的概念为模型结构。前者关注系统的行为,即功能结构,而后者更关注于系统的逻辑结构。对面向对象需求分析的测试,要考虑:对认定的对象或类的测试;对定义的属性和操作的测试;对类之间层次关系的测试;对对象之间交互行为的测试;对系统逻辑模型的测试等。8.9面向对象的软件测试 2面向对象设计的测试 与传统的软件工程方法不同的是,面向对象分析和面向对象设计之间并没有严格的界限。实际上,面向对象设计是对面向对象分析结果的进一步细化、纠正和完善。对面向对象设计的测试涉及了面向对象分析的测试内容,但是会更加关注对类及其类之间关系的测试和对类库支持情况的测试。8.9面向对象的软件测试 3面向对象实现的测试 面向对象的程序具有封装、继承和多态的特性。测试多态的特性时要尤为注意,因为它使得同一段代码的行为复杂化,测试时需要考虑不同的执行情况和行为。由于系统功能的实现分布在类中,所以本阶段的测试中还要重点评判类是否实现了要求的功能。4面向对象的单元测试 面向对象的单元测试以类或对象为单位。由于类包含一组不同的操作,并且某些特殊的操作可能被多个类共享,因此单元测试不能孤立地测试某个操作,而是将操作作为类的一部分。8.9面向对象的软件测试 5面向对象的集成测试面向对象的集成测试采用基于线程或者基于使用的测试方法。基于线程的测试是指把回应系统外界输入的一组相关的类集成起来,对线程进行集成并测试。基于使用的测试方法按照类对服务器的依赖以及对其他类的依赖程度,把类划分为独立类和依赖类。独立类是指那些几乎不使用服务器的类。在进行基于使用的测试的时候,先对独立类进行测试。依赖类是使用独立类的类,即它们对独立类存在着某种程度的依赖。在测试完独立类后,就可以对依赖类进行测试了。依赖类中可能还划分为多个层次,测试时按照逐层向下的顺序,直到测试完整个系统。8.9面向对象的软件测试 6面向对象的系统测试及验收测试在系统测试的过程中,软件开发人员要尽量搭建与用户的实际使用环境相同的平台,对目标系统是否能作为一个整体,满足用户在性能、功能、安全性、可靠性等各个方面对系统的要求做出检测和评估。面向对象的系统测试要以面向对象需求分析的结果为依据,对需求分析中描述的对象模型、交互模型等各种分析模型进行检验。验收测试是以用户为主的测试,是将软件产品正式交付给用户或市场发布之前的最后一个测试阶段。

    注意事项

    本文(第8章 面向对象设计与实现-1.pptx)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开