讨论要点
(1)如何将分析模型转换为软件设计?
(2)作为软件工程师在软件设计方面应使用哪些基本原则和概念?
第三章 软件设计
3.1软件设计的目标和目的
3.2 软件设计的原则
3.3 设计模型
3.4 标准建模语言 UML
3.1软件设计的目标和目的软件需求:解决,做什么,
软件设计:解决,怎么做,
软件设计的任务问题结构 (软件需求 ) 软件结构从软件需求规格说明书出发,形成软件的具体设计方案。
映射软件设计分为两个阶段:
(1) 体系结构设计 (概要设计 )
确定软件的结构以及各组成成分 (子系统或模块 )之间的相互关系。
(2)详细设计确定模块内部的算法和数据结构,
产生描述各模块程序过程的详细文档。
3.2 软件设计的原则
抽象
求精
分解 /模块化
数据隐蔽
模块独立性(耦合性 /内聚性)
抽象是软件的本质
抽象得出事物的共性
过程抽象
数据抽象
控制抽象
3.2.1 抽象 (Abstraction)
抽象原则应用举例
Windows NT一体化的 I/O系统设计文件管理网络管理设备管理高速缓冲存储器


对虚拟文件的字节流,
虚拟文件可为任何设备和实体抽象
3.2.2 模块化 (Modularity)
模块化是好的软件设计的一个基本准则从整体上把握问题,隐蔽细节复杂问题 较小问题分解可减小解题所需的总的工作分解例,将问题 (P1+P2)分解为 P1,P2
设函数 C(x)定义问题 x 的复杂程度函数 E(x)确定解决问题 x 需要的工作量对问题 P1和 P2,如,
C(P1) > C(P2)
显然,E(P1) > E(P2)
有规律,C(P1+P2) > C(P1)+C(P2)
E(P1+P2) > E(P1)+E(P2)
" 各个击破 " 理论模块化和软件成本成本或工作量模块数量软件总成本集成成本成本 /模块
M
最小成本区域
3.2.3 信息隐蔽
(Information Hiding)
模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息 。
信息隐蔽的目的,提高模块的独立性,
减少修改或维护时的影响面。
3.2.4 模块的独立性模块独立的含义:
模块完成独立的功能
符合信息隐蔽和信息局部化原则
模块间关连和依赖程度尽量小定性的度量标准:
模块之间的 耦合性模块自身的 内聚性面向对象程序中,
类对象就是模块。
1.模块独立性的度量之一,耦合性模块间相对独立性(相互依赖程度)
的度量耦合性越高,模块独立性越弱无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系模块间耦合的类型低 无直接耦合耦 数据耦合合 标记耦合性 控制耦合外部耦合公共耦合高 内容耦合模块独立性弱
(低耦合 )

(中耦合 )
(较强耦合 )
(强耦合 )
(1) 无直接耦合两个模块没有直接关系 (模块 1和模块 2),模块独立性最强。
模块 1 模块 2
模块 3 模块 4
(2) 数据耦合一模块调用另一模块时,被调用模块的输入、
输出都是简单的数据 (若干参数 )。
属松散耦合。
数据耦合举例开发票计算水费单价数量 金额
(3) 标记耦合 (特征耦合 )
如两个模块通过传递 数据结构
(不是简单数据,而是记录、数组等 )加以联系,或都与一个 数据结构 有关系,则称这两个模块间存在标记偶合。
标记耦合举例计算水电费计算水费 计算电费住户情况 水费电费住户情况
,住户情况,是一个 数据结构,图中模块都与此数据结构有关,
,计算水费,和,计算电费,本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合,
将标记耦合修改为数据耦合举例计算水电费计算水费 计算电费本月用水量本月用电量水费电费
(4) 控制耦合一模块向下属模块传递的信息 (开关量、标志等控制被调用模块决策的变量 ) 控制了被调用模块的内部逻辑。
控制耦合举例
A
计算平均分或最高分
B
平均 /最高
(控制信号 ) 成绩读入分数输出结果计算平均分 计算最高分平均 /最高?
B
控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:
(1)将被调用模块内的判定上移到调用模块中进行
(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例
A
计算平均分
B1
平均成绩 最高成绩计算最高分
B2
(5) 外部耦合一组模块均与同一外部环境关联
(例如,I/O模块与特定的设备、
格式和通信协议相关联 ),它们之间便存在外部耦合。
外部偶合必不可少,但这种模块数目应尽量少。
(6) 公共耦合 (公共数据区耦合 )
一组模块引用同一个公用数据区
(也称全局数据区、公共数据环境 )。
公共数据区 指:
全局数据结构
共享通讯区
内存公共覆盖区等公共耦合举例

公共数据区
CB
模块 A,B,C间存在错综复杂的联系
(1)软件可理解性降低
(2)诊断错误困难
(3)软件可维护性差,
(4)软件可靠性差
(公共数据区及全程变量无保护措施 )
慎用公共数据区和全程变量 !!!
公共耦合存在的问题:
(7) 内容耦合一模块直接访问另一模块的内部信息 (程序代码或数据)
最不好的耦合形式 !!!
A B A
B
模块代码重叠
Entry1
……
Entry1
……
多入口模块模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要因素目标,建立模块间耦合度尽可能松散的系统
2,模块独立性的度量之二:内聚性一个模块内部元素在功能上相互关联的强度设计目标:高内聚
(模块在软件过程中完成单一的任务 )
模块的内聚性类型(自学)
低 偶然内聚 0分逻辑内聚 1分内 时间内聚 3分聚 过程内聚 5分性 通信内聚 7分信息内聚 9分高 功能内聚 10分模块独立性弱 (功能分散 )
强 (功能单一 )
低内聚模块 举例为工程分析包执行错误处理的模块,当计算的数据超出预定义的边界时调用该模块,它完成下列任务:
( 1)根据初始计算的数据计算补充数据;
( 2)在用户的工作站上生成错误报告;
( 3)执行用户要求的跟踪计算;
( 4)更新数据库;
( 5)使选择后续处理的菜单有效。
虽然上述任务是松散相关的,但每一项都是独立的功能实体,最好作为独立的模块完成 。
(1)偶然内聚 (巧合内聚 )
模块内各部分间无联系
A B C
M MOVE O TO R
READ FILE F
MOVE S TO T
模块 M中的三个语句没有任何联系缺点,可理解性差,可修改性差例,
(2) 逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。
逻辑内聚模块
A B C
E F G
A B C
EFG
A1 B1 C1
EFG模块内部逻辑
E,F,G逻辑功能相似,组成新模块 EFG
缺点,增强了耦合程度 (控制耦合 )
不易修改,效率低公用代码段公用代码段
(3) 时间内聚 (经典内聚 )
模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。
例如,初始化系统模块、
系统结束模块、
紧急故障处理模块等均是时间性聚合模块,
(4) 过程内聚(顺序性组合)
模块内各处理成分相关,
且必须以特定次序执行过程内聚模块读入成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单
(5) 通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职工工资报表并计算平均工资模块
(6) 信息内聚模块完成多个功能,各功能都在同一数据结构上操作,
每一功能有唯一入口。
信息内聚模块符 号 表查找 登录 删除 修改几个加工同时引用一个共同的数据
(7) 功能内聚模块仅包括为完成某个功能所必须的所有成分。
(模块所有成分共同完成一个功能,缺一不可 )
内聚性最强内聚与耦合密切相关,同其它模块强耦合的模块意味者弱内聚,强内聚模块意味着与其它模块间松散耦合,
设计目标:
力争强内聚、弱耦合
3.耦合、内聚与模块独立性关系耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。
结构化设计数 据 设 计体系结构设计接口设计过程设计体系结构设计类及对象设计消息设计职责设计面向对象设计
3.3 设计模型
3.3.1 结构化设计数据字典数据流图
E-R图状态变迁图加工规约控制规约数据对描述象数 据 设 计体系结构设计接口设计过程设计分析模型 设计模型结构化设计的内容
结构设计 — 概要设计
– 体系结构设计,
定义软件部件间的关系(结构图 — SC图)
– 接口(界面)设计,
软件内部、外部及与人之间的通信
– 数据设计,
软件数据结构
过程设计 — 详细设计
– 模块的处理过程
N-S图,PAD,PDL等结构图 (SC Structure Chart)
SD方法在概要设计中的主要表达工具约定:
编辑学生记录读学生记录学生数据无此学生学号不加区分的数据数据信息控制信息结构图 (SC)举例医院管理系统门诊管理药房管理药库管理病房管理财务管理处 方挂号处理挂 号 费总 计挂号单挂号费总计出库处理进药管理病历管理处方管理常规处理酒店管理信息系统功能结构图
H M I S
收银管理子系统收银管理子系统 收银管理子系统客人登记预定登记客房处理历史记录客房查询预定查询餐桌安排菜单作业营业结帐汇总打印各类查询初始设置客帐处理退房处理夜审处理客帐查询报表打印
3.3.2 面向对象设计用例对象 -关系模型类 /对象模型体系结构设计类及对象设计消息设计职责设计分析模型 设计模型对象 -行为模型子系统层,包含每个子系统的表示类和对象层,包含类层次和每个对象的设计表示消息层,包含使得每个对象能够和其协作者通信的细节,建立系统的外部和内部接口责任层,包含针对每个对象的所有属性和操作的数据结构和算法的设计
1.面向对象设计的任务
2.统一的 OOD方法
UML被组织进两个主要的设计活动:
系统设计系统设计的主要目标是表示软件体系结构
对象设计对象设计着重于对象及其相互交互的描述
OOD过程流系统设计分析对象设计数据管理其它系统文件
RDBMS
OODBMS 设备系统交互界面问题论域人机交互界面
…,,…,,
…,,…,,
窗口报告数据管理 — 负责对象的存储和检索的子系统问题域 — 直接负责实现客户需求的子系统人机交互 — 实现用户界面的子系统任务管理 — 控制和协调子 系统,任务可能被包装在一个子系统中或不同的子系统间
( 1)系统设计子系统设计 过程中必须定义四种重要的设计结构问题域 — 直接负责实现客户需求的子系统人机交互 — 实现用户界面的子系统任务管理 — 负责控制和协调并发任务的子系统,任务可能被包装在一个子系统中或不同的子系统间;
数据管理 — 负责对象的存储和检索的子系统第三层数据库服务器第二层后台库服务器第一层前台客户机系统结构部分客户端子系统端子系统服务器端子系统端子系统请求请求请求合约 合约子系统间通信子系统间协作的模型 系统结构部分传感器图形项目传感器控制系统人机交互部分设计举例调用项目传感器状况窗口显示菜单调用菜单活动传感器项目调用项目传感器报警窗口显示菜单调用菜单活动位置传感器报警项目调用项目传感器窗口坐标人机交互部分传感器控制系统任务管理部分设计举例任务协调器协调任务名字描述优先级服务协调通信初始化开始准备好结束
10,m
任务管理部分
( 2)对象设计分析模型类属性方法关系行为设计模型对象数据结构算法消息传递控制
3.4 标准建模语言 UML
UML模型图( 5类,10种):
用例图
静态图(类图,对象图,包图)
行为图(状态图,活动图)
交互图(顺序图,协作图)
实现图(构件图,配置图)
标准建模语言 UML (包图)
包是类的集合 。
包图所显示的是类的包以及这些包之间的依赖关系。
如果两个包中的任意两个类之间存在依赖关系,则这两个包之间存在依赖关系。
包的依赖是不传递的。
标准建模语言 UML (包图)
订单获取界面订单获取应用
AWT 邮件发送清单界面邮件发送清单应用订单 顾客标准建模语言 UML (包图)
何时使用包图,
在大项目中,包图是一种重要工具(有专家建议,只要你不能将整个系统的类图压缩到一张
A4纸上,你就应该使用包图);
依赖产生耦合,应该尽量将依赖性减少到最低程度;
包的概念对测试也是特别有用的。
标准建模语言 UML (构件图)
构件图
构件图描述 软件构件 以及它们之间的 依赖关系 。
构件可以是源代码构件、二进制目标码构件、可执行构件或文档构件。
表示构件。
构件,可重复使用的软件组件标准建模语言 UML (构件图)
Graphic.dll:
图形库
Comhnd.cpp:
命令处理器
Main.cpp:
主类
Whnd.obj:
窗口处理器
Comhnd.obj:
命令处理器
Main.obj:
主类
client.exe:
客户程序
Whnd.cpp:
窗口处理器标准建模语言 UML (配置图)
配置图
配置图描述系统中硬件和软件的物理配置情况和系统体系结构。
在配置图中,用结点(立方体)表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,
并说明其连接方式。在结点里面,说明分配给该结点上运行的可执行构件或对象,从而 说明哪些软件单元被分配在哪些结点上运行。
标准建模语言 UML (配置图)
客户 A:
个人电脑 PC
客户 B:
个人电脑 PC
数据库服务器:
VAX
服务器,02
TCP/IP协议?
TCP/IP?协议
DecNet协议?
标准建模语言 UML (配置图)
3.5 标准建模语言 UML ( 案例,ATM系统软件 )
项目概述目的,建立 ATM系统软件( ATM system software)。
整个系统包括,ATM、中央服务器( central
server),ATM系统软件、有关的界面软件。
ATM系统软件的工作,处理系统中 ATM和银行电脑之间的交易( transaction),如:查帐、存款、提款等。与系统合作的银行有多家,它们各自有自己的电脑,处理自己的帐号和交易。所有 TAM通过中央服务器与每个银行的电脑通信。每家银行电脑处理的交易及其中运行的软件,乃至银行的内部事情与本项目无关。但银行电脑和 ATM系统软件之间的界面软件则属于本项目。
标准建模语言 UML ( 案例,ATM系统软件 )
ATM工作过程,
银行的顾客持有提款卡( cash card),
可在任何一个 ATM查帐、存款、提款、
取收据等。提款卡插入 ATM后,卡上资料被读取,并提示顾客输入其个人密码。
然后,ATM系统检验密码的正确性,若没问题,便把顾客要做的交易传送到中央服务器进一步处理。
标准建模语言 UML ( 案例,ATM系统软件 )
ATM系统软件的要求,
( 1)对所有使用 ATM系统的交易,都要有记录,且能每天做报告。
( 2)系统要有适当的安全措施。
( 3)一个帐号必须能够同时从多处接入做查询或其他帐务。
( 4)必须能兼顾未来的扩展,如增加出纳点、因特网客户机等。
标准建模语言 UML ( 案例,ATM系统软件 )
ATM系统软件的限制,
( 1) ATM系统由银行协会拥有。
( 2) ATM系统软件在中央服务器里运行。
( 3)各银行自己发行提款卡,并保管有关资料。一家银行发行的卡,头 6个数字相同。
( 4)所有 ATM有同样的界面。
( 5)每家银行的电脑有其程序界面,不一定与其它银行的相同。
标准建模语言 UML ( 案例,ATM系统软件 )
静态分析和设计静态分析,找出对象类及其静态关系。
动态分析,对象间的相互作用及其对外界面。
核心设计,交易。交易是一个二元关联类,
它将提款卡( card)和 ATM联系起来。
标准建模语言 UML ( 案例,ATM系统软件 )
交易是 ATM系统软件的核心设计
Card
number:Integer
name:String
trx:Transaction[*]
ATM
serialNumber:Integer
location:String
trx:Transaction[*]
Transactiontime:Date
content:String
card:Card
atm:ATM*
*
标准建模语言 UML ( 案例,ATM系统软件 )
ATM系统软件的局部设计
manages
BankInfo
Card
ATM
Transaction
ATM
Manager
manages
*
*
*
*
*
11
1 manages
标准建模语言 UML ( 案例,ATM系统软件 )
ATM系统软件设计总图
BankInfo
Card
Agent
Transaction
ATM
Manager
manages
*
*
*
*
*
11
1 manages manages
Internet
Cashier
ATM
*
1
标准建模语言 UML ( 案例,ATM系统软件 )
动态分析
Receipt
Inquiry
Deposit
Withdraw
ATM System
标准建模语言 UML ( 案例,ATM系统软件 )
ATM系统时序图
,IF Impl》
Bank
,Client》
ATM
Central Server
,IF Impl》
ATM Manager
插卡问口令键入口令选择交易问金额键入金额发出现金口令正确查证口令请求处理交易确实完成交易检查帐号资料口令正确银行交易数据库记录 完成标准建模语言 UML ( 案例,ATM系统软件 )
界面设计
bank
,interface》
Account
MgrIF
,IF Impl》
Account
Impl
,IF Impl》
Account
MgrImpl
,interface》
AccountIF
implements implements
manages
1 *
标准建模语言 UML ( 案例,ATM系统软件 )
界面的详细定义
,interface》AccountIF
,get operations》
getBalance():Float
getAccountInfo():AccountInfo
getHistory():String
,transaction operations》
Deposit(amount:float):Float
Withdraw(amount:Float):Float
transferTo(accountName:string,amount:Float):Float
Paybill(receiver:String,amount:Float):Float
,interface》AccountMgrIF
,access operations》
Login(accountInfo:AccountInfo),AccountIF
Logout(account:AccountIF)
,account management》
Open(accountInfo:AccountInfo,initialAmount:Float):AccountIF
Remove(accountInfo:AccountInfo)
Showaccounts():String
UML当前的研究热点当前围绕 UML的研究工作集中在两个方面:
使得 UML更加精确
为 UML提供有效的工具支持
Rose是 Rational公司出品的基于 UML的可视化建模工具。
3.2 软件设计的原则
抽象
求精
分解 /模块化
数据隐蔽
模块独立性(耦合性 /内聚性)
结构化设计数 据 设 计体系结构设计接口设计过程设计体系结构设计类及对象设计消息设计职责设计面向对象设计
3.3 设计模型
3.4 标准建模语言 UML
UML模型图( 5类,10种):
用例图
静态图(类图,对象图,包图)
行为图(状态图,活动图)
交互图(顺序图,协作图)
实现图(构件图,配置图)