您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第6章面向对象的系统设计
1/296.1从面向对象分析到面向对象设计6.2面向对象设计的准则6.3启发式规则6.4软件重用6.5系统分解6.6典型的面向对象设计6.7类中服务的设计6.8关联设计6.9设计优化目录2/296.1从面向对象分析到面向对象设计6.1.1从面向对象分析到面向对象设计•面向对象的系统设计(OOD)就是在系统分析模型的基础上运用面向对象的方法,来设计产生一个符合具体实现条件的面向对象设计(OOD)模型。•对于面向对象设计方法,尽管分析和设计的定义有明显区别,但是在实际的软件开发过程中二者的界限是模糊的。分析过程的结果可以直接映射成设计的结果,初期的分析过程主要是提取与系统相关的主要类和业务流程,而在设计阶段将所有的类和流程细化,加深和补充对系统需求的理解,从而进一步完善分析结果。3/29•OOA与OOD关系它们采用了相同的符号表示,因此相互之间没有明显的分界线,往往是反复重叠地进行。系统分析主要考虑的是做什么,因此它识别和定义的类/对象,是一些直接反映问题域和系统任务的;而系统设计主要解决系统如何做,所以它识别和定义的类/对象是附加的,反映了需求的一种实现(对话层、任务管理层、数据管理层)。系统分析是在较高的抽象层次上进行,而系统设计则在较低的抽象层次上进行。系统分析是独立于程序设计语言的,初步的系统设计在很大程度上与语言无关,但详细的系统设计则都会依赖于程序设计语言。6.1从面向对象分析到面向对象设计6.1.1从面向对象分析到面向对象设计4/29•面向对象系统设计的主要工作包括以下几个方面的内容:(1)设计对象与类。包括分析对象模型,设计对象与类的属性,设计对象与类的实现结构,以及设计消息与事件的内容和格式。(2)设计系统结构。设计系统结构阶段的主要任务是设计组件与子系统以及它们之间的静态和动态关系。对于人机界面、数据管理、任务管理等问题,在面向对象分析阶段一般不提及,而是等到面向对象设计阶段再进行分析。6.1从面向对象分析到面向对象设计6.1.1从面向对象分析到面向对象设计5/29•面向对象系统设计的主要工作包括以下几个方面的内容:(3)设计人机交互子系统。此阶段的主要任务是设计用户界面,设计人机交互操作命令和操作顺序,设计详细交互过程,设计工作的内容包括用户分类,设计人机交互类等。(4)设计数据管理子系统。此阶段主要是确定数据管理方法,设计数据库与数据文件的逻辑结构和物理结构。面向对象的分析设计方法注重的是问题涉及的对象以及对象的相互关系和相互作用,并在此基础上构造这些问题的模型,以期将要解决的实质问题模型化。6.1从面向对象分析到面向对象设计6.1.1从面向对象分析到面向对象设计6/29•简单与复杂(1)小规模和小团队开发的系统在整体框架选择和层次结构上应尽量简单,而大规模的系统,要考虑到众多模块的合理配置,需要构建更多的层次,选用成熟的框架体系。(2)在系统资源有限的硬件平台上运行的系统,例如嵌入式系统,在设计时应尽量简单,以提高运行效率;而在PC机以及服务器上运行的系统,可以采用复杂设计,已获得更好的扩展性。(3)对于运行性能要求高的系统,例如需要提供并发服务的服务器系统,则在访问频繁的模块设计上应遵循简单的原则。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则7/29•简单与复杂(4)对于开发水平参差不齐的团队,在开发方案的选择上注意选取简单的方案,减少内部培训和交流的代价。而成熟的开发团队,则可以根据设计目标灵活地选择设计方案。(5)在一个系统的设计中,简单和复杂的原则可能是交替作用的,在整体结构复杂的系统中,可能在关键性能模块的设计上追求简单。而在整体结构简单的系统中,对于某些通用性较强的模块可能采用复杂设计。(6)即使确定了简单和复杂的原则,也需要考虑到“度”,过度设计只会使得某些超前的设计方案被废弃。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则8/29•模块化模块化是软件设计方法不断演变所追求的目标之一,软件的模块化使得软件的各个功能在设计时相对独立,能够降低软件设计的复杂度。面向对象软件开发方法,对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。对象与单元的区别在于:对象是数据与操作紧密结合的,在软件运行中有一定生命周期的实体。而单元只是一组函数功能的集合。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则9/29•抽象化面向对象方法不仅支持过程抽象,而且支持数据抽象。在类的设计中要考虑各种类的关系,需要从具体类中抽象出具有共同特性的父类或者接口,子类继承父类的方法,并可以重构不同的实现。类实际上是一种抽象数据类型,它对外开放的公共接口(interface)构成了类的规格说明,这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则10/29•弱耦合与信息隐藏对象间的耦合可分为两大类:(1)交互耦合。如果对象间的耦合是通过消息连接来实现,则这种耦合属于交互耦合。交互耦合应该尽可能松散。(2)继承耦合。继承是一般化类与特殊类间耦合的一种形式,从本质来看,是一种通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的模块。它们之间是结合得越紧密越好。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则11/29•信息隐藏实现弱耦合的重要手段,在面向对象方法中,信息隐藏通过对象的封装性实现.对象的封装有两种形式:源代码级的封装;二进制代码级的封装。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则12/29•可重用软件重用是提供高软件开发生产率和目标系统质量的重要途径。派生和继承是代码重用的基础。重用有两方面的含义:一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类),二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。6.2面向对象系统设计的准则6.2.1面向对象系统设计准则13/29•设计结果应该清晰易懂(1)用词一致(2)使用已有的协议(3)减少消息模式的数目(4)避免模糊的定义•使类等级中包含的层次数适当应该使类等级中包含的层次数适当,一般来说,在一个中等规模(大约包含100个类)的系统中,类等级层次数应保持为7±2。6.3启发规则14/29•设计简单的类(1)避免包含过多的属性;(2)有明确的定义;为了使类的定义明确,分配给每个类的任务应该简单,最好能用一两个简单语句描述它的任务。(3)尽量简化对象之间的合作关系;对象间的合作关系应尽可能的简单。(4)不要提供太多服务;一个类提供的公共服务不超过7个;在开发大型软件系统时,解决这个问题的办法,是把系统中的类按逻辑分组。(5)使用简单的协议;一般消息中的参数不要超过3个。(6)使用简单的服务;(7)把设计变动减至最小。6.3启发规则15/29•面向对象方法的一个主要目标,就是提高软件的可重用性。•软件重用就是将已有的软件成分用于构造新的软件系统。可以被重用的软件成分一般称作可重用构件,无论对可重用构件原封不动地使用还是作适当的修改后再使用,只要是用来构造新软件,则都可称作重用。•重用级别:代码的重用设计的重用分析的重用测试信息的重用6.4软件重用16/29•设计复杂应用系统时,会首先根据功能对系统进行分解,然后再分别设计各子系统。各子系统间通过接口进行连接和信息传递,接口确定了子系统间的交互形式和需传递的信息。•划分和设计子系统时,应该尽量减少子系统间的耦合度。6.5系统分解17/29•问题域子系统设计;可能对面向对象分析所得出的问题域模型做的补充或修改。(1)调整需求(2)重用已有类(3)组合问题域类(4)增添一般化类以建立协议(5)调整继承层次6.6典型的面向对象设计18/29窄菱形模式阔菱形模式19/29单继承模式20/29•人机交互子系统设计在面向对象设计过程中,应该对人机交互子系统进行详细设计,以确定人机交互的细节,其中包括指定窗口和报表的形式、设计命令层次等内容。设计人机交互子系统的策略(1)分类用户(2)描述用户(3)设计命令层次(4)设计人机交互类6.6典型的面向对象设计21/29•任务管理子系统设计分析并发性设计任务管理子系统确定事件驱动型任务确定时钟驱动型任务睡眠状态。确定优先任务确定关键任务确定协调任务尽量减少任务数确定资源需求6.6典型的面向对象设计22/29•数据管理子系统,是系统存储或检索对象的基本设施,它建立在某种数据存储管理系统之上,并且隔离了数据存储管理模式的影响。选择数据存储管理模式优点缺点文件管理系统成本低、简单级别低,必须编写额外的代码,不同操作系统的文件管理系统差异明显关系数据库管理系统提供了各种最基本的数据管理功能,提供了一致的接口,标准化的语言运行开销大,不能满足高级应用的需求,与程序设计语言的连接不自然面向对象数据库管理系统扩展的关系数据库管理系统,扩展的面向对象程序设计语言6.6典型的面向对象设计23/29•设计数据管理子系统设计数据格式,存储管理模式的设计方法:文件系统:定义1NF表;为每个1NF表定义一个文件;关系数据库管理系统:定义3NF表;为每个3NF表定义一个数据库表;面向对象数据库管理系统:扩展的关系数据库途径;扩展的面向对象程序设计语言途径。设计相应的服务如果某个类的对象需要存储起来,则在这个类中增加一个“隐含”的属性和服务,用于完成存储对象自身的工作。6.6典型的面向对象设计24/29下面介绍使用不同数据存储管理模式时的设计要点。文件系统:被存储的对象需要知道打开哪些文件,怎样把文件定位到正确的记录上,怎样检索出旧值,以及怎样用现有值更新它们;应该定义一个ObjectServer类,并创建它的实例,该类提供下列服务:通知对象保存自身,检索已存储的对象。关系数据库管理系统:被存储的对象,应该知道访问哪些数据库表,怎样访问所需要的行,怎样检索出旧值,以及怎样用现有值更新它们;应该定义一个ObjectServer类,并声明它的对象,该类提供下列服务:通知对象保存自身,检索已存储的对象。面向对象数据库管理系统:扩展的关系数据库途径;扩展的面向对象程序设计语言途径。6.6典型的面向对象设计25/29•设计类中应有的服务对象的许多服务都与对象接收到的消息密切相关,接收消息的对象必然有由消息选择符指定的服务,该服务改变对象状态,并完成对象应做的动作。对象的动作既与消息有关,也与对象的状态有关。6.7类中服务的设计26/29•设计实现服务的方法(1)设计实现服务的算法,设计实现服务的算法时,应该考虑下列几个因素:算法复杂度。容易理解与实现。易修改。(2)选择数据结构,在面向对象设计过程中,则需要选择能够方便、有效地实现算法的物理数据结构。(3)定义内部类和内部操作6.7类中服务的设计27/29•关联的方式(1)关联的遍历;单向遍历和双向遍历。(2)实现单向关联如果关联的重数是一元的,则实现关联的指针是一个简单指针;如果重数是多元的,则需要用一个指针集合实现关联。6.8关联设计用指针实现单向关联28/29(3)实现双向关联,实现双向关联有下列3种方法:只用属性实现一个方向的关联,当需要反向遍历时就执行一次正向查找。两个方向的关联都用属性实现。用独立的关联对象实现双向关联。用指针实现双向关联29/29用对象实现关联30/29(4)关联对象的实现可以引入一个关联类来保存描述关联性质的信息,关联中的每个连接对应着关联类的一个对象。实现关联对象的方法取决于关联的重数。对于一对一关联来说,关联对象可以与参与关联的任一个对象合并。对于一对多关联来说,关联对象可以与“多”端对象合并。如果是多对多关联,则关联链的性质不可能只与一个参与关联的对象有关,通常用一个独立的关联类来保存描述关联性质的信息,这个类的每个实例表示一条具体的关联链及该链的属性。31/29•确定优先级•提高效率的几项技术增加冗余关联以提高访问效率调
本文标题:第6章面向对象的系统设计
链接地址:https://www.777doc.com/doc-4777733 .html