




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 n分析分析是是提取和整理提取和整理用户需求用户需求,并建立,并建立问题域问题域精确模型精确模型的过程。的过程。n设计设计则是把则是把分析阶段得到的需求分析阶段得到的需求转变成转变成符合成本和质符合成本和质量要求的、抽象的量要求的、抽象的系统实现方案的过程系统实现方案的过程。n从从面向对象分析面向对象分析(OOA)到到面向对象设计面向对象设计(OOD),是一,是一个个逐渐扩充模型逐渐扩充模型的过程。的过程。n在在实际的软件开发过程实际的软件开发过程中中分析和设计分析和设计的的界限是模糊界限是模糊的。的。分析和设计活动是一个分析和设计活动是一个多次反复迭代多次反复迭代的过程。的过程。 第第11
2、章章 面向对象设计面向对象设计2 nOOD模型模型3 第第11章章 面向对象设计面向对象设计11.1 面向对象设计的准则面向对象设计的准则11.2 启发规则启发规则11.3 软件重用软件重用11.4 系统分解系统分解11.5 设计问题域子系统设计问题域子系统11.6 设计人机交互子系统设计人机交互子系统11.7 设计任务管理子系统设计任务管理子系统11.8 设计数据管理子系统设计数据管理子系统11.9 设计类中的服务设计类中的服务11.10 设计关联设计关联11.11 设计优化设计优化4 11.1 面向对象设计的准则面向对象设计的准则n所谓优秀设计,就是权衡了各种因素,从而使得系统所谓优秀设计
3、,就是权衡了各种因素,从而使得系统在其整个生命周期中的在其整个生命周期中的总开销最小的设计总开销最小的设计。n对大多数软件系统而言,对大多数软件系统而言,60%以上的软件费用都用于以上的软件费用都用于软件维护软件维护,因此,优秀软件设计的一个主要特点就是,因此,优秀软件设计的一个主要特点就是容易维护容易维护。 n设计准则有设计准则有6条条。5 1. 模块化模块化n面向对象的软件开发模式,支持了系统模块化的原则:对面向对象的软件开发模式,支持了系统模块化的原则:对象就是模块。象就是模块。n它是把数据结构和操作这些数据的方法紧密地结合在一起它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的
4、模块。所构成的模块。2. 抽象抽象n面向对象方法不仅支持过程抽象,而且支持数据抽象。面向对象方法不仅支持过程抽象,而且支持数据抽象。n类实际上是一种抽象数据类型,它对外开放的公共接口构类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明(协议),这种接口规定了外界可以使成了类的规格说明(协议),这种接口规定了外界可以使用的用的合法操作符合法操作符,利用这些操作符可以对类的实例中包含,利用这些操作符可以对类的实例中包含的数据进行操作。的数据进行操作。 6 3. 信息隐藏信息隐藏 在面向对象方法中,信息隐蔽通过对象的封装性实现:在面向对象方法中,信息隐蔽通过对象的封装性实现:类结构分
5、离了类的接口与类的实现,从而支持了信息类结构分离了类的接口与类的实现,从而支持了信息隐蔽。隐蔽。 7 4. 弱耦合弱耦合n耦合指不同对象之间相互关联的紧密程度。耦合指不同对象之间相互关联的紧密程度。n一般说来,对象之间的耦合可分为两大类一般说来,对象之间的耦合可分为两大类:q交互耦合交互耦合如果对象之间的耦合如果对象之间的耦合通过消息连接通过消息连接来实现,则这种耦合就来实现,则这种耦合就是交互耦合。是交互耦合。交互耦合应尽可能松散交互耦合应尽可能松散 。q继承耦合继承耦合与交互耦合相反,与交互耦合相反,应该提高应该提高继承耦合程度。继承耦合程度。继承是一般化类与特殊类之间耦合的一种形式。通过
6、继承继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的关系结合起来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越紧密越好。模块。彼此之间应该越紧密越好。8 5. 强内聚强内聚n内聚衡量一个模块内各个元素彼此结合的紧密程度。内聚衡量一个模块内各个元素彼此结合的紧密程度。n内聚定义为:设计中使用的内聚定义为:设计中使用的一个构件内一个构件内的的各个元素各个元素,对完成一个定义明确的目的所做出的贡献程度。对完成一个定义明确的目的所做出的贡献程度。n在设计时应该力求做到在设计时应该力求做到高内聚。高内聚。n在在面向对象设计中面向对象设计中存
7、在下述存在下述3种内聚种内聚:q服务内聚服务内聚。一个服务应该完成一个且仅完成一个功能。一个服务应该完成一个且仅完成一个功能。q类内聚类内聚。一个类应该只有一个用途,它的属性和服务应该是。一个类应该只有一个用途,它的属性和服务应该是高内聚的。高内聚的。q一般一般-特殊内聚特殊内聚。设计出的一般。设计出的一般-特殊结构,应该符合多数人特殊结构,应该符合多数人的概念。的概念。9 6. 可重用可重用n软件重用软件重用是提高软件是提高软件开发生产率开发生产率和和目标系统质量目标系统质量的重的重要途径。要途径。n重用基本上从重用基本上从设计阶段开始设计阶段开始。n重用有重用有两方面两方面的含义:的含义:
8、q一是尽量使用已有的类一是尽量使用已有的类(包括开发环境提供的类库,及包括开发环境提供的类库,及以往开发类似系统时创建的类以往开发类似系统时创建的类),q二是如果确实需要创建新类,则在设计这些新类的协议二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑时,应该考虑将来的可重复使用性将来的可重复使用性。 10 11.2 启发规则启发规则人们在人们在面向对象方法面向对象方法中也积累了一些经验,总结出中也积累了一些经验,总结出几条启发规则:几条启发规则:1. 设计结果应该清晰易懂设计结果应该清晰易懂2. 一般一般-特殊结构的深度应适当特殊结构的深度应适当3. 设计简单的类设计简单的类4.
9、使用简单的协议使用简单的协议5. 使用简单的服务使用简单的服务6. 把设计变动减至最小把设计变动减至最小11 11.2 启发规则启发规则1. 设计结果应该清晰易懂设计结果应该清晰易懂n用词一致。用词一致。n使用已有的协议。使用已有的协议。n减少消息模式的数目。减少消息模式的数目。n避免模糊的定义。避免模糊的定义。2. 一般一般-特殊特殊结构的深度应适当结构的深度应适当n应该使类等级中包含的层次数适当。应该使类等级中包含的层次数适当。n一般说来,在一个中等规模一般说来,在一个中等规模(大约包含大约包含100个类个类)的系统中,的系统中,类等级层次数应保持为类等级层次数应保持为72。12 3. 设
10、计简单的类设计简单的类n应该尽量设计应该尽量设计小而简单小而简单的类,以便于开发和管理。的类,以便于开发和管理。n为使类保持简单,应该注意以下几点:为使类保持简单,应该注意以下几点:q避免包含过多的属性。避免包含过多的属性。 q有明确的定义:任务简单,描述语句少。有明确的定义:任务简单,描述语句少。q尽量简化尽量简化对象之间的合作关系对象之间的合作关系。q不要提供太多服务。不要提供太多服务。问题:遵循上述规则在开发大型软件系统时,将设计出大量问题:遵循上述规则在开发大型软件系统时,将设计出大量较较小的类小的类,需要按逻辑分组,即划分,需要按逻辑分组,即划分“主题主题”。 13 4. 使用简单的
11、协议使用简单的协议n设计简单的类接口,发送的消息中参数要少。设计简单的类接口,发送的消息中参数要少。n一般说来,消息中的参数不要超过一般说来,消息中的参数不要超过3个。当然,个。当然,不超过不超过3个的限制也不个的限制也不是绝对的。是绝对的。 5. 使用简单的服务使用简单的服务n编写实现每一个服务时,避免复杂的语句和结构;编写实现每一个服务时,避免复杂的语句和结构;n如果一个服务中包含了过多的源程序语句,或者语句嵌套层次太多,如果一个服务中包含了过多的源程序语句,或者语句嵌套层次太多,或者使用了复杂的或者使用了复杂的CASE语句,则应该仔细检查这个服务,设法分解语句,则应该仔细检查这个服务,设
12、法分解或简化它,考虑用或简化它,考虑用一般一般-特殊特殊结构代替。结构代替。14 6. 把把设计变动设计变动减至最小减至最小 出现必须修改设计的情况,应该使修改的范围尽可能小。出现必须修改设计的情况,应该使修改的范围尽可能小。理想的设计变动情况理想的设计变动情况15 11.3 软件重用软件重用11.3.1 概述概述1. 重用重用n重用也叫再用或复用,是指同一事物不作修改或稍加重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。改动就多次重复使用。n广义地说,软件重用可分为以下广义地说,软件重用可分为以下3个层次:个层次:q知识重用知识重用(软件工程知识的重用软件工程知识的重用)。
13、q方法和标准的重用方法和标准的重用(面向对象方法或国家制定的软件开面向对象方法或国家制定的软件开发规范的重用发规范的重用)。q软件成分软件成分的重用。的重用。n本节仅讨论本节仅讨论软件成分软件成分重用问题。重用问题。16 2. 软件成分的重用级别软件成分的重用级别n代码重用代码重用:通常把它理解为调用库中的模块。代码重通常把它理解为调用库中的模块。代码重用的几种形式:用的几种形式:q源代码剪贴源代码剪贴q源代码包含源代码包含q继承继承n设计结果重用设计结果重用:重用某个软件系统的设计模型重用某个软件系统的设计模型(即求即求解域模型解域模型)。这个级别的重用有助于把一个应用系统。这个级别的重用有
14、助于把一个应用系统移植到完全不同的软硬件平台上。移植到完全不同的软硬件平台上。n分析结果重用分析结果重用:重用某个系统的分析模型。这种重用重用某个系统的分析模型。这种重用特别适用于用户需求未改变,但系统体系结构发生了特别适用于用户需求未改变,但系统体系结构发生了根本变化的场合。根本变化的场合。 17 3. 典型的可典型的可重用软件成分重用软件成分n项目计划项目计划 n成本估计成本估计n体系结构体系结构n需求模型和规格说明需求模型和规格说明n设计设计n源代码源代码 n用户文档和技术文档用户文档和技术文档n用户界面用户界面n数据数据 测试用例测试用例18 11.3.2 类构件类构件n面向对象技术中
15、的面向对象技术中的“类类”,是比较理想的是比较理想的可重用可重用软构件软构件,称之为类构件。,称之为类构件。1. 可重用可重用软构件软构件应具备的特点应具备的特点q模块独立性强模块独立性强 q具有高度可塑性具有高度可塑性q接口清晰、简明、可靠接口清晰、简明、可靠精心设计的精心设计的“类类”基本上能满足上述要求,可以认为它是基本上能满足上述要求,可以认为它是可可重用软构件的雏形重用软构件的雏形。 19 2. 类构件的类构件的重用方式重用方式n实例重用实例重用q使用适当的使用适当的构造函数构造函数,按照需要创建,按照需要创建类的实例。类的实例。q用几个简单的用几个简单的对象作为类的成对象作为类的成
16、员创建出一个更复杂的类。员创建出一个更复杂的类。n继承重用继承重用q继承重用提供了一种安全地修改已有类构件,以便在当继承重用提供了一种安全地修改已有类构件,以便在当前系统中重用的手段前系统中重用的手段。n多态重用多态重用q使对象的使对象的对外接口更加一般化对外接口更加一般化,降低了消息连接的复杂,降低了消息连接的复杂程度。程度。q提供一种简便可靠的软构件组合机制。提供一种简便可靠的软构件组合机制。20 11.3.3 软件重用的效益软件重用的效益1. 质量质量n随着每一次重用,都会有一些错误被发现并被清除,构件随着每一次重用,都会有一些错误被发现并被清除,构件的质量也会随之改善。的质量也会随之改
17、善。2. 生产率生产率n当把可重用的软件成分应用于软件开发的全过程时,生产当把可重用的软件成分应用于软件开发的全过程时,生产率得到了提高。基本上率得到了提高。基本上30%50%的重用大约可以导致生的重用大约可以导致生产率提高产率提高25%40%。3. 成本成本n净成本净成本节省可以用下式估算:节省可以用下式估算:C=Cs-Cr-Cdn其中,其中,Cs是项目从头开发所需要的成本;是项目从头开发所需要的成本;Cr是与重用相是与重用相关联的成本;关联的成本;Cd是交付给客户的软件的实际成本。是交付给客户的软件的实际成本。21 11.4 系统分解系统分解n“分而治之,各个击破分而治之,各个击破”,软件
18、工程师在设计比较复软件工程师在设计比较复杂的应用系统时杂的应用系统时普遍采用的策略普遍采用的策略。首先把系统分解成。首先把系统分解成若干个比较小的部分,然后再分别设计每个部分。若干个比较小的部分,然后再分别设计每个部分。n系统系统的的主要组成部分主要组成部分称为称为子系统子系统。通常根据所。通常根据所提供的提供的功能功能来来划分子系统划分子系统。一般说来,。一般说来,子系统的数目子系统的数目应该与应该与系统规模基本匹配系统规模基本匹配。n各个子系统之间应该具有尽可能各个子系统之间应该具有尽可能简单、明确的接口简单、明确的接口。因此,可以因此,可以相对独立地设计各个子系统相对独立地设计各个子系统
19、。n在划分和设计子系统时,应该尽量在划分和设计子系统时,应该尽量减少子系统彼此间减少子系统彼此间的的依赖性依赖性。22 n面向对象面向对象设计模型设计模型,与面向对象,与面向对象分析模型分析模型一样,也由一样,也由主题主题、类与对象类与对象、结构结构、属性属性、服务服务等等5个层次个层次组成。组成。n大多数系统的面向对象大多数系统的面向对象设计模型设计模型,在,在逻辑上逻辑上都由都由4大大部分部分组成。组成。q问题域问题域子系统子系统q人机交互人机交互子系统子系统q任务管理任务管理子系统子系统q数据管理数据管理子系统子系统n可以把可以把4大组成部分想象成整个模型的大组成部分想象成整个模型的4个
20、垂直切片,个垂直切片,如下图所示:如下图所示:23 典型的面向对象设计模型典型的面向对象设计模型下面对其分析:下面对其分析:24 1. 子系统之间的子系统之间的两种交互方式两种交互方式n客户客户-供应商供应商关系关系(Client-supplier)q作为作为“客户客户”的子系统的子系统调用调用作为作为“供应商供应商”的子系统,后者的子系统,后者完成某些服务工作并返回结果。完成某些服务工作并返回结果。q任何交互行为都是任何交互行为都是由前者驱动由前者驱动的的。n平等伙伴平等伙伴关系关系(peer-to-peer)q每个子系统都可能调用其他子系统,因此,每个子系统都必每个子系统都可能调用其他子系
21、统,因此,每个子系统都必须了解其他子系统的接口。须了解其他子系统的接口。q子系统之间的交互更复杂子系统之间的交互更复杂。总的说来,总的说来,单向交互单向交互比比双向交互双向交互更容易理解,也更容易设计和更容易理解,也更容易设计和修改,因此应该修改,因此应该尽量使用客户尽量使用客户-供应商关系供应商关系。25 2. 组织系统组织系统的的两种方案两种方案n层次组织层次组织(水平水平)q把软件系统组织成一个层次系统,每层是一个子系统。把软件系统组织成一个层次系统,每层是一个子系统。q上层在下层的基础上建立,下层为实现上层功能而提供上层在下层的基础上建立,下层为实现上层功能而提供必要的服务。必要的服务
22、。q每一层内所包含的对象,彼此间相互独立,而处于不同每一层内所包含的对象,彼此间相互独立,而处于不同层次上的对象,彼此间往往有关联。层次上的对象,彼此间往往有关联。q在上、下层之间存在在上、下层之间存在客户客户-供应商供应商关系。低层相当于供关系。低层相当于供应商,上层相当于客户。应商,上层相当于客户。q层次结构又可进一步划分成两种模式层次结构又可进一步划分成两种模式:封闭式封闭式:每层子系统仅仅使用:每层子系统仅仅使用直接下层提供的服务直接下层提供的服务。开放式开放式:某层子系统可以使用处于其下层的任何一层系统:某层子系统可以使用处于其下层的任何一层系统所提供的服务。所提供的服务。26 n块
23、状组织块状组织(垂直垂直)q把软件系统把软件系统垂直地垂直地分解成若干个分解成若干个相对独立相对独立的、的、弱耦合弱耦合的的子系统;子系统;q一个子系统相当于一块,每块提供一种类型的服务一个子系统相当于一块,每块提供一种类型的服务。n混合混合使用使用层次结构层次结构和和块状结构块状结构,可以成功地把,可以成功地把多个子系统多个子系统组成一个组成一个完整的软件系统完整的软件系统。典型应用系统的组织结构典型应用系统的组织结构27 3. 设计系统的拓扑结构设计系统的拓扑结构n由子系统组成完整的系统时,由子系统组成完整的系统时,典型的拓扑结构典型的拓扑结构有有管道管道形形、树形树形、星形星形等。等。n
24、设计者应该设计者应该采用与问题结构相适应采用与问题结构相适应的、的、尽可能简单的尽可能简单的拓扑结构拓扑结构,以减少子系统之间的交互数量。,以减少子系统之间的交互数量。 28 11.5 设计问题域子系统设计问题域子系统n面向对象设计仅需从面向对象设计仅需从实现角度实现角度对对问题域模型问题域模型(对象模(对象模型、动态模型、功能模型)做一些型、动态模型、功能模型)做一些补充或修改补充或修改,主要,主要是是增添增添、合并合并或或分解类与对象分解类与对象、属性属性及及服务服务,调整调整继继承关系承关系等等。等等。n当问题域子系统过分复杂庞大时,应该把它当问题域子系统过分复杂庞大时,应该把它进一步分
25、进一步分解解成若干个成若干个更小的子系统更小的子系统。 29 1. 调整需求调整需求n有两种情况会导致修改通过面向对象分析所确定的系统需有两种情况会导致修改通过面向对象分析所确定的系统需求:求:q一是用户一是用户需求或外部环境需求或外部环境发生了变化发生了变化;q二是分析员二是分析员对问题域对问题域理解不透彻理解不透彻或或缺乏领域专家帮助缺乏领域专家帮助。n无论出现上述哪种情况,通常都只需简单地无论出现上述哪种情况,通常都只需简单地修改面向对象修改面向对象分析结果分析结果,然后再,然后再把这些修改把这些修改反映到反映到问题域子系统中问题域子系统中。 30 2. 重用重用已有的类已有的类n代码重
26、用从代码重用从设计阶段设计阶段开始,在研究面向对象分析结果时就开始,在研究面向对象分析结果时就应该寻找使用应该寻找使用已有类已有类的方法。的方法。n重用已有类的典型过程如下:重用已有类的典型过程如下:q选择选择有可能被重用有可能被重用的已有类,标出这些的已有类,标出这些候选类候选类中对本问题中对本问题无无用用的的属性属性和和服务服务。q在被重用的在被重用的已有类已有类和和问题域类问题域类之间添加泛化关系之间添加泛化关系(即从被重即从被重用的已有类派生出问题域类用的已有类派生出问题域类)。q标出从已有类继承来的属性和服务,无须在问题域类内定义标出从已有类继承来的属性和服务,无须在问题域类内定义它
27、们了。它们了。q修改与问题域类相关的关联,必要时改为与被重用的已有类修改与问题域类相关的关联,必要时改为与被重用的已有类相关的关联。相关的关联。 31 当前所需的类的信息当前所需的类的信息比比可复用类定义的信息可复用类定义的信息直接复用直接复用 通过继承复用通过继承复用 删除可复用类的多余信息删除可复用类的多余信息删除多余信息,通过继承复用删除多余信息,通过继承复用不同程度的复用:不同程度的复用:32 第第4种情况的步骤种情况的步骤:(1) 把要复用的类加到问题域;把要复用的类加到问题域;(2) 标以标以“复用复用”,划掉(或标出)不用的属性与操作;,划掉(或标出)不用的属性与操作;(3) 建
28、立从建立从复用类复用类到到问题域原有的类问题域原有的类之间的之间的泛化关系泛化关系;(4) 由于问题域的类继承了由于问题域的类继承了“复用复用”类的特征,所以有些属类的特征,所以有些属性和操作不需要了。性和操作不需要了。 33 34 35 3. 把问题域类组合在一起把问题域类组合在一起 通过引入一个通过引入一个根类根类而把而把问题域类组合在一起问题域类组合在一起。此外,这样。此外,这样的根类还可以用来建立协议。的根类还可以用来建立协议。4. 增添一般化类增添一般化类以建立协议以建立协议 在设计过程中常常发现,一些具体类需要有一个公共的协在设计过程中常常发现,一些具体类需要有一个公共的协议,也就
29、是说,它们都需要定义议,也就是说,它们都需要定义一组类似的服务一组类似的服务。在这种。在这种情况下可以引入一个附加类情况下可以引入一个附加类(例如,根类例如,根类),以便建立这个,以便建立这个协议。协议。 36 5. 调整调整继承层次继承层次n使用使用多重继承机多重继承机制制n使用使用单继承机制单继承机制37 n使用多重继承机制使用多重继承机制 避免出现避免出现属性属性及及服服务务的的命名冲突命名冲突。q窄菱形模式窄菱形模式。属性。属性及服务命名冲突的及服务命名冲突的可能性比较大。可能性比较大。q阔菱形模式阔菱形模式。属性。属性及服务的名字及服务的名字发生发生冲突的可能性比较冲突的可能性比较小
30、小,但是,它需要,但是,它需要用用更多的类更多的类才能表才能表示同一个设计示同一个设计。38 n使用单继承机制使用单继承机制qA、把、把多重继承多重继承结构结构简化成单一的单继承简化成单一的单继承层次结构层次结构。qB、在多重继承结构中的、在多重继承结构中的某些继承关系某些继承关系,经简化后将不,经简化后将不再存在,这表明需要在各个具体类中再存在,这表明需要在各个具体类中重复定义某些属性重复定义某些属性和服务和服务。39 A、把、把多重继多重继承简化为承简化为单一层次的单继承单一层次的单继承40 方法一:采用方法一:采用聚合聚合把多继承调整为把多继承调整为单继承单继承。 41 42 方法二:采
31、用压平的方式。方法二:采用压平的方式。 43 方法三:压平和聚合的方式。方法三:压平和聚合的方式。 44 B、取消继承、取消继承方法一:把方法一:把继承结构展平继承结构展平。45 方法二:采用聚合的方法。方法二:采用聚合的方法。 46 6. 对复杂关联的转化对复杂关联的转化 A、把多对多关联转化为一对多关联把多对多关联转化为一对多关联47 B、把多元关联转化为二元关联、把多元关联转化为二元关联 48 C、把关联类转化为二元关联、把关联类转化为二元关联 49 7. 调整与完善属性调整与完善属性 50 8. ATM系统实例系统实例ATM系统系统问题域子系统的结构问题域子系统的结构51 11.6 设
32、计人机交互子系统设计人机交互子系统n在面向对象分析中,已经对在面向对象分析中,已经对用户界面用户界面需求作了需求作了初步分析初步分析,在面向对象在面向对象设计过程设计过程中,要对系统中,要对系统人机交互部分人机交互部分进行进行详细详细设计设计,其中包括,其中包括指定窗口指定窗口和和报表的形式报表的形式、设计命令层次设计命令层次等等等等n使用由使用由原型支持的系统化原型支持的系统化的设计策略,是成功地设计的设计策略,是成功地设计人机人机交互子系统交互子系统的关键的关键。 设计人机交互子系统的策略:设计人机交互子系统的策略: 1)分类用户;)分类用户; 2)描述用户;)描述用户; 3)设计命令层次
33、;)设计命令层次; 4)设计人机交互类。)设计人机交互类。52 1. 分类用户分类用户n为了更好地了解用户的为了更好地了解用户的需要与爱好需要与爱好,以便设计出,以便设计出符合符合用户需要的界面用户需要的界面,设计者首先应该把将来可能与系统,设计者首先应该把将来可能与系统交互的交互的用户如下分类用户如下分类:q按技能水平分类:按技能水平分类:新手、初级、中级、高级新手、初级、中级、高级;q按职务分类:按职务分类:总经理、经理、职员总经理、经理、职员;q按所属集团分类:按所属集团分类:职员、顾客;职员、顾客;53 2. 描述用户描述用户 应该仔细了解将来使用系统的应该仔细了解将来使用系统的每类用
34、户的情况每类用户的情况,记录,记录各项信息各项信息:q用户类型。用户类型。q使用系统欲达到的目的。使用系统欲达到的目的。q特征特征(年龄、性别、受教育程度、限制因素等年龄、性别、受教育程度、限制因素等)。q关键的成功因素关键的成功因素(需求、爱好、习惯等需求、爱好、习惯等)。q技能水平。技能水平。q完成本职工作的脚本。完成本职工作的脚本。54 3. 设计命令层次设计命令层次n研究现有的人机交互含义和准则;研究现有的人机交互含义和准则;n确定初始的命令层次;确定初始的命令层次;n精化命令层次:精化命令层次:q次序次序q整体整体-部分关系部分关系q宽度和深度宽度和深度q操作步骤:操作步骤:尽量少的
35、单击、拖动等;尽量少的单击、拖动等;4. 设计人机交互类设计人机交互类 人机交互类人机交互类与所使用的与所使用的操作系统操作系统及及编程语言编程语言密切相关密切相关。55 11.7 设计任务管理子系统设计任务管理子系统 设计工作的一项重要内容就是:确定哪些是设计工作的一项重要内容就是:确定哪些是必须必须同时动作同时动作的对象,哪些是的对象,哪些是相互排斥的对象相互排斥的对象。然后进一。然后进一步设计任务管理子系统。步设计任务管理子系统。【类似于进程类似于进程】1. 分析并发性分析并发性 通过通过面向对象分析面向对象分析建立起来的建立起来的动态模型动态模型,是,是分析并发性分析并发性的的主要依据
36、主要依据。如果两个对象彼此间不存在交互,或者它们。如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在同时接受事件,则这两个对象在本质上是并发的本质上是并发的。 并发任务可以在并发任务可以在不同的处理器上实现不同的处理器上实现,也可以在单个处,也可以在单个处理器上利用理器上利用多任务操作系统实现多任务操作系统实现。56 2. 设计设计任务管理任务管理子系统子系统(1) 确定事件驱动型任务确定事件驱动型任务(2) 确定时钟驱动型任务确定时钟驱动型任务(3) 确定优先任务确定优先任务(4) 确定关键任务确定关键任务(5) 确定协调任务确定协调任务(6) 尽量减少任务数尽量减少任务数(
37、7) 确定资源需求确定资源需求常见的任务有:常见的任务有:57 n确定确定事件驱动型事件驱动型任务任务q这类任务可能主要完成通信工作。这类任务可能主要完成通信工作。q工作过程:睡眠工作过程:睡眠等待来自数据线的中断等待来自数据线的中断任务唤醒、接收任务唤醒、接收数据数据通知相应对象通知相应对象继续睡眠。继续睡眠。n确定确定时钟驱动型时钟驱动型任务任务q每隔一定时间间隔每隔一定时间间隔就被就被触发以执行某些处理触发以执行某些处理。q工作过程:任务设置了工作过程:任务设置了唤醒时间唤醒时间后进入睡眠状态;一旦接收后进入睡眠状态;一旦接收到这种到这种系统中断系统中断,就被唤醒并工作,通知有关的对象,
38、然后,就被唤醒并工作,通知有关的对象,然后该任务又回到睡眠状态。该任务又回到睡眠状态。58 n确定确定优先任务优先任务q高优先级高优先级:为了在:为了在严格限定的时间内完成严格限定的时间内完成这种服务,可能需这种服务,可能需要要分离成独立的任务分离成独立的任务。q低优先级:设计时可能用额外的任务把它分离出来低优先级:设计时可能用额外的任务把它分离出来。n确定确定关键任务关键任务q关键任务关键任务是有关是有关系统成功系统成功或或失败失败的的关键处理关键处理,这类处理通常,这类处理通常都有严格的都有严格的可靠性要求可靠性要求。q在设计过程中可能用额外的任务把这样的在设计过程中可能用额外的任务把这样
39、的关键处理分离出来关键处理分离出来,以满足以满足高可靠性处理的要求高可靠性处理的要求。q对高可靠性处理应该对高可靠性处理应该精心设计和编码精心设计和编码,并且应该,并且应该严格测试严格测试。 59 n确定确定协调任务协调任务q当系统中存在当系统中存在3个以上任务时,就应该增加个以上任务时,就应该增加一个任务一个任务,用它,用它作为作为协调任务协调任务。n尽量尽量减少任务数减少任务数q必须仔细分析和选择每个确实需要的任务,使系统中必须仔细分析和选择每个确实需要的任务,使系统中包含的包含的任务数尽量少任务数尽量少。n确定确定资源需求资源需求q使用多处理器或固件,主要是为了满足高性能的需求。使用多处
40、理器或固件,主要是为了满足高性能的需求。q设计者应该综合考虑各种因素,以决定设计者应该综合考虑各种因素,以决定哪些子系统哪些子系统用用硬件实硬件实现现,哪些子系统,哪些子系统用软件实现用软件实现。60 11.8 设计数据管理子系统设计数据管理子系统1. 文件管理系统文件管理系统n文件管理系统是文件管理系统是操作系统操作系统的一个组成部分,具有成本低和简的一个组成部分,具有成本低和简单等特点;单等特点;n文件操作的级别低,为提供适当的文件操作的级别低,为提供适当的抽象级别抽象级别还必须编写额外还必须编写额外的代码;的代码;n不同操作系统的不同操作系统的文件管理系统文件管理系统往往有明显差异。往往
41、有明显差异。 11.8.1 选择数据存储管理模式选择数据存储管理模式 数据管理子系统是数据管理子系统是系统存储系统存储或或检索对象检索对象的的基本设施基本设施,它,它建立在某种建立在某种数据存储管理系统数据存储管理系统之上,并且隔离了数据存储之上,并且隔离了数据存储管理模式的影响。管理模式的影响。61 2. 关系数据库管理系统关系数据库管理系统n关系数据库管理系统的理论基础是关系代数,它不仅理论关系数据库管理系统的理论基础是关系代数,它不仅理论基础坚实而且有下列一些主要优点:基础坚实而且有下列一些主要优点:q提供了各种最基本的提供了各种最基本的数据管理数据管理功能;功能;q为为多种应用多种应用
42、提供了一致的接口;提供了一致的接口;q标准化的语言标准化的语言(SQL语言语言)。n关系数据库管理系统通常都相当复杂,具体缺点:关系数据库管理系统通常都相当复杂,具体缺点:q运行开销大;运行开销大;q不能满足高级应用的需求;不能满足高级应用的需求;q与程序设计语言的连接不自然。与程序设计语言的连接不自然。62 3. 面向对象数据库面向对象数据库管理系统管理系统n面向对象数据库管理系统是一种新技术,主要有面向对象数据库管理系统是一种新技术,主要有两种设计两种设计途径途径: q扩展的关系数据库管理系统扩展的关系数据库管理系统,是在关系数据库的基础上,是在关系数据库的基础上,增增加了抽象数据类型加了
43、抽象数据类型和和继承机制继承机制,此外还增加了创建及管理类,此外还增加了创建及管理类和对象的通用服务。和对象的通用服务。q扩展的面向对象程序设计语言扩展的面向对象程序设计语言,扩充了面向对象程序设计语,扩充了面向对象程序设计语言的言的语法和功能语法和功能,增加了在数据库中,增加了在数据库中存储和管理对象存储和管理对象的的机制机制。63 11.8.2 设计数据管理子系统设计数据管理子系统 设计数据管理子系统既要设计数据管理子系统既要设计数据格式设计数据格式,又要设计,又要设计相应服相应服务务。1. 设计数据格式设计数据格式n文件系统:文件系统:基于第一范式基于第一范式;n关系数据库管理系统:关系
44、数据库管理系统:基于第三范式基于第三范式;n面向对象数据库管理系统面向对象数据库管理系统q扩展的关系数据库途径扩展的关系数据库途径:使用与关系数据库管理系统相同的:使用与关系数据库管理系统相同的方法。方法。q扩展的面向对象程序设计语言途径扩展的面向对象程序设计语言途径:不需要不需要规范化属性的步规范化属性的步骤骤,因为本身具有把对象值映射成存储值的功能。,因为本身具有把对象值映射成存储值的功能。64 2. 设计相应的服务设计相应的服务n文件系统文件系统q需要知道打开哪个需要知道打开哪个(些些)文件,怎样把文件,怎样把文件定位到正确的记录文件定位到正确的记录上上,怎样检索旧值,以及怎样用现有值更
45、新它们。,怎样检索旧值,以及怎样用现有值更新它们。n关系数据库管理系统关系数据库管理系统q应该知道应该知道访问访问哪些哪些数据库表数据库表,怎样访问怎样访问所所需要的行需要的行,怎样,怎样检检索旧值索旧值,以及怎样用现有值更新它们。,以及怎样用现有值更新它们。n面向对象数据库管理系统面向对象数据库管理系统q扩展的关系数据库途径扩展的关系数据库途径:与关系数据库管理系统方法相同。:与关系数据库管理系统方法相同。q扩展的面向对象程序设计语言途径扩展的面向对象程序设计语言途径:无须增加服务,已经给:无须增加服务,已经给每个对象提供了每个对象提供了“存储自己存储自己”的行为。的行为。 65 (1) 对
46、关联的存储设计对关联的存储设计n一对一关联一对一关联q1个表,类与关联都映射到一张独立的表;个表,类与关联都映射到一张独立的表;属性名属性名是否为空是否为空域域雇员号码雇员号码N号码号码姓名姓名N姓名姓名办公室名办公室名N名字名字66 q2个表,个表,两个类两个类分别分别映射到一张表映射到一张表,用,用外键外键隐含关隐含关联;联; 属性名属性名是否为空是否为空域域雇员号码雇员号码N号码号码姓名姓名N姓名姓名办公室名办公室名N名字名字属性名属性名是否为空是否为空域域办公室名办公室名N名字名字67 q3个表,把两个类和关联各映射到一张表。个表,把两个类和关联各映射到一张表。属性名属性名是否为空是否
47、为空域域雇员号码雇员号码N号码号码姓名姓名N姓名姓名属性名属性名是否为空是否为空域域办公室名办公室名N名字名字地点地点N地点地点属性名属性名是否为空是否为空域域68 公司公司ID 人员人员ID10110C87310110A123n一对多关联一对多关联q1个表,映射到一张独立的表;个表,映射到一张独立的表;q3个表,为关联单建一个表;个表,为关联单建一个表;属性名属性名 是否为空是否为空域域公司公司IDN号码号码人员人员IDN号码号码69 q2个表,在多重性为个表,在多重性为“多多”的类对应的表中用的类对应的表中用外键隐含外键隐含属性名属性名是否为空是否为空域域人员人员IDN号码号码人员姓名人员
48、姓名N姓名姓名电话电话Y号码号码70 n多对多关联多对多关联q1个表,每个多对多的关联映射到一张独立的表,个表,每个多对多的关联映射到一张独立的表,该表的主关键字是两个关联表的主关键字的拼接;该表的主关键字是两个关联表的主关键字的拼接;q转化为一对多的关联,然后再按一对多的方式处理。转化为一对多的关联,然后再按一对多的方式处理。 71 (2) 对聚合的存储设计对聚合的存储设计n采用与设计关联存储同样的规则。采用与设计关联存储同样的规则。(3) 对泛化的存储设计对泛化的存储设计72 n1个表,把一般类的各个子类的属性都集中到个表,把一般类的各个子类的属性都集中到一般类中。一般类中。属性名属性名是
49、否为空是否为空域域设备设备IDN号码号码设备名称设备名称N名称名称价格价格Y金额金额设备类型设备类型N设备类型设备类型吸气压力吸气压力Y压力压力排气压力排气压力Y压力压力73 n1+n个表,为一般个表,为一般类类(非抽象类非抽象类)创建创建一个表,并为它的一个表,并为它的各个特殊类各创建各个特殊类各创建一个表。一般类的一个表。一般类的表与各子类的表要表与各子类的表要用同样的属性作为用同样的属性作为主关键字。主关键字。 属性名属性名是否为空是否为空域域设备设备IDN号码号码设备名称设备名称N名称名称价格价格Y金额金额设备类型设备类型N设备类型设备类型属性名属性名是否为空是否为空域域设备设备IDN
50、号码号码吸气压力吸气压力Y压力压力排气压力排气压力Y压力压力74 nn个表,如果一般类个表,如果一般类为抽象类,则要把一为抽象类,则要把一般类的属性放到各子般类的属性放到各子类中,为它的子类各类中,为它的子类各建立一张表。若一般建立一张表。若一般类不为抽象类,也可类不为抽象类,也可采用此法。采用此法。属性名属性名是否为空是否为空域域设备设备IDN号码号码设备名称设备名称N名称名称价格价格Y金额金额吸气压力吸气压力Y压力压力排气压力排气压力Y压力压力属性名属性名是否为空是否为空域域75 11.8.3 ATM系统实例系统实例 采用成熟的商品化关系数据库。根据数据库范式设计,保采用成熟的商品化关系数
51、据库。根据数据库范式设计,保持数据一致性、完整性。持数据一致性、完整性。 处理并发事务时,每个事务作为一个不可分割的批操作来处理并发事务时,每个事务作为一个不可分割的批操作来处理,由事务封锁帐户,直至事务结束。处理,由事务封锁帐户,直至事务结束。76 11.9 设计类中的服务设计类中的服务n需要综合考虑需要综合考虑对象模型对象模型、动态模型动态模型和和功能模型功能模型,才能正确,才能正确确定确定类中类中应有的服务应有的服务。n对象模型对象模型,通常只在每个类中列出很少几个最核心的服务。设,通常只在每个类中列出很少几个最核心的服务。设计者必须把计者必须把动态模型中对象的行为动态模型中对象的行为以
52、及以及功能模型中的数据处理功能模型中的数据处理,转换成转换成由由适当的类所提供的服务适当的类所提供的服务。n一张一张状态图状态图描绘了一类对象的生命周期,图中的描绘了一类对象的生命周期,图中的状态转换状态转换是是执执行对象服务的结果行对象服务的结果。n功能模型功能模型指明了系统指明了系统必须提供的服务必须提供的服务。数据流图中的。数据流图中的某些处理某些处理可能与对象可能与对象提供的服务对应提供的服务对应。 11.9.1 设计类中应有的服务设计类中应有的服务 面向对象分析得出的对象模型,通常并面向对象分析得出的对象模型,通常并不详细描述不详细描述类中的类中的服务服务。面向对象设计则是扩充、完善
53、和细化面向对象分析模型。面向对象设计则是扩充、完善和细化面向对象分析模型的过程,设计类中的服务是它的一项重要工作内容。的过程,设计类中的服务是它的一项重要工作内容。77 11.9.2 设计实现服务的方法设计实现服务的方法1. 设计实现服务的算法设计实现服务的算法n设计实现服务的算法时,应该考虑下列几个因素:设计实现服务的算法时,应该考虑下列几个因素:q算法复杂度。算法复杂度。 q容易理解与容易实现。容易理解与容易实现。q易修改。易修改。2. 选择数据结构选择数据结构n在面向对象设计过程中,需要选择能够方便、有效地在面向对象设计过程中,需要选择能够方便、有效地实现算法实现算法的物理数据结构的物理
54、数据结构。3. 算法与数据结构的关系算法与数据结构的关系n确定算法与数据结构主要考虑下列因素:确定算法与数据结构主要考虑下列因素:p分析问题寻找数据特点,提炼出所有可行有效的算法;分析问题寻找数据特点,提炼出所有可行有效的算法;p定义与所提炼算法相关联的数据结构;定义与所提炼算法相关联的数据结构;p依据此数据结构进行算法的详细设计;依据此数据结构进行算法的详细设计;p进行一定规模的实验与评测;进行一定规模的实验与评测;p确定最佳设计。确定最佳设计。78 11.9.2 设计实现服务的方法设计实现服务的方法4. 定义内部类和内部操作定义内部类和内部操作n在面向对象设计过程中,可能需要增添一些在在面
55、向对象设计过程中,可能需要增添一些在需求陈述中没有提到的需求陈述中没有提到的类类,这些新增加的类,主要用来存放在,这些新增加的类,主要用来存放在执行算法过程中所得出的某些执行算法过程中所得出的某些中间结果中间结果。 n此外,复杂操作往往可以用简单对象上的此外,复杂操作往往可以用简单对象上的更低层操作来定义更低层操作来定义。因此,。因此,在分解高层操作时常常引入新的低层操作。在面向对象设计过程中应在分解高层操作时常常引入新的低层操作。在面向对象设计过程中应该定义这些该定义这些新增加的低层操作新增加的低层操作。79 11.10 设计关联设计关联n在对象模型中,关联是联结不同对象的纽带,它指定了对在
56、对象模型中,关联是联结不同对象的纽带,它指定了对象相互间的访问路径。象相互间的访问路径。n在面向对象设计过程中,设计人员必须确定实现关联的具在面向对象设计过程中,设计人员必须确定实现关联的具体策略。体策略。既可以选定一个既可以选定一个全局性的策略全局性的策略统一实现所有关联统一实现所有关联;也可以分别为每个关也可以分别为每个关联选择具体的实现策略联选择具体的实现策略;n有如下实现方式:有如下实现方式:1.关联的遍历关联的遍历 2. 实现单向关联实现单向关联3.实现双向关联实现双向关联 4.关联对象的实现关联对象的实现80 1. 关联的遍历关联的遍历n使用关联有两种可能的方式:使用关联有两种可能
57、的方式:单向遍历;单向遍历;双向遍历。双向遍历。n单向遍历单向遍历实现起来比较简单,实现起来比较简单,双向遍历双向遍历实现起来稍微实现起来稍微麻烦一些。麻烦一些。81 2. 实现实现单向关联单向关联n用用指针指针可以方便地实现可以方便地实现单向关联单向关联。n如果关联的重数是如果关联的重数是一元一元的的(如图如图a所示所示) ,则实现关联的指,则实现关联的指针是针是一个简单指针一个简单指针;n如果重数是如果重数是多元多元的(的(参见图参见图b),则需要用一个),则需要用一个指针集合指针集合实现关联。实现关联。 82 用指针集合实现双向关联用指针集合实现双向关联83 3. 实现实现双向关联双向关
58、联n许多关联都需要许多关联都需要双向遍历双向遍历,当然,两个方向遍历的频度往,当然,两个方向遍历的频度往往并不相同。实现双向关联有下列往并不相同。实现双向关联有下列3种方法:种方法:q只用只用属性属性实现实现一个方向的关联一个方向的关联,当需要反向遍历时就执行一次正,当需要反向遍历时就执行一次正向查找。如果两个方向遍历的频度相差很大,而且需要尽量减少向查找。如果两个方向遍历的频度相差很大,而且需要尽量减少存储开销和修改时的开销,则这是一种很有效的实现双向关联的存储开销和修改时的开销,则这是一种很有效的实现双向关联的方法。方法。q两个方向的关联都用属性实现两个方向的关联都用属性实现。当访问次数远
59、远多于修改次数时,。当访问次数远远多于修改次数时,这种实现方法很有效。这种实现方法很有效。q用用独立的关联对象实现双向关联独立的关联对象实现双向关联。关联对象不属于相互关联的任。关联对象不属于相互关联的任何一个类,它是独立的关联类的实例何一个类,它是独立的关联类的实例。 84 用对象实现关联用对象实现关联85 4. 关联对象的关联对象的实现实现n可以可以引入一个关联类引入一个关联类来来保存描述关联性质的信息保存描述关联性质的信息,关联中,关联中的的每个连接对应着关联类的一个对象每个连接对应着关联类的一个对象。n实现关联对象的实现关联对象的方法方法取决于取决于关联的重数关联的重数。q对于一对一关
60、联来说,关联对象可以与参与关联的任一个对象合对于一对一关联来说,关联对象可以与参与关联的任一个对象合并。并。q对于一对多关联来说,关联对象可以与对于一对多关联来说,关联对象可以与“多多”端对象合并。端对象合并。q如果是多对多关联,则关联链的性质不可能只与一个参与关联的如果是多对多关联,则关联链的性质不可能只与一个参与关联的对象有关,通常用一个独立的关联类来保存描述关联性质的信息,对象有关,通常用一个独立的关联类来保存描述关联性质的信息,这个类的每个实例表示一条具体的关联链及该链的属性。这个类的每个实例表示一条具体的关联链及该链的属性。86 11.11 设计优化设计优化11.11.1 确定优先级
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit7 Protect the Earth 第三课时(教学设计)2024-2025学年译林版(三起)英语六年级上册
- 2023七年级道德与法治下册 第三单元 在集体中成长第七课 共奏和谐乐章 第1框单音与和声教学设计 新人教版
- 2024-2025学年新教材高中生物 第1章 发酵工程 第2节 第2课时 微生物的选择培养和计数教学设计 新人教版选择性必修3
- 《第2课 查找信息》教学设计教学反思-2023-2024学年小学信息技术人教版三起三年级下册
- 6《蛋壳与薄壳结构》教学设计-2024-2025学年科学五年级下册苏教版
- 2024-2025学年高中物理 第二章 直流电路 单元整合与提升教学设计 教科版选修3-1
- 蓝色教育美术课件
- 西北工业大学保密协议书8篇
- 2023一年级数学下册 6 100以内的加法和减法配套教学设计 新人教版
- 七年级语文下册 第二单元 6 最后一课第3课时教学设计 新人教版
- 装饰装修工程施工方案(完整版)
- 《民法典》-第二编 物权编-案例分析,解读-3
- GB/T 1266-2006化学试剂氯化钠
- 海岸动力学全册配套完整课件
- 工作面防飞矸封闭式管理规定
- 纤维素酶活性的测定
- 干部人事档案管理岗位培训的讲义课件
- 验电接地环安装规范
- 计算机监控系统安装单元工程质量验收评定表
- 外墙干挂大理石施工方案(标准版)
- DB65∕T 2683-2007 建材产品中废渣掺加量的测定方法
评论
0/150
提交评论