软件工程 第6章
《软件工程实用教程》第6_章_面向对象的软件设计
第6 章 面向對象的軟體設計
例:
第6 章 面向對象的軟體設計
2.部署圖 部署圖描述了處理器、設備和軟體構件運行時 的體系結構。 ( 1 )結點:是某種計算資源的物理對象,包括電 腦、設備(如印表機、通信設備)等 (2) 連接:連接用一條直線表示,它指出結點之間 存在著某種通信路徑,並指出通過哪條通信路 徑可使這些結點間交換對象或發送消息
第6 章 面向對象的軟體設計
2.詳細設計 (1)細化、補充類的屬性和操作 (2)設計類操作的實現演算法 (3)優化數據訪問路徑 (4)實現外部互動式的控制 (5)調整類結構,增加繼承性 (6)設計類之間的關聯的實現方式 (7)確定對象屬性的精確表示 (8)把類和關聯打包歸納到模組中
第6 章 面向對象的軟體設計
第6 章 面向對象的軟體設計
3)依賴倒置原則:指的是依賴關係應該是儘量依賴介面 (或抽象類),而不是依賴於具體類。在面向對象 的設計中,高層的類往往與領域的業務有關,這些 類只依賴於一些抽象的類或介面,當具體的實現細 節改變時,不會對高層的類產生影響。 4)介面分離原則:指的是在設計時採用多個與特定客戶 類有關的介面比採用一個通用的介面要好。即一個 類要給多個客戶類使用,那麼可以為每個客戶類創 建一個介面,然後這個類實現所有這些介面,而不 要只創建一個介面,其中包含了所有客戶類需要的 方法,然後這個類實現這個介面。
第6 章 面向對象的軟體設計
2.設計基於類的構件 (1)基本設計原則 2)Liskov替換原則:指的是子類可以替 換父類出現在父類能出現的任何地方。 例如,類ClassA要使用ClassB,ClassC 是ClassB的子類。如果在運行時,用 ClassC代替ClassB,則ClassA仍然可以 使用原來ClassB中提供的方法,而不需 要做任何改動。
软件工程导论第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
(完整版)软件工程第六章答案
作业4参考答案1.假设只有SEQUENCE和DO_WHILE两种控制结构,怎样利用它们完成IF_THEN_ELSE操作?答:转化如下:K = 1DO WHILE (条件.AND. K.EQ.1)程序块1K=K+1END DODO WHILE ((.NOT. 条件) .AND. K.EQ.1)程序块2K=K+1END DO2.假设允许使用SEQUENCE和IF_THEN_ELSE两种控制结构,怎样利用它们完成DO_WHILE操作?答:转化如下;label: IF (条件) THEN程序块GOTO labelELSE程序块END IF3.画出下列伪码程序的程序流程图和盒图:STARTIF p THENWHILE q DOfEND DOELSEBLOCKgnEND BLOCKEND IFSTOP答:(1)流程图如图4-1所示:图4-1 从伪码变成的程序流程图(2)该程序的盒图如图4-2所示:图4-2 从伪码变成的程序盒图4.下图给出的程序流程图代表一个非结构化的程序,请问:(1)为什么说它是非结构化的?(2)设计一个等价的结构化程序。
(3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag 的程序;若用了,再设计一个不用flag的程序。
答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。
图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图4-3描绘了等价的结构化程序的盒图。
(a)解法1(b)解法2图4-3 与该图等价的结构化程序(用flag)(3)不使用flag把该程序改造为等价的结构化程序的方法如图4-4所示。
图4-4 与该图等价的结构化程序(不用flag)5.研究下面的伪代码程序:LOOP: Set I to (START+FINISH)/2If TABLE(I)=ITEM goto FOUNDIf TABLE(I)<ITEM Set START to (I+1)If TABLE(I)>ITEM Set FINISH to (I-1)If (FINISH-START )>1 goto LOOPIf TABLE(START)=ITEM goto FOUNDIf TABLE(FINISH)=ITEM goto FOUNDSet FLAG to 0Goto DONEFOUND: Set FLAG to 1DONE:Exit(1)画出程序流程图。
现代软件工程第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章(第4版)
二. 人机界面设计
人机界面设计是接口设计的一个重要的组成部 分。对于交互式系统来说,人机界面设计和数据设 计、体系结构设计及过程设计一样重要。
1.指导规则
T.Mandel在《用户界面设计要素》中,提出了3 条指导规则: 让用户驾驭软件,不是软件驾驭用户 减少用户的记忆 保持界面的一致性
2. 应该考虑的设计问题
4. 人机界面设计指南
(3) 数据输入指南 尽量减少用户的输入动作。 保持信息显示和数据输入之间的一致性。 允许用户自定义输入。 交互应该是灵活的,可调整成用户喜欢的输入方式。 使在当前动作语境中不适用的命令不起作用。 让用户控制交互流。 对所有输入动作都提供帮助。 消除冗余的输入。
三. 过程设计
1.过程设计的目的与任务 目的 确定模块采用的算法和块内数据结构,用某种 选定的表达工具给出清晰的描述。 任务:编写软件的“过程设计说明书” 为每个模块确定采用的算法 (模块的详细过程性 描述) 确定每一模块使用的数据结构 确定模块接口的细节 (包括对系统外部的接口和 用户界面,对系统内部其他模块的接口,以及关 于模块输入数据、输出数据及局部数据的全部细 节)
三. 过程设计
2.过程设计的原则与方法
清晰第一的设计风格 结构化的控制结构 结构程序设计的经典定义为: “如果一个程序的代码块仅仅通过顺序、选择和循环这3 种基本控制结构进行连接,并且每个代码块只有一个入口和 一个出口,则称这个程序是结构化的。” 结构程序设计技术是一种实现在逻辑上正确描述每个模 块的功能,并且使设计出的处理过程尽可能简明易懂的关键 技术,是过程设计的逻辑基础。 逐步细化的实现方法 例:在一组数中找出其中的最大数
(4) 命令交互 命令行现在仍然是许多高级用户偏爱的交互方式。在 多数情况下,用户既可以从菜单中选择软件功能,也可以 通过键盘命令序列调用软件功能。 在提供命令交互方式时,必须考虑下列设计问题: 是否每个菜单选项都有对应的命令? 采用何种命令形式?有3种选择:控制序列(例如Ctrl+P), 功能键和键入命令。 学习和记忆命令的难度有多大?忘记了命令怎么办? 用户是否可以定制或缩写命令? 在理想的情况下,所有应用软件都有一致的命令使用 方法。
软件工程与实践第6章
6.1 6.2 6.3 6.4 6.5 6.6
结构程序设计 人机界面设计 过程设计的工具 面向数据结构的设计方法 程序复杂程度的定量度量 小结
详细设计阶段的根本目标是确定应该怎样具体地实 现所要求的系统。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,以后程序员将根据这个 蓝图写出实际的程序代码。 详细设计的目标不仅仅是逻辑上正确地实现每个模 块的功能,更重要的是设计出的处理过程应该尽可 能简明易懂。 结构程序设计技术是详细设计的逻辑基础。
6.2.3 人机界面设计指南
用户界面设计主要依靠设计者的经验,总结众多设 计者的经验得出的设计指南,有助于设计者设计出 友好、高效的人机界面。下面介绍3类人机界面设 计指南。 1. 一般交互指南 一般交互指南涉及信息显示、数据输入和系统整体 控制,因此,这类指南是全局性的,忽略它们将承 担N-ELSE型分支和 DO-WHILE型循环这3种基本控制结构,则称为经 典的结构程序设计;如果除了上述3种基本控制结 构之外,还允许使用DO-CASE型多分支结构和 DO-UNTIL型循环结构,则称为扩展的结构程序设 计;如果再加上允许使用LEAVE(或BREAK)结构, 则称为修正的结构程序设计。
6.3.6 过程设计语言
过程设计语言(PDL)也称为伪码,它是用正文形 式表示数据和处理过程的设计工具。 PDL应该具有下述特点: (1) 关键字的固定语法,它提供了结构化控制结构、 数据说明和模块化的特点。 (2) 自然语言的自由语法,它描述处理特点。 (3) 数据说明的手段。应该既包括简单的数据结构 (例如纯量和数组),又包括复杂的数据结构(例如, 链表或层次的数据结构)。 (4) 模块定义和调用的技术,应该提供各种接口描 述模式。
软件工程—第6章 面向对象设计—OMT介绍
类库中已有 车辆 OTS 车牌 车牌确认
设计结果: 车辆 OTS 车牌 车牌确认
车辆 车牌确认 车牌 颜色 式样 生产日期 产地 车牌确认
2.用户界面部分(HIC)的设计 • 通常在OOA阶段给出了所需的属性和操作,在设计阶 段必须根据需求把交互的细节加入到用户界面的设计 中,包括有效的人机交互所必需的实际显示和输入。
Coad与Yourdon的方法
主题层 类与对象层 结构层 属性层 服务层
人机 交互
问题 域
数据 管理
任务 管理
问题论域部分包括与所面对的应用问题直接有关的所有 类和对象。 在其它的三个部分中,识别和定义新的类和对象。
1.问题域部分(PDC)的设计 – OOA阶段得到的有关应用的概念模型描述了所要解 决的问题 。在OOD阶段,主要是对OOA产生模型 中的某些类与对象、结构、属性、操作进行组合与 分解,或者增加必要的类、属性和联系。
Coad与Yourdon的方法
1)数据管理方法 – 数据管理方法主要有三种 • 文件管理 • 关系数据库管理 • 面向对象的数据库管理 2)数据管理部分的设计 –数据存储管理部分的设计包括数据存放方法的设计 和相应操作的设计
OMT(object modeling technique)
– OMT是美国通用电气公司在总结其内部多年来采用 OO技术开发实践的基础上提出的一套系统开发方 法学。 – OMT最早是由Loomis,Shan和Rumbaugh在1987 年提出的,曾扩展应用于关系DB设计。 – J.Rumbaugh在1991年正式把OMT应用于OO的分 析和设计。 –它以面向对象思想为基础,通过构造一组相关模型 (对象模型、动态模型和功能模型)来获得关于问 题的全面认识(即问题领域模型),是在实体关系 模型上扩展了类、继承和行为而得到的。
软件工程第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 用户交互子系统的二级数据流图
事务分析
事务分析法可概括为七个步骤:
步骤一、复审基本系统模型; 步骤二、复审并精化软件数据流图; 步骤三、确定数据流图的特征; 步骤四、指出事务中心,确定接收部分和发送部分 的流界; 步骤五、映射出系统上层模块结构; 步骤六、分解并精化事务结构以及每条动作路径所 对应的结构。根据流经每一动作路径的数据流特征, 参考前面所述“变换设计” 相关步骤可以逐一导出 这些子结构.
计算机软件工程第六章 详细设计
PAD图的基本符号
SOFTWARE ENGINEERING
PAD图的基本符号
输入框 输出框 处理框 选择框
重复框(先判 定,再重复) 或 子程序框
重复框(先执行, 后判定,再重复)
定义框
使用PAD图提供的定义功能来逐步求精的例子
• 作业:判定一个数是不是素数的PAD图
SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
盒图的基本符号
SOFTWARE ENGINEERING
§6.2 详细设计的工具
6.2.4 PAD图(Problem Analysis Diagram) 用二维树形结构的图来表示程序的控制流。 优点: ①设计出的程序是结构化程序; ②描绘程序结构清晰; ③表示程序逻辑,易读、易懂、易记;(自上而下, 从左向右顺序执行,遍历所有结点); ④易转换成 语言源程序,可用软件工具自动完成; ⑤也可用于描绘数据结构; ⑥支持自顶向下、逐步求精方法的使用。
例题 根据伪码画出程序流程图、盒图、 PAD图
Start If p1 then while q2 do x end do Else block y z end block End if stop
SOFTWARE ENGINEERING
作业:根据伪码画出程序流程图、盒图、PAD图
Begin Input(a,b,c) i=0 While i<=6 do Begin If a>6 or b>=0 Then c=c+a Else b=c+a End if i=i+1 End End do Print(a,b,c) End
PAD图(问题分析图)
(4)PAD是二维树形结构的图形,程序从图中 最左竖线上端的结点开始执行,自上而下,从 左向右按顺序执行,遍历所有结点; (5)容易将PAD转换成高级语言源程序,该转 换可由软件自动完成,有利于提高软件可靠性 和软件生产; (6)既可用于表示程序逻辑,也可用于描绘数 据结构; (7)PAD的元素支持自顶向下、逐步求精方法 的使用。
自学考试软件工程第6章例题分析与解答
第6章例题分析与解答
一、填空题
1.软件需求分析之后,软件的设计、编码、测试与语言的特性有很大的关系,这个特性主要是语言的______特性。
[答案]技术
2.为了提高程序的易读性,同时减少错误,提高软件开发效率,编码时注意养成良好的_____。
[答案]程序设计风格
3.源程序中加注释是帮助理解程序的重要手段,注释分为_______两类。
[答案]序言性注释和功能性注释
二、选择题
1.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,现在人们更重视程序的( )。
A.技巧性
B.保密性
C.一致性
D.可理解性
[答案]D
2.与选择编程语言无关的因素是( )。
A.软件开发的方法
B.软件执行的环境
C.程序设计风格
D.软件开发人员的知识
[答案]C
3.源程序文档化要求在每个模块之前加序言性注释。
该注释内容不应有( )。
A.模块的功能
B.语句的功能
C.模块的接口
D.开发历史
[答案]B
4.不适合作为数据处理的语言是( )。
A.PROLOG
B.C
C.4GL
D.SQL
[答案]A
5.提高程序效率的根本途径并非在于( )。
A.选择良好的设计方法
B.选择良好的数据结构
C.选择良好的算法
D.对程序语句作调整
[答案]D。
软件工程教学课件chapter-06
object 2
attribute
属性
Another common form: object1
(0, m)
另一种常见形式:
relationship
关系
object 2
(1, 1)
20
建立ERD
第1层——建模所有数据对象(实体) 和它们 与另一个对象的“联系” 第2层——建模所有的实体和关系 第3层——建模所有实体、关系及进一步提 供的属性
不过一旦分离出所有的名词,我们该寻找什么?
24
分析类的证明
分析类表现为如下方式之一:
• 外部实体(例如,其他系统、设备、人员),产生或使用基于 计算机系统的信息 • 事物(例如,报告、显示、字母、信号),问题信息域的一部 分
• 偶然事件或事件(例如,所有权转移或完成机器人的一组移动 动作),在系统操作环境内发生
(3) 我们编写说明应该多详细? (4) 我们如何组织说明?
8
编写什么?
起始和导出——提供了开始编写用例所需要的信息.。 运用需求收集会议、QFD和其他需求工程机制
确定利益相关者 定义问题的范围 说明整体的运行目标 建立优先级顺序 概述所有已知的功能需求 描述系统将处理的信息(对象)。
房主
ent er password and user ID
摄像机
接口
输入密码和用户ID
valid p asswo r d s/ ID
选择主功能
select m ajor f unct ion
o t h er f u n ct io n s m ay also b e select ed
有效的密码/ID
软件工程电子课件第6章 软件维护及软件再工程
2021/1/17
4
6.1.2 软件维护的分类
软件需要进行维护的原因很多,归结起来主要有以下 三种:
Ø (1)故障 Ø (2)环境变化 Ø (3)用户和维护人员的要求
2021/1/17
5
6.1.2 软件维护的分类
由这些原因引进的软件维护活动分为四类,每类维护活 动的任务各不相同。 Ø (1)改正性维护(Corrective maintenance) Ø (2)适应性维护(Adaptive maintenance)
变更的范围能够容易地搞清。 Ø (5)逆向工程和再工程的工具可以使一部分作业自动化。 Ø (6)软件配置将可以在完成预防性维护的基础上建立起来。
2021/1/17
26
6.4.2 软件的逆向工程和再工程
逆向工程是从源代码中抽取出来的设计信息。作为逆向工 程的评价,要求抽取出来的信息的抽象程度越高越好。
结构化维护是在软件开发的早期应用软件工
程方法学的结果。虽然有了软件的完整配置并不
能保证维护中没有问题,但是确实能减少精力的
浪费并且能提高维护的总体质量。
Ø (2)非结构化维护
非结构化维护需要付出很大代价(浪费精力并
且遭受挫折的打击),这种维护方式是没有使用
良好定义的方法学开发出来的软件的必然结果。
2021/1/17
逆向工程中得到的信息抽象层次(从低到高);软件过程的 设计表示、程序和数据结构信息、数据和控制流模型和实体、 关系模型。
2021/1/17
27
6.4.2 软件的逆向工程和再工程
再工程(reengineering),它不仅能从已存在的程序中重新 获得设计信息,而且还能使用这些信息来改建或重构现有的系 统.以改进它的综合质量。一般软件人员利用再工程重新实现 已存在的程序,同时加进新的功能或改善它的性能。
软件工程导论第6章 详细设计2
2、信息显示界面设计
1)、可使用性 ① 使用简单
② 用户界面中所用术语的标准化和一致性 ③ 具有HELP功能 ④ 快速的系统响应和低的系统成本 2)、灵活性
① 提供不同的系统响应信息(多媒体)。 ② 提供根据用户需求制定和修改界面。 3)、界面的复杂性与可靠性 复杂性—界面规模及组织应该愈简单愈好。只显示与当前工作 内容相关的信息。使用窗口分隔不同类型的信息。 可靠性—用户界面应该能够保证用户正确、可靠地使用系统, 及程序、数据的安全。产生有意义的出错信息。
顺序 结构
选择 结构
Case 型多 分支 结构
While 型循环 Until 型 循环
定义
PAD图基本符号
31
使用PAD图提供的定义功能逐步求精的例子
32
例:用PAD图表示:打印50名学生中成绩在 80分以上者的学号和成绩。
开始 i=1 Until i>50 结束
gi>=80
输出ni和gi
i=i+1
使用一种语言(通常是自 然语言)的词汇,同时却 使用另一种语言(某种结 构化语言)的语法。
45
PDL的特点
PDL用正文形式表示数据和处理过程的设计工具,其外层语法是确 定的,而内层语法则不确定。
(1)PDL具有严格的关键字外部语法,用于定义控制结构和数据 结构。外层语法描述控制结构它用类似于一般程序设计语言控制结 构的关键字:
一个菱形判断框有两个出口, 而一个选择结构只有一个出口 。不要将菱形框的出口和选择 结构的出口混淆。)
选择结构二
7
循环结构的图示:
F
F
T
T
当型(While型)循环结构 直到型(Until型)循环
软件工程经济学
传
模
存
块
解
成
达
成
输
块
管
模
模
模
模
模
理
块
块
块
块
块
模
块
图 6.3 按目标或功能属性分解的 WBS 图
明确系统 目标与功 能需求
作项目工 作任务分 解,并完 成WBS结
构图
确定WBS 所对应的 项目任务
结构图
估计软件开 发四个阶段 中各活动的 规模、工作 量成本和进
度(时长)
计算开发团 队的人力投 入总量和各 子团队的人 力投入需求
第6章 软件项目的进度计划制订和团队组织
6.1 基本概念与工作流程
工作(任务)分解结构(WBS)
工作(任务)分解结构(Work Breakdown Structure)是指由一系列软件项目活动所组成的 层次结构
WBS的目的是为进行团队组织,并进而为工作进 度计划制订和成本估算与控制打下基础
WBS的任务分解可以生命周期的阶段/活动为准则, 也可以软件项目的目标或功能属性为准则
g
系统集成与测试
35
b、i、f、h
活动时长估计
(1)
经验法(专家法)。它适用于不少软件项目的公共模块。开发人员曾多次实践 过,不确定因素较少。如数据库模块、报表生成等办公自动化模块等,其模 块时长估计可采用若干专家(或有经验人员)的经验,估计并取算术平均的 方法来解决。即若设 Te 表某活动 e 的活动时长估值(单位:周、月或年),tj 表示第 j 个专家(或有经验人员)对活动 e 的时长估计值,则有
TL(i)= min LS(i, j) j
R(i, j)= LS(i, j)- ES(i, j) R(i)= TL(i)-TE(i)
软件工程第六章
6.4.1、 6.4.1、Booch方法 方法
• 1、类图:类与类之间的相互关系
6.4.1、 6.4.1、Booch方法 方法
• 2、对象图:由对象和消息组成
6.4.1、 6.4.1、Booch方法 方法
• 3、状态图:用于描述某个类的状态空间, 状态的改变和引起状态改变的事件及系统 中类的动态行为
• 1、模块化: • 面向对象的开发方法本身就支持把系统分解 “ 成模块的设计原则 • 2、抽象: • 在面向对象的设计阶段,对象具有极强的抽 象表达能力,类实现了对象的数据和行为的 抽象
6.3.2、 6.3.2、面向对象设计的准则
• 3、信息隐藏: • 信息隐藏即在面向对象的方法中的 “封装 “ 性”,这是保证软件部件具有优良的模块性 的基础。 • 封装性是将对象的属性及操作(服务)结合为一 个整体,尽可能屏蔽对象的内部细节,软件 部件外部对内部的访问通过接口实现
6.3.1、面向对象设计( 6.3.1、面向对象设计(OOD)的概念 )
• OOD 模型的抽象层次较低,但其建模原则和 OOA方法相同。
“ • 它设计出的结果是产生一组相关的类,每个 类都是一个独立的模块,既包含完整的数据 结构(属性),又包含完整的控制结构(服务)。
6.3.2、 6.3.2、面向对象设计的准则
6.2.1、 6.2.1、面向对象分析的特点
• 3、对需求变化有较强的适应性
“
• 构成系统最基本的元素:对象 • 对象的基本特征:封装性
6.2.1、 6.2.1、面向对象分析的特点
• 4、支持软件重用
“
• 面向对象方法的继承性 • 类的完整性、独立性
6.2.2、面向对象分析的基本任务 6.2.2、面向对象分析的基本任务 与务 6.2.2、面向对象分析的基本任务 与分析过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4) 容易将PAD图转换成高级语言源程序,这 种转换可用软件工具自动完成,有利于提高 软件可靠性和软件生产率。 (5) 既可用于表示程序逻辑,也可用于描绘数 据结构。 (6) 支持逐步求精方法的使用。开始时设计者 可以定义一个抽象的程序,使用def符号逐 步增加细节,直至完成详细设计。
图6.6 使用PAD图提供的定义功能 来逐步求精的例子
--- 输入/输出结构 READ/WRITE TO <设备> <I/O表>
PDL语言具有下述优点: (1) PDL描述可以直接作为注释插在源程序 中,有助于保持文档和程序的一致性。 ( 2 )用 PDL 写出的程序,可抽象可具体,易 实现自顶向下逐步求精的设计原则。 ( 3 )同自然语言很接近易于理解。可使用普 通的文字处理系统完成PDL的书写和编辑工作。 (4) PDL描述与程序结构相似,可以利用自 动处理程序自动由PDL生成程序代码。 PDL的缺点是不如图形描述形象直观,因此人 们常常将 PDL 描述与一种图形描述结合起来使用。
副教授
2 T
3 F
4 F
5 F
F
F T × F F ×
T
F F F
F
T F F
F
F T F
讲师 助教
讲座 50 30
25
×
20
15
×
×
教授 副教授 一般授课 课时津贴 讲座 50 讲师 助教
30 25 20 15
教师课时津贴判定树
6.3.6 过程设计语言 PDL 是一种用于描述功能模块的算法设计和 加工细节的语言,使用自然语言的词汇,同时 使用程序设计语言的语法,称为设计程序用语 言。它是一种伪代码(Pseudo code)
输入错误! N
继续查询?
跳出循环
6.3.3 PAD图
问题分析图(Problem Analysis Diagram) 采用二维树形结构图表示程序的控制流。
A
A
P
B
(a)顺序结构
B
(b)选择结构
PAD图的基本符号
WHILE P S
UNTIL P
S
(c) WHILE型循环结构 P1 P2 P= … Pn A1 A2
内层: 采用自然语言短语表示实际操作和条件。 使用数据词典中定义的名字和有限的自定义词, 还可以使用一些简单的算术运算和逻辑运算符 号。
下面是商店业务处理系统中"检 查发货单"的例子
IF 发货单金额超过$500 THEN IF 欠款超过60天 THEN 在偿还欠款前不予批准 ELSE (欠款未超期) 发批准书及发货单 ENDIF ELSE (发货单金额未超过$500) IF 欠款超过60天 THEN 发批准书,发货单及催款通知 ELSE (欠款未超期) 发批准书及发货单 ENDIF ENDIF
(2)、程序块: PDL的过程成分是由块结构构成的,而块将作为 一个单个的实体来执行。 BEGIN <块名> < 一组伪代码语句> END
(3)、子程序结构: 把 PDL 中的过程称为子程序。 PROCEDURE <子程序名> <一组属性> INTERFACE <参数表> < 程序块或一组伪代码语句> END
判定表用于表示程序的静态逻辑,判定表不适于作为 一种通用的设计工具,没有一种简单的方法使它能同 时清晰地表示顺序和重复等处理特性。
要求将程序流程图中的多分支判断都改成两分支判断
6.3.5 判定树
是判定表的变种,也能清晰地表示复杂 的条件组合与应做的动作之间的对应关 系。 形式简单,易于掌握和使用。 分支的次序可能对最终的判定树的简洁 程度有较大的影响。
while i(17-22) end
输出 s[i]
PAD图的主要优点如下:
(1) 使用表示结构化控制结构的PAD符号所设 计出来的程序必然是结构化程序。 (2) PAD图所描绘的程序结构十分清晰,图中 竖线的总条数就是程序的层次数。 (3) 用PAD图二维树形结构表现程序逻辑易读、 易懂。程序从图中最左竖线上端的结点开始 执行,自上而下,从左向右顺序执行,遍历 所有结点。
6.3.4 判定表
建立判定表的步骤
左上部:过程执行期间的所有条件(或所有判 断 )。 左下部:与一个具体过程(或模块)有关的所有 处理。 右上部:各种可能的条件组合。 右下部:每一种条件组合所对应的应做的工作 。
举
例
下面以行李托运费的算法为例:
假设某航空公司规定,乘客可以免费托运重量 不超过30kg的行李。当行李重量超过30kg时, 对头等舱的国内乘客超重部分每公斤收费4元, 对其他舱的国内乘客超重部分每公斤收费6元, 对外国乘客超重部分每公斤收费比国内乘客多 一倍,对残疾乘客超重部分每公斤收费比正常 乘客少一半。用判定表可以清楚地表示与上述 每种条件组合相对应的计算行李费的算法,如 表6.1所示。
6.4 面向数据结构的设计方法
6.4.1 Jackson图 6.4.2 Jackson程序设计方法 退出
6.5 程序复杂程度的定量度量
程序复杂性主要是指模块内部程序的复杂性 。它直接关系到软件开发费用的多少,开发周期 的长短和软件内部潜伏错误的多少。同时它也是 软件可理解性的另一种度量。
程序复杂程度定量度量意义:
零件号
库存量
10001 10002 10003 10004 10005 10006
1000 1250 886 69 2020 3450
建立零件库 (s数组), i=0 输入零件号 x
do while(x!=s[0][i])
i++ Y x==i++ s[0][i]) N
s[0][i] 输出 s[1][i] Y
--- 重复型结构 DO LOOP <条件描述> <程序块/伪代码语句组>; EXIT WHEN ENDLOOP DO FOR <下标=下标表,表达式> <程序块/伪代码语句组>; ENDFOR
----- 多路选择结构
CASE OF <case 变量名>; WHEN < case 条件1> SELECT <程序块/伪代码语句组>; WHEN < case 条件2> SELECT <程序块/伪代码语句组>; … … DEFAULT: < 缺省或错误case: <程序块/伪代码语句组>; ENDCASE
6.3 过程设计的工具
6.3.1 程序流程图 6.3.2 盒图 6.3.3 PAD图 6.3.4 判定表 6.3.5 判定树
6.3.6 过程设计语言
过程设计工具
过程设计的任务:在使用程序设计语言编制 程序以前,需要对所采用算法的逻辑关系进 行分析,设计出全部必要的过程细节,并给 予清晰的表达。 在过程设计阶段,要决定各个模块的实现算 法,并精确地表达这些算法。表达过程规格 说明的工具叫做详细设计工具,它可以分为 以下三类: 图形工具 表格工具 语言工具
(d) UNTIL型循环结构
(f)语句标号
An
(g)定义
(e) 多分支结构
举
例
begin
s[17]~s[22]=0 while num(1-1000) 输入 age =17 =18 s[17]++ s[18]++ s[19]++ s[20]++ s[21]++
age
=19 =20 =21 =22
s[22]++
伪代码----文字形式的表达工具,不能在计算机上执行, 但形式上与代码相似。用它来描述程序的结构,工作量 要比画图小,又比较容易转换真正的代码。
PDL -----关键词+自然语言
结构化语言的结构分为外层和内层:
外层: 具有严格的关键字外语法,用于定义控制 结构和数据结构。包括有简单陈述句、判定和 重复结构等三种。
第一个任务 第二个任务 第三个任务 (a) 顺序结构 循环条件 DO_WHILE 部分
F ELSE 部分
条件 THEN 部分
T 值1
Case 条件 值2 „ 值n Casen 部分 Case1 Case2 部分 部分 (c) 多分支结构
(b) 选择结构
DO_UNTIL 部分 循环条件
A
(d) 循环结构
X=S[0][i]
F
提示输入错误
Y 输出S[0][i]和S[1][i] 结束
输入零件号X X!=S[0][i]
i++
X
程序流程图的随意性和灵活性使它存 在一些缺点:
( 1 )并不是逐步求精的好工具:诱使程序 员过早地考虑程序的具体控制流程,而忽略了程 序的全局结构; ( 2 )用箭头代表控制流,这样使得程序员 不受任何约束,可以完全不顾结构程序设计的精 神,随意转移控制; ( 3 )程序流程图在表示数据结构方面存在 不足。
(4)、基本控制结构: IF <条件> THEN <程序块/伪代码语句组>; ELSE <程序块/伪代码语句组>; ENDIF
--- 选择型结构
--- 重复型结构
DO WHILE <条件描述> <程序块/伪代码语句组>; ENDDO REPEAT UNTIL <条件描述> <程序块/伪代码语句组>; ENDREP
设该模块为查询模块。请设计该模块的 程序结构。具体要求: 1、应具有重复查询功能; 2、应具有数据检测功能; 3、请利用程序流程图描述该模块的算法。