软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著).pptx
《软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著).pptx》由会员分享,可在线阅读,更多相关《软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著).pptx(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章章 面向对象设计面向对象设计11.1 面向对象设计的准则面向对象设计的准则11.2 启发规则启发规则11.3 软件重用软件重用11.4 系统分解系统分解11.5 设计问题域子系统设计问题域子系统11.6 设计人机交互子系统设计人机交互子系统11.7 设计任务管理子系统设计任务管理子系统11.8 设计数据管理子系统设计数据管理子系统11.9 设计类中的服务设计类中的服务11.10 设计关联设计关联11.11 设计优化设计优化n分析是提取和整理用户需求,并建立问题域精分析是提取和整理用户需求,并建立问题域精确模型的过程。确模型的过程。n设计则是把分析阶段得到的需求转变成符合成设计则是把分
2、析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。本和质量要求的、抽象的系统实现方案的过程。n从面向对象分析到面向对象设计从面向对象分析到面向对象设计(OOD),是一,是一个逐渐扩充模型的过程。个逐渐扩充模型的过程。n在实际的软件开发过程中分析和设计的界限是在实际的软件开发过程中分析和设计的界限是模糊的。分析和设计活动是一个多次反复迭代模糊的。分析和设计活动是一个多次反复迭代的过程。的过程。 nOOD模型模型11.1 面向对象设计的准则面向对象设计的准则n所谓优秀设计,就是权衡了各种因素,从而使所谓优秀设计,就是权衡了各种因素,从而使得系统在其整个生命周期中的总开销最小的设
3、得系统在其整个生命周期中的总开销最小的设计。计。n对大多数软件系统而言,对大多数软件系统而言,60%以上的软件费用以上的软件费用都用于软件维护,因此,优秀软件设计的一个都用于软件维护,因此,优秀软件设计的一个主要特点就是容易维护。主要特点就是容易维护。 n设计准则有设计准则有6条。条。1. 模块化模块化n对象就是模块。它是把数据结构和操作这些数对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。据的方法紧密地结合在一起所构成的模块。2. 抽象抽象n面向对象方法不仅支持过程抽象,而且支持数面向对象方法不仅支持过程抽象,而且支持数据抽象。据抽象。3. 信息隐藏信息隐藏n在
4、面向对象方法中,信息隐藏通过对象的封装在面向对象方法中,信息隐藏通过对象的封装性实现。性实现。4. 弱耦合弱耦合n耦合指不同对象之间相互关联的紧密程度。耦合指不同对象之间相互关联的紧密程度。n一般说来,对象之间的耦合可分为两大类:一般说来,对象之间的耦合可分为两大类:q交互耦合交互耦合n如果对象之间的耦合通过消息连接来实现,则这种耦合就如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。是交互耦合。n交互耦合应尽可能松散交互耦合应尽可能松散 。q继承耦合继承耦合n与交互耦合相反,应该提高继承耦合程度。与交互耦合相反,应该提高继承耦合程度。n继承是一般化类与特殊类之间耦合的一种形式。通
5、过继承继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的关系结合起来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越紧密越好。模块。彼此之间应该越紧密越好。5. 强内聚强内聚n内聚衡量一个模块内各个元素彼此结合的紧密程度。内聚衡量一个模块内各个元素彼此结合的紧密程度。n内聚定义为:设计中使用的一个构件内的各个元素,内聚定义为:设计中使用的一个构件内的各个元素,对完成一个定义明确的目的所做出的贡献程度。对完成一个定义明确的目的所做出的贡献程度。n在设计时应该力求做到高内聚。在设计时应该力求做到高内聚。n在面向对象设计中存在下述在面向对象
6、设计中存在下述3种内聚:种内聚:q服务内聚。一个服务应该完成一个且仅完成一个功能。服务内聚。一个服务应该完成一个且仅完成一个功能。q类内聚。一个类应该只有一个用途,它的属性和服务应该是类内聚。一个类应该只有一个用途,它的属性和服务应该是高内聚的。高内聚的。q一般一般-特殊内聚。设计出的一般特殊内聚。设计出的一般-特殊结构,应该符合多数人特殊结构,应该符合多数人的概念。的概念。6. 可重用可重用n软件重用是提高软件开发生产率和目标系统质软件重用是提高软件开发生产率和目标系统质量的重要途径。量的重要途径。n重用基本上从设计阶段开始。重用基本上从设计阶段开始。n重用有两方面的含义:重用有两方面的含义
7、:q一是尽量使用已有的类一是尽量使用已有的类(包括开发环境提供的类库,包括开发环境提供的类库,及以往开发类似系统时创建的类及以往开发类似系统时创建的类),q二是如果确实需要创建新类,则在设计这些新类的二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。协议时,应该考虑将来的可重复使用性。 11.2 启发规则启发规则1. 设计结果应该清晰易懂设计结果应该清晰易懂n用词一致。用词一致。n使用已有的协议。使用已有的协议。n减少消息模式的数目。减少消息模式的数目。n避免模糊的定义。避免模糊的定义。2. 一般一般-特殊结构的深度应适当特殊结构的深度应适当n应该使类等级中包含的
8、层次数适当。一般说来,应该使类等级中包含的层次数适当。一般说来,在一个中等规模在一个中等规模(大约包含大约包含100个类个类)的系统中,的系统中,类等级层次数应保持为类等级层次数应保持为72。3. 设计简单的类设计简单的类n应该尽量设计小而简单的类,以便于开发和管应该尽量设计小而简单的类,以便于开发和管理。理。n为使类保持简单,应该注意以下几点:为使类保持简单,应该注意以下几点:q避免包含过多的属性。避免包含过多的属性。 q有明确的定义。有明确的定义。q尽量简化对象之间的合作关系。尽量简化对象之间的合作关系。q不要提供太多服务。不要提供太多服务。q在开发大型软件系统时,设计出大量较小的类,需在
9、开发大型软件系统时,设计出大量较小的类,需要划分要划分“主题主题”。 4. 使用简单的协议使用简单的协议n一般说来,消息中的参数不要超过一般说来,消息中的参数不要超过3个。当然,个。当然,不超过不超过3个的限制也不是绝对的。个的限制也不是绝对的。 5. 使用简单的服务使用简单的服务n一般说来,应该尽量避免使用复杂的服务。一般说来,应该尽量避免使用复杂的服务。n如果一个服务中包含了过多的源程序语句,或如果一个服务中包含了过多的源程序语句,或者语句嵌套层次太多,或者使用了复杂的者语句嵌套层次太多,或者使用了复杂的CASE语句,则应该仔细检查这个服务,设法语句,则应该仔细检查这个服务,设法分解或简化
10、它,考虑用一般分解或简化它,考虑用一般-特殊结构代替。特殊结构代替。6. 把设计变动减至最小把设计变动减至最小n出现必须修改设计的情况,应该使修改的范围出现必须修改设计的情况,应该使修改的范围尽可能小。尽可能小。理想的设计变动情况理想的设计变动情况11.3 软件重用软件重用11.3.1 概述概述1. 重用重用n重用也叫再用或复用,是指同一事物不作修改重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。或稍加改动就多次重复使用。n广义地说,软件重用可分为以下广义地说,软件重用可分为以下3个层次:个层次:q知识重用知识重用(软件工程知识的重用软件工程知识的重用)。q方法和标准的重用方
11、法和标准的重用(面向对象方法或国家制定的软面向对象方法或国家制定的软件开发规范的重用件开发规范的重用)。q软件成分的重用。软件成分的重用。2. 软件成分的重用级别软件成分的重用级别n代码重用:代码重用:通常把它理解为调用库中的模块。通常把它理解为调用库中的模块。代码重用的几种形式:代码重用的几种形式:q源代码剪贴源代码剪贴q源代码包含源代码包含q继承继承n设计结果重用:设计结果重用:重用某个软件系统的设计模型重用某个软件系统的设计模型(即求解域模型即求解域模型)。这个级别的重用有助于把一。这个级别的重用有助于把一个应用系统移植到完全不同的软硬件平台上。个应用系统移植到完全不同的软硬件平台上。n
12、分析结果重用:分析结果重用:重用某个系统的分析模型。这重用某个系统的分析模型。这种重用特别适用于用户需求未改变,但系统体种重用特别适用于用户需求未改变,但系统体系结构发生了根本变化的场合。系结构发生了根本变化的场合。 3. 典型的可重用软件成分典型的可重用软件成分n项目计划项目计划 n成本估计成本估计n体系结构体系结构n需求模型和规格说明需求模型和规格说明n设计设计n源代码源代码 n用户文档和技术文档用户文档和技术文档n用户界面用户界面n数据数据n测试用例测试用例11.3.2 类构件类构件n面向对象技术中的面向对象技术中的“类类”,是比较理想的可重,是比较理想的可重用软构件,称之为类构件。用软
13、构件,称之为类构件。1. 可重用软构件应具备的特点可重用软构件应具备的特点q模块独立性强模块独立性强 q具有高度可塑性具有高度可塑性q接口清晰、简明、可靠接口清晰、简明、可靠n精心设计的精心设计的“类类”基本上能满足上述要求,可基本上能满足上述要求,可以认为它是可重用软构件的雏形。以认为它是可重用软构件的雏形。 2. 类构件的重用方式类构件的重用方式n实例重用实例重用q由于类的封装性,使用者无须了解实现细节就可以由于类的封装性,使用者无须了解实现细节就可以使用适当的构造函数,按照需要创建类的实例。这使用适当的构造函数,按照需要创建类的实例。这是最基本的重用方式。是最基本的重用方式。n继承重用继
14、承重用q继承重用提供了一种安全地修改已有类构件,以便继承重用提供了一种安全地修改已有类构件,以便在当前系统中重用的手段。在当前系统中重用的手段。n多态重用多态重用q利用多态性不仅可以使对象的对外接口更加一般化,利用多态性不仅可以使对象的对外接口更加一般化,从而降低了消息连接的复杂程度,而且还提供了一从而降低了消息连接的复杂程度,而且还提供了一种简便可靠的软构件组合机制。种简便可靠的软构件组合机制。 11.3.3 软件重用的效益软件重用的效益1. 质量质量n随着每一次重用,都会有一些错误被发现并被清除,随着每一次重用,都会有一些错误被发现并被清除,构件的质量也会随之改善。构件的质量也会随之改善。
15、2. 生产率生产率n当把可重用的软件成分应用于软件开发的全过程时,当把可重用的软件成分应用于软件开发的全过程时,生产率得到了提高。基本上生产率得到了提高。基本上30%50%的重用大约可的重用大约可以导致生产率提高以导致生产率提高25%40%。3. 成本成本n净成本节省可以用下式估算:净成本节省可以用下式估算:C=Cs-Cr-Cdn其中,其中,Cs是项目从头开发所需要的成本;是项目从头开发所需要的成本;Cr是与重用是与重用相关联的成本;相关联的成本;Cd是交付给客户的软件的实际成本。是交付给客户的软件的实际成本。11.4 系统分解系统分解n系统的主要组成部分称为子系统。通常根据所系统的主要组成部
16、分称为子系统。通常根据所提供的功能来划分子系统。一般说来,子系统提供的功能来划分子系统。一般说来,子系统的数目应该与系统规模基本匹配。的数目应该与系统规模基本匹配。n各个子系统之间应该具有尽可能简单、明确的各个子系统之间应该具有尽可能简单、明确的接口。因此,可以相对独立地设计各个子系统。接口。因此,可以相对独立地设计各个子系统。n在划分和设计子系统时,应该尽量减少子系统在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。彼此间的依赖性。n面向对象设计模型,与面向对象分析模型一样,面向对象设计模型,与面向对象分析模型一样,也由主题、类与对象、结构、属性、服务等也由主题、类与对象、结构、属性、
17、服务等5个层次组成。个层次组成。n大多数系统的面向对象设计模型,在逻辑上都大多数系统的面向对象设计模型,在逻辑上都由由4大部分组成。大部分组成。q问题域子系统问题域子系统q人机交互子系统人机交互子系统q任务管理子系统任务管理子系统q数据管理子系统数据管理子系统n可以把可以把4大组成部分想象成整个模型的大组成部分想象成整个模型的4个垂直个垂直切片。切片。典型的面向对象设计模型典型的面向对象设计模型1. 子系统之间的两种交互方式子系统之间的两种交互方式n客户客户-供应商关系供应商关系(Client-supplier)q作为作为“客户客户”的子系统调用作为的子系统调用作为“供应商供应商”的子系的子系
18、统,后者完成某些服务工作并返回结果。统,后者完成某些服务工作并返回结果。q任何交互行为都是由前者驱动的。任何交互行为都是由前者驱动的。n平等伙伴关系平等伙伴关系(peer-to-peer)q每个子系统都可能调用其他子系统,因此,每个子每个子系统都可能调用其他子系统,因此,每个子系统都必须了解其他子系统的接口。系统都必须了解其他子系统的接口。q子系统之间的交互更复杂。子系统之间的交互更复杂。n总的说来,单向交互比双向交互更容易理解,总的说来,单向交互比双向交互更容易理解,也更容易设计和修改,因此应该尽量使用客户也更容易设计和修改,因此应该尽量使用客户-供应商关系。供应商关系。2. 组织系统的两种
19、方案组织系统的两种方案n层次组织层次组织(水平水平)q把软件系统组织成一个层次系统,每层是一个子系把软件系统组织成一个层次系统,每层是一个子系统。上层在下层的基础上建立,下层为实现上层功统。上层在下层的基础上建立,下层为实现上层功能而提供必要的服务。在上、下层之间存在客户能而提供必要的服务。在上、下层之间存在客户-供应商关系。供应商关系。n封闭式封闭式n开放式开放式n块状组织块状组织(垂直垂直)q把软件系统垂直地分解成若干个相对独立的、弱耦把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一合的子系统,一个子系统相当于一块,每块提供一种类型的服务。种类型的服
20、务。n混合使用层次结构和块状结构混合使用层次结构和块状结构典型应用系统的组织结构典型应用系统的组织结构3. 设计系统的拓扑结构设计系统的拓扑结构n由子系统组成完整的系统时,典型的拓扑结构由子系统组成完整的系统时,典型的拓扑结构有管道形、树形、星形等。有管道形、树形、星形等。n设计者应该采用与问题结构相适应的、尽可能设计者应该采用与问题结构相适应的、尽可能简单的拓扑结构,以减少子系统之间的交互数简单的拓扑结构,以减少子系统之间的交互数量。量。 11.5 设计问题域子系统设计问题域子系统n面向对象设计仅需从实现角度对问题域模型做面向对象设计仅需从实现角度对问题域模型做一些补充或修改,主要是增添、合
21、并或分解类一些补充或修改,主要是增添、合并或分解类与对象、属性及服务,调整继承关系等等。与对象、属性及服务,调整继承关系等等。n当问题域子系统过分复杂庞大时,应该把它进当问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统。一步分解成若干个更小的子系统。 1. 调整需求调整需求n有两种情况会导致修改通过面向对象分析所确有两种情况会导致修改通过面向对象分析所确定的系统需求:定的系统需求:q一是用户需求或外部环境发生了变化;一是用户需求或外部环境发生了变化;q二是分析员对问题域理解不透彻或缺乏领域专家帮二是分析员对问题域理解不透彻或缺乏领域专家帮助。助。n无论出现上述哪种情况,通常都
22、只需简单地修无论出现上述哪种情况,通常都只需简单地修改面向对象分析结果,然后再把这些修改反映改面向对象分析结果,然后再把这些修改反映到问题域子系统中。到问题域子系统中。 2. 重用已有的类重用已有的类n代码重用从设计阶段开始,在研究面向对象分代码重用从设计阶段开始,在研究面向对象分析结果时就应该寻找使用已有类的方法。析结果时就应该寻找使用已有类的方法。n重用已有类的典型过程如下:重用已有类的典型过程如下:q选择有可能被重用的已有类,标出这些候选类中对选择有可能被重用的已有类,标出这些候选类中对本问题无用的属性和服务。本问题无用的属性和服务。q添加泛化关系。添加泛化关系。q标出从已有类继承来的属
23、性和服务。标出从已有类继承来的属性和服务。q修改与问题域类相关的关联,必要时改为与被重用修改与问题域类相关的关联,必要时改为与被重用的已有类相关的关联。的已有类相关的关联。 当前所需的类的信息当前所需的类的信息比比可复用类定义的信息可复用类定义的信息直接复用直接复用 通过继承复用通过继承复用 删除可复用类的多余信息删除可复用类的多余信息删除多余信息,通过继承复用删除多余信息,通过继承复用不同程度的复用:不同程度的复用:第第4种情况的步骤:种情况的步骤:n(1) 把要复用的类加到问题域;把要复用的类加到问题域;n(2) 标以标以“复用复用”,划掉(或标出)不用的属,划掉(或标出)不用的属性与操作
24、;性与操作;n(3) 建立从复用类到问题域原有的类之间的泛建立从复用类到问题域原有的类之间的泛化关系;化关系;n(4) 由于问题域的类继承了由于问题域的类继承了“复用复用”类的特征,类的特征,所以有些属性和操作不需要了。所以有些属性和操作不需要了。 3. 把问题域类组合在一起把问题域类组合在一起n通过引入一个根类而把问题域类组合在一起。通过引入一个根类而把问题域类组合在一起。此外,这样的根类还可以用来建立协议。此外,这样的根类还可以用来建立协议。4. 增添一般化类以建立协议增添一般化类以建立协议n在设计过程中常常发现,一些具体类需要有一在设计过程中常常发现,一些具体类需要有一个公共的协议,也就
25、是说,它们都需要定义一个公共的协议,也就是说,它们都需要定义一组类似的服务。在这种情况下可以引入一个附组类似的服务。在这种情况下可以引入一个附加类加类(例如,根类例如,根类),以便建立这个协议。,以便建立这个协议。 5. 调整继承层次调整继承层次n使用多重继承机制使用多重继承机制q避免出现属性及服务的命名冲突。避免出现属性及服务的命名冲突。q窄菱形模式。属性及服务命名冲突的可能性比较大。窄菱形模式。属性及服务命名冲突的可能性比较大。q阔菱形模式。属性及服务的名字发生冲突的可能性阔菱形模式。属性及服务的名字发生冲突的可能性比较小,但是,它需要用更多的类才能表示同一个比较小,但是,它需要用更多的类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程导论课件之第11章面向对象设计(第五版)(张海藩编著)
限制150内