1 设计的定义:软件设计解决的是“怎么做”的问题。软件设计是将需求描述的“做 什么”问题变为一个实施方案的创造性的过程。
概要设计从需求出发,从总体上描述系统架构以及应该包含的组成要素(模块), 同时描述各个模块之间的关联。
主要包括体系结构设计、构件(模块)设计、接口(界面)设计、数据设计 体系结构设计:确定架构模式。定义组成软件中各个主要的结构元素及它们之间 的联系的一个模型。
模块设计:将一个复杂系统按功能进行模块划分,建立模块的层次结构及调用关 系,确定模块间的接口及人机界面等。
接口设计:定义软件内部的通信、与系统的交互以及人机操作界面等。
数据设计:将实体 – 关系图中描述的对象和关系转化为数据结构的定义。
2 模块:是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。
模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子 功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
模块化的优点:易于维护;易于分工合作;易于扩充功能;易于模块化测试。
3 设计遵循的原则之一——模块独立:
希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和 其他模块之间的关系很简单。
模块独立程度的两个定性标准度量:
耦合:如果改变程序中的一个模块,要求另一个模块也同时发生改变,就认为这 两个模块发生了耦合。衡量不同模块彼此间互相依赖(连接)的紧密程度。
紧密:耦合高。不紧密:耦合低。
内聚:衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完 成一个相对独立的特定子功能。
耦合------程度的度量:
(1) 非直接耦合/完全独立(no direct coupling):如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们 完全独立。
在一个软件系统中不可能所有模块之间都没有任何连接。
(2)数据耦合(data coupling):如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种 耦合称为数据耦合。
Class A {
Test(B b){
Int i;
b.go(i);……. }
}
Class B{
go (int i){ …….. }
}
评价:系统中至少必须存在这种耦合。一般说来,一个系统内可以只包含数据耦 合。数据耦合是理想的目标。维护更容易,对一个模块的修改不会使另一个模块 产生退化错误。
(3) 控制耦合(control coupling):如果两个模块彼此间传递的信息中有控制信息,这种耦合称为控制耦合。
//对 user 表的处理:查询,删除。类**将控制信息 flag 传给了 DoUser,
并且能够控制 DoUser 的表现,类**和类 DoUser 就是控制耦合。
Void DoUser(int userId,int flag){
连接数据库;
If (flag==0){
查询 id 为 userId 的记录,并输出
}
Else if(flag==1){
删除 id 为 userId 的记录,输出是否删除成功
}
}
评价:控制耦合往往是多余的,把模块适