第9章 面向对象设计

更新时间:2023-08-18 03:17:01 阅读量: 资格考试认证 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

第9章 面向对象设计面向对象的设计原则 系统设计 对象设计 设计模式 RUP的设计活动 RUP的实现活动

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

9.1 面向对象的设计概念及原则1、有关概念面向对象设计将面向对象分析创建的分析模型变换 为设计模型,它将作为软件构造的蓝图。但由于面向对 象分析与设计活动是一个迭代与演化的过程,概念与表 示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成, 这些任务形成过程式软件的基本结构。面向对象方法把 问题域作为一系列相互作用的对象,在此基础上构造出 基于对象的软件系统结构。 面向对象设计包括系统设计和对象设计。系统设计 包括如何把整个系统分解为子系统、子系统的软硬件布 局等策略性决策;对象设计是根据具体的实现策略,对 分析模型进行扩充。通过系统设计和对象设计产生设计 模型,是进一步完成系统实现的基础。下表列出了分析 模型与设计模型的区别:西安交通大学 刘海岩 2

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

分析模型 设计模型 概念模型,回避了实现问题; 物理模型,是实现蓝图 ; 对设计是通用的; 针对特定的实现; 对类型有3种构造型; 对类型有任意数量的构造型 (依赖于实现语言); 不太形式化 ; 比较形式化; 开发费用较低; 开发费用较高; 层数少; 层数多; 动态的; 动态的(特别关注时序); 勾画系统的设计轮廓; 进行系统设计; 主要通过研讨会等方式创建; 设计模型和实现模型需双向 开发; 可能不需要在整个生命周期 在整个生命周期内都应该维护 内都做维护;西安交通大学 刘海岩 3

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

2、OO设计原则(1)封装 是将一个完整的概念组成一个独立的单元,然后通过 一个名字来引用它。在OO系统的较高层次,将一些相关 的应用问题封装在一个子系统中,对子系统的访问是通过 访问子系统的接口实现的;在较低的层次将具体对象的属 性和操作封装在一个对象类中,通过类的接口访问其属性。 (2)抽象 OO方法不仅支持过程抽象还支持数据抽象。类封装了 数据和操作数据的方法,类是一种包含过程抽象的数据抽 象,它对外提供的公共数据接口构成了类的规格说明(类 的协议)。使用者无需知道类中的具体操作是如何实现的, 无需了解内部数据的具体表现方式,只要搞清它的规格说 明,就可通过接口定义的操作访问类的数据。西安交通大学 刘海岩 4

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

(3)信息隐蔽 信息隐蔽是通过对象的封装实现的。类的结构分离 了接口和实现,对于类的使用者来说,属性的表示和操 作的实现都是隐蔽的。 (4)强内聚 服务内聚: 一个服

务完成且仅完成一个功能。 类内聚: 一个类的属性和操作全部都是完成某个 任务所必须的,其中不包括无用的属性和操作。 层内聚: 把向用户或高层提供相关服务的功能放 在一起,而将其他内容排除在外。为了保证适当的层内 聚,往往有严格的层次结构,高层能够访问低层的服务, 而低层却不能访问高层的服务(下图描述了这种关系)。 以下的相关服务可以放在同一层:计算服务、消息 或数据传输服务、数据存储服务、管理安全服务、用户 交互服务、访问操作系统服务、硬件交互服务等。 西安交通大学 刘海岩 5

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

处理应用协议

用户界面 处理连接应用逻辑

处理包访问操作 系统 访问数 据库 网络通信 传输和接收

应用程序的典型层次

通信系统中的简化层次

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

层向外界提供服务的过程和方法通常称为应用编程 接口(Application Programming Interface, API)。API的 规格说明必须描述高层用来访问服务的协议,还要描述 每个服务的语义和副作用。层内聚的优点如下: 替换高层模块对低层模块没有影响。 可以用等价的层替换低层,但必须复制该层所有的 API,这样高层才不受影响。 其他有关传统方法中的功能内聚、通信内聚、顺序 内聚、时间内聚等概念及提高内聚的原则在OO设计中 仍然适用。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

(5)弱耦合 OO设计中,耦合主要指不同对象(包括类、包) 之间相互关联的程度,如果一个对象过多地依赖于其 它对象来完成自己的工作,不仅使系统的可理解性下 降,还会增加测试、修改的难度,同时降低了类的可 复用性和可移植性。但对象不可能完全孤立,当两个 对象必须相互联系时,只通过类的公共接口实现耦合, 不应该依赖于类的具体实现细节。 设计时尽量减少对象之间发送的消息数(Meyer建 议的少接口),减少消息中的参数个数(小接口), 对象之间以明显和直接的方式通信,减少通信的复杂 程度(显式的接口)。传统方法中有关降低耦合的原 则在OO方法中仍然适用。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

(6)可复用 为了提高工作效率、减少错误、降低成本,就要充分考 虑软件的复用性。复用有两个方面的含义:一是尽量使用已 有的类,包括开发环境提供的类库和已有的相似类。二是创 建新类时考虑将来的可复用性。 类有三种复用方式: 实例复用 由于类的封装特性,使用者不需要了解内部的实现细节 就可用适当的构造函数创建需要的实例,然后向所创建的实 例发送适当的消息,启动相应的服务,完成需要的任务。 设计一个可复用性好的类是一件很困难的事情,因

为, 类提供的服务太多,会增加接口的复杂度,降低类的可理解 性;提供的服务太少,则可能会降低复用性。在设计时,需 要根据具体的应用环境和以往的经验来综合考虑,设计出合 适的类构件。西安交通大学 刘海岩 9

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

继承复用当已有的类构件不能通过实例复用满足要求时,可以 通过继承复用对已有的类构件进行修改,使它满足要求。 在设计时,关键是要设计一个合理的、具有一定深度的 类构件的继承层次结构。每个子类在继承父类的属性和 服务的基础上,加入少量的新属性和新服务,这样做的 好处是父子类的耦合度比较适当,接口简单,易于理解。 多态复用 多态是一种特性,这种特性使得一个属性或变量在不 同的时期可以表示不同的对象。利用多态性可以使对象 的对外接口更加一般化,系统运行时,根据接收消息的 对象类型,由多态机制启动正确的方法,响应一个一般 化的消息。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

例如出现下列情况:

操作与数据结构大小有关。 操作与外部设备特性有关。 实现算法将来可能会改进。为了克服与表示方法、数据结构或硬件特点相关的操 作给复用带来的困难,可以设计一个基类把与上述操作有 关的服务定义为纯虚函数,然后在复用时先派生出一个新 类,在新类中重新定义上述操作的算法。 设计一个可复用的软件比设计一个普通软件的代价要 高,但随着这些软件被复用的次数的次数的增加,分摊到 它的设计和实现成本就会降低。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

(7)简洁化设计 一个软件60%的工作量是维护工作。为了便于维护, 现代软件工程越来越重视软件的简洁和易于理解。做好 以下几点: 设计简单的类。避免定义太多的属性和服务。一个 类的职责要清晰,易于理解也有助于复用。 使用简单的协议。对象之间的关联是通过消息触发 的,消息过于复杂,说明对象之间的耦合程度太紧,不 利于维护。 设计结果简洁明了。设计结果(如文档)描述用词 准确、清晰、容易理解。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

9.2 系统设计和传统设计的目的相同,是为实现系统需求而对软件 体系结构进行的设计。系统设计过程包括以下活动: 划分分析模型为子系统。 标识问题的并发性。 选择软件体系结构的风格并分配子系统到处理器。 设计用户界面。 选择实现数据管理的基本策略。 标识全局资源及访问它们所需的控制机制。 为系统定义合适的控制流机制。 考虑边界条件。 评审并考虑权衡。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

1、划分分析模型以定义类、关系和行为

的内聚集合,将这些设计元 素包装为子系统。 定义子系统时应该遵循以下标准: 子系统应该具有定义良好的接口,通过接口和系统 的其余部分通信。 除了少数的“通信类”,在子系统中的类只和该子 系统中的其他类协作。 子系统的数量不应太多。 子系统可以内部划分以降低复杂性。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

当两个子系统互相通信时,可建立客户/服务器(C/S) 结构或对等结构(P2P)。在C/S结构中,每个子系统只承担 一个由客户端或服务器端隐含的角色,服务只是单向地从 服务器端流向客户端;在P2P结构中,服务可以双向流动。 在划分子系统时,往往进行分层设计。系统的每一层 包含一个或多个子系统,表示了完成系统功能所需的功能 性的不同抽象层次。抽象级别由与其相关的处理对用户的 可见程度来确定。(如PPt第6页应用程序的典型层次结 构)。 Buschmann及其同事提出以下分层设计方法: 建立分层的标准。即决定子系统将如何被组合成层 次的体系结构。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

确定层的数量。太多使系统复杂,太少降低子系统的功 能独立性。 命名层并将子系统分配到某个层。确信同层的子系统间 的通信以及和其他层的子系统间的通信遵循软件体系结 构设计思想。 定义每个层的接口。 精化子系统以建立每个层的类结构。 定义层间通信的消息模型。 评审层设计以保证层间的耦合度最小。 迭代以精化分层设计。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

2、并发性与基于体系结构风格的子系统分配当系统有许多并发行为时,要划分任务,简化并发 行为的设计与编码。一个任务指系统中的一个过程,有 时就是进程的同义词。并发任务可通过检查每个对象的 状态图而定义,如果事件和变换流指明在任意时刻只有 单个对象是活跃的,则是一个控制线程。即使一个对象 向另一个对象发送消息,只要第一个对象等待响应,控 制线程就继续。如果第一个对象不等待,则控制线程分 叉。 OO系统中的任务是通过孤立控制线程而设计的。例 如当SafeHome系统正在监控其传感器时,它也可以拨号 到监控站以检验连接。涉及这两个行为的对象(传感器、 监控站)是同时活跃的,每个对象参与一个独立的控制 线程并被定义为独立的任务。如果监控和拨号活动顺序 地发生,则只设计单个任务。西安交通大学 刘海岩 17

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

对象-行为模型对分析类间或子系统间的并发性提 供了支持。如果类和子系统不是同时活动的,则不需 要并发处理,它们可以实现在同一个处理器硬件上; 如果类和子系统必须异步地或同时作用于事件,

则被 视为并发的。这时有两种选择:分配每个子系统到各 自独立的处理器;分配子系统到同一处理器并通过操 作系统特性提供并发支持。 分布式系统中, 软件体系结构风格对系统分布方 案具有决定性的影响。选择体系结构风格应考虑以下 因素:

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

根据被开发系统的特点:如系统类型、用户需求、 系统规模、使用方式等; 网络协议:不同的网络协议支持不同的体系结构风 格; 可用的软件产品:包括网络软件、OS、DBMS、现 有的数据服务器等; 成本及其他:购置硬件及软件成本、新开发软件成 本、系统的安装与维护成本。此外,如开发人员对所选 择体系结构风格下实现技术的熟练程度及开发期限等。 根据以上因素选择合适的体系结构,然后将子系统分 配到体系结构的节点上。

西安交通大学 刘海岩

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

3、任务管理设计当一个节点上有多个控制流存在时,需要设计一个对 这些控制流进行协调和管理的控制流(即进程或任务)。 如设计一个进程,由它负责系统的启动和初始化、其他进 程的创建与撤销、资源的分配、优先级的授予等工作。 用以下几步完成任务管理的设计: 确定要执行的任务并识别它的特征。 确定任务的优先级。 创建协调任务来协调所有其他任务。 为每个任务设计对象,并定义它们之间的关系。 任务应该用模版详细描述,包括任务名、描述、优先 级、服务、由谁管理、如何通信以及在层次中的位置,便 于编程人员实现。西安交通大学 刘海岩 20

面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件构造的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。 传统的设计方法将问题域分解成一系列任务来完成,这些任务形成过程式软件的基本结构。面向对象方法把问题域作为一系列相互作用的对象,在此基础上构造出基于对象的软件系统结构。 面向对象设计包括系统设计

4、全局资源管理全局资源包括物理资源(磁盘驱动器、处理器、通信 线路)或逻辑资源(文件、数据库、显示窗口)。不但 有访问权限的问题,还有访问冲突的问题。所以,应该 标识全局资源,并制定访问它们的策略。一般的情况下, 如果资源是物理对象,则通过建立协议实现并发系统的 访问;如果资源是逻辑对象, Rumbaugh建议对每个资 源可创建一个“保护者”对象,控制对该资源的访问 (鉴别身份、协调冲突等)。

西安交通大学 刘海岩

本文来源:https://www.bwwdw.com/article/vqrj.html

Top