大学课程《软件工程》课件-第8章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大学课程《软件工程》课件-第8章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 大学 课程 课件
- 资源描述:
-
1、第第8 8章章 面向对象设计面向对象设计 从面向对象分析到面向对象设计从面向对象分析到面向对象设计(通常通常缩写为缩写为OOD),是一个,是一个逐渐扩充模型逐渐扩充模型的过的过程。或者说,面向对象设计就是用面向对程。或者说,面向对象设计就是用面向对象观点建立象观点建立求解域求解域模型的过程。模型的过程。 尽管分析和设计的定义有明显区别,尽管分析和设计的定义有明显区别,但是在实际的软件开发过程中二者的但是在实际的软件开发过程中二者的界限界限是模糊的是模糊的。 许多分析结果可以直接映射成设计结许多分析结果可以直接映射成设计结果,而在设计过程中又往往会加深和补充果,而在设计过程中又往往会加深和补充对
2、系统需求的理解,从而进一步完善分析对系统需求的理解,从而进一步完善分析结果。因此,分析和设计活动是一个多次结果。因此,分析和设计活动是一个多次反复迭代反复迭代的过程。的过程。 面向对象设计的准则面向对象设计的准则8.1启发规则启发规则8.2设计人设计人_机交互子系统机交互子系统8.5设计问题域子系统设计问题域子系统8.4系统分解系统分解8.3设计任务管理子系统设计任务管理子系统8.6小小 结结8.12设计优化设计优化8.10面向对象分析与设计实例面向对象分析与设计实例8.11设计关联设计关联8.9设计类中的服务设计类中的服务8.8设计数据管理子系统设计数据管理子系统8.7 所谓优秀设计,就是权
3、衡了各种因素,所谓优秀设计,就是权衡了各种因素,从而使得系统在其整个生命周期中的总从而使得系统在其整个生命周期中的总开开销最小销最小的设计。的设计。 8.1.1 8.1.1 模块化模块化 对象就是模块对象就是模块。它是把数据结构和操。它是把数据结构和操作这些数据的方法紧密地结合在一起所构作这些数据的方法紧密地结合在一起所构成的模块。成的模块。 8.1.2 8.1.2 抽象抽象 面向对象方法不仅支持过程抽象,而面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种且支持数据抽象。类实际上是一种抽象数抽象数据类型据类型。 8.1.3 8.1.3 信息隐藏信息隐藏 在面向对象方法中,信息隐藏
4、通过对在面向对象方法中,信息隐藏通过对象的封装性实现。象的封装性实现。 8.1.4 8.1.4 弱耦合弱耦合 耦合主要指不同对象之间耦合主要指不同对象之间相互关联相互关联的的紧密程度。一般来说,对象之间的耦合可紧密程度。一般来说,对象之间的耦合可分为两大类,下面分别讨论这两类耦合。分为两大类,下面分别讨论这两类耦合。 1. 1.交互耦合交互耦合 如果对象之间的耦合通过如果对象之间的耦合通过消息连接消息连接来来实现,则这种耦合就是交互耦合。为使交实现,则这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守下述准则。互耦合尽可能松散,应该遵守下述准则。 尽量降低消息连接的复杂程度。尽量降低消息连
5、接的复杂程度。 减少对象发送减少对象发送( (或接收或接收) )的消息数。的消息数。 2. 2.继承耦合继承耦合 与交互耦合相反,应该与交互耦合相反,应该提高继承耦合提高继承耦合程度程度。为获得紧密的继承耦合,特殊类应。为获得紧密的继承耦合,特殊类应该确实是对它的一般化类的一种具体化。该确实是对它的一般化类的一种具体化。 8.1.5 8.1.5 强内聚强内聚 1. 1.服务内聚服务内聚 一个服务应该完成一个且仅完成一个一个服务应该完成一个且仅完成一个功能。功能。 2. 2.类内聚类内聚 设计类的原则是,一个类应该只有一设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。个用途
6、,它的属性和服务应该是高内聚的。 3. 3.一般一般特殊内聚特殊内聚 设计出的一般设计出的一般特殊结构,应该符合特殊结构,应该符合多数人的概念,更准确地说,这种结构应多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。该是对相应的领域知识的正确抽取。 8.1.6 8.1.6 可重用可重用 一是尽量一是尽量使用已有的类使用已有的类(包括开发环境包括开发环境提供的类库,及以往开发类似系统时创建提供的类库,及以往开发类似系统时创建的类的类),二是如果确实需要创建新类,则在,二是如果确实需要创建新类,则在设计这些新类的协议时,应该设计这些新类的协议时,应该考虑将来考虑将来的的可重复使用
7、性。可重复使用性。 8.2.1 8.2.1 设计结果应该清晰易懂设计结果应该清晰易懂 使设计结果清晰、易读、易懂,是提使设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要措施。高软件可维护性和可重用性的重要措施。保证设计结果清晰易懂的主要因素有以下保证设计结果清晰易懂的主要因素有以下几点:几点: 1. 1. 用词一致用词一致 2. 2. 使用已有的协议使用已有的协议 3. 3. 减少消息模式的数目减少消息模式的数目 4. 4. 避免模糊的定义避免模糊的定义 8.2.2 8.2.2 一般一般特殊结构的深度特殊结构的深度应适当应适当 应该使类等级中包含的层次数适当。应该使类等级中包含的层
8、次数适当。 8.2.3 8.2.3 设计简单的类设计简单的类 应该尽量设计小而简单的类,以便于应该尽量设计小而简单的类,以便于开发和管理。开发和管理。 1. 1. 避免包含过多的属性避免包含过多的属性 2. 2. 有明确的定义有明确的定义 3. 3. 尽量简化对象之间的合作关系尽量简化对象之间的合作关系 4. 4. 不要提供太多服务不要提供太多服务 8.2.4 8.2.4 使用简单的协议使用简单的协议 一般来说,消息中的参数不要超过一般来说,消息中的参数不要超过3个。个。 8.2.5 8.2.5 使用简单的服务使用简单的服务 面向对象设计出来的类中的服务通常都很小,面向对象设计出来的类中的服务
9、通常都很小,一般只有一般只有3 35 5行源程序语句,可以用仅含一个行源程序语句,可以用仅含一个动动词和一个宾语的简单句子描述它的功能。词和一个宾语的简单句子描述它的功能。 8.2.6 8.2.6 把设计变动减至最小把设计变动减至最小 通常,设计的质量越高,设计结果保通常,设计的质量越高,设计结果保持不变的时间也越长。持不变的时间也越长。图图8.1 8.1 理想的设计变动情况理想的设计变动情况 大多数系统的面向对象设计模型,在大多数系统的面向对象设计模型,在逻辑逻辑上都由上都由四大部分四大部分组成。这四大部分对组成。这四大部分对应于组成目标系统的四个子系统,它们分应于组成目标系统的四个子系统,
10、它们分别是别是问题域子系统问题域子系统、人人- -机交互子系统机交互子系统、任任务管理子系统务管理子系统和和数据管理子系统数据管理子系统。 在不同的软件系统中,这四个子系统在不同的软件系统中,这四个子系统的重要程度和规模可能相差很大,规模过的重要程度和规模可能相差很大,规模过大的在设计过程中应该进一步划分成更小大的在设计过程中应该进一步划分成更小的子系统,规模过小的可合并在其他子系的子系统,规模过小的可合并在其他子系统中。统中。图图8.2 8.2 典型的面向对象设计模典型的面向对象设计模型型 8.3.1 8.3.1 子系统之间的两种交互方式子系统之间的两种交互方式 在软件系统中,子系统之间的交
11、互有两种在软件系统中,子系统之间的交互有两种可能的方式,分别是可能的方式,分别是客户客户供应商供应商关系和关系和平等伙平等伙伴伴关系。关系。 1. 1. 客户客户供应商关系供应商关系 2. 2. 平等伙伴关系平等伙伴关系 总的说来,单向交互比双向交互更容总的说来,单向交互比双向交互更容易理解,也更容易设计和修改,因此应该易理解,也更容易设计和修改,因此应该尽量使用客户尽量使用客户供应商关系供应商关系。 8.3.2 8.3.2 组织系统的两种方案组织系统的两种方案 把子系统组织成完整的系统时,有把子系统组织成完整的系统时,有水水平层次组织平层次组织和和垂直块组织垂直块组织两种方案可供选两种方案可
12、供选择。择。 1. 1. 层次组织层次组织 这种组织方案把软件系统组织成一个这种组织方案把软件系统组织成一个层次系统,层次系统,每层是一个子系统每层是一个子系统。上层在下。上层在下层的基础上建立,下层为实现上层功能而层的基础上建立,下层为实现上层功能而提供必要的服务。提供必要的服务。 每一层内所包含的对象,彼此间相互每一层内所包含的对象,彼此间相互独立独立,而处于不同层次上的对象,彼此间,而处于不同层次上的对象,彼此间往往有往往有关联关联。 实际上,在实际上,在上、下层上、下层之间存在客户之间存在客户供应商供应商关关系系。低层子系统提供服务,相当。低层子系统提供服务,相当于供应商,上层子系统使
13、用下层提供的服于供应商,上层子系统使用下层提供的服务,相当于客户。务,相当于客户。 2. 2. 块状组织块状组织 这种组织方案把软件系统这种组织方案把软件系统垂直地分解垂直地分解成若干个相对独立的、弱耦合的子系统,成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类一个子系统相当于一块,每块提供一种类型的服务。型的服务。 8.3.3 8.3.3 设计系统的拓扑结构设计系统的拓扑结构 由子系统组成完整的系统时,典型的由子系统组成完整的系统时,典型的拓扑结构有管道型、树型、星型等。设计拓扑结构有管道型、树型、星型等。设计者应该采用与问题结构相适应的、尽可能者应该采用与问题结构相
14、适应的、尽可能简单的拓扑结构,以减少子系统之间的交简单的拓扑结构,以减少子系统之间的交互数量。互数量。 通过面向对象分析所得出的问题域精通过面向对象分析所得出的问题域精确模型,为设计问题域子系统奠定了良好确模型,为设计问题域子系统奠定了良好的基础,建立了完整的框架。的基础,建立了完整的框架。 只要可能,就应该只要可能,就应该保持保持面向对象分析面向对象分析所建立的所建立的问题域结构问题域结构。通常,面向对象设。通常,面向对象设计仅需从实现角度对问题域模型作一些补计仅需从实现角度对问题域模型作一些补充或修改,主要是增添、合并或分解类充或修改,主要是增添、合并或分解类对象、属性及服务,调整继承关系
15、等。对象、属性及服务,调整继承关系等。 当问题域子系统过分复杂庞大时,应当问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统。该把它进一步分解成若干个更小的子系统。 对面向对象分析所得出的问题域模型作对面向对象分析所得出的问题域模型作的补充或修改所涉及的问题如下:的补充或修改所涉及的问题如下: 1. 1.调整需求调整需求 2.2.重用已有的类重用已有的类 3.3.把问题域类组合在一起把问题域类组合在一起 在面向对象设计过程中,设计者往往在面向对象设计过程中,设计者往往通过引入一个通过引入一个根类根类而把问题域类组合在一起。而把问题域类组合在一起。 4. 4.增添一般化类以建立协
16、议增添一般化类以建立协议 5.ATM5.ATM系统之例系统之例 图图8.4描绘了上章给出的描绘了上章给出的ATM系统的系统的问题域子系统的结构。问题域子系统的结构。 8.5.1 8.5.1 设计人设计人- -机交互界面机交互界面的准则的准则 遵循下列准则有助于设计出让用户满遵循下列准则有助于设计出让用户满意的人意的人- -机交互界面。机交互界面。 1. 1. 一致性一致性 使用一致的术语,一致的步骤,一致使用一致的术语,一致的步骤,一致的动作。的动作。 2. 2. 减少步骤减少步骤 应使用户为做某件事情尽量减少操作步骤。应使用户为做某件事情尽量减少操作步骤。 还应使得技术水平不同的用户,为获得
17、有意还应使得技术水平不同的用户,为获得有意义的结果所需使用的时间都减至最少。特别应该义的结果所需使用的时间都减至最少。特别应该为熟练用户提供简捷的操作方法为熟练用户提供简捷的操作方法( (例如,热键例如,热键) )。 3. 3. 及时提供反馈信息及时提供反馈信息 每当用户等待系统完成一项工作时,每当用户等待系统完成一项工作时,系统都应该向用户提供有意义的、及时的系统都应该向用户提供有意义的、及时的反馈信息,以便用户能够知道系统目前已反馈信息,以便用户能够知道系统目前已经完成该项工作的多大比例。经完成该项工作的多大比例。 4. 4. 提供撤消命令提供撤消命令 人在与系统交互的过程中难免会犯错人在
18、与系统交互的过程中难免会犯错误,因此,应该提供误,因此,应该提供“撤消撤消(undo)”(undo)”命令,命令,以便用户及时撤消错误动作,消除错误动以便用户及时撤消错误动作,消除错误动作造成的后果。作造成的后果。 5. 5. 无须记忆无须记忆 不应该要求用户记住在某个窗口中显不应该要求用户记住在某个窗口中显示的信息,然后再用到另一个窗口中,这示的信息,然后再用到另一个窗口中,这是软件系统的责任而不是用户的任务。是软件系统的责任而不是用户的任务。 此外,在设计人此外,在设计人- -机交互部分时应该力机交互部分时应该力求达到下述求达到下述目标目标:用户在使用该系统时用:用户在使用该系统时用于思考
19、人于思考人- -机交互方法所花费的时间减至最机交互方法所花费的时间减至最少,而用于做他实际想做的工作所用的时少,而用于做他实际想做的工作所用的时间达到最大值。更理想的情况是,人间达到最大值。更理想的情况是,人- -机交机交互界面能够增强用户的能力。互界面能够增强用户的能力。 6. 6. 易学易学 人人- -机交互界面应该易学易用,应该机交互界面应该易学易用,应该提供联机参考资料,以便用户在遇到困难提供联机参考资料,以便用户在遇到困难时可随时参阅。时可随时参阅。 7. 7. 富有吸引力富有吸引力 人人- -机交互界面不仅应该方便、高效,机交互界面不仅应该方便、高效,还应该使人在使用时感到心情愉快
20、,能够还应该使人在使用时感到心情愉快,能够从中获得乐趣,从而吸引人去使用它。从中获得乐趣,从而吸引人去使用它。 8.5.2 8.5.2 设计人设计人- -机交互子系机交互子系统的策略统的策略 1. 1. 分类用户分类用户 为了更好地了解用户的需要与爱好,为了更好地了解用户的需要与爱好,以便设计出符合用户需要的界面,设计者以便设计出符合用户需要的界面,设计者首先应该把将来可能与系统交互的用户分首先应该把将来可能与系统交互的用户分类。通常从下列几个不同角度进行分类。类。通常从下列几个不同角度进行分类。 按技能水平分类按技能水平分类( (新手新手/ /初级初级/ /中级中级/ /高级高级) )。 按
21、职务分类按职务分类( (总经理总经理/ /经理经理/ /职员职员) )。 按所属集团分类按所属集团分类( (职员职员/ /顾客顾客) )。 2. 2. 描述用户描述用户 应该仔细了解将来使用系统的每类用应该仔细了解将来使用系统的每类用户的情况,把获得的下列各项信息记录下户的情况,把获得的下列各项信息记录下来。来。 3. 3. 设计命令层次设计命令层次 设计命令层次的工作通常包含以下几设计命令层次的工作通常包含以下几项内容。项内容。 (1) (1) 研究现有的人研究现有的人- -机交互含义和准机交互含义和准则则 (2) (2) 确定初始的命令层次确定初始的命令层次 所谓所谓命令层次命令层次,实质
22、上是用过程抽象,实质上是用过程抽象机制组织起来的、可供选用的服务的表示机制组织起来的、可供选用的服务的表示形式。设计命令层次时,通常先从对服务形式。设计命令层次时,通常先从对服务的过程抽象着手,然后再进一步修改它们,的过程抽象着手,然后再进一步修改它们,以适合具体应用环境的需要。以适合具体应用环境的需要。 (3) (3) 精化命令层次精化命令层次 为进一步修改完善初始的命令层次,为进一步修改完善初始的命令层次,应该考虑下列一些因素。应该考虑下列一些因素。 次序:仔细选择每个服务的名字,次序:仔细选择每个服务的名字,并在命令层的每一部分内把服务排好次序。并在命令层的每一部分内把服务排好次序。排序
23、时或者把最常用的服务放在最前面,排序时或者把最常用的服务放在最前面,或者按照用户习惯的工作步骤排序。或者按照用户习惯的工作步骤排序。 整体整体部分关系:寻找在这些服务部分关系:寻找在这些服务中存在的整体中存在的整体部分模式,这样做有助于部分模式,这样做有助于在命令层中分组组织服务。在命令层中分组组织服务。 宽度和深度:由于人的短期记忆能宽度和深度:由于人的短期记忆能力有限,命令层次的宽度和深度都不应该力有限,命令层次的宽度和深度都不应该过大。过大。 操作步骤:应该用尽量少的单击、操作步骤:应该用尽量少的单击、拖动和击键组合来表达命令,而且应该为拖动和击键组合来表达命令,而且应该为高级用户提供简
24、捷的操作方法。高级用户提供简捷的操作方法。 4. 4. 设计人设计人- -机交互类机交互类 人人-机交互类与所使用的操作系统及编机交互类与所使用的操作系统及编程语言密切相关。程语言密切相关。 8.6.1 8.6.1 分析并发性分析并发性 通过面向对象分析建立起来的通过面向对象分析建立起来的动态模动态模型型,是,是分析并发性的主要依据分析并发性的主要依据。如果两个。如果两个对象彼此间不对象彼此间不存在交互,或者它们同时接存在交互,或者它们同时接受事件,则这两个对象在本质上是受事件,则这两个对象在本质上是并发并发的。的。 8.6.2 8.6.2 设计任务管理子系统设计任务管理子系统 常见的常见的任
展开阅读全文