面向对象设计-第三节:系统分解和设计问题域子系统

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象设计-第三节:系统分解和设计问题域子系统相关的知识,希望对你有一定的参考价值。

文章目录

一:系统分解

(1)分解思想

在设计比较复杂的应用系统时,先把系统分解成若干个较小部分,然后分别设计每个部分。这样做有利于降低设计的难度,有利于分工协作,也有利于维护人员对系统理解和维护

(2)子系统

A:定义

系统的主要组成部分称为子系统,通常根据所提供的功能来划分子系统

B:划分原则

  • 根据所提供的功能来划分子系统,子系统数目应该与系统规模基本匹配
  • 各个子系统之间应该具有尽可能简单、明确的接口
  • 应该尽量减少子系统彼此间的依赖性

(3)分解面向对象设计模型

A:表示

典型的面向对象设计模型如下图所示

  • 面向对象设计模型由主题、类与对象、结构、属性、服务5个层次组成。这5个层次一层比一层表示的细节更多,可以把这5个层次想象为整个模型的水平切片
  • 面向对象设计模型在逻辑上都由4大部分组成,分别对应于组成目标系统的4个子系统,即问题域子系统人机交互子系统任务管理子系统数据管理子系统

B:子系统间交互方式

①:客户-供应商关系(Client-supplier)

作为“客户”的子系统调用作为“供应商”的子系统,后者完成某些服务工作并返回结果。作为客户的子系统必须了解作为供应商的子系统的接口,后者却无须了解前者的接口

②:平等伙伴关系

每个子系统都可能调用其他子系统,每个子系统都必须了解其他子系统的接口。由于各个子系统需要相互了解对方的接口,子系统之间的交互复杂,且还可能存在通信环路

C:组织系统的方案

①:层次组织

软件系统组织成一个层次系统,每层是一个子系统。上层在下层的基础上建立,下层为实现上层功能而提供必要的服务。每一层内所包含的对象,彼此间相互独立,而处于不同层次上的对象,彼此间有关联。在上、下层之间存在客户-供应商关系。低层子系统提供服务,上层子系统使用下层提供的服务

  • 封闭式:每层子系统仅仅使用其直接下层提供的服务。降低了各层次之间的相互依赖性,更容易理解和修改
  • 开放式:子系统可以使用处于其下面的任何一层子系统所提供的服务。优点是减少了需要在每层重新定义的服务数目,使系统更高效更紧凑。但其不符合信息隐藏原则

②:块状组织

把软件系统垂直地分解成若千个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务

③:层次和块状的结合

当混合使用层次结构和块状结构时,同一层次可以由若干块组成,而同一块也可以分为若干层

④:设计系统的拓扑结构

典型的拓扑结构有管道形、树形、星形等。应采用与问题结构相适应的、尽可能简单的拓扑结构,以减少子系统之间的交互数量

二:设计问题域子系统

(1)概念

  • 面向对象分析所得出的问题域精确模型,为设计问题域子系统建立了完整的框架
  • 保持面向对象分析所建立的问题域结构
  • 面向对象设计仅需从实现角度对问题域模型做一-些补充或修改
  • 问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统

(2)对问题域模型进行的处理

A:调整需求

①:需要进行调整的情况

  • 用户需求外部环境发生了变化
  • 分析员对问题域理解不透彻不能完整、准确地反映用户的真实需求

②:方法

简单地修改面向对象分析结果,然后再把这些修改反映到问题域子系统中

B:重用已有的类

步骤为:

  1. 在已有类中找出与问题域内某个最相似的类作为被重用的类
  2. 从被重用的类派生出问题域类
  3. 简化对问题域类的定义(从被重用的类继承的属性和服务无须再定义)
  4. 修改与问题域类相关的关联,必要时改为与被重用的类相关的关联

C:把问题域类组合在一起

  • 增添一个根类而把若干个问题域类组合在一起
  • 引入根类或基类的办法,可以为一些具体类建立一个公共的协议

D:增添一般化类以建立协议

在设计过程中常常发现,一些具体类需要有一个公共的协议,可以引入附加类以便建立这个协议

E:调整继承层次

如果面向对象分析模型中包含了多重继承关系,然而所使用的程序设计语言却并不提供多重继承机制,则必须修改面向对象分析的结果。具体如下:

  • 多重继承机制:避免出现服务及属性的命名冲突
  • 单继承机制:使用多重继承机制时,必须把面向对象分析模型中的多重继承结构转换成单继承结构

以上是关于面向对象设计-第三节:系统分解和设计问题域子系统的主要内容,如果未能解决你的问题,请参考以下文章

面向对象的设计(11)

软件构造第五章第三节 可复用的设计模式

《面向对象分析与设计》阅读笔记3

面向对象分析与设计—OOA部分

第三节:作用域链

第三节:作用域链