讨论一下,这个分析跟设计 那么具体我们的面向对象方法来说呢就是
OOA 跟OOD 的这个关系,这个关系
这个关系可以从那么几个角度去看,第一点 OOA
跟 OOD 采用了一致的概念和表示法 从而呢,不存在分析与设计之间的鸿沟
不像以往的结构化方法那样,分析采用的数据流这个概念
到了设计的时候,又采用了这个模块的概念。
面向对象方法这个概念都是一致的 那么概念是一致的,但是呢它有不同的内容
不同的目标和不同的抽象层次 那么看来,从这个内容跟目标来看
那么 OOA 它的内容和目标呢是研究问题域和用户需求
运用面向对象观点来发现问题域中与系统责任有关的对象
以及对象的特征和它们之间的相互关系 它的目标是建立一个能够直接映射问题域
符合用户需求的这样一个 OOA 模型 而 OOD
呢是在 OOA 模型基础上 针对选定的实现平台来进行系统设计
按照实现条件的要求,那么来进行具体的设计
它的目标是产生一个能够在选定的软硬件平台上
可实现的这样一个 OOD 的模型。
那么它的抽象层次 OOA
模型抽象层次是比较高的,因为它忽略了与实现有关的因素 而
OOD 模型呢它的抽象层次比较低 因为它包含了与实现平台有关的一些细节
这是 OOA 跟 OOD 的关系,那么进一步讨论这个关系
那么看看 OOA 跟 OOD 它的分工。
那么在软件工程发展历史上 关于分析和设计的分工,有两种不同的观点
那么最传统的一种观点呢是这么说的,说是分析呢 分析呢只解决做什么的问题
不管它是怎么做 这几乎是家喻户晓的这么一种观点,就是说分析
是做什么,设计呢是怎么做 那么这种观点呢,到后来在
1991 年 Coad 和 Yourdon 他们写了一本《面向对象的
分析》那本书以后,又写了《面向对象的设计》 在《面向对象设计》这本书里面呢就提出了另外一种观点,这种观点呢是说
分析呢只解决与问题域和系统责任有关的问题
不考虑实现条件,而设计 来考虑实现条件。
那么说 分析解决与问题域和系统责任有关的问题
分不分做什么和怎么做呢,它实际上不分 包括在分析阶段说定义域的对象
那么它里边的属性呢,它可以确定它的数据类型 尽管设计数据也可以做修改,但是分析数据可以给出来
也可以把这个第三者操作给出它的流程来 这就是怎么做了,这就是怎么做了
那么它区分分析跟设计呢是跟实现起来有关的这些因素
我先不考虑,我先不考虑,把它放到设计的时候再解决 到了设计的时候,这个就在分析模型基础上
那么看看,那么在当前的实现条件下 是吧,那么还应该增加哪些对象
现在的对象还应该做下什么样的修改或者调整,是这么一种观点 那么这两种观点呢,一个关键问题就是对象的细节
对象特征的一些细节,比如数据的这个属性的数据类型 以及操作的流程等等,那么是不是
一定留到设计阶段去才能够定义,按照过去那种观点呢就只能到设计的时候 做。
那么按照第二个观点呢,分析的时候也可以做,只是分析的时候做的是针对问题域与系统责任的
就是你让我往开发责任系统,只要是这样一些问题域,只要提供这样功能
那么就需要有这些对象,需要这样来定义它的属性和操作
但是我不考虑在哪个平台实现,那么这种观点的合理性呢,我们曾经在 1998
年出版的一本书,《面向对象的系统 分析》,也就是我们现在的这个教材的一个前身
对它这里做了一些,这个它的一个合理性 做了一个很详细的一些分析,很详细的分析。
这些呢我这个课堂上就不去细讲了,大家可以看书 那么实际上
Coad 跟 Yourdon 这种观点
跟本世纪初由 OMG 提出的
模型驱动的体系结构,这种思想呢是非常一致的 是非常一致的。
现在我们从这个这个 MDA 就是模型驱动体系结构来看看 OOA 跟
OOD 的关系 什么是模型驱动体系结构呢?
模型驱动的体系结构是 OMG 的一个技术规范
它是一种加强模型能力的系统开发途径 模型驱动是指
用模型来对系统的理解、 设计、 构造、
部署、 操作、 维护和更新等 来进行指导。
这是模型,这是一种很好的一种这个 这个开发思想,开发思想。
那么 第一呢,它提倡
在系统开发中,要首先建立一个 平台无关模型,也就是说不管将来要在什么平台上实现
只要是这个现在这样的功能,我都可以开发一个模型,跟这个平台无关的
然后呢把它转换为平台专用模型
你要准备在哪个平台上实现,你把这个模型给它 转换成平台专用模型。
这都有缩写呢,这个平台无关模型就是 PIM,平台专用模型是 PSM。
这个转换呢可以用一个图来表达 用一个图来表达,这个图呢是一个漏斗
这个漏斗就代表了转换,它的输入呢 是一个转换之前的模型,那么输出呢就是转换之后的
而这个转换呢要经过一定的技术进行一些转换 在这个漏斗的这个边上呢有一个分叉,这就是说这种转换需要一些什么样的技术
这个转换的这个模型呢它适合于各种转换 那么具体到从这个
这个平台无关模型转换成平台专用模型呢,就是以平台无关模型作为输入 经过转换得到了平台专用模型,专用模型
那么我们把这个 MDA 的观点
运用到面向对象分析和面向对象设计当中来看看 OOA
跟OOD 之间是一种什么样的关系,是吧 OOA
呢是只针对问题域和系统责任 不涉及实现条件,因此呢可以得到一个平台无关的
OOA 模型 而 OOD 呢是在 OOA
模型基础上 针对特定的实现条件进行设计
也就是说这个设计工作就是一种转换工作 把它转换成一个平台专用的 OOD 模型
那么这么做的好处是什么?好处是什么,好处呢就是说在分析阶段 得到的
OOA 模型,它可以在不同的实现平台上来 进行设计,进行设计就是进行转换
从而呢可以得到多个的 OOD 模型,就是说只要问题域是一样的
它的需求是一样的 那么说我可以开发多个不同的版本。
比方我可以开发一个工作站版本,也可以开发一个微机版本 是吧,那么就等于是有不同的实现平台,我可以,但是这个
OOA 模型呢它是平台无关的,它是可以多次复用的 而且整个模型都是被复用的,被复用的。
所以呢它是非常有利于软件复用的
好,谢谢大家!