面向对象设计_第1页
面向对象设计_第2页
面向对象设计_第3页
面向对象设计_第4页
面向对象设计_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

面向对象设计第一页,共六十六页,编辑于2023年,星期二面向对象设计面向对象设计(OOD)就是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。面向对象设计的任务就是按照设计原则,对模型进行细化,朝着实现系统的方向进行多次迭代。第二页,共六十六页,编辑于2023年,星期二主要内容面向对象设计的准则启发式规则软件重用系统分解设计问题域子系统设计人-机交互子系统设计任务管理子系统设计数据管理子系统设计类中的服务设计关联设计优化第三页,共六十六页,编辑于2023年,星期二面向对象设计的准则模块化抽象信息隐蔽弱耦合强内聚可重用第四页,共六十六页,编辑于2023年,星期二面向对象设计的准则1、模块化面向对象开发方法很自然地支持了把系统分解成模块的设计原则:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。第五页,共六十六页,编辑于2023年,星期二面向对象设计的准则2、抽象面向对象方法不仅支持过程抽象,而且支持数据抽象。1、类是抽象的数据类型2、参数化数据类型,参数化类3、信息隐蔽在面向对象方法中,信息隐藏通过对象的封装性来实现。第六页,共六十六页,编辑于2023年,星期二面向对象设计的准则4、弱耦合在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。低耦合是设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。(1)交互耦合:通过消息连接实现(2)继承耦合:构成粒度更大的模块,所以结合的程度应该紧密。第七页,共六十六页,编辑于2023年,星期二面向对象设计的准则5、强内聚(1)服务内聚:一个服务只完成一个功能 (2)类内聚:一个类应该只有一个用途(3)一般特殊内聚:紧密的继承耦合与高度的一般——特殊内聚是一致的。6、可重用(1)尽量使用已有的类(2)设计新的类时要考虑将来的重用问题第八页,共六十六页,编辑于2023年,星期二启发式规则1、设计结果应该清晰易懂用词一致:名字与代表的事物一致使用已有的类协议减少消息模式的数目避免模糊的定义:类的名称与用途一致2、一般—特殊结构的深度应该适中第九页,共六十六页,编辑于2023年,星期二启发式规则3、设计简单的类 应该尽量设计小而简单的类,这样便于开发和管理。为了保持简单,应注意以下几点:避免包含过多的属性有明确的类定义简化对象之间的合作关系不要提供太多服务4、使用简单的协议(较少的参数)一般来说,消息中参数不要超过3个。第十页,共六十六页,编辑于2023年,星期二启发式规则5、使用简单的服务面向对象设计出来的类中的服务通常都很小,一般只有3至5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能

6、把设计变动减少到最小通常,设计的质量越高,设计结果保持不变的时间也越长。即使出现必须修改设计的情况,也应该使修改的范围尽可能小。第十一页,共六十六页,编辑于2023年,星期二软件重用概述1、重用2、软件成分的重用级别3、典型的可重用软件成分类构件1、可重用软构件应具备的特点2、类构件的重用方式软件重用的效益1、质量2、成本3、生产率软件重用技术第十二页,共六十六页,编辑于2023年,星期二软件重用1、重用A、知识重用B、方法和标准重用C、软件成分重用2、软件成分重用的级别A、代码重用:代码剪贴、源代码包含、继承。B、设计结果重用C、分析结果重用概述第十三页,共六十六页,编辑于2023年,星期二软件重用3、典型的可重用软件成分项目计划成本估计体系结构需求和规格说明设计概述源代码文档用户界面数据测试用例等第十四页,共六十六页,编辑于2023年,星期二软件重用1、可重用类构件的特点模块独立性好具有高度的可塑性接口清晰简单可靠2、类构件重用方式实例重用继承重用多态重用类构件第十五页,共六十六页,编辑于2023年,星期二软件重用1、质量被重用的代码错误率0.9/千行新开发的代码错误率4.1/千行2、成本(为实现软件重用需付出的代价)A、为软构件投资B、为更高级的软件质量投资C、建立和维护软类库的费用软件重用的效益第十六页,共六十六页,编辑于2023年,星期二软件重用3、生产率重用率与生产率的关系一般情况下,重用率的提高可以直接提高生产率,30%~50%的重用可以导致25%~40%的生产率的提高。软件重用的效益第十七页,共六十六页,编辑于2023年,星期二软件重用3、生产率重用率与生产率的关系一般情况下,重用率的提高可以直接提高生产率,30%~50%的重用可以导致25%~40%的生产率的提高。软件重用的效益第十八页,共六十六页,编辑于2023年,星期二软件重用1、软件组合技术2、软件生成技术3、面向对象软件重用软件重用技术第十九页,共六十六页,编辑于2023年,星期二系统分解系统中主要的组成部分称为子系统既不是一个对象也不是一个功能,而是类、关联、操作、事件和约束的集合。大多数系统的面向对象模型是由以下四个部分组成:

1、问题域子系统

2、人机交互子系统

3、任务管理子系统

4、数据库子系统第二十页,共六十六页,编辑于2023年,星期二系统分解典型的面向对象设计模型第二十一页,共六十六页,编辑于2023年,星期二系统分解1、子系统之间的两种交互关系客户—供应商关系平等伙伴关系2、系统组织的两种方案层次组织块状组织3、设计系统的拓扑结构管道形树形星形第二十二页,共六十六页,编辑于2023年,星期二系统分解典型应用系统的组织结构第二十三页,共六十六页,编辑于2023年,星期二设计问题域子系统1、调整需求2、重用已有的类(1)重用那些使无用的属性和服务降到最低程度的类;(2)在被重用的类和问题域类之间添加泛化关系;(3)标出问题域类中从已有类中继承来的属性和方法,现在已经不用在问题域中定义它们了;(4)修改与问题域类相关的关联。第二十四页,共六十六页,编辑于2023年,星期二设计问题域子系统3、把问题域组织到一起4、添加一般化类建立协议5、调整继承层次(1)使用多继承机制(2)使用单继承机制(3)不具备继承机制第二十五页,共六十六页,编辑于2023年,星期二设计问题域子系统窄菱形模式第二十六页,共六十六页,编辑于2023年,星期二设计问题域子系统阔菱形模式第二十七页,共六十六页,编辑于2023年,星期二设计问题域子系统

6、ATM系统例在面向对象设计过程中,ATM系统的问题域子系统的结构如下图所示。把ATM系统的问题域子系统,进一步分解成更小的ATM站子系统,中央计算机子系统和分行计算机子系统,构成星型拓扑结构。以中央计算机为中心向外连接(用专用电话线),与所有ATM站和分行计算机通信。区分每个ATM站和每台分行计算机连向中央计算机的电话线,分别用ATM站号和分行代码来实现。第二十八页,共六十六页,编辑于2023年,星期二设计人机交互子系统人机交互子系统也称人机交互部分(HIC,HumanInteractionComponent)。人机交互部分的设计结果,将对用户使用系统带来很大影响。人机界面设计得好,则会使系统产生魅力,吸引用户经常使用系统,并觉得与系统的交互是友好的、兴奋的,还能提高工作效率;反之不然。第二十九页,共六十六页,编辑于2023年,星期二设计人机交互子系统为了得到良好的人机界面,在分析阶段要对用户进行分析,在设计阶段要延续该分析,包括对用户、交互时间、交互技术等进行分析。在人机交互子系统设计中,在初步分析用户界面需求的基础上,对人机交互的细节进行详细设计,包括对窗口、对话框和报表的形式,设计命令层次组织等内容的设计。设计人机交互子系统的关键,是使用原型技术。建立人机界面的原型,征求用户的意见,获取用户的评价,也是设计人机界面的一种有效途径。第三十页,共六十六页,编辑于2023年,星期二设计人机交互子系统1、设计人机交互界面的准则(1)一致性(2)减少步骤(3)及时提供反馈信息(4)提供撤消命令(5)无须记忆(6)易学(7)富有吸引力第三十一页,共六十六页,编辑于2023年,星期二设计人机交互子系统2、设计人机交互子系统的策略(1)分类用户(2)描述用户(3)设计命令层次(4)设计人机交互类第三十二页,共六十六页,编辑于2023年,星期二设计人机交互子系统设计命令层是界面设计的重要部分,一般包含下列工作:(1)研究现有的人机交互的准则。命令层设计有许多方式,但目前最受用户喜爱的是Windows界面,Windows已经成了微机上图形用户界面事实上的工业标准。所有Windows应用程序的界面是一致的,窗口布局、菜单、术语等使用,以及界面的风格、习惯等都是一致的,Windows的命令层设计采用了下拉式菜单和弹出式菜单,而且各菜单的组织方式也类似。设计图形用户界面时,应该保持与普通Windows应用程序界面一致,并遵守广大用户习惯的约定,这样才会被用户接受和喜爱。第三十三页,共六十六页,编辑于2023年,星期二设计人机交互子系统(2)设计初始命令层。所谓命令层,是将系统中的可用服务用过程抽象机制组织起来的一种体现。设计时首先从服务的基本过程抽象开始,确定系统中最上层(如大的操作,相近小命令的总称,多层命令的最上层等),然后再修改它们,以符合目标系统的特定需要。第三十四页,共六十六页,编辑于2023年,星期二设计人机交互子系统(3)优化命令层。为使命令层完善、合理以及使用方便,应该考虑下列一些因素,作进一步修改。排列:检查每个服务的名字,并将服务排在命令层中的合适位置。可按系统功能(服务)顺序排列,也可以按用户习惯的工作顺序排序。整体-部分组合:通过服务本身发现整体-部分关系,来帮助在命令层中对服务组织和分组。第三十五页,共六十六页,编辑于2023年,星期二设计人机交互子系统(3)优化命令层。为使命令层完善、合理以及使用方便,应该考虑下列一些因素,作进一步修改。宽度和深度:通常,命令层中同一层显示命令的个数(宽度),设计为(7±2)个比较合适;命令层中层数(深度)设计为3层比较合适。这样符合人的短期记忆能力。减少操作步骤:做同样的工作,按键或拖动鼠标越少越好。并为高级用户提供简捷的操作方法。第三十六页,共六十六页,编辑于2023年,星期二设计任务管理子系统设计工作的一项重要内容就是,确定哪些是必须同时动作的对象,哪些是相互排斥的对象。然后进一步设计任务管理子系统。1、分析并发性2、设计任务管理子系统第三十七页,共六十六页,编辑于2023年,星期二设计任务管理子系统1、分析并发性不仅在系统软件中有并发行为,而且在应用软件中也有并发行为,因此,实现中存在并发行为。在程序的执行时间上与其他程序有交叠的现象,这种时间交叠现象称为“并发性”。因此,任务管理子系统在设计时,应找出并分析系统中任务的并发性。第三十八页,共六十六页,编辑于2023年,星期二设计任务管理子系统1、分析并发性分析并发性的主要依据——系统的动态模型如果对象间不存在交互,或者说它们能同时接收事件,那么这两个对象是并发的。通过检查各个对象的状态图及它们之间交换的事件,把若干个非并发的对象归并到一起。独立的任务把必须并发进行的行为分离开来。这种并发行为既可以在不同的处理器上实现,也可以在单个处理器上利用多任务操作系统仿真实现。一般来说,划分任务,是为了简化系统中必须的并发行为的设计和编码。第三十九页,共六十六页,编辑于2023年,星期二设计任务管理子系统2、设计任务管理子系统(1)确定事件驱动任务(2)确定时钟驱动任务(3)确定优先任务(4)确定关键任务(5)确定协调任务(6)审查每个任务第四十页,共六十六页,编辑于2023年,星期二设计任务管理子系统2、设计任务管理子系统(1)确定事件驱动任务事件驱动任务:由某个事件触发而引起的任务。事件通常表明一个设备传输过来的一个信息,事件是由设备引起的。任务是对事件的处理。一个任务可以设计成由一个事件来触发(驱动),该事件常常是对一些数据的到达发信号,而这些数据可能来自输入数据行,或者另一个任务写入的数据缓冲区。这类任务可能主要完成通信工作,例如,与设备、屏幕窗口、其他任务、子系统、另一个处理器或其他系统通信。第四十一页,共六十六页,编辑于2023年,星期二设计任务管理子系统(1)确定事件驱动任务事件驱动任务的工作过程为:①任务处于睡眠状态(不消耗处理器时间),等待来自数据行或其他数据源的中断;②接收到中断就唤醒了该任务;③阅读数据并把数据放入内存缓冲区或其他目的地;④向需要知道此事件的对象发出通知,然后该任务又回到睡眠状态。第四十二页,共六十六页,编辑于2023年,星期二设计任务管理子系统(2)确定时钟驱动任务时钟驱动任务:按特定的时间间隔被触发后执行某些处理的任务。例如,某些设备需要周期性地获得数据;某些人机接口、子系统、任务、处理器或其他系统也可能需要周期性地通信。时钟驱动型任务的工作过程为:①任务设置了唤醒时间后进入睡眠状态;②等待来自系统的中断;③接收到中断,任务被唤醒;④进行处理,通知有关的对象;⑤该任务又回到睡眠状态。第四十三页,共六十六页,编辑于2023年,星期二设计任务管理子系统(3)确定优先任务优先级任务:根据事件的优先级高低来做处理的任务。它可以满足高优先级或低优先级的处理需求。

1)高优先级:有些服务可能是高优先级的,需要把这类服务划分成独立的任务,使该类服务在一个严格限定的时间内完成。

2)低优先级:有些服务是低优先级的,属于低优先级处理(通常指那些后台处理)。设计时可能用附加的任务把这种服务分离出来。任务的划分是根据时间决定优先级,根据优先级的高低划分出轻重缓急的任务。第四十四页,共六十六页,编辑于2023年,星期二设计任务管理子系统(4)确定关键任务设计时应该分离出那些对于系统的成败特别关键的任务,该类任务通常都有严格的可靠性、安全性要求。设计时可用附加的任务来分离出关键的任务,应该进行深入细致的设计、编码和测试,以满足高可靠性、安全性处理的要求。也就是说,根据需求决定任务的主次,保证关键任务。第四十五页,共六十六页,编辑于2023年,星期二设计任务管理子系统(5)确定协调任务当系统中有三个以上任务时,就应该考虑增加一个任务,用来协调任务之间的关系,该任务称为协调任务从一个任务到另一个任务的转换时间叫现场转换时间。协调任务用来控制现场转换时间时,将会给系统设计带来困难,但是引入协调任务可为封装不同任务之间的协调控制带来好处。该任务的行为可用状态转换矩阵来描述。这样的任务应该只做协调工作,不必分配它其他的工作。第四十六页,共六十六页,编辑于2023年,星期二设计任务管理子系统(6)审查每个任务对任务的性质进行审查,去掉人为的、不必要的任务,要使任务数保持到最少。设计多任务系统的主要问题是,设计者常常为了自己设计和编程的方便而增加任务。这样既增加了总体设计的技术复杂度,又降低了系统的可理解性,从而也加大了系统维护的难度。第四十七页,共六十六页,编辑于2023年,星期二设计数据管理子系统1、选择数据存储管理模式(1)文件管理系统(2)关系数据库管理系统(3)面向对象数据库管理系统2、设计数据管理子系统(1)设计数据格式(2)设计相应的服务第四十八页,共六十六页,编辑于2023年,星期二设计数据管理子系统3、例子在这个例子中,需要存储的对象主要是帐户类的对象。为了支持数据管理子系统的实现,帐户类对象必须知道自己是怎样存储的:(1)每个对象自己保存自己(2)由数据管理子系统负责存储对象ATM系统的问题域子系统的结构第四十九页,共六十六页,编辑于2023年,星期二设计类中的服务1、确定类中应有的服务2、设计实现服务的方法(1)设计实现服务的算法(2)选择数据结构(3)定义内部类和内部操作第五十页,共六十六页,编辑于2023年,星期二设计类中的服务(1)设计实现服务的算法算法设计按如下过程进行:A选择极小化开销的算法。B选择适用于该算法的数据结构。C定义必需的新的内部类和操作。D将操作响应赋给合适的类。选择算法应考虑下列因素A计算复杂度B易实现,易理解,易修改C稳定性好第五十一页,共六十六页,编辑于2023年,星期二设计类中的服务(2)选择数据结构选择算法时涉及到选择算法使用的数据结构,许多实现的数据结构都是包容类的实例,大多数面向对象语言提供了基本数据结构供用户自选组合定义。(3)定义内部类和操作在展开算法时,可能引入一些对象类,用来存放中间结果,在分解高层操作时也可引入新的低层操作。必须定义这些低层操作,因为大多数这类操作是外部不可见的。第五十二页,共六十六页,编辑于2023年,星期二设计关联关联是在对象模型中联结不同对象的纽带,它指定了对象相互间的访问路径。在面向对象分析过程中,仅是初步确定对象之间的关联和阶数。在面向对象设计过程中,必须确定实现关联的具体策略。根据应用系统中的使用方式来确定实现关联的策略。可以选定一个统一实现所有关联的全局性的策略,或者对不同的关联选择不同的实现策略。第五十三页,共六十六页,编辑于2023年,星期二设计关联先对使用关联的方式进行分析研究,总结它们的使用方式,然后根据不同的使用方式设计出具体的实现关联的途径。第五十四页,共六十六页,编辑于2023年,星期二设计关联1、关联的遍历通常应用系统中使用关联的方式有单向遍历和双向遍历两种。根据应用系统的复杂程度不同,使用关联的方式也不同。有些关联只需要单向遍历,可有些关联可能需要双向遍历。单向关联的实现自然比较简单,而双向关联实现起来相对复杂一些。第五十五页,共六十六页,编辑于2023年,星期二设计关联2、单向关联的实现单向遍历的关联可用指针来实现,指针是一个含有对象引用的属性。第五十六页,共六十六页,编辑于2023年,星期二设计关联2、单向关联的实现如果关联的阶是一元的,则可用一个简单指针来实现用指针实现单向关联

(a)关联(b)实现第五十七页,共六十六页,编辑于2023年,星期二设计关联2、单向关联的实现如果关联的阶是多元的,则需要用一个指针集合来实现用指针实现单向关联(a)关联(b)实现第五十八页,共六十六页,编辑于2023年,星期二设计关联3、双向关联的实现许多关联都需要双向遍历,且两

温馨提示

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

评论

0/150

提交评论