接下来呢,我们这个介绍系统设计。
当然系统设计相对于系统分析来说呢 那就,不管是工作量上还是难度上,都要
有个非常大的一个提升
就是说从这个体量上来说,这个系统分析如果全部做完的话
它这个工作量,应该是系统设计的 这个 5 倍以上。
因为它涉及到的一些 除了这个本身业务领域继续进行设计之外
还要对一些软件的解决方案,要做一些 设计。
实际上它,如果把这个系统分析作为 是一种这个,这个体现我们这个
现实世界的一个问题,实际上呢,这个系统分析呢 并不完全是这样,我们后面会介绍。
就是说,等于大概地说,如果说把这个系统分析作为这个 现实世界的问题,那么系统设计呢,就是应该是一个软件 世界的一个问题。
那么软件世界跟这个现实世界之间,这个差异太大 很多情况下呢,我们不可能把这个
现实世界的对象,完全地照搬到我们的软件世界中来。
这样的话会不利于我们这个 软件世界,这个实现。
而且这个效率啊,或者说一些 这个用户的体验,是达不到。
所以这时候我们要针对我们 当前软件世界提供的一些便利条件,或者说一些约束条件
来因地制宜地,提出一个设计方案。
而这个,一般来说呢 这个设计,是针对于这个软件,针对软件世界而言
但是呢,它不仅是一个纯粹的一个 技术上的一个考量,而且呢还需要进一步地要
把这个业务,问题域的这个部分,要针对我们的这个 设计,来进一步地完成。
针对我们的分析,要进一步地 继续做这个设计。
所以呢,一般而言,我们这个课程中,所用到的设计方法呢
一般包括以下几个部分,第一个就是,这个问题域 部分的设计,第二部分就是这个人机交互部分的设计
第三个呢就是控制驱动部分,第四个叫数据管理部分 设计。
实际上呢,我们在设计概论的时候,我们会讨论一下,实际上呢
其他的方法中,也有这个,其他的面向对象的设计方法中呢 也有类似的,有我们这些对应物,比如说这个"4+1"
视图,这种设计方案,其实跟我们这个 课程中用到的,课本上的这种方式呢,实际上是 基本上来说是一致的。
如果说你要设计一个完整的一个 软件的一个解决方案的话,那必须得从,至少要从这以下
这个几个部分来进行设计,甚至是还要更多 比如说我们要搞分布式的话,我们要加上构建一个部署方面的一些设计
下面呢我们看一下这个,系统的设计。
就是设计呢,和分析,实际上呢 是如何界定的,这是一个面向对象
方法中啊,也是一个比较难的一个问题。
不同的专家对这个问题有不同的看法 这个,我们这个课程中呢,在讲到的时候,会结合我们课本上的一些
这个分析设计,这个划界问题呢,会 进行一些重点的一些讨论。
我们这里这个例子中用到的这个 设计的这个方法呢,是来自于我们这个 主教材上的这个方法。
这个,本身呢我们这个认为,这个分析和设计之间 它是有一个明显的界定的。
分析主要是面向于问题域和系统责任 而设计呢,主要是给出一种软件的解决方案。
软件的解决方案来说呢,实际上这个就是这个面向软件世界 软件世界我们知道,和这个现实世界实际上是差异很大。
现实世界是按照我们自然的这种思维方式 软件世界呢,当然从这个
世界观角度,也可以用我们自然这种思维方式去认识
但是呢,它那些对象和我们这些 现实世界中的对象差异很大。
我们现实世界中 这个本身是人组成的社会啊,或者说是一些现实世界中存在一些客观事物
本身呢和我们这个软件世界中的,这个内存啊 内存管理啊,这个数据管理啊,这些东西
甚至是这个进程线程,这些东西,实际上是这个 差异是非常大的。
所以为解决这个问题,我们这个在系统设计的时候呢 我们这个,往往是这个 分开,分开考虑。
也就是说我们这个,一方面呢,是把这个 继续进行我们的业务,进行设计。
也就是说怎么使我们这些 业务逻辑怎么便于辩证实现,我们要给出搞一个模型的一个方案。
另外呢 除此之外呢,这个我们这个软件系统,不可避免地要进行人机交互。
这个人机交互 部分呢,又涉及到一些,针对我们这个当前开发环境的一些便利或约束条件
我们要有一些,这个设计方案
另外我们如果说涉及到一些多进程的一些,多进程多线程的一些系统的话 进程和线程之间如何设计。
进程和线程之间 或者线程之间进程之间,如何进行这个通信,建立
甚至是要进行一些,对一些共享资源的,如何这个 无冲突地访问,这些机制,都要进行设计。
另外这个,我们如果说进行这个 数据管理,我们这个把一些对象给它永久性地存储到我们的硬盘空间中,这时候又涉及到一些-
数据管理 甚至如果说分布设计,这个分布方案如何进行考虑,也要进行这个
这个部署,构建部署方面的设计
而我们这个当前这个小系统呢,没有涉及到非常全面,主要涉及到以上 当前这四个部分的设计。
首先呢我们讲一下这个问题域部分的 设计。
那就问题域部分,我们在分析的时候呢进行了分析 那么呢我们在设计的时候还要进行问题域部分的设计,二者的区分在哪儿
实际上这个我们在讲到这一部分内容的时候,我会详细地给出一个 非常详细的一个答案。
就是问题域部分的分析和问题域部分的设计呢 也不是完全相同的两个概念。
就是说我们在 进行问题域部分设计的时候呢,实际上是以这个问题域部分的
分析作为一个输入,作为一个起点,而不再直接 面对现实世界。
另外呢,我们在设计的时候 尽管它们本身这个问题是相同,对象是相同的,但是呢,我们
要针对我们这个软件,进行一个调整。
就是说我们 是针对我们的软件固有的一些,支撑的一些约束条件和便利条件进行 一个调整。
比如说我们分析的时候,可以做一些多重继承,这个 我们设计的时候呢,有的时候用
Java 的话就不存在多重继承这种 就是说我们要用变通的方式来进行实现。
甚至是我们如果说用 C 语言 来实现一种面向对象的一种模型,这时候要进行更大的调整
这就是这个设计,在进行问题域部分的设计的时候需要考虑的问题 当然这只是其中的一个方面。
另外呢还要进行复用,我们在设计的时候要面向这个
如何这个,比较这个高质量地,尽快地,高效地完成一个软件的一个系统
所以呢我们要尽可能地复用,以前已经存在的一个软件一些制品
或者说我们当前这个设计方案要以后的这个二次开发,或者说是以后的这个 这个扩展,提供一个非常好的一个灵活性。
这样的话呢 复用,既可以向上复用也可以向下复用。
另外我们要注重性能。
就是说设计,这在软件 我们在分析的时候可以这个,什么也不管,只要把问题域描述清楚
把这个业务描述清楚就可以,但是到设计的时候呢,不得不考虑性能。
很多一些 本身这个核心业务的一些,软件,这个性能,如果不好好设计的话呢,也会差异很大
这个,另外呢还有其他的一些,这个我们在 讲到的时候我们会详细给大家讲,详细描述。
我们本例中 我们涉及到的一些,这个方案呢,就是以下
我们提到的,比如说我们首先呢要,最起码呢是吧要把中文 描述这个类图转化为英文,当然这不是设计的主要内容。
另外呢我们要,在细节上我们要标注一些 可见性,公有的私有的受保护的。
在分析的时候我们可以不管,但设计的时候我们要面向以后 为这个程序,为编程员,这个程序员提供一个非常好的一个
一个支持的话,我们要把这里写清楚,并且类型 属性的一些类型,返回类型,参数类型等等这些要进行标注