软件构造Word文件下载.docx
《软件构造Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件构造Word文件下载.docx(45页珍藏版)》请在冰豆网上搜索。
•单元测试
•系统测试
•校正性的维护
•功能强化
5)软件构造活动主要是其中哪些部分?
6)
1.验证基础工作已经完成,可以进行创建工作;
3.设计和编写子程序与模块
4.
5.创立数据类型并命名变量
6.
7.选择控制结构并组织语句块
8.
9.找出并修正错误
10.
11.评审其它小组的细节设计和代码,同时接受其它小组评审
12.
13.通过仔细地格式化和征集意见改进编码
14.
15.对分别完成的软件单元进行综合
16.
17.调整编码使其更小、更快
18.
编码和调试,部分的详细设计和单元测试
7)软件构造的重要性
8)
⏹构造活动是开发软件的重要组成部分
⏹
⏹构造活动在开发软件中处于枢纽地位
⏹把主要精力集中于创建活动,可以极大地提高程序员的生产效率
⏹创建活动的产品,源代码,往往是软件的唯一精确描述
⏹创建活动是唯一一项必不可少的工作
9)隐喻(SoftwareMetaphors)
10)
•常见的软件隐喻(简单了解)
●软件书写:
写代码(WritingCode)
●
●软件播种:
生成系统(GrowingaSystem)
●软件珍珠培植法:
系统积累(SystemAccretion)
●软件创建:
建造软件(buildingsoftware)
●实用软件技术:
智能工具箱(TheIntellectualToolbox)
●复合隐喻(CombingMetaphors)
隐喻可以帮助开发人员借助类比的力量加深对编程的理解
事实上,借助隐喻加深理解是各个研究领域都常用的方法
3.软件构造的前期准备工作
1)软件构造的前期准备工作有哪些
前期准备工作并非一成不变
⏹构建活动的准备工作要根据项目特点调整
⏹具体细节随项目的不同会有很大变化
构造开始前的准备工作有哪些
⏹辨明软件项目的类型
⏹明确问题定义
⏹明确需求规约
明确软件架构的个组成部分
什么是软件构造的前期准备工作
⏹软件构造的前期准备工作是复查性的活动
❑明确前导性的工作结果有哪些
❑
❑重新审视前导性工作是否完成
❑明确前导性工作完成的程度如何
⏹准备工作的中心目标是降低风险
❑糟糕的需求分析
❑糟糕的项目计划
。
根据CC2Page59核对表上的内容复习(只涉及ppt中有的内容)
1)问题定义先决条件
3)需求定义先决条件
5)软件架构先决条件
5.构造技术
1)模块化设计(简单了解相关概念)………………………………
这一部分的复习参阅CC2书上的第5章
3)模块和子程序的区别
❑子程序是具有一定功能的,可以调用的函数或过程
❑模块是指数据及作用于数据的子程序的集合,或者
❑模块也可能是指,可以提供一系列互相联系功能的子程序集合,而这些子程序之间不一定有公共的数据
5)模块化:
内聚性与耦合性(重要)
pptpage55-page73
可以参阅CC2-7章子程序内聚性的相关内容
❑耦合性(Coupling):
对一个软件结构内不同模块间互连程度的度量。
❑内聚性(Cohesion):
标志一个模块内各个处理元素彼此结合的紧密程度,理想的内聚模块只做一件事情。
模块化
⏹模块化设计的目标是使每个子程序都成为一个“黑盒子”
❑你知道进入盒子和从盒子里出来的是什么,却不知道里边发生什么
❑通过接口的定义明确其功能
⏹“模块化”同时涉及到子程序设计和模块设计
❑单独的子程序无法实现“黑盒子”的目标,因而需要模块
❑但通过对子程序的控制可以达到模块化的效果
通过对一组子程序定义统一对外的接口,也完全有可能达到高度模块化这一目标
模块化:
内聚性与耦合性
⏹模块独立程度的衡量标准
模块内聚性
⏹模块的内聚性
❑内聚性表示了在一个模块中,各种操作及数据之间互相联系的紧密程度
❑内聚性的强弱程度用“强度”表示
❑应尽量提高内聚程度
⏹强调“强内聚”的目的
❑每一个模块只需作好一项工作,而不必过分考虑其它任务
模块内聚性分类
⏹偶然内聚:
一组任务关系松散(低)
⏹逻辑内聚:
一组任务在逻辑上同属一类,例如均为输出(低)
⏹时间内聚:
一组任务必须在同一段时间内执行(低)
子程序的内聚性
⏹模块的强内聚性并不说明子程序内聚性强
⏹子程序的内聚性影响到模块的实现质量
⏹子程序内聚性分类
❑可取的内聚性
不可取的内聚性
可取的内聚性
⏹功能内聚性(最高)
⏹顺序内聚性(较高)
⏹通讯内聚性(中)
⏹临时内聚性(低)
功能内聚性:
⏹功能内聚性是最强也是最好的一种内聚
当程序执行一项并且仅仅是一项工作时,属于功能内聚
顺序内聚性
子程序内包含需要按特定顺序进行的、逐步分享数据而又不形成一个完整功能的操作
通讯内聚性
⏹在一个子程序中,两个操作只是使用相同数据,而不存在其它任何联系时产生的
临时内聚性
⏹因为同时执行的原因才被放入同一个子程序里,这时产生临时内聚性
⏹不可取的内聚性往往导致一些组织混乱而又难以调试和改进的代码
⏹应尽量避免不可取的内聚性的出现
❑过程内聚性
❑逻辑内聚性
偶然内聚性
过程内聚性
⏹当子程序中的操作是按某一特定顺序进行的,就是过程内聚性
⏹过程内聚性和顺序内聚性的区别
❑顺序内聚性中的顺序操作使用的是相同数据
❑过程内聚性中的操作使用的并不是相同数据
逻辑内聚性
⏹当一个子程序中同时含有几个操作,而其中一个操作又被传进来的控制标志所选择时,就产生了逻辑内聚性
⏹其内部操作仅仅是因为控制流,或者说“逻辑”的原因才联系到一起
⏹当同一个子程序中的操作之间无任何联系时,为偶然内聚性
⏹偶然内聚性也叫作“无内聚性”
模块耦合性
⏹模块耦合性
❑耦合性表示相互作用的模块之间的互连程度
❑应尽量降低模块之间的耦合性
⏹强调“松耦合”的目的
❑模块应被设计成可以提供一整套功能,以便程序的其它部分与它清楚地相互作用
耦合分类
⏹无任何连接:
两个模块中的每一个都能独立地工作而不需要另一个的存在(最低耦合)。
⏹数据耦合:
两个模块彼此通过参数交换信息,且交换的仅仅是数据(低耦合)。
⏹控制耦合:
两个模块之间传递的信息有控制成分(中耦合)。
⏹公共环境耦合:
两个或多个模块通过公共环境相互作用
❑一个存数据,一个取数据(低耦合)
❑都存取数据(低--中之间)
⏹内容耦合
❑一个模块访问另一个模块的内部数据
❑两个模块有一部分程序代码重叠
常见的OO耦合
⏹简单数据参数耦合
❑两个对象之间通过参数传递数据,并且为简单数据类型
⏹简单对象耦合
❑一个对象实例化另一个对象所形成的耦合关系
⏹对象参数耦合
❑两个对象之间通过对象参数传递数据
⏹语义上的耦合
信息隐蔽
⏹信息隐蔽有称为“封装”
❑使外部的可见部分和内部的不可见部分相互隔离
⏹信息封装是设计模块和子程序的一种重要方法
❑对于模块而言,封装的部分称为内部信息
公开的部分称为模块的公开信息或接口
7)结构化设计vs.面向对象设计
从模块的角度理解结构化设计和OO设计的区别
❑面向对象设计中的模块与结构化设计中模块的含义是一致的
–数据和功能的封装
–
–满足信息隐蔽的要求
–追求高内聚低耦合
❑结构化设计中模块和模块之间的关系,被紧紧局限于信息流(结构化设计是面向功能)
❑面向对象设计方法,充分挖掘了“关系”的表达方式,可以尽可能的将事物之间复杂的关系予以体现
9)抽象数据类型(ADT)
了解基本概念,能够构造出简单的ADTCC2–6.1节
⏹类的基础:
抽象数据类型
❑类是一组数据和子程序构成的集合,这些数据和子程序共同拥有一组内聚的、明确定义的职责。
❑ADT是指一组数据以及对这些数据所进行的操作的集合
⏹以上两段描述有何本质区别?
❑从数据的角度来看类和ADT没有区别
❑从OO的角度来看,类还涉及到面向对象中的概念
ADT中的数据
⏹抽象数据类型中的“数据”
❑ADT中“数据”的概念很随意
❑ADT中的“数据”可以指任意类(Class)所能描述的实体
需要用到ADT的例子:
文本编辑程序中对字体控制的部分
11)ADT与类的区别
12)
体会ADT和类在概念上有什么区别。
(主要根据ppt上的介绍)
给你一个ADT,构造出相应的类(Java或C++)?
?
体会ADT与类的区别
⏹使用ADT的益处
❑可以隐藏实现细节
❑改动不会影响到整个程序
❑让接口提供更多信息