软件工程基础与应用课件 第9章 面向对象设计_第1页
软件工程基础与应用课件 第9章 面向对象设计_第2页
软件工程基础与应用课件 第9章 面向对象设计_第3页
软件工程基础与应用课件 第9章 面向对象设计_第4页
软件工程基础与应用课件 第9章 面向对象设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章

面向对象设计本章概述2本章首先介绍面向对象设计与结构化设计的不同点,以及面向对象设计与面向对象分析的关系。然后介绍面向对象设计的过程、原则和启发规则。接着讲述系统设计,包括系统分解以及对问题域子系统、人机交互子系统、任务管理子系统、和数据管理子系统的设计。最后,对对象设计进行较为详细的阐述,包括设计类中的服务、设计类的关联和对象设计优化。本章目标:了解面向对象设计与结构化设计的不同理解面向对象设计与面向对象分析的关系理解面向对象设计的过程、原则和启发规则熟悉面向对象系统分解方法熟悉面向对象问题域、人机交互、任务管理和数据管理各子系统的设计方法掌握对象设计方法熟悉软件设计模式。目录3面向对象设计与结构化设计面向对象设计与面向对象分析的关系面向对象设计的过程与原则面向对象设计的启发规则系统设计对象设计第一节第二节第三节第四节第五节第六节第七节软件设计模式第一节面向对象设计与结构化设计9.1面向对象设计与结构化设计与结构化的设计相比,面向对象的设计更符合复杂的、随机性较强和考虑并发性的系统软件设计,而不适合逻辑性很强的系统软件设计。结构化软件设计一般从系统功能入手,按照需求将系统功能分为若干个子功能模块。但是,用户的需求是在不断变化的。需求的改变往往会对功能模块产生影响,从而对整个系统产生影响,而面向对象的设计基于类、对象、封装、继承等概念,相比之下,需求的变化对系统的局部影响并不容易扩展到全局。因此,面向对象设计方法比结构化设计方法更具有优势,使用范围更广。501020304GOAL9.1面向对象设计与结构化设计由于在类中封装了属性和方法,因此在面向对象的类设计中已经包含了面向过程中的过程设计。此外,与面向过程中的数据设计所不同的是,面向对象设计中的数据设计并不是独立进行的,面向对象设计中的类图相当于数据的逻辑模型,可以很容易地转换成数据的物理模型。6第二节面向对象设计与面向对象分析的关系9.2面向对象设计与面向对象分析的关系与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。实际上,面向对象分析到面向对象设计是一个平滑的过渡,即没有间断没有明确的分界线,需求分析和面向对象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲,从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。8面向对象设计把分析阶段得到的需求转变成符合各项要求的实现方案,考虑系统的具体实现环境的约束面向对象分析建立系统的问题域对象模型,脱离现实实现求解域问题域第三节面向对象设计的过程与规则9.3.1面向对象设计的过程10030102ThreeTwoOne建立软件体系结构环境图软件体系结构设计对各个子系统进行设计Four04对象设计及优化9.3.1面向对象设计的过程建立软件体系结构环境图在软件体系结构设计开始的时候,设计应该定义与软件进行交互的外部实体(其他系统、设备和人员等)以及交互的特性。一般在分析建模阶段可以获得这些信息,并使用软件体系结构环境图对环境进行建模,描述系统的出人信息流、用户界面和相关的支持处理。一旦建立了软件体系结构的环境图,描述出所有的外部软件接口,软件架构师就可以通过定义和求精实现软件体系结构的构件来描述系统的结构。这个过程可一直迭代,直到获得一个完善的软件体系结构。在设计的初始阶段,软件架构师用软件体系结构环境图对软件与外部实体交互的方式进行建模。11定义交互环境建模描述接口求精实现9.3.1面向对象设计的过程12如图所示,与目标系统(即开发软件体系结构的系统)交互的系统可以表示为:上级系统:将目标系统作为某些高层处理方案的一部分。下级系统:被目标系统所使用,并且为完成目标系统的功能提供必要的数据和处理同级系统:在对等的基础上相互作用(例如,信息要么由目标系统和同级系统产生,要么被目标系统和同级系统使用)。参与者:指通过产生和使用所需的信息,实现与目标系统交互的实体(人、设备)。每个外部实体都通过某一接口(带阴影的小矩形)与目标系统进行通信。9.3.1面向对象设计的过程

软件体系结构设计软件体系结构环境图建立之后,而且对所有的外部软件接口进行了描述,就可以进行软件体系结构设计了。至于选择哪一种方式,需要根据具体的情况来确定。当没有类似的软件体系结构作为参考时,常常会使用自底向上的方式进行软件体系结构设计。多数情况下,使用自顶向下的方式进行软件体系结构设计则更常见。01自底向上Scheme1先为系统中最底层细节编程,然后逐步在更高层累计细节直至最终满足系统需求,如将关系紧密的对象组织成子系统或层02自顶向下Scheme2通过分解功能来解决问题,尤其是使用设计模式或遗产系统时,会从子系统的划分人手03自中向上下Scheme3先开始做系统中看来容易做的,再向相应的高层或底层扩展。9.3.1面向对象设计的过程14

软件体系结构设计在自顶向下这种方式下,首先要根据客户的需求选择软件体系结构风格,然后对可选的软件体系结构风格或模式进行分析,以建立最适合客户需求和质量属性的结构。需要强调的是,软件体系结构设计这个过程可一直迭代,直到获得一个完善的软件体系结构。有经验的软件设计人员应能按照项目所需的策略进行软件体系结构设计。

9.3.1面向对象设计的过程对各个子系统进行设计当然,在不同的软件系统中,这4个子系统的重要程度和规模可能相差很大,规模过大的在设计过程中应该进一步划分成更小的子系统,规模过小的可合并在其他子系统中。某些领域的应用系统在逻辑上可能仅由3个(甚至少于3个)子系统组成。15问题域子系统任务管理子系统人—机交互子系统数据管理子系统问题域子系统人—机交互子系统任务管理子系统数据管理子系统9.3.1面向对象设计的过程对象设计及优化对象设计是细化原有的分析对象,确定一些新的对象、对每一个子系统接口和类进行准确详细的说明。系统的各项质量指标并不是同等重要的,设计人员必须确定各项质量指标的相对重要性(即确定优先级),以便在优化对象设计时制定折衷方案。常见的对象优化设计方法有提高效率的技术和建立良好的继承结构。9.3.2面向对象设计的原则面向对象的设计原则基本遵循传统软件设计应该遵循的基本原理,同时还要考虑面向对象的特点。设计原则具体如下。17模块化结构化设计中,一个模块通常为一个过程或一个函数,它们封装了一系列控制逻辑。而面向对象设计中,一个模块通常为一个类或对象,封装了事物属性和行为。01抽象化类是对一组具有相似特征的对象的抽象,而对象是对客观事物的抽象。02信息隐藏对于类而言,其内部信息如属性的表示方法和操作的实现算法,对外界是隐藏的。外界通过有限的接口来访问类的内部信息。039.3.2面向对象设计的原则18低耦合在面向对象设计中,耦合主要指对象之间相互关联的紧密程度,低耦合有利于降低一个模块改变对其他模块的影响。高内聚内聚与耦合密切相关,低耦合往往意味着高内聚,高内聚有助于提高系统独立性。复用性尽量使用已有的类;构造新类时,需要考虑该类将来被复用的可能。提高类的复用性以节约资源。第四节面向对象设计的启发规则9.4面向对象设计的启发规则类等级深度适当02尽量设计简单的类03设计结果清晰易懂可以为后续的软件开发提供便利,同时还能够提高软件可维护性。要做到这一点首先应该注意对类、属性、操作的命名,确保含义清晰一致。其次开发过程中设计新类时应尽量遵循已有的协议,遵守消息模式(如果已经定义)。01不能随意创建派生类,对于中等规模系统,类的等级层数应在5-9。便于开发和管理。过于庞大的类会造成维护困难、不灵活等问题。应尽量简化对象之间的合作关系,为每个类分配的任务尽量简单,控制类中包含的属性和操作的数量。面向对象设计的启发规则是人们在长期的基于面向对象思想的软件开发实践中总结出来的经验,有利于提高开发人员进行软件设计的质量。9.4面向对象设计的启发规则使用简单的操作05设计变动减至最小06使用简单的协议减少消息的参数个数时降低类之间耦合程度的有效手段。一般来说参数最好在3个以内,且数据类型应该尽量简单。04控制操作中源程序的语句行数或语句嵌套层数,从而简化操作。设计的变动会造成资源或时间上的消耗。虽然变动是正常情况,但开发人员设计时应尽量降低变动的概率。第五节系统设计9.5系统设计23系统设计关注于确定实现系统的策略和目标系统的高层结构。设计人员将问题分解为若干个子系统,子系统之间通过接口联系。将系统分解为子系统要按照一定的拓扑关系。问题域指与应用问题直接相关的类或对象。在面向对象需求分析时已经定义了类与对象及其关系。但随着需求理解的加深,以及对系统认识程度的逐步提高,设计人员还要对模型进行修正和完善。设计任务管理子系统包括确定任务,分配任务,还包括权衡一致性、成本、性能等因素以及未来可扩充性。设计数据管理子系统,需要设计数据格式以及相应的服务,设计数据格式的方法与所用的数据存储管理模式密切相关,不同数据存储管理模式时,属性和服务的设计方法是不同的。9.5.1系统分解系统分解即建立系统的体系结构,是设计比较复杂的系统时广泛采用的战略。把系统分解成若干个比较小的部分,然后再分别设计每个部分,这样做有利于降低设计的难度,有利于软件开发人员的分工协作,也有利于维护人员对系统理解和维护。系统的主要组成部分称为子系统,通常根据所提供的功能来划分子系统。子系统既不是一个对象也不是一个功能,而是类、关联、操作、事件和约束的集合。249.5.1系统分解各个子系统之间应该具有尽可能简单、明确的接口。接口确定了交互形式和通过子系统边界的信息流,但是无须规定子系统内部的实现算法。因此,可以相对独立地设计各个子系统。25典型的面向对象设计模型在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。采用面向对象方法设计软件系统时,面向对象设计模型针对与实现有关的因素而开展面向对象分析模型的5个活动(主题、类与对象、结构、属性和服务),它包括问题域、人机交互、任务管理和数据管理等4个部分的设计,即针对这4大部分对应于组成目标系统的4个子系统---问题域子系统、人—机交互子系统、任务管理子系统和数据管理子系统进行设计。9.5.1系统分解(1)问题域子系统把面向对象分析模型直接拿来,针对实现的要求进行必要的增补和调整,例如,需要对类、结构、属性及服务进行分解和重组。这种分解是根据一定的过程标准来做的,标准包括可重用的设计与编码类,把问题域专用类组合在一起,通过增加一般类来创立约定,提供一个继承性的支撑层次改善界面,提供存储管理,以及增加低层细节等。(2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度上依赖于所用的图形用户界面环境,例如Windows、Delphi、C++,而且可能包括“窗口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。269.5.1系统分解(3)任务管理子系统包括任务的定义、通信和协调,以及硬件分配、外部系统及设备约定,可能包括的类有“任务”类和“任务协调”类。(4)数据管理子系统包括永久数据的存取,它隔离了物理的数据管理方法,无论是普通文件、带标记语言的普通文件、关系型数据库、面向对象数据库等。可能包括的类有“存储服务”,协调每个需永久保存的对象的存储。只有问题域子系统将面向对象分析模型直接取用,其他三个子系统则是面向对象分析阶段未曾考虑的,全部在面向对象设计阶段建立。279.6对象设计对象设计在系统设计完成之后进行,对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型。经过多次反复的分析和系统设计之后,设计者通常会发现有些内容没

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论