现代软件工程第6章 构件级设计
软件工程-构件级设计建模

软件工程
8.1 什么是构件(续)
• 针对不同的系统设计体系,构件所指的对 象不一样。
软件工程
8.1.1 面向对象观点
• 在面向对象的设计中,构件指一个协作类的集合。 • 一般来讲,构件的规模比类大,但有时一个构件
也可以对应一个类。 • 在构件级设计时,应设计出类的所有属性以及和
其它类之间的相关操作,通信接口必须明确定义。
软件工程
软件工程
• (2) 为每个构件确定适当的接口
– UML接口是“一组外部课件的(即公共的)操 作,接口不包含内部结构、没有属性,没有关 联……”
– 为设计类定义的接口可以归结为一个或者更多 的抽象类
– 抽象类中的每个操作接口应该是内聚的
内聚性差!
软件工程
建立工作单 检查任务的优先级
将任务传递给生产线
–某些情况下,部署图 在这个时候被细化为 实例形式
7. 反省和检查现有的设计
软件工程
8.4 对象约束语言
• 对象约束语言(Object Constraint Language, OCL),一种形式化语言
• 四个组成部分:
–语境—定义了哪些情况语句是正确的 –特征—描述语境的一些特征 –操作—用来操纵和限制一个特性 –关键字—用于说明条件表达式
个数据类型时
软件工程
8.2.4 耦合性(续)
• 包含或导入耦合—当构件A引入或者包含一个 构件B的包或者内容时
• 外部耦合—当一个构件通信和协作时发生
构件的UML表示
软件工程
图 带接口的构件 构件具有它们支持的接口和需要从其他构件得到的接口
构件图表示了构件之间的依赖关系。
软件工程
每个构件实现(支持)一些接口,并使用另一些接
计算机科学与技术专业课课件_软件工程SE__Chapter6

③ 有数据说明,例如: TYPE number IS STRING LENGTH (12) ④有子程序定义与调用机制,例如:
PROCEDURE <子程序名> <属性:内部\外部,编程语言等等>
INTERFACE <参数表:I\O等等> pseudocode lines END
调用时可用:PERFORM <子程序名> USING<参数表>
上海大学计算机学院
2013-8-31
19
面向数据结构的设计方法
在许多应用领域中信息都有清楚的层次结构, 输入数据、内部存储的信息(数据库或文件)以及 输出数据都可能有独特的结构。 数据结构既影响程序的结构又影响程序的处理 过程。
2013-8-31
上海大学计算机学院
20
Jackson图
顺序
重复
2013-8-31
上海大学计算机学院
2
结构程序设计
◆ 结构程序设计的特点
1. 2. 3. 自顶向下逐步求精; 具有单入、单出的控制结构(取消GOTO语句); 结构化定理:任何单入口单出口的程序都可以由“顺序”、“选 择”和“循环”三种基本结构实现。
◆ 经典的结构程序设计
顺序、IF-THEN-ELSE型分支和DO-WHILE型循环
2013-8-31 上海大学计算机学院 16
判定表
◆判定表示例
31
上海大学计算机学院
17
判定树
◆判定树示例
2013-8-31
上海大学计算机学院
18
PDL
◆ 过程设计语言( Program Design Language),又称伪码 (Pseudocode ) ◆ 特点
软件工程-张海藩 编著 复习提纲1-6章

第一章软件工程学概述第一节软件危机1.为了消除软件危机,20世纪60年代后期形成了新学科:计算机软件工程学。
2.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(这些问题不是不能运行的软件才仅仅具有的,几乎所有的软件都不同程度存在这些问题。
)3.软件危机包含两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。
2.如何维护数量不断膨胀的已有软件。
4.产生软件危机的原因(page4—图1.1)1.一方面与软件本身的特点有关2.另一方面也和软件开发与维护的方法不正确有关。
5.软件不同于一般程序,它的一个显著特点是:“规模庞大”。
6.软件开发流程:1. 问题定义:(确定要求解决的问题是什么)2. 可行性研究:(决定该问题是否存在一个可行的解决办法)3. 需求分析:(深入具体的了解用户需求)进入开发时期:对软件设计概要设计详细设计编写程序(全部工作量10%—20%)测试交付使用7.软件产品的配置:包括:程序、文档、数据8.软件危机的一些典型表现:1.对软件开发成本和进度的估计常常不准确2.用户对“已完成的”软件系统不满意的现象经常发生3.软件产品的质量往往靠不住4.软件常常是不可维护的5.软件通常没有适当的文档资料。
6.软件成本在计算机系统总成本中所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
第二节软件工程1.软件工程定义软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;2. 软件工程方法学包含3个要素:方法、工具和过程。
3. 软件工程方法学: 1. 传统方法学2. 面向对象方法学4. 面向对象方法学的4个特点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2)把所有的对象都划分成类(class)。
(3)按照父类(基类)与子类(派生类)的关系,把若干个相关类组成一个层次结构的系统(也成为类的等级)。
软件工程第六章

判定树的缺点:
例题:
某校制定了教师的讲课课时津贴标准。对于各 种性质的讲座,无论教师是什么职称,每课时 津贴费一律是50元;
对于一般的授课,则根据教师的职称来决定每
课时津贴费:教授30元,副教授25元,讲师20
元,助教15元。
请分别用判定表和判定树表示津贴标准。
判定表:
1
教授 副教授 讲师 助教 讲座 50 30 25 20 15
盒图具有下述特点: 功能域明确。 不可能任意转移控制。 很容易确定局部和全程数据的作用域。 很容易表现嵌套关系,也可以表示模块的层次 结构。
盒图的基本符号
6.3.3 PAD图
PAD是问题分析图(problem analysis diagram)
的英文缩写,自1973年由日本日立公司发明以 后,已得到一定程度的推广。 它用二维树形结构的图来表示程序的控制流, 将这种图翻译成程序代码比较容易。
多年来判定树一直受到人们的重视,是一种比 较常用的系统分析和设计的工具。
用判定树表示计算行李费的算法
判定树的优点:
它的形式简单,一眼就可以看出其含义,因此 易于掌握和使用。
简洁性不如判定表,数据元素的同一个值往往 要重复写多遍,而且越接近树的叶端重复次数 越多。 画判定树时分枝的次序可能对最终画出的判定 树的简洁程度有较大影响。
PAD图的基本符号
PAD图的主要优点如下:
使用表示结构化控制结构的PAD符号设计出来 的程序必然是结构化程序。 PAD图所描绘的程序结构十分清晰。 PAD图表现程序逻辑易读、易懂、易记。 容易将PAD图转换成高级语言源程序,这种转 换可用软件工具自动完成。
软件工程导论第6章

70年代初N.Wirth在Pascal语言中设置支持“顺序 结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE 重复结构”或“DO-UNTIL重复结构”三种基本控制 结构语句。
25
3种基本控制结构
(1) 顺序型
A B
(2) 选择型
F P A B T
(2) 多情况选择型(case)
T T
P=1 F P=2 F P=n F
…
A1 A2
T
An
(3) 先判定型循环
后判定型循环
(do-while)
F
(do-until)
P T S
S P F
T
例1、某模块有两个输入a和b,一 个输出c,当满足条件(a>0)and(b<2) 时,c=a+b,否则c=a-b。画出该模 块的程序流程图。
a b
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结 习题
1
详细设计阶段的根本目标:确定应该怎样具体地 实现所要求的系统。 为软件结构图中的每一个模块确定使用的算法和 块内数据结构,并用某种选定的表达工具给出清晰 的描述。
100 110
120
130 140
Eq:等于 ne:不等于 gt:大于 lt:小于 ge:大于等于 le:小于等于
例:打印A、B、C三数中最小者的程序 if (A.LT.B .AND. A.LT.C)then write(6,*) A else if (A.GE.B .AND. B.LT.C) then write(6,*) B else write(6,*) C endif endif
现代软件工程第6章 构件级设计

目录
1 什么是构件 2 设计基于类的构件 3 实施构件级设计 4 WebApp的构件级设计 5 设计传统构件 6 基于构件的开发
分析类
PrintJob
numberOfPages numberOfSides paperType magnification productionFeatures
computePageCost() passJobtoPrinter()
computeJob initiateJob
设计构件 PrintJob
6.1.2 传统观点
为了说明这个过程,考虑ComputePageCost模块。该模块的目的在于根据用 户提供的规格说明来计算每页的印刷成本。为了实现该功能,需要以下数据: 文档的页数、文档的印刷份数、单面或者双面印刷、颜色、纸张大小。这些 数据通过该模块的接口传递给ComputePageCost。ComputePageCost根据任 务量和复杂度,使用这些数据来决定一页的成本——这是一个通过接口将所 有数据传递给模块的功能。每页的成本与任务量成反比,与任务的复杂度成 正比。
6.1.2 传统观点
getJobData
细化后的模块
accessCostsDB
PageCost
in: numberPages in: numberDocs in: sides=1, 2 in: color=1, 2, 3, 4 in: page size = A, B, C, D out: pagecost in: job size in: color=1, 2, 3, 4 in: pageSize = A, B, C, D out: BPC out: SF
第六章基于构件的软件工程
对构件的每个刻面赋予相应的值,用以描述该构件。刻面 分类具有较好的灵活性,易于加入新的刻面值,因此刻面分类 比枚举分类更易于扩展和修改。 该方法首先是为构件库中的所有构件定义一组属性,并赋 予相应的属性值。开发人员通过指定一组属性值在构件库中对 构件进行检索。
输入信息
技术文献 已有应用 专家经验/建议 当前与未来的需求
输出信息
领域分析 领域语言 复用标准 分类方法 功能/行为模型
图6.3 领域分析的输入和输出
领域分析不是针对某个特定的软件系统,而是针对一类软 件系统的共同的特征、知识和需求。比需求分析更一般、更抽 象、更广泛的特征。
6.2.3 领域分析
6.1.2 软件复用的形式
6.1.2软件复用的形式
一、按照重用活动所跨越的应用领域的类型分
1、横向复用(horizontal reuse)也称为水平复用, 是指复用活动的范围跨越了几个不同的应用领域,复用的 软件产品主要包括数据结构、通用算法、人机界面等软件 元素。
2、纵向复用(vertical reuse)也称为垂直复用,是 指复用活动的范围限制在同一个应用领域或者是一类具有 较多共性的应用领域内。
生产者复用 (为复用开发构件)
建立构件
消费者复用 (使用构件开发应用)
组装应用
图6.1 生产者复用与消费者复用
6.1.3 软件复用的困难
6.1.3 软件复用的困难
复用具有许多明显的优点,但目前应用不广泛的主要原因是: (1)技术因素
构件与应用系统之间的差异;
构件要达到一定的规模,才能支持有效的复用; 发现合用构件的困难; 基于复用的软件开发方法和软件过程需要一些新的理论、技 术及支持环境。 (2)人的因素 喜欢自己创造而不喜欢使用别人的东西。 (3)管理因素 把复用构件和一般软件构件同等看待,把复用看 作可有可无的事。 (4)教育因素 软件科学技术的教育与培训中,缺乏关于软件复 用的内容,缺少专门教材和课程。
软件设计与体系结构课后习题答案(秦航)
牡丹江师范学院--软件工程--朱有富 2015 年 6 月整理
第一章 1.什么是软件?软件的特点是什么?软件有那些分类? 计算机软件是由专业人员开发并长期维护的软件产品; 特点:
1)软件不是在传统意义上生产制造的,而是由设计开发的; 2)软件不会像硬件那样磨损和老化; 3)随着构件构造模式的发展,软件需要根据实际需求定制; 分类:计算机软件分为 7 个大类: ①系统软件②应用软件③嵌入式软件④科学和工程计 算软件⑤产品线软件⑥人工智能软件⑦Web 应用软件 2.软件设计应该包括哪些要素?软件设计在软件工程中所处的位置和重要性如何? 元素:①分析模型②数据/类设计③体系结构设计④接口设计⑤构件级设计 位置:软件需求分析->需求规格说明->软件设计->设计文档->软件编码…… 重要性: 软件设计是软件工程中形成质量的地方,设计为我们提供了质量评估的软件表示,设 计是我们能够将用户需求准确地转化为软件产品或系统的唯一方法。是所有软件工程 活动和随后的软件支持活动的基础。没有设计,就会有构造不稳定系统的风险。 3.请用自己的话说明软件体系结构。传统的建筑体系结构科学和软件体系结构有何相 似之处?有何不同之处? 软件体系结构是软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系 ,以及相关的设计与演化原则等。 相似之处: 都是所构建系统的计划,都具有确保得到期望的特性,也是所构建系统的描述。 不同之处: 建筑师创建的是相对静止的静态描述而软件体系结构师创建的体系结构描述、代码在 以后将被执行多次,靠许多组件的交互来得到期望结果。
2垂直型设计是指运用面向体系结构的专用建模设计工具及其表达模型所进行的软件体系结构的设计一般来说这种专用工具针对软件体系结构的描述首先定义一种表达模型然后围绕该模型通过提供相应的设计工具来支持软件体系结构的设计
第6章 详细设计 软件工程-课件
图6.2 其他常用的控制结构
6.2 人机界面设计
人机界面的设计质量,直接影响用户对软 件产品的评价,从而影响软件产品的竞争力 和寿命
6.2.1 设计问题
4个问题: 系统响应时间、 用户帮助设施、 出错信息处理 命令交互。
“结构程序设计是尽可能少用GO TO语句 的程序设计方法。最好仅在检测出错误时才 使用GO TO语句,而且应该总是使用前向 GO TO语句。”
如果只允许使用顺序、IF-THEN-ELSE型 分支和DO-WHILE型循环这3种基本控制结 构,则称为经典的结构程序设计;
如果除了上述3种基本控制结构之外,还允 许使用DO-CASE型多分支结构和DO-UNTIL 型循环结构,则称为扩展的结构程序设计
集成
附加
(1) 在用户与系统交互期间,是否在任何时候都能 获得关于系统任何功能的帮助信息?有两种选择: 提供部分功能的帮助信息和提供全部功能的帮助信 息。
(2) 用户怎样请求帮助?有3种选择:帮助菜单,特 殊功能键和HELP命令。
(3) 怎样显示帮助信息?有3种选择:在独立的窗口 中,指出参考某个文档(不理想)和在屏幕固定位置 显示简短提示。
用户界面的评估周期如下所述:
完成初步设计之后就创建第一级原型;
用户试用并评估该原型,直接向设计者表述对界 面的评价;
设计者根据用户意见修改设计并实现下一级原型。
上述评估过程持续进行下去,直到用户感 到满意,不需要再修改界面设计时为止。
也可以在创建原型之前就对用户界面的设 计质量进行初步评估。
在创建了用户界面的设计模型之后,可以 运用下述评估标准对设计进行早期复审。
软件工程第6章面向数据流的设计方法
21
变换分析
输入流 变换流 输出流
A C
B E D F G H
主控模块 输入流 控制模块
变换流 控制模块
输出流 控制模块
图6-5 一级分解
22
变换分析
图6-5展示的是一个简单三叉结构,实际处 理大型系统的复杂数据流时,可能需要多 个模块对应图6-5中一个模块的功能。“一 级分解”总的原则是,在完成控制功能并 保持低耦合度、高内聚度的前提下尽可能 地减少模块的数量。 “传感器监测子系统”一级分解如图6-6所 示,其中控制模块的名字概括了所有下属 模块的功能。
E
输出流控制模块 G
A
C
F
主控模块
H
输入流控制模块 B A D C
E F
G H
图6-8 结构的优化
31
监控传感器执行者
警报输出控制器 获得响应信息 建立警报条件
产生显示 读传感器
生成警报信号
建立与电话网络的 连接
产生脉冲
32
变换分析
上述七个设计步骤的目标是给出软件的 一个整体描述。 一旦有了这样一个描述,设计人员即可 从整体角度评价和精化软件的总体结构, 此时修改所需耗费不多,却能大大提高 软件质量。
39
无效口令
图6-2-1 用户交互子系统的二级数据流图
事务分析
事务分析法可概括为七个步骤:
步骤一、复审基本系统模型; 步骤二、复审并精化软件数据流图; 步骤三、确定数据流图的特征; 步骤四、指出事务中心,确定接收部分和发送部分 的流界; 步骤五、映射出系统上层模块结构; 步骤六、分解并精化事务结构以及每条动作路径所 对应的结构。根据流经每一动作路径的数据流特征, 参考前面所述“变换设计” 相关步骤可以逐一导出 这些子结构.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1.1 面向对象的观点
在面向对象的软件工程环境中,构件包括一组协作的类(在某些情况下,构 件可以包含一个单独的类)。构件中的每个类都得到详细阐述,包括所有的 属性和与其实现相关的操作。作为细节设计的一部分,所有与其他设计类相 互通信协作的接口必须定义。为此,设计师需要从需求模型开始,详细描述 分析类(对于构件而言该类与问题域相关)和基础类(对于构件而言该类为 问题域提供了支持性服务)。
第6章 构件级设计
根据所开发软件的特点,可以从3个不同的角度来进行构件设计。面向对 象的视角注重细化来自于问题域和基础设施域的设计类。传统的视角细 化3种不同的构件或模块:控制模块、问题域模块和基础设施模块。在这 两种视角中,都需要应用那些能够得到高质量软件的基本设计原则和概 念。当从过程视角考虑时,构件设计采用了可复用的软件构件和设计模 式,这些都是基于构件级的软件工程的关键要素。
6.1.1 面向对象的观点
对于体系结构设计组成部分的每个构件都要实施细化,之后,要对每个属性、 每个操作和每个接口进行进一步的细化。适合每个属性的数据结构必须予以 详细说明。另外还要说明实现与操作相关的处理逻辑的算法细节,最后是实 现接口所需机制的设计。对于面向对象软件,还包含对实现系统内部对象间 消息通信机制的描述。
为了说明设计细化过程,考虑为一个高级印刷车间构造软件。软件的目的是 为了收集前台的客户需求,对印刷业务进行定价,然后把印刷任务交给自动 生产设备。在需求工程中得到了一个称为PrintJob的分析类。分析过程中定 义的属性和操作在图6-1的上方给出了注释。
6.1.1 面向对象的观点
图6-1 设计构件的细化
computePageCost() computePaperCost() computeProdCost() computeTotalJobCost() buildWorkOrder() checkPriority() passJobtoPrinter()
6.1.1 面向对象的观点
设计中,PrintJob被定义为软件体系结构的一个构件,用简化的UML符号表 示的该构件(图中灰底“设计构件”)显示在图6-1中部靠右的位置。注意到 PrintJob有两个接口:computeJob和initiateJob。computeJob具有对任务进 行定价的功能,initiateJob能够把任务传给生产设备。这两个接口在图下方的 左边给出(即棒棒糖式符号)。
6.1.1 面向对象的观点
构件级设计将由此开始。必须对PrintJob构件的细节进行细化,以提供指导 实现的足够信息。通过不断补充作为构件PrintJob的类的全部属性和操作, 来逐步细化最初的分析类。正如图6-1右下部分的描述,细化后的设计类 PrintJob包含更多的属性信息和构件实现所需要的更广泛的操作描述。 computeJob和initiateJob接口隐含着与其他构件(图中没有显示出来)的通 信和协作。例如,computePageCost()(computeJob接口的组成部分)操作可 能与包含任务定价信息的PricingTable构件进行协作。checkPriority()操作 (initiateJob接口的组成部分)可能与JobQueue构件进行协作,用来判断当 前等待生产的任务类型和优先级。
6.1
什么是构件
ห้องสมุดไป่ตู้
6.1 什么是构件
通常,构件是指计算机软件中的一个模块化的构造块。OMG(Object Management Group,对象管理组织)统一建模语言(UML)规范这样定义 构件:“系统中模块化的、可部署的和可替换的部件,该部件封装了实现并 暴露一组接口。”
构件存在于软件体系结构中,因而构件在完成所建系统的需求和目标中起着 重要作用。由于构件驻留于软件体系结构的内部,它们必须与其他的构件和 存在于软件边界以外的实体(如其他系统、设备和人员)进行通信和合作。
目录
1 什么是构件 2 设计基于类的构件 3 实施构件级设计 4 WebApp的构件级设计 5 设计传统构件 6 基于构件的开发
第6章 构件级设计
一套完整的软件构件是在体系结构设计的过程中定义的。体系结构设计 第一次迭代完成之后,就应该开始构件级设计。构件级的设计过程包含 一系列活动,这些活动逐渐降低描述软件的抽象层次。构件级设计最终 在接近于代码的抽象层次上描述软件。构件级设计阶段定义了数据结构、 算法、接口特征和分配给每个软件构件的通信机制,全部的数据和软件 的程序结构都已经建立起来,其目的是把设计模型转化为运行软件。但 是现有设计模型的抽象层次相对较高,而可运行程序的抽象层次相对较 低。这种转化具有挑战性,因为可能会在软件过程后期阶段引入难于发 现和改正的微小错误。
细化后的设计类
PrintJob
numberOfPages numberOfSides paperType
paperWeight paperSize paperColor magnification colorRequirements productionFeatures collationOptions bingingOptions coverStock bleed priority totalJobCost WOnumber
分析类
PrintJob
numberOfPages numberOfSides paperType magnification productionFeatures
computePageCost() passJobtoPrinter()
computeJob initiateJob
设计构件 PrintJob
<<interface>> computeJob
computePageCost() computePaperCost() computeProdCost() computeTotalJobCost()
<<interface>> initiateJob
buildWorkOrder() checkPriority() passJobtoProduction()