烟台大学软件工程课件第7章
软件工程第7章ppt资料
复杂问题(大型系统)的对象模型由下 述五个层次组成:主题层(也称为范畴层)、 类与对象层、结构层、属性层和服务层, 如图7.1
Page 7
河南理工大学
2020/10/12
Page 8
图7.1 复杂问题的对象模型
河南理工大学
2020/10/12
我们在概念上可以认为,面向对象分析大 体上按照下列顺序进行:
Page 12
河南理工大学
2020/10/12
7.2 需求陈述
7.2.1
通常,需求陈述的内容包括:问题范 围,功能需求,性能需求,应用环境及假 设条件等。总之,需求陈述应该阐明“做 什么”而不是“怎样做”。
Page 13
河南理工大学
2020/10/12
它应该描述用户的需求而不是提出解 决问题的方法。应该指出哪些是系统必要 的性质,哪些是任选的性质。应该避免对 设计策略施加过多的约束,也不要描述系 统的内部结构,因为这样做将限制实现的 灵活性。
寻找类—&—对象, 识别结构, 识别主题, 定义属性, 建立动态模型,建立功能模型, 定义服务。
但是,正如前面已经多次强调指出过 的,分析不可能严格地按照预定顺序进行, 大型、复杂系统的模型需要反复构造多遍 才能建成。通常,先构造出模型的子集, 然后再逐渐扩充,直到完全、充分地理解 了整个问题,才能最终把模型建立起来。
Page 5
河1.2 三个子模型与五个层次
面向对象建模得到的模型包含系统的三个要素:
即静态结构(对象模型),交互次序(动态模型)和数据 变换(功能模型)。解决的问题不同,这三个子模型的重 要程度也不同: 几乎解决任何一个问题,都需要从客观世界实体及实体 间相互关系抽象出极有价值的对象模型; 当问题涉及交互作用和时序时(例如,用户界面及过程 控制等),动态模型是重要的; 解决运算量很大的问题(例如,高级语言编译、科学与 工程计算等),则涉及重要的功能模型。动态模型和功 能模型中都包含了对象模型中的操作(即服务或方法)。
软件工程全ppt课件
程方法开发出成本低、可靠性好并在机器上能高
韩
效运行的软件,为今后从事软件开发和维护打下
静
坚实的基础。
萍
2019/10/20
哈
尔
滨
工
课程主要内容
业 大 学
本课程比较全面、系统地介绍软件工程的概念、技术 与方法。
主要内容包括:软件工程概述、软件生存周期及软件
需求分析、软件设计方法、软件测试技术等。
通过本课程的学习,使学生能真正的从中了解软件开
韩
静 萍
检索教材 帐本是 否有该 教材
开购书发 票和购 书单
购书单 购书发票
2019/10/20
哈
计算机售书系统流程图
尔
滨
工
学生
1---学生各学期用书数据库
业
2---教材存量数据库
大
购书单
学
终端
结束
购书发票
韩
审查并
静 萍
开发票
购书单
到书库 领书
1
2
2019/10/20
练
哈
习
请画出由下列文字描述的系统流程图
研制期限 产品规模(源代码行数)
微型
1
1-4周
约500行
小型
1
1-6周
约2000行
韩
中型
2-5
1-2年
5000-50000行
静
大型
5-20
2-3年
5万-10万行
萍
甚大型
100-1000
4-5年
100万行
极大型
2000-5000 5-10年
1000万行
2019/10/20
哈
尔
软件工程课件第07章
软件工程
主编 曹哲 高诚 中国水利水电出版社
1
h
软 件 设 计:
BeiHuaZLL
是后续开发步骤及软件维护工作的基础。 如果没有设计,只能建立一个不稳定的系 统结构
2
h
软件工程
BeiHuaZLL
第7章 软件设计基础
概念
基本概念
设计 过程
设计 工具
3
说明 与评审
h
7.1.1 软件设计过程
BeiHuaZLL
结构设计
概过要程设设计计 详细设计 数据设计
完成每管理角一与部技术角件的过程化数描据述设计 把信度息描度述转换为实TT过ee现xxtt 程软设件计所
结构设计 确定要程求序的各数主据要结部构件之间的关系
概要设计 详细设计 根框将算据架法需“概表求设示确”4和定数结软据果件结进和构一数步据精的化总成体 h
输入职
职工档案
生成职工档
程序O、程工序档段案、子程序管理系统
案报表系统 模块总数
一个功能、易理解、独立
9
h
信息隐藏
BeiHuaZLL
模块内所含信息对那些不需要这些信息的模块不可 访问,每个模块只完成一个相对独立的特定功能。
模块独立性(Module independence) 好设计的关键:每个模块完成一个相对独立的子功能, 并且与其它模块间的接口简单。
13
h
七种“内聚模块”的性能比 较 BeiHuaZLL
形式
偶然 逻辑 时间 过程 通信 顺序 功能
评价
最坏 最坏 不好 中 中 好 好
可修 改性
最坏 最坏 不好 中 中 好 好
可读性
最坏 不好 中 中 中 好 好
软件工程全部课件-07 章实现A
程序设计风格
源程序文档化
源程序文档化包括标识符的命名、安排注释
以及程序的视觉组织等。
17
标识符包括模块名、变量名、常量名、标号名、子程序名以 及数据区名、缓冲区名等。这些名字应能反映它所代表的实 际东西,使其能够见名知意,有助于对程序功能的理解。选
取含义鲜明的名字,使它能正确地提示程序对象所代 表的实体
(3)注释要正确。
23
程序设计风格
视觉组织—空格、空行和移行
空格:恰当地利用空格,可以突出运算的优
先性,避免发生运算的错误。例如,将表达 式
(a<-17)&&!(b<=49)||c
写成
(a<-17) && !(b<=49) || c
就更清楚。
空行:自然的程序段之间可用空行隔开。
24
程序设计风格
12
高级语言优点:
生产率高, 程序容易阅读,容易测试,容易调试, 容易维护
选择高级语言的理想标准: 为了使程序容易测试和维护以减少软件的总成本,所选用的高 级语言应该有理想的模块化机制,以及可读性好的控制结构和 数据 结构; 为了便于调试和提高软件可靠性,语言特点应该使编译程序能 够尽可能多地发现程序中的错误; 为了降低软件开发和维护的成本,选用的高级语言应该有良好 的独立编译机制。
根据设计去完成编码时,困难最少; 可以减少需要的程序测试量; 可以得到更容易阅读和更容易维护的程序。 7.1.1 选择程序设计语言
第7章
实现
4
7.1.1 程序设计语言
程序设计语言的性能
从软件心理学及软件工程角度对程序设计语
言的性能进行讨论。
5
程序设计语言
软件心理学的观点
《软件工程教案》课件
《软件工程教案》PPT课件第一章:软件工程概述1.1 软件工程的定义解释软件工程的含义和目的强调软件工程的重要性和应用范围1.2 软件工程的基本原则介绍软件工程的基本原则,如模块化、抽象化、逐步求精等解释这些原则在软件开发中的应用和意义1.3 软件工程的发展历程概述软件工程的发展历程和重要里程碑介绍软件工程的发展趋势和未来挑战第二章:软件需求分析2.1 需求分析的重要性强调需求分析在软件开发中的作用和必要性解释需求分析的目标和基本概念2.2 需求收集和分析方法介绍需求收集和分析的方法和技术,如访谈、问卷调查、用例分析等强调有效需求分析和需求管理的关键因素2.3 需求规格说明书编写介绍需求规格说明书的结构和内容强调需求规格说明书的重要性和在软件开发中的作用第三章:软件设计3.1 软件设计的基本概念解释软件设计的含义和目标强调软件设计的重要性和在软件开发中的作用3.2 软件设计方法和工具介绍软件设计方法和工具,如结构化设计、面向对象设计、设计模式等强调选择合适的设计方法和工具的关键因素3.3 软件设计文档编写介绍软件设计文档的类型和内容强调软件设计文档的重要性和在软件开发中的作用第四章:软件实现4.1 软件实现的基本概念解释软件实现的含义和目标强调软件实现的重要性和在软件开发中的作用4.2 编程语言和工具介绍常用的编程语言和开发工具强调选择合适的编程语言和开发工具的关键因素4.3 代码质量和编程规范强调代码质量和编程规范的重要性介绍代码质量和编程规范的评估和实施方法第五章:软件测试5.1 软件测试的基本概念解释软件测试的含义和目标强调软件测试的重要性和在软件开发中的作用5.2 测试方法和策略介绍常用的测试方法和策略,如黑盒测试、白盒测试、集成测试等强调选择合适的测试方法和策略的关键因素5.3 测试用例设计和测试执行介绍测试用例设计和测试执行的方法和技巧强调测试用例的重要性和在软件测试中的作用第六章:软件维护6.1 软件维护的基本概念解释软件维护的含义和目的强调软件维护的重要性和类型,如改正性维护、适应性维护等6.2 软件维护的挑战和策略介绍软件维护所面临的挑战和问题强调有效的软件维护策略和方法6.3 软件维护过程和工具介绍软件维护的过程和阶段介绍常用的软件维护工具和技巧第七章:软件项目管理7.1 软件项目管理的基本概念解释软件项目管理的含义和目标强调软件项目管理的重要性和在软件开发中的作用7.2 软件项目管理的过程和活动介绍软件项目管理的过程和活动,如项目规划、监控、沟通等强调项目管理人员和团队的角色和职责7.3 软件项目风险管理和质量保证介绍软件项目风险管理和质量保证的方法和技巧强调风险管理和质量保证在软件项目管理中的重要性第八章:软件工程标准和法规8.1 软件工程标准的基本概念解释软件工程标准的含义和目的强调软件工程标准的重要性和应用范围8.2 主要的软件工程标准和组织介绍主要的软件工程标准和组织,如IEEE、ISO等强调这些标准和组织对软件工程发展的影响8.3 软件工程法规和伦理介绍软件工程法规和伦理的相关内容强调软件工程师的职业责任和伦理道德第九章:软件工程工具和技术9.1 软件工程工具和技术的分类介绍软件工程工具和技术的分类及作用强调选择合适的工具和技术的关键因素9.2 建模工具和技术介绍常用的建模工具和技术,如UML、ER图等强调建模在软件工程中的重要性和应用9.3 软件开发环境和集成开发工具介绍软件开发环境和集成开发工具的基本概念强调集成开发工具在软件工程中的作用和优势第十章:软件工程前沿技术10.1 软件工程前沿技术的概述介绍软件工程前沿技术的研究方向和发展趋势强调关注前沿技术对软件工程师的重要性10.2 和机器学习在软件工程中的应用介绍和机器学习的基本概念强调这些技术在软件工程中的潜在应用和挑战10.3 软件工程与其他领域的交叉融合介绍软件工程与其他领域的交叉融合,如生物学、心理学等强调跨学科研究对软件工程发展的影响和意义重点和难点解析重点环节1:软件工程的基本原则和原则在软件开发中的应用解析:软件工程的基本原则是软件工程学的核心,理解并掌握这些原则对于软件开发至关重要。
《软件工程》课件 第7章实现
2014年春 • 软件工程
一般语言的项目应用领域
2014年春 • 软件工程
7.1.2
编码风格
源程序代码的逻辑简明清晰、易读易懂是好程序 的一个重要标准 源程序文档化 数据说明 语句结构 输入/输出方法
注:参考Java语言编程规范
2014年春 • 软件工程
1. 源程序文档化
标识符的命名
2014年春 • 软件工程
黑盒测试例
2014年春 • 软件工程
白盒测试例
2014年春 • 软件工程
7.2.4
测试步骤
1.单元测试 又称模块测试。每个程序模块完成一个相对独立的子功 能,所以可以对该模块进行单独的测试。由于每个模块都有 清晰定义的功能,所以通常比较容易设计相应的测试方案, 以检验每个模块的正确性。 2.集成测试
例2:程序段功能是交换元素a[j]和a[j+1]。为少一个变量程序的易读性差。 a[j] :=a[j] + a[j+1]; a[j+1] := a[j] - a[j+1]; a[j] :=a[j] - a[j+1]; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
应改为:
为了改善程序的易读性,应采用直截了当的描述方式。
测试只能证明程序中有错误,不能证明程序中没有错误。 (6)为了达到最佳的测试效果,应该由独立的
第三方从事测试工作。
2014年春 • 软件工程
7.2.3
测试方法
软件测试方法一般分为:静态测试和动态测试。
静态测试是指被测程序不在机器上运行,采用人 工检测和计算机辅助静态分析的手段对程序进行 检测。 动态测试是指通过运行程序发现错误,又分黑盒 测试和白盒测试两种。
《软件工程》课件
在这个世界上,软件工程是一门非常重要的学科。本课程将介绍软件工程的 基础知识、项目管理、质量保证、工具与环境以及案例分析等方面内容。
软件工程概述
什么是软件工程?
软件工程是通过系统性和科学的方法开发、维护和管理软件的学科。
软件工程的价值和重要性
软件工程可以提高软件开发的效率和质量,帮助提升组织的竞争力。
2
管理、时间管理和成本管理等。
讨论如何建立高效的团队和管理各类软件
项目人员。
3
软件项目计划和进度管理
探讨如何合理进行项目计划和进度管理, 以提高项目的成功率。
软件质量保证
1 软件质量保证基础概念
2 软件配置管理
介绍软件质量保证的基本原则和方法。
讨论如何有效管理软件版本和配置。
3 软件性能测试
探讨如何评估和改进软件的性能。
软件工程的发展历程
从早期的编程到现代软件工程方法的演变。
软件工程基础
软件过程模型
介绍不同的软件开发方法和流程。
软件需求工程
讨论如何理解和分析用户需求, 以及编写有效的需求文档。
软件设计
讲解软件设计原则和常用的设计 模式。
软件项目管理
1
软件项目管理基础
介绍项目管理的基本概念和方法,如范围
软件项目组织和人员管理
软件工具与环境
软件工具的分类和使用
介绍常用的软件开发工具和使用方 法。
集成开发环境
讲解集成开发环境的优的软件配置管理工具和其 功能。
软件工程案例分析
软件工程实践案例分析
分析真实世界中的软件工程实践案例,探讨其成功和 教训。
软件工程应用实例分享
分享软件工程在不同领域的应用案例,如金融、医疗 和智能制造等。
软件工程第七章PPT资料(正式版)
此时,应当再设计与执行一些测试用例,以获得更多的数据。
调试(Debug)
❖软件调试是在进行了成功的测试之后才 开始的工作。它与软件测试不同,调试 的任务是进一步诊断和改正程序中潜在 的错误。
❖调试活动由两部分组成:
▪ 确定程序中可疑错误的确切性质 和位置。
▪ 对程序(设计,编码)进行修改,排 除这个错误。
▪ 现象实际上是由一些非错误原因 (例如,舍入不精确)引起的。
▪ 现象可能是由于一些不容易发现 的人为错误引起的。
▪ 错误是由于时序问题引起的,与 处理过程无关。
▪ 现象是由于难于精确再现的输入 状态(例如,实时应用中输入顺 序不确定)引起。
▪ 现象可能是周期出现的。在软、 硬件结合的嵌入式系统中常常遇 到。
或某些有关测试。 修改错误的过程将迫使人们暂时回到程序设计阶段。
利用某些程序语言的调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改程序。
❖从技术角度来看,查找错误的难度在于:
▪ 现象与原因所处的位置可能相距 甚远。
▪ 当其它错误得到纠正时,这一错 误所表现出的现象可能会暂时消 失,但并未实际排除。
几种主要的调试方法
调试的关键在于推断程序内部的错误位 置及原因。可以采用以下方法:
强行排错 这种调试方法目前使用较多,效率较低。
它不需要过多的思考,比较省脑筋。例 如:
▪ 通过内存全部打印来调试,在这 大量的数据中寻找出错的位置。
▪ 在程序特定部位设置打印语句, 把打印语句插在出错的源程序的 各个关键变量改变部位、重要分 支部位、子程序调用部位,跟踪 程序的执行,监视重要变量的变 化。
(-10,-10,10) ……
它不需要过多的思考,比较省脑筋。
第7章软件工程全解PPT课件
D.9
11
7.2面向对象技术基础
• 考点:面向对象分析与设计的基本概念,包括对象,类, 消息,继承,多态等
• 一、基本概念 1.对象 2.消息 3.类 4.继承 5.多态 6.动态绑定
12
• 二、面向对象分析与设计基本概念 1.面向对象分析(OOA):建立待开发软件系统的模型 2.面向对象设计(OOD):定义系统构造蓝图,并根据系
• A.这三个对象所存储的数据一定是不同的 • B.这三个对象所存储的数据一定是相同的 • C.这三个对象一定具有相同的操作 • D.这三个对象无法共享数据 • 2.下列关于超类,子类,基类的叙述中,正确的是 A • A.子类是超类的特化 B.基类是超类的特化 • C.基类是子类的特化 D.超类是基类的特化
描述了谁将使用系统以及用户期望以什么方式与系统交 互。 序列图:描述了在一个用例或操作的执行过程中以时间顺 序组织的对象之间的交互活动 通信图:强调收发消息的对象之间的结构组织。
14
• 状态图:展现了一个状态机,由状态、转换、事件和活 动组成,用于建模时间如何改变对象的状态以及引起对 象从一个状态向另一个状态转换的事件。
3
7.1 软件工程和项目管理基础
➢考点:软件工程和软件生存周期的概念,软件开 发 项目管理的基础知识
➢一、软件的生存周期 可行性分析和项目开发计划; 需求分析 软件设计 编码 测试和维护
4
二、软件开发项目管理基础知识
➢ 1.成本估算 (1)自顶向下估算方法 (2)自底向上估算方法 (3)差别估算方法
_7iX7n3C0yKIn5eejUpBn4dVAPMttK8UcWRNKHAQneYpivigBd aVWD_c5d0foeYRW_0RwIWSuZ4aBHMLkQq • 3.加工逻辑(小说明) • 1.结构化语言 • 2.判定表 • 3.判定树
软件工程 第7章1 ppt
◆ 合法输出的等价类有: (9) 在计算机能表示的最小负整数和零之间的 负整数; (10) 零; (11) 在零和计算机能表示的最大正整数之间的 正整数; ◆ 非法输出的等价类有: (12) 比计算机能表示的最小负整数还小的负整数; (13) 比计算机能表示的最大正整数还大的正整数。
根据上面划分出的等价类,可以设计出下述测试方案: (1) 1~6个数字组成的数字串,输出是合法的正整数; 输入:’ 1’ 预期的输出:1 (2) 最高位数字是零的数字串,输出是合法的正整数; 输入:’000001’ 预期的输出:1 (3) 负号与最高位数字紧相邻,输出是合法的负整数; 输入:’-00001’ 预期的输出:-1 (4) 最高位数字是零,输出也是零; 输入:’000000’ 预期的输出:0
7-5 某图书馆有一个使用CRT终端的信息检索系统,该系统有下列4个基本检索 命令
要求: (1) 设计测试数据以全面测试系统的正常操作; (2) 设计测试数据以测试系统的非正常操作。
答:(1)测试系统正常操作的测试数据 1) 顺序执行下列3个命令: Browse( keyword ) Select( L ) Display( N ) 其中,keyword是正确的关键字;L是执行命令browse后 屏幕上显示的约20个行号中的一个;N是执行命令S后列 出的索引号中的一个。 2)顺序执行下列2个命令: Find( name ) Display( N ) 其中,name是已经的作者姓名;N是执行命令find后列 出的索引号中的一个。 针对若干个不同的name重复执行上述命令序列。
2. 回溯法 ◆ 回溯是一种相当常用的调试方法; ◆ 具体做法是,从发现症状的地方开始,人工沿 程序的控制流往回追踪分析源程序代码,直到 找出错误原因为止; ◆ 当调试小程序时这种方法是有效的,但是,随着 程序规模扩大,应该回溯的路径数目也变得越 来越大,以至彻底回溯变成完全不可能了。
软件工程课件(全)
2013-8-19
3、按软件开发划分
软 件 项 目 开 发 软 件 产 品 开 发
2013-8-19
1.2 软件工程的概念及范畴
1、“软件工程” ----Software Engineering
于1968年 NATO 组织在 德国召开的一次会议上提出
是把软件当作一种工业产品,要求 “采用工程化的 原理与方法对软件进行计划、开发和维护 ”。
每天醒来的时候,要对技术给生活造成的改变 始终拥有一份 激情。
2013-8-19
3、软件的演变(即从传统软件开发到现代软件开发)
程序
软件
软件产品 现代软件开发
传统软件开发
240 80 0.00016 1975
营业额 增长曲线
1989
2000
2013-8-19
1.3 软件生存周期 (SW life cycle)
软件工程是计算机科学与技术专业的一门专 业核心课程。通过本课程的学习,使学生掌握系 统的软件开发理论、技术和方法,使用正确的工 程方法开发出成本低、可靠性好并在机器上能高 效运行的软件,为今后从事软件开发和维护打下 坚实的基础。
2013-8-19
课程主要内容
本课程比较全面、系统地介绍软件工程的概念、技术 与方法。 主要内容包括:软件工程概述、软件生存周期及软件 需求分析、软件设计方法、软件测试技术等。 通过本课程的学习,使学生能真正的从中了解软件开 发的整个过程。为了让学生真正得以实践,结合实际软件 开发项目,让学生从问题定义开始,经过可行性研究、需 求分析、概要设计、详细设计、编码直到最后要对自己开 发的软件还要进行测试,这样一个软件开发过程,从而使 学生掌握软件开发的基本技能。
修改点 失 效 率 磨合 调整 磨损 用坏 失 效 率 实际曲线
软件工程(完整ppt教程)
1.2 软件工程
• 1.2.1 软件工程的介绍 1968年NATO会议:软件工程就是为了经济地获 得可靠的且能在实际机器上有效地运行的软件, 而建立和使用完善的工程原理。
1993年IEEE:软件工程是(1)把系统的、规范 的、可度量的途径应用于软件开发、运行和维护 过程;(2)研究(1)中提到的途径。
1.4 软件过程
•软件过程:为了获得高质量软件所需要完成的 一系列任务的框架,它规定了完成各项任务的工 作步骤。 •软件过程(ISO9000):使用资源将输入转化为 输出的活动所构成的系统。 •输入:如软件需求 •输出:如软件产品
• 1.4.1 瀑布模型
1. 阶段间具有顺序性和 依赖性
2. 推迟实现的观点 3. 质量保证的观点
•2)经济可行性 • 对经济合理性进行评价,所要考虑的问题是: • 这个系统的经济效益能否超过它的开发成本? • 这就需要对项目进行价格/利益分析,即“投入 /产出”分析。 • 由于利益分析取决于软件系统的特点,因此在 软件开发之前,很难对新系统产生的效益作出精 确的定量描述,所以往往采用一些估算方法。
优点:采用规范的
方法;严格规定每 个阶段提交的文档; 要求每个阶段交出 的产品必须经过验 证。
• 1.4.2 快速原型模型
• 优点:不带反馈环,基本 上是线性顺序进行。
1.4.3 增量模型
优点:能较短时间内提交可完成部分工作的产品;可以使用 户有充裕的时间学习和适应新产品。
• 一种风险更大的增量模型:
A
B+ T
C
A
附加符号
B
T*
C B
T+
C
• 注意:
• “处理”可表示:单个程序、一系列程序、程 序的一个模块、人工处理过程等等;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即使出现必须修改设计的情况,也应该使修改的范围尽可 能小
7.2 面向对象设计建模
基于面向对象的分析阶段结束,即可以开始面向对 象的设计。 面向对象的设计主要是考虑“如何实现”的问题, 其关注的焦点是从问题空间转移到解空间,着重完 成各个不同层次的模块设计。 因此设计不仅要说明为实现需求必须引入的类、对 象以及它们之间是如何关联的,描述对象间如何传 递消息和对象行为如何实现,还需要从提高软件设 计质量和效率等方面考虑如何改进类结构和可复用 类库中的类。
模块内部成分的组合纯属偶然。
低内聚 偶然内聚(Coincidental Cohesion)
一些无任何联系语句可能在多个模块中重复多次,为节省 存储,把它们抽出来组成一个新的模块。 缺点(1)不易修改和维护 (2) 模块的内容不易理解,很难描述所完成的功能, 增加程序的模糊。 (3)可能会把一个完整的程序段分割到许多模块内, 在程序运行过程中将会频繁地互相调用和访问数据。
设计简单的类
避免包含过多的属性
有明确的定义
尽量简化对象之间的合作关系 不要提供太多服务
使用简单的协议
一般说来,消息中的参数不要超过3个。
经验表明,通过复杂消息相互关联的对象是紧耦合的,对 一个对象的修改往往导致其他对象的修改。
使用简单的服务
一般说,应该尽量避免使用复杂的服务。
若模块的所有输入都是实现功能必不可少的,所 有输出都有动作产生,即成为定义明确的模块。 可重复使用的软件组件。
软件构件(Software Component)
现有的可复用构件,大多是在对象的基础上创建。
2、抽象与细化
抽象
提取客观世界中一群事物的某些本质共性,而暂 时忽略他们的非本质的细节,是一个从特殊到一 般的过程。 分层次考虑和处理问题(数据和过程) 过程抽象:把完成一个特定功能的动作序列抽象 为一个过程名和参数表,以后通过指定过程名和 实际参数调用此过程。 数据抽象:把一个数据对象的定义抽象为一个数 据类型名,用此类型名可定义多个具有相同性质 的数据对象。
中耦合
控制耦合
在模块间传递的信息是用作控制信号的开关值或标志 量。 控制模块必须知道被控制模块的内部逻辑,从而增强 了模块间的相互依赖。
读入分数 平均 / 最高 ?
控制 信号
计算平均分 输出结果
计算最高分
较强耦合
外部耦合
允许一组模块访问同一个全局变量 允许一组模块访问同一个全局性数据结构
7.1.2 软件设计的任务
软件设计的任务
把分析阶段产生的软件需求说明转换为用适当手段 表示的软件设计文档。----解决“如何做” 的问题
数据设计:信息模型 软件数据结构; 体系结构设计:定义软件主要组成部件之间的关系; 接口设计:软件内部、外部及与人之间的通信 (数据流和控制流) 过程设计:将软件体系结构的组成部件转变为对软 件组件的过程性描述。
设计策略
在使用面向对象方法学开发软件的实践中,得出了下 面一些基于经验的启发规则,这些规则往往能帮助软件开 发人员设计出好的方案来,以保证软件的质量。 (1)设计结果应该清晰易懂 (2)一般-特殊结构的深度应适当 (3)设计简单的类 (4)设计简单的协议 (5)设计简单的服务 (6)减少设计变动
设计结果应该清晰易懂
低内聚
偶然内聚(巧合内聚) A 例:
M MOVE READ MOVE O
B
C
TO R FILE F S TO T
模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差
低内聚
逻辑性内聚
由若干个逻辑功能相似的成分组成。 执行时须从模块外引入判断量,增大块间耦合。
读入分数
平均 / 最高 ? 计算平均分 输出结果 计算最高分
例如:初始化系统模块、 系统结束模块、 紧急故障处理模块等均是时间性聚合模块.
中内聚
过程性内聚
模块中包含的一组任务必须按照某一个特定 的次序执行。
建立方程组系数矩阵
高斯消去法
回 代
中内聚
通信性内聚
模块内部的各成分使用同一种数据输入,或产生同一个数 据输出。
他们靠公用数据连接在一起。
开领 书单 发票 登记 售书
目的
4、软件复用
Design with reuse, design for reuse 很久以来,人们都盼望着软件可以复用; 使开发人员能充分利用已有的现成构件,不 必一切从头做起; OO技术的流行加快了这一理想的实现,今 天软件复用已经成为软件开发,尤其是软件 设计中的一项重要活动,使软件复用与软件 设计结下了不解之缘,上升为软件设计中的 又一基本策略。
内容
7.1.3模块化设计
定义
把大型软件按照规定的原则划分成一个个较小的、 相对独立但又相互关联的模块。 分解 模块独立性 分解 模块独立性 自顶向下与由底向上
指导思想
内容
1.分解
分解是处理复杂问题的常用方法
传统软件工程:利用分解画分层DFD图; 设计阶段:利用分解实现模块化设计; OO软件工程:利用分解划分类和对象。
模块成本 模块数
2.模块独立性
概括了把软件划分为模块时要遵守的准则,也是判断 模块构造是不是合理的标准。坚持模块的独立性,是 获得良好设计的关键。 衡量标准 模块本身的内聚 模块内部各个成分之间的联系 又称块内联系或模块强度 模块间的耦合 一个模块与其他模块之间的联系 又称块间联系 模块独立性越高,块内联系越强,块间联系越弱。
7.2.2面向对象设计的任务
系统架构设计 系统高层结构设计 确定设计元素 确定任务管理策略 实现分布式机制 设计数据存储方案 系统元素设计 类/对象设计 子系统设计 包设计
7.2.3模式的应用
模式定义:解决某一问题的方法论,对通用问题的通用解 决方案。 目的:把某类问题的方法总结,供其他人员参考或直接套 用。 软件模式分类 架构模式:软件系统的基本结构组织方案。提供一组预定 义的子系统,指定职责以及组织间关系的指导规则。 设计模式:提供对面向对象的具体设计问题的解决方案, 使结果具有良好的可扩展性和重用性。 习惯用法:针对具体程序设计语言的使用模式。
7.2.1面向对象的设计模型
属性、操作、协作者
类/对象 模型
对象-关 系模型
责任设计 消息设计
类及对象设计 子系统设计
用例模型
对象-行为模型
系统架构设计是描述整个系统的总体结构,使
得所设计的软件能够满足客户定义的需求,并实 现支持客户需求的技术基础设施。
类及对象设计包含每个对象的设计表示, 以及类层次关系。 消息设计描述对象间的消息模型,建立系 统的外部和内部接口,也包括每个对象和 其他协作者通信的细节。 责任设计则是针对每个对象的所有属性和 操作的数据结构和算法的设计。
如果一个服务中包含了过多的源程序语句,或者语句嵌套 层次太多,或者使用了复杂的CASE语句,则应该仔细检 查这个服务,设法分解或简化它。
如果需要在服务中使用CASE语句,通常应该考虑用一 般——特殊结构代替这个类的可能性。
把设计变动减至最小
通常,设计的质量越高,设计结果保持不变的时间也越长。
用词一致
使用已有的协议
减少消息模式的数目 避免模糊的定义
一般——特殊结构的深度应适当
应该使类等级中包含的层次数适当。
一般说来,在一个中等规模(大约包含 100个类) 的系统中,类等级层次数应保持为7±2。
不应该仅仅从方便编码的角度出发随意创建派生类,应该 使一般——特殊结构与领域知识或常识保持一致。
领书单
删除
文 件 修改
售书登记表
高内聚
顺序性内聚/信息内聚
各个功能都在同一数据结构上操作,每项功能有唯一的入口
点。如对符号表有查找、登录、删除、修改等操作,把查找、
登录、删除、修改等功能设计在一个模块中,以实现信息的 隐蔽。
功能性内聚
模块中的所有的成分结合在一起,用于完成一个单一的功能。
功能性内聚最强,与其他模块联系少,最优 其他的高内聚和中内聚模块也可以使用 低内聚模块尽量避免使用
(2). 耦合
非 直 接 耦 合 数 据 耦 合
coupling
特 征 耦 合 控 制 耦 合 外 部 耦 合 公 共 耦 合 内 容 耦 合
耦合是对软件内部块间联系的度量。
1
2
3
4
5
6
7
弱耦合
逻辑内聚模块
A E B F C G E、F、G逻辑 功能相似,组 成新模块EFG C A1 B1 C1 公用代码段
A
B
公用代码段
EFG模块内部逻辑 EFG 缺点:增强了耦合程度(控制耦合) 不易修改,效率低
低内聚
时间性内聚
模块所包含的成分,是由相同的执行时间将他 们连接到一起。
要求在同一时间内执行。
公共耦合
A
L
公共耦合图示
B C N
D
强耦合
内容耦合
一个模块可以直接调用另一模块中的数据,或者允
许一个模块直接转移到另一个模块中去。
内容耦合
Entry1 …… Entry1 …… 多入口模块