第7讲软件设计方法
第7章 程序设计与软件开发基础
7.2.1 算法的基本概念
– (4)输入:一个算法有零个或多个输入,它 们是算法所需的初始量或被加工的对象表示。 – (5)输出:一个算法有一个或多个输出,它 们是与输入有特定关系的量。
7.2.1 算法的基本概念
• 2.算法的基本要素 • 一个算法通常由两种基本要素组成:一是 对数据对象的运算和操作,二是算法的控 制结构。
线性表栈队列是基本的数据结构研究它们的存储结构及其基本运算具有十分重要的意义通过对本章的储结构及其基本运算具有十分重要的意义通过对本章的学习要求同学们熟悉学习要求同学们熟悉数据结构的基本概念线性表栈数据结构的基本概念线性表栈队列这三本数据结构的存储结构及其基本运算队列这三本数据结构的存储结构及其基本运算为日后解决实际问题打下良好的基础
7.1.2 结构化程序设计
• (3)重复结构 • 重复结构又称为循环结构,它根据给定的 条件,判断是否需要重复执行某一相同的 或类似的程序段,利用重复结构可简化大 量的程序行。 • 在程序设计语言中,重复结构对应两类循 环语句:
– 先判断后执行循环体的称为当型循环结构。 – 先执行循环体后判断的称为直到型循环结构。
7.1.3 面向对象程序设计
• 1.面向对象程序设计方法的产生 • 需要设计对变化有弹性的系统。 • 在实际系统中,最稳定的部分是系统对象,它直 接描述问题域。 • 传统的结构化分析和设计方法中存在迥然不同的 表示方法。专业人员在分析和设计过程中一直受 到基本表示法变换的困扰。而面向对象方法中, 从分析(OOA)、设计(OOD)到编程实现 (OOP)采用的都是同样的表示方法。
第7章软件设计
抽象帮助定义模块实体,建立不同抽象级别的软件 体系结构。
求精,是详细描述的过程,用于揭示具体实现的低 层细节。抽象和求精是对立统一的两个方面,缺一不可 的帮助构造出完整的设计模型。
16
3、信息隐蔽
指在设计和确定模块时能够隐藏在模块内部的信 息(数据、过程)尽量在模块内部存储和定义,尽可 能的局部化。接口和模块内部设计应分离。 作用:约束我们实现模块内部的过程细节和数据 结构的访问,减少因局部数据结构的变动对其他软件 的影响,有利于维护。
4、模块独立性
模块功能的独立性是抽象和信息隐蔽性的直接产 物。独立的模块易于复用、易于维护。如何衡量软件 的独立性?提出了两个定性的度量标准——耦合性和 内聚性。
17
(1)耦合性(Coupling) 软件结构中各构件间相互联系紧密程度的一种度量。 • 内容耦合 • 公共耦合 • 控制耦合 • 标记耦合 • 数据耦合
7
3、通常的设计任务集: (1)检查信息域模型,并为数据对象及其属性设计恰当 的数据结构。 (2)使用分析模型,选择一个适合于软件的体系结构模 式。 (3)将分析模型分割为若干个设计子系统,并在体系结 构内分配这些子系统。子系统应功能内聚。 设计子系统接口。 为每个子系统分配分析类或功能。 (4)创建一系列的设计类或构件。将每个分析类转化为 设计类。根据设计标准检查每个设计类,考虑继承问题。 定义与每个设计类相关的方法和消息。 评估设计类和子系统并为其选择设计模式。 评审设计类,并在需要时修改。
第7章 面向对象软件设计与实现
人们习惯于把系统再进一步划分成几个不同的主题
应该按问题领域而不是用功能分解方法来确定主题 应该按照使不同主题内的对象相互间依赖和交互最少的
原则来确定主题
7.2 建立对象模型
7.2.4 确定属性 确定属性的过程包括分析和选择两个步骤
7.6 面向对象设计
7.6.3 系统设计 系统设计关注于确定实现系统的策略和目标系统的高层
结构。开发人员将问题分解为若干个子系统,子系统和 子系统之间通过接口进行联系。
7.6 面向对象设计
7.6.4 对象设计 面向对象分析得出的对象模型,通常并不详细描述类中
的服务。面向对象设计则是扩充、完善和细化面向对象 分析模型的过程,设计类中的服务、实现服务的算法是 面向对象设计的重要任务,还要设计类的关联、接口形 式以及设计的优化。
误把对象当作属性 误把关联类的属性当作一般对象的属性 把限定误当成属性 误把内部状态当成了属性
过于细化在分析阶段应该忽略那些对大多数操作都没有影响的 属性 存在不一致的属性
7.2 建立对象模型
7.2.5 识别继承关系 一般说来,可以使用两种方式建立继承(即泛化)关系
自底向上:抽象出现有类的共同性质泛化出父类,这个过
程实质上模拟了人类归纳思维过程
软件工程讲义_第七章 设计概念
设计过程和设计质量
[MCG91]提出了可以指导评价良好设计 演化的三个特征: 设计必须实现所有包含在分析模型中的明 确需求,而且必须满足客户期望的所有隐 含需求。 对于那些生成代码的人和那些进行测试以 及随后维护软件的人而言,设计必须是可 读的、可理解的指南。 设计必须提供软件的全貌,从实现的角度 说明数据域、功能域和行为域。
设计任务集
设计用户接口。评审任务分析的结果。基于用 户场景详细说明活动序列。创建接口的行为模型。 定义接口对象、控制机制。评审接口设计,并在 需要时修改。 进行构件级设计。在相对较低的抽象层次上详 细说明所有算法。精化每个构件的接口。定义构 件级的数据结构。评审每个构件并修正所有已发 现的错误。 开发部署模型。
设计过程和设计质量
软件设计是一个迭代的过程,通过设计过 程,需求被变换为用于构建软件的“蓝 图”。初始时,蓝图描述了软件的整体视 图,也就是说,设计是在高抽象层次上的 表达——在该层次上可以直接跟踪到特定 的系统目标和更详细的数据、功能和行为 需求。随着设计迭代的开始,后续的精化 导致更低抽象层次的设计表示。这些表示 仍然能够跟踪到需求,但是连接更加错综 复杂了。
体系结构
体系结构设计可以使用大量的一种或多种 模型来表达。结构模型将体系结构表示为 程序构件的一个有组织的集合。通过确定 类似应用中遇到的可复用的体系结构来设 计框架,框架模型可以提高设计抽象级别。 动态模型强调程序体系结构的行为方面, 指明结构或系统配置作为外部事件的函数 将如何变化。过程模型注重系统必须提供 的业务设计或技术流程设计。最后,功能 模型可以用来表示系统的功能层次结构。
第7讲 PCB版图设计软件Layout Plus
存盘
打印,见第8讲“印刷电路板的后处理”
第7讲 PCB版图设计软件Layout Plus
7.4 元器件的布局
一、元器件封装的基本操作 点击 具按钮 进入元器件封装操作状态,并点击DRC工 ,使在线DRC不起作用。 元器件封装的选中 元器件封装的移动 元器件封装的旋转 元器件封装的镜像翻转
第7讲 PCB版图设计软件Layout Plus
7.1 PCB设计的基本知识
一、PCB的分类 单面板:仅在一面有导电图形(布线)的印刷板 双面板:在二面有导电图形(布线)的印刷板
多层板:在二面以上有导电图形(布线)的印刷板
第7讲 PCB版图设计软件Layout Plus
二、PCB的元器件封装技术
第7讲 PCB版图设计软件Layout Plus
元件布局,执行Auto/Place/Board,或按
手动布局
第7讲 PCB版图设计软件Layout Plus
布线,执行Auto/AutoRoute/Board,或按
手动布线
第7讲 PCB版图设计软件Layout Plus
四、存盘打印输出
存盘,执行File/Save,或按
第7讲 PCB版图设计软件Layout Plus
在Link Footprint to Component 栏内点OK,对于没有定义 的管脚封装图,出现MAXECO提示说明,确定
软件工程第7章 面向对象分析与设计
第7章
7.5 面向对象设计
7.5.2 面向对象设计的准则和启发式规则
1.面向对象设计的准则 在进行面向对象设计的过程中,应该遵循软件设计的基本原理,此外,还要考虑面向对象 的特点。面向对象设计准则主要包括模块化、抽象、信息隐藏、低耦合、高内聚和复用性几点。 具体内容如下: (1)模块化 (2)抽象 (3)信息隐藏 (4)低耦合 (5)高内聚 (6)复用性
第7章
7.2 建立对象模型
7.2.4 确定服务和消息
(3)数据流图中处理框对应的操作。功能模型中的每个处理框代表了系统应实现的部
分功能,而这些功能都与一个或几个对象中提供的服务相对应。因此,要仔细分析状态图和 数据流图,以便正确地确定对象应提供的服务。
(4)利用继承机制优化服务集合,减少冗余服务。应尽量抽取相似的公共属性和服务,
象。
第7章
7.1 面向对象分析
7.1.4 对象模型的层次
3.OOA的主要流程 面向对象分析大体上按照如图7-4所示的顺序进行。
第7章
7.2 建立对象模型
7.2.1 确定对象和类
OOA的核心是确定问题域中相关的对象,找出这些对象是个重要而复杂的过程。一般采 用基于词汇分析的方法:从目标系统的描述开始,找出其中的名词作为候选对象类,此外,
是根据OOA得到的需求模型,建立求解域模型的过程,是解决系统“怎么做”问题的。 OOA主要是模拟问题域和系统任务,而OOD则是对OOA的扩充,主要是增加各种组成部
软件工程--传统软件设计方法概述PPT(78张)
软件详细设计第7章结构化软件详细设计
表7.2 行李托运费处理优化判定
条件组合 条 件 W>30 公斤 头等舱乘客 残疾乘客 (W-30)× 2 行 李 (W-30)× 4 (W-30)× 3 (W-30)× 6 免 费 1 √ √ √ √ √ √ √ √ 2 √ √ √ 3 √ 4 √ — — 5/6/7/8
7.2.3 判定树
判定树是判定表的变形,一般情况下它比判定表更直观, 且易于理解和使用。图7.2所示是与表7.1功能等价的判定树。 当处理逻辑中含有太多判定条件及其组合时,用判定表和判 定树描述会比较方便、直观。
对处理过程仍然模糊的部分反复使用以上分解方法,最
终可将所有细节确定下来。 (3) 组织形式。在细节设计阶段,当参加设计的人员比 较多的时候,有可能因为设计员的技术水平、设计风格不同 而影响到系统的质量。因此,要组织一个以负责全部技术活 动的三人为核心的小组。小组中有负责全部技术的主程序员, 协调、支持主程序员的后备程序员和负责事务性工作的程序 管理员,再加上其他技术人员。这样做的目的是使设计责任 集中在少数人身上,有利于提高软件质量,并且能有效地提 高软件生产率。这种组织形式在IBM公司和其他软件公司被 纷纷采用,效果很好。
7.2 设 计 表 示 法
7.2.1 结构化语言 结构化语言是介于自然语言和形式化语言之间的一种类 自然语言。结构化语言的语法结构包括内外两层。内部语法 比较灵活,可以使用数据字典中定义过的词汇、易于理解的
第7章软件体系结构风格与设计模式
第7章软件体系结构风格与设计模式软件体系结构风格和设计模式是软件开发中非常重要的概念。软件体系结构风格是指一种通用的架构模式,它定义了软件系统中各个组件之间的关系和交互方式,从而使系统更具有可伸缩性、可维护性和可重用性。而设计模式则是针对特定问题的解决方案,它提供了一套经过验证的重复使用的设计解决方案。
常见的软件体系结构风格包括客户-服务器架构、分层架构、面向服务架构和事件驱动架构等。每种架构风格都有其特定的优势和适用场景。
客户-服务器架构是最常见的架构风格之一,它将一个软件系统划分为客户端和服务器端两个部分。客户端负责与用户进行交互,而服务器端负责处理客户端的请求并提供相应的服务。这种架构风格适用于用户和服务器之间需要传输大量数据的系统,例如网页应用程序和数据库系统。
分层架构是将一个软件系统划分为多个层次的架构风格。每个层次都有特定的功能,通过定义明确的接口进行通信。这种架构风格使得系统各个层次的组件可以独立地进行修改和扩展,提高了系统的可维护性和可扩展性。常见的分层架构包括三层架构和MVC架构。
面向服务架构(SOA)是一种基于服务的架构风格,它将一个软件系统划分为多个独立的服务,并通过定义明确的接口和协议进行通信。这种架构风格使得系统可以通过组合现有的服务来构建更复杂的功能,提高了系统的可重用性和灵活性。常见的面向服务架构包括微服务架构和企业服务总线(ESB)。
事件驱动架构是一种基于事件和消息传递的架构风格,它将一个软件系统划分为多个组件,这些组件通过事件和消息进行交互。这种架构风格
第7章软件体系结构风格与设计模式.
write()
succeed failed
WriteData协议类图和顺序图
(1)管道/过滤器风格
实例剖析: shell命令:“cat a.txt | wc -w | lpr”
<<protocol>> ReadData port require: read() role provided: read() /port:ReadData /role:ReadData
一个caller类型的构件c通过dcconnector类型的连接子dc调用definer类型的构件dc调用d调用实例的wright体系结构描述图形化的体系结构描述语言gadl?gadl的元模型图形化的体系结构描述语言gadl调用实例的gadl体系结构描述构件图构件连接子端口角色图形化的体系结构描述语言gadl调用实例的gadl体系结构描述类图图形化的体系结构描述语言gadl?一个图形化的体系结构描述语言gadl?调用实例的gadl体系结构描述协议类图和顺序图wright与gadl?gadl语言用构件图类图顺序图等方式描述系统的软件体系结构对行为的描述gadl用顺序图而wright用进行代数csp
call
return
Wright与GADL
GADL语言用构件图、类图、顺序图等方式 描述系统的软件体系结构,对行为的描述 GADL用顺序图,而Wright用进行代数CSP。
软件工程教学课件第七章 软件界面设计
界面设计的有关模型 (1)设计模型 (2)用户模型 (3)未来系统的假想 (4)系统实现后得到的映像
• 任务分析与建模
• 任务分析有两种途径。一种是从实际出发,通 过对原有处于手工或半手工状态下应用系统的 剖析,将其映射为在人机界面上执行的一组类 似的任务。另一种是通过研究系统的需求规格 说明,导出一组与设计模型、用户模型和系统 假想相协调的用户任务。逐步求精和面向对象 分析等技术同样适用于任务分析。
• 实现工具 • 软件设计模型一旦确定,即可构造一个软件原 型,此时仅有用户界面部分。此原型交用户评 审,根据反馈意见修改,再交给用户评审,直 至与用户模型和系统假想一致为止。为支持这 种迭代式设计,大量的用户界面快速原型工具 涌现出来,一般称之为用户界面工具箱(user interface toolkits)或用户界面开发系统 (user interface development systems)。
• 信息显示 • p195
• 数据输入 • p195
用户界面设计的过程
• (1)创建系统功能的外部模型。 • (2)确定为完成此系统功能人和计算机 应分别完成的任务。 • (3)考虑界面设计中的典型问题。 • (4)借助CASE工具构造界面原型。 • (5)真正实现设计模型
• • • • •
• • • • •
界面设计首先要完成下列工作: (1)确定任务的目标和含义。 (2)将每个目标/含义映射为一系列特定动作。 (3)说明这些动作将来在界面上执行的顺序。 (4)指明各个系统状态,即上述各动作序列中每个动 作在界面上执行时界面呈现的形式。 • (5)定义控制机制,即便于用户修改系统状态的一些 设置和操作。 • (6)说明控制机制怎样作用于系统状态。 • (7)指明用户应怎样根据界面上反映出的信息解释系 统的状态。
第7章多媒体教学软件中的移动设计
第七章 多媒体教学软件中的移动设计
7.6 变速曲线运动
7.6.3 改进的斜上抛运动
上例“斜上抛运动”利用两个滑动条实现初速度和抛射角两个 参数的调节,这虽比用文本输入方式输入参数方便多了,但是并不 直观也难于体现物理意义。本例去掉两个滑动条,改用直接调节初 速度矢量的方法,此法直观、美观、方便又具有实际物理意义,是 一个好方法。与上例不同的是,本例当拖动改变拖动对象的位置后 利用DisplayX和DisplayY系统变量取得拖动对象的坐标,然后绘制 初速度矢量,并计算出初速度的大小和抛射角,余下的程序和上例 基本相同。
第七章 多媒体教学软件中的移动设计
7.4 变速直线运动
7.4.1 实现变速直线运动的几种方法
变速运动制作起来比较困难,具体实现时有三种方法。 方法1:在相同的时间间隔内,对象运动不同的距离。此法能任意 控制对象在平面上的运动,其缺点是,若运动距离过大,看起来有 跳跃感。 方法2:对象运动相同的距离,但所用的时间间隔不同。此法的效 果通常比上一个方法好,运动比较平滑,但是只在一维的运动和沿 路径的运动中容易使用。 方法3:相邻两段运动之间,运动距离和所用的时间间隔均不同。 一般说来此法的效果更好,但编程时要复杂一些。
第七章 多媒体教学软件中的移动设计
7.5 移动多个对象
7.5.3 横波的运动
运行本例时有13个小球在X方向均匀排列,在Y方向则分别按各 自的规律运动,总的效果是呈现一个向右行进的横波。在本例中, 用13个移动图标分别移动13个小球,所有移动所用的时间都相同, 而移动的目标点是按照运动规律分别计算的值。此外本例巧妙地用 图标标题作为移动目标点坐标的参数,也使程序大大地简化。
软件详细设计的方法
软件详细设计的方法
软件详细设计是指在软件概要设计的基础上,进一步详细描述软件系统的结构、组成和功能实现的过程。下面列举了常用的软件详细设计方法:
1. 模块化设计:将系统划分为多个功能模块,每个模块负责一个特定的功能,通过定义接口和数据流来组织模块之间的交互。
2. 数据结构设计:设计系统的数据结构,包括定义数据类型、数据对象的属性和关系。
3. 接口设计:定义系统与外部系统或模块之间的接口,包括输入输出的格式、协议和数据交换方式。
4. 状态机设计:建立系统的状态模型,描述系统的各种状态和状态转换条件。
5. 算法设计:设计系统中的各种算法,包括数据处理、查找、排序、加密等。
6. 用户界面设计:设计系统的用户界面,包括界面布局、界面元素、交互方式等。
7. 数据库设计:设计系统的数据存储和管理方式,包括数据库模式、表结构、关系建立等。
8. 安全性设计:设计系统的安全策略和机制,包括用户认证、权限控制、数据加密等。
9. 性能优化设计:通过调整算法、数据结构或系统架构等手段,提升系统的运行效率和响应速度。
10. 异常处理设计:设计系统的异常处理机制,包括错误处理、日志记录、恢复机制等。
以上是常用的软件详细设计方法,根据具体项目的需求和复杂程度,可以选择合适的方法进行详细设计。
软件工程 第7章--面向对象设计
Budd An Introduction to Object-Oriented Programming Addison-Wesley Publishing
Company, Inc. 1991]
6
§1. OOD准则
例:C++ 中的“模板”(template)
template < class T, int n >
问题:设计出大量的classes,使结构复杂度增加。 解决:划分主题,提高可理解性。
4、使用简单的protocol,减少message 中传递的
parameters
5、使用简单的method(CASE 语句可考虑用 inheritance替代)。
6、把设计变动减至最小。
11
理想的设计变动情况
12
§3. 软件重用 (Software Reuse)
Productivity Lt Ln Lr Et En Er
Reusability =
Lr Lt
开发代码的生产率
Cn
Ln En
重用新代码的生产率Cr
Lr Er
P
Cn
1 (1 Cn /Cr )R
26
§3. 软件重用
与重用相关联的成本主要包括: 领域分析与建模的成本; 设计领域体系结构的成本; 为便于重用而增加的文档的成本; 维护和完善可重用的软件成分的成本; 为从外部获取构件所付出的版税和许可证费; 创建(或购买)及运行重用库的费用; 对设计和实现可重用构件的人员的培训费用。
第7章软件设计
1.4软件设计过程
概要设计 详细设计
管 技 理与术 角 角 度 度
结构设计
数据设计
Text Text
过程设计
将 “概要设计” 结果进一步精化 结构设计 确定程序各主要部件之间的关系 把信息描述转换为实现软件所要求 概要设计 根据需求确定软件和数据的总体框架 详细设计 数据设计 的数据结构 成软件的算法表示和数据结构 过程设计 完成每一部件的过程化描述
3. 用户界面设计
3.1 什么是好的用户界面
通俗地讲,用户界面“好不好”主要看它是否 “容易使用”和“美观”。
易用性是指用户使用软件的容易程度。
除了要求软件易用之外,人们还希望用户界面 美观。 美观的界面能消除用户由感觉引起的乏味、紧 张和疲劳(情绪低落),大大提高用户的工作 效率。
3. 用户界面设计
2. 体系结构设计
2.1 体系结构设计原则
– 体系结构是指软件系统的基本和主体的形态, 也就是软件系统中“最本质”的东西。一个 软件系统的体系结构设计得好不好,可以用 “合适性、结构稳定性、可扩展性、可复用 性”这些特征量来评估。
2. 体系结构设计
2.2 层次结构介绍
水平方向切割产生的层称为Layer,而竖直方 向切割产生的层称为Tier。 “层次结构”是应用最为广泛的体系结构模式。 其最大的优点是具有良好的可扩展性,人们在 扩充或修改功能时,基本不会破坏原有结构的 稳定性。主要缺点是:管理多个Layer和Tier 比较麻烦,运行效率可能比较低。所以,一个 具备良好层次结构的系统,其Layer和Tier的 数目要恰如其分。
软件设计与体系结构第7讲面向对象的设计
数据管理部分的设计
3.3、永久类的存放设计
——每个永久类使用一个数据库表 1)确定要存储对象的哪些属性值,据此列出一个永久类的相应属性。 2)按时间与空间要求进行权衡,对这些属性进行规范化,规范化后的属性至少 应满足第一范式。 3)定义数据库的表
数据管理部分的设计
数据库中的表要满足一些范式,如下为三个范式的定义。 第一范式: 关系(表)的每个属性都应该是原子的。 第二范式: 如果一个关系的所有非关键字属性,都只依赖整个关键 字,则该关系满足第二范式。 第三范式: 如果一个关系满足第二范式,且没有传递依赖,则该关系 满足第三范式。
数据管理部分的设计
控制驱动部分的设计
数据库系统
数据库系统是存储、管理、处理和维护数据的软件系统,由数据库、数据库管理系统和有关软件组 成。
数据库是长期存在计算机内、有组织、可共享的数据的集合。 数据库管理系统是用于建立、使用和维护数据库的软件,它对数据库进行统一管理和控制,以保证 数据库的完整性和安全性。
应用程序
用户
为了存储各个类的对象,“对象存储器”的对象要知道什么? 每个要求存储的类的属性数据结构 每个要求存储的类的对象存放在哪个数据库表 当前要求检索的对象属于哪个类,如何找到它在数据库表中对应的位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向数据流的设计
• 结构化开发方法(Structured Developing Method) 是现有的软件开发方法中最成熟,应用最广泛的 方法,主要特点是快速、自然和方便。 • 结构化开发方法由结构化分析方法(SA法)、结 构化设计方法(SD法)及结构化程序设计方法 (SP法)构成的。 • 结构化设计方法(SD 法 Structured Design)是 结构化开发方法的核心,与SA法,SD法密切联 系,主要完成软件系统的总体结构设计。
体系结构风格分类
• 数据为中心的体系结构
– 目标:实现数据的可集成性 – 共享数据可以是数据仓库或是黑板。
客户端 客户端 共享数据 客户端
客户端
客户端
客户端
体系结构风格分类
• 调用-返回体系结构
– 目标:系统的可更改性和可扩展性
– 主程序-子程序体系结构
• 将一个程序分层子部分
• 每个子节点都只由父节点控制
• Meta-H For Real-Time Software Analysis
– www.htc.honeywell.com/projects/dssa/ dssa_tools/dssa_tools_mh.html
• Rapide ADL
– pavg.stanford.edu/rapide/
• C2 Project at UC Irvine
ቤተ መጻሕፍቲ ባይዱ
面向数据结构的设计
• 结构化开发方法是一种面向数据流、数据 封闭性的开发方法,来源于程序的模块化 和功能分解。面向数据结构的设计是将问 题的数据结构转换为程序结构,着重于问 题的数据结构,不强调模块定义。 • Jackson系统开发方法是JSP的扩展,是一 种面向数据结构的设计方法,其基本思想 是先建立输入输出的数据结构,再将其转 换为软件结构。这种方法适用于数据处理 类问题,特别是企业管理类的软件系统。
EE
FF
GG
JJ
KK
Put L
Get B
Edit BB
LL
Put M
Get A
AA
T1
T2
T3
Operate 1
… Operate n
Detail 1
…
Detail m
面向数据流的设计过程
精化数据流图 “事物” 流类型 “变换”
优化的前题是:
“Get it to work, then make it fast.”
① 进出该模块的信息(接口描述); ② 模块内部的信息; ③ 过程陈述,包括主要判定点及任务等;
④ 对约束和特殊特点的简短讨论。
事务流设计
• 事务流设计是从事务流的DFD到程序结构的转换。 • 设计步骤: – 确定流界:
• 先从DFD中找出事务流、事务处理中心和事务路径。 事务中心前是接收事务、事务中心后是事务路径。 进行一级分析,设计顶层模块。
T = Call one of the several subroutines depending on the type of the incoming transaction request.
…
…
…
当信息流具有明显 的“发射中心”时, 可归结为事务流。
…
变换流设计
• 变换流设计是从变换流的DFD到程序结构图的转化。 • 设计步骤: – 找出变换中心及逻辑输入/出;
Make A into B
Make G into H
Put H
变换流设计
B
A
2.1 X
N
M
2.2 Z
P
C
1
2.3 Y
3
D
System 2
B B C
C
Get B
B N M
Make B into C
N C P M
Put C
X
Y
P
Z
面向数据流的设计
变换流分析例:汽车数字仪表板的设计
功能:① 通过模 - 数转换实现传感器和微处理机接口;
第一步:DFD的分界, 先分出I、P、O三 块 产生
加/减 速显示 上箭头 水平线 下箭头
读和 校核
燃烧流
rpm 计算 里程 英里
产生 里程 显示
显示
超速值 mph 产生 mph 显示 发出 铃声
mph
铃声
mpg
产生 mpg 显示
mph显示
mpg显示
面向数据流的设计
数字仪表板 控制
接收传感器 信号
• 如远程过程调用系统
– 面向对象或抽象数据类型系统 Application Systems
Business-specific Components
• 强调对数据的绑定和对数据操纵及访问方式的掌握
• 实现可更改性
– 层次式 Middleware System Software
• 可更改
• 可移植
Web sites of Interest
数据转换 控制
驱动仪表板
一般问题的 一级分解方 法:
I
M P O
面向数据流的设计
第二步:映 I :由边界向回溯,将 射
每个遇到的处理器映 成相应的层模块。 一个下层模块。
O :由边界向外推,方 法与 I 类似
M A B D
C
C D
I B
P :每个处理直接对应
A
面向数据流的设计
数字仪表板 控制
例:
混合流设计
E C1 GG G F J H JJ K
D
DD
EE
T1
C2 T2
C3
FF
KK
B1
B2 BB B3 T3 System
D D K K
L
B AA A Get D
LL Put K M
Make D into K
System
D D K
K
Get D
Make D into K
Put K
Get C
DD
接收传感器 信号 转换成 rpm
收集sps 读旋转信号
数据转换 控制
驱动仪表板
计算 gph
读燃料流
确定 计算 计算 计算 加/ 显示 显示 显示 发出 加/ mph mpg 里程 减速 mpg mph 里程 铃声 显示 减速
发光二极管显示
面向数据流的设计
第三步:修改 —— 本着高内聚、低耦合的原 则。 例:精化后的数字仪表板系统的软件结构。 注:每个模块应附一简要说明描述
– www.cs.cmu.edu/~acme/
• Worldwide Institute of Software Architects
– www.wwisa.org
Web Sites of Interest
• The WRIGHT Language
– www.cs.cmu.edu/~able/wright/
• 面向数据流的设计方法又称结构化设计。
面向数据流的设计
• 基本思想:将系统设计成由相对独立、单一功能 的模块组成的结构。 • 采用方法: DFD System Hierarchy • 步骤:
– – – – – – 确定数据流类型; 指明数据流的边界; 将DFD映射为程序结构; 根据元素的分解,定义控制的层次; 使用设计测量和启发信息,对结构进行细化和求精; 精化体系结构的描述。
– 进行一级分析,设计上层模块:
• 从DFD中导出具有接收和发送分支的软件结构。对 事务中心设计为“事务控制”、对事务流为“接收 事务”、对事务路径为“发送事务”。
– 细化该事务结构和每条动作路径的结构。
• 对于接收分支,采用变换流设计方法设计中下层; 对于发送分支,在发送模块下设计每条事务路径的
事务流设计
SD方法的优点
• SD方法是从以下5个方面来获得质量较好的软件 结构:
– 根据描述用户需求的数据流图导出了实现用户需求的 结构图。 – 为了控制大型软件系统复杂性,运用了下面两个手段:
• 将系统分解成许多个黑盒。 • 将黑盒组织成适合于用计算机实现的一个层次结构。
– 用内聚和耦合作为评价软件结构质量的标准。 – 给出一组设计技巧,如扇入和扇出、模块大小的掌握, 作用范围和控制范围等。 – 用结构图直观地描述软件结构,因此易于理解,并直 接可以用于评价、分析和复查等。
I
事务流
II S
事务中心
M
II
I A …
S
B … C …
A
…
B
…
C
…
事务处理
混合流设计
• 一般采用以变换流为主,事务流为辅的方 法。 • 基本步骤:
– 利用变换设计,将DFD划分为输入、变换和输 出三大部分; – 设计软件结构的上层模块,即主模块,及其下 层输入模块、变换模块和输出模块; – 根据输入、变换和输出DFD的不同特征设计它 们的下层模块。
Outgoing flow
事实上所 有信息流 都可归结 为变换流
Transform flow
Internal representation
Time
变换流
输入
变换
输出
面向数据流的设计
⑵ 事务流(Transaction Flow)
Transaction request
T
事务 中心
… Action paths
体系结构风格 style
• 体系结构风格包含:
– 一组构件(components)(如,数据库、计算 模块)完成系统所需的某种功能; – 一组连接子(connectors),能使构件间通信协 调和合作; – 约束(constraints),定义构件如何被集成,形 成系统; – 语义模型(semantic model),使得设计者通过 分析构件的已知性质而理解系统的整体性质。
结构图 (Structure chart)
A A A A
B a. 基本形式
B
C b. 顺序
D
B c. 选择
C
B d. 重复
面向数据流的设计
1、Data Flow 的分类 ⑴ 变换流(Transform Flow):
External representation Information
Incoming flow
– 自顶向下,逐步细化,设计中下层模块。
• 即上层各个模块的从属模块,顺序一般是从设计输入模块的 下层开始。
变换流设计
C B A 1 输入
C C Make C into 须检查; D and E C
3
D E
4 5 输出
D
F G 6
2 变换中心 System 3
D E E
H
Get C
B B
Put E
第 7 讲 软件设计方法
体系结构设计
• 软件体系结构是软件系统中最本质的东西。 • 良好的体系结构必须是普适、高效和稳定 的。 • [BAS98]:软件的体系结构是系统的一个或 多个结构,包含软件构件、构件对外可见 的性质以及它们之间的关系。 • 体系结构是一种表示。 • 体系结构设计关注构件结构、构件的性质 和交互的关系。
区分事务中心和 数据接收通路 映射成事务结构
区分输入和 输出分支 映射成变换结构
用启发式设计规 则精化软件结构 事务分析 导出接口描述和 全程数据结构 复 查 详细设计 变换分析
精化体系结构设计
• • • • • • 为每个模块开发处理说明; 为每个模块提供接口描述; 定义局部和全局数据结构; 给出所有的设计限制或约束; 进行设计评审; 如需要,进行结构设计优化。
SD方法的缺点
• SD方法的不足:
– 软件系统的概要设计应该包括两个方面:数据 结构的设计和程序结构的设计,两者是密切相 关的,但遗憾的是SD方法只考虑后者而不考虑 前者,因此在使用 SD方法时,一般还需参考 一些有关数据库、文件结构的设计方法。 – “高内聚、低耦合”的原则虽已被广为接受, 但这两个概念尚无严格的定义,更无健全的理 论基础,只能用些例子来解释其含义,因而对 实际系统的软件结构还难以作客观的质量评价, 这是SD方法的一个缺陷。
Put D
F
Get B
A A
Make B into C
B
E D 每个传递的数据是否必须? G 完成模块功能所必须的数据是否都传递了? F G Make D 传输的数据是否只与单一的功能有关?是否目 Make E Put G into F 的明确? into G G H H
Put F
Get A
• 变换中心-描述了系统的主要功能、特征,其特点是:输入/ 出数据流较多,变换中心可以不至一个。 • 逻辑输入/出 - 是指输入/出变换中心的数据流。 • 输入流 -是将物理输入转换为逻辑输入的数据流。 • 输出流 - 是将逻辑输出转换为物理输出的数据流。
– 设计软件结构的顶层;
• 为每个输入设计一个输入模块,为每个输出设计一个输出模 块,同时为变换中心设计一个处理模块。
• CMU Composable Systems Group
– www.cs.cmu.edu/~Compose/
• CMU Architecture Based Languages and Environments Research Group
– www.cs.cmu.edu/~able/
• The Acme ADL
② 在发光二极管面板上显示数据;
③ 指示每小时英里数(mph),行驶的里程,每加仑油 行驶的英里数(mpg)等等; ④ 指示加速或减速; ⑤ 如果车速超过55mph ,则发出警告铃声。
面向数据流的设计
旋转信号 读 旋转 信号 燃料流 传感器信号 确定 加/减 速 SPS 箭头指示 SPS 收集 和求 平均 SPS 转换 成 转/分 rpm 计算 gph gph 计算 燃料 消耗 计算 mph,超 速值