软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著)
张海藩《软件工程导论》(第6版)(章节题库 第11章 面向对象设计)【圣才出品】
第11章面向对象设计一、选择题1.()是不需要接收消息就能主动执行的服务。
A.内部服务B.外部服务C.内嵌服务D.上层服务【答案】B【解析】主动服务是不需要接收消息就能主动执行的服务,它在程序实现中是一个主动的程序成分,而外部服务属于主动服务,所以答案选B项。
2.火车是一种陆上交通工具,火车和陆上交通工具之间的关系是()关系。
A.组装B.整体与部分C.has aD.一般与具体【答案】D【解析】火车是一种陆上交通工具,而陆上交通工具不一定是火车,还可以是汽车、自行车等,说明火车是陆上交通工具的具体化,而陆上交通工具是火车的一般化,所以它们之间的关系是一般与具体的关系。
3.()只供对象内部的其他服务使用,不对外提供。
A.外部服务B.内部服务C.内嵌服务D.上层服务【答案】B【解析】对象的服务分为外部服务和内部服务两种,其中,内部服务只供内部的其它服务使用,不对外提供,外部服务只供对象外部的其它服务使用,不对内提供。
4.对象标识是分配给每个对象的永久性标识(又称作“柄”),它不符合下述条件()。
A.在一定的范围或领域(例如一个应用系统)中是唯一的B.与对象实例的特征、状态及分类(可能是动态的)无关C.在对象存在期间保持一致D.在对象存在之后保持一致【答案】D【解析】对象标识符合如下几个条件:①在一定的范围或领域中是唯一的;②与对象实例的特征、状态及分类无关;③在对象期间保持一致。
5.对象或者类的整体行为(例如响应消息)的某些规则所不能适应的(对象或类的)()。
A.状况B.情态C.条件D.问题【答案】D【解析】对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。
二、填空题1.对象的服务可分为_____、_____。
【答案】外部服务;内部服务2._____不同取值所构成的组合都可看作对象的一种新的状态。
【答案】对象的每个属性3.如果在一个服务中包括了多项可独立定义的功能,则它是_____,应尝试把它分解为多个服务。
软件工程导论(全)张海藩PPT课件
与方法。
张
主要内容包括:软件工程概述、软件生存周期及软件
海 藩
需求分析、软件设计方法、软件测试技术等。 通过本课程的学习,使学生能真正的从中了解软件开
发的整个过程。为了让学生真正得以实践,结合实际软件
开发项目,让学生从问题定义开始,经过可行性研究、需
求分析、概要设计、详细设计、编码直到最后要对自己开
软制品
张
(软体)
海
藩
软件是计算机系统中与硬件相互依存的另一部分。 它包括程序、数据及其相关文档的完整集合。
2020/8/1
软
件 工
2、软件特点
程
导
. 软件是一种逻辑实体,而不是具体的物理实体
. 软件的生产与硬件不同
. 在软件的运行和使用期间,没有硬件那样的机械
张
磨损,老化问题
海
藩
失
磨合
修改点 失
实际曲线
张 海 藩
具和软件库,软件开发人员训练有素,都强 烈渴望去编写很酷的软件,可以在几天的时 间里编写出一个相当复杂的软件。但为什么 有一些软件能够得到用户的喜欢,而另一些
则不能?为什么有些软件能够在市场上成功
,而有些则受到冷落?由此可见,开发软件
并不一定难,难就难在如何开发有用的软件。
微软凌小宁博士
2020/8/1
支持管理: 标准检验程序 库管理程序
2020/8/1
软
件 工
2、按软件的规模进行划分
程 导
按开发软件所需的 人力、时间以及完成的
源代码行数。
张 海
类别
参加人数
研制期限 产品规模(源代码行数)
藩
微型
1
1-4周
约500行
软件工程导论第五版全套课件
第1章软件工程学概述1.1软件危机1.1.1软件危机的介绍1.1.2产生软件危机的原因图1.1引入同一变动付出的代价随时间变化的趋势1.1.3消除软件危机的途径1.2软件工程1.2.1软件工程的介绍1. 软件工程关注于大型程序的构造2. 软件工程的中心课题是控制复杂性3. 软件经常变化4. 开发软件的效率非常重要5. 和谐地合作是开发软件的关键6. 软件必须有效地支持它的用户7. 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品2软件工程导论(第五版) 1.2.2软件工程的基本原理1. 用分阶段的生命周期计划严格管理2. 坚持进行阶段评审3. 实行严格的产品控制4. 采用现代程序设计技术5. 结果应能清楚地审查6. 开发小组的人员应该少而精7. 承认不断改进软件工程实践的必要性1.2.3软件工程方法学1. 传统方法学2. 面向对象方法学1.3软件生命周期1. 问题定义2. 可行性研究3. 需求分析4. 总体设计5. 详细设计6. 编码和单元测试7. 综合测试8. 软件维护软件工程导论(第五版) 3 1.4软件过程1.4.1瀑布模型图1.2传统的瀑布模型1. 阶段间具有顺序性和依赖性2. 推迟实现的观点3. 质量保证的观点4软件工程导论(第五版)图1.3实际的瀑布模型1.4.2快速原型模型图1.4快速原型模型软件工程导论(第五版) 5 1.4.3增量模型图1.5增量模型图1.6风险更大的增量模型6软件工程导论(第五版) 1.4.4螺旋模型图1.7简化的螺旋模型软件工程导论(第五版) 7图1.8完整的螺旋模型8软件工程导论(第五版) 1.4.5喷泉模型图1.9喷泉模型1.4.6 Rational统一过程1. 最佳实践2. RUP软件开发生命周期软件工程导论(第五版) 9图1.10 RUP软件开发生命周期1.4.7敏捷过程与极限编程1. 敏捷过程2. 极限编程图1.11 XP项目的整体开发过程10软件工程导论(第五版)图1.12 XP迭代开发过程1.4.8微软过程1. 微软过程准则2. 微软软件生命周期图1.13微软软件生命周期阶段划分和主要里程碑3. 微软过程模型图1.14微软过程的生命周期模型1.5小结习题11. 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?2. 假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?3. 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?4. 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
软件工程导论课件(全)张海藩
类别
参加人数
研制期限
产品规模(源代码行数)
微型 小型 中型 大型 甚大型 极大型
1 1 2-5 5-20 100-1000 2000-5000
1-4周 1-6周 1-2年 2-3年 4-5年 5-10年
约500行 约2000行 5000-50000行 5万-10万行 100万行 1000万行
2016/9/9
2016/9/9
原型模型(Prototype Model)
原型:是指模拟某种产品的原始模型
快速分析 和设计 加工 原型 原型 客户 评价原型 建造 原型
1、原型系统仅包括未来系统的 主要功能,以及系统的重要 接口。 2、为了尽快向用户提供原型, 开发原型系统时应尽量使用 能缩短开发周期的语言和工 具。
技术可行性分析方法--- 数学模型和优化技术、 概率和统计、排队论、控制论等方法。
2016/9/9
1、系统概述 2、可行性分析
可行性 论证报告
3、拟订具 (系流程图与系统结构图)
1、系统流程图: 是用来描述系统物理模型的一种传统工具。
C
ACD 的层次结构
2016/9/9
作 业
请画出学生成绩管理系统的 ACD 图
2016/9/9
第3 章 软件需求分析
软件需求分析是软件开发早期的一个重要阶段。它 在问题定义和可行性研究阶段之后进行。需求分析的基 本任务是软件人员和用户一起完全弄清用户对系统的确 切要求。这是关系到软件开发成败的关键步骤,也是整 个系统开发的基础。 软件需求分析阶段要求用 需求规格说明书(SRS) 来表达用户对系统的要求。规格说明书可用文字方式表 示,也可用图形表示。 本章将介绍需求分析的任务、步骤、需求分析方法 (面向数据流图分析方法、面向对象的分析方法)。
《软件工程导论》张海潘_第五版_清华_课后答案PPT课件
护士 护士
社会、政策允许的可行性
2-2 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系
统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息
an.c 利息
2.3
打印利息
值
d清a单 ai
w. 某航空公司拟开发一个机票预定系统。旅行社把预订机票的旅客信息(姓名、性别…等)输入进该系统,系统 ww 为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统核对无误即印 网 出机票给旅客。
源
旅客
取票通知 账单/票款
网 检验信 源息
检验信 息过程
重试信息
资
SC 图
件 用户执行模块 课
案
答 读用户命令
命令处理
题
习
案系统设置
现用/非现用
密码处理
答 控制器
系统
控制器
爱
读系统 数据
建立配 置文件
读 密码
用文件 比较密码
密码输出 控制器
机票预订系统(参见习题 2 第 3 题)
显示信息 与状态
产生 无效信息
6
更新日志
日志
日志
7 产生病情 要求
报告
课件 事样务
数据 数据
案
D1 患者日志
答
6.数据定义 1、顺序 + 2、选择〔 | 〕3、重复
题 – 定货系统 P39 习 – 习题 2 第 5 题 P44 案 2-1 应该从哪些方面研究目标系统的可行性?
软件工程导论张海藩PPT课件
A[I]=A[I]+A[T]; A[T]=A[I]-A[T]; A[I]=A[I]-A[T];
WORK=A[T]; A[T]=A[I]; A[I]=WORK;
第22页/共125页
例7:简单直接
for (i=1; i<=n; i++) for (j=1; j<=n; j++) V[i][j]=(i/j)*(j/i)
与机器码一样长
特殊情
C、C++等
数据库查询语言 4GL 程序生成器
图形语言
利用类英语的语句和命令 一条语句相当于5-10条机器码
要规定详细的算法过程
与自然语言接近 一条语句相当于30-50条机器码
非过程化问题定义 运行开销大,效率低
高级
第4页/共125页
选择语言的理想标准: • 为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想
的模块化机制,以及可读性好的控制结构和数据结构; • 为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现
程序中的错误; • 为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。
第5页/共125页
主要的实用标准: • 系统用户的要求 • 可以使用的编译程序 • 可以得到的软件工具 • 工程规模 • 程序员的知识 • 软件可移植性要求 • 软件的应用领域
例5:一行一条语句
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
高级软件工程(第十一章) 面向对象设计方法PPT课件
➢协调边界类和实体类之间的消息及消息发送的 顺序。
12
续
➢控制类作为完成用例任务的责任承担者,协调 、控制其他类共同完成用例规定的功能或行为 。对于比较复杂的用例,控制类通常并不处理 具体的任务细节,但是它应知道如何分解任务 ,如何将子任务分派给适当的辅助类,如何在 辅助类之间进行消息传递和协调。
② 开发交互图,即为每一个用例产生一个交互 图:其决定哪些对象一起工作,及怎样协同 工作。 (系统设计的核心);
③ 根据开发交互图时得到的信息,迭代设计类 图和开发方法名称(确定类的行为和职责)
④ 用包图将设计类图分割成相关的功能。
3
用例的实现
➢称设计模型的最终开发结果为用例的实现。 ➢术语实现指的是对每个用例的详细系统过程进
16
导航可见性
➢一个对象可看到另一个对象并与之交互(导航 、可见性)。
➢一个对象可导航(发送消息)到另一个对象。 ➢一个对象通过发消息的方式和另一个对象进行
联系,那么第二个对象对于第一个对象来说必 须是可见的。 ➢对象具有能看见另一对象并与其交互的能力。
17
用例实现与交互图
➢用例的实现是在交互图的开发过程中完成的, 用例实现的过程就是确定哪些类通过发送消息 与其他类进行协作的过程。
➢设计时开发的交互图:顺序图或协作图。
18
对象职责
➢一种由对象负责实施系统过程的设计准则。 ➢集中确定一个系统必须支持的行为,再设计实
现这些行为的方法。通过这些行为,确定对象 职责。
19
用例控制器
➢每个用例含有许多来自外部参与者不同的消息。 ➢作为OO分析一部分的系统顺序图能够描述出这些
软件工程导论课件全张海藩
利用大数据技术分析和监控软件系统的运行状态,发现性能瓶颈并 进行优化,提高软件系统的稳定性和效率。
软件故障预测与预防
通过分析历史故障数据和系统日志,预测可能出现的故障并提前采取 预防措施,降低软件维护成本。
云计算在软件工程中的应用
云计算平台开发
基于云计算平台开发软件应用,实现资源的动态分配、弹性扩展和按需付费,降低软件开发和运 维成本。
和输出。
在瀑布模型中,软件开发过程被划分为需求分析、设 计、编码、测试和维护等阶段,每个阶段都必须在前
一个阶段完成后才能开始。
瀑布模型的优点是易于理解和管理,适用于需求稳定、 变更较少的情况。但是,它缺乏灵活性,难以应对需 求变更和快速变化的市场环境。
螺旋模型
螺旋模型是一种迭代式的软件开发过程 模型,它将开发过程划分为多个循环, 每个循环包括需求分析、设计、编码和 测试等阶段。
在敏捷开发模型中,开发团队会按照短周期(通常是一到四周)进行迭代开发,每个周期都会交付可用 的软件产品。
敏捷开发模型的优点是能够快速响应变化、降低开发风险、提高软件质量。但是,它需要更多的沟通和 协作能力,同时也需要更加灵活的管理方式。
其他过程模型
除了上述三种常见的软件开发过程模 型外,还有其他一些过程模型,如原 型模型、增量模型等。
缺陷分析
对缺陷进行分析,找出根本原因,避免类似缺陷再次出现。
质量评估指标
缺陷密度
衡量软件质量的重要指标,表示每千行代码 中的缺陷数。
回归测试通过率
评估软件修复缺陷后,原有功能是否正常的 重要指标。
测试覆盖率
评估测试用例对软件产品功能的覆盖程度。
用户满意度
反映用户对软件产品质量和服务的满意程度。
软件工程导论-张海藩-第五版课后习题答案
多态
多态是指同一个操作作用于不 同的对象,可以产生不同的结 果。
UML建模语言简介
UML是一种用于对软件密集系统进行可视化建模 的统一建模语言。
UML通过统一的符号和工具,为软件开发人员提 供了一种通用的建模语言。
UML可以描述软件系统的静态结构和动态行为, 包括类图、时序图、用例图等。
面向对象分析、设计和实现过程
列表。
与用户确认需求列表,确保对用户需求有准确的理解。
03
需求规格说明书编写
01
编写详细的需求规格说明书,包括功能需求、性能需求、接 口需求等。
02
使用清晰、准确的语言描述需求,避免歧义和模糊性。
03
提供必要的图表、示例和数据,以便更好地理解和实现需求 。
需求变更管理
建立需求变更管理流 程,确保所有变更都 经过评估和批准。
及时通知相关干系人, 协商并处理变更请求, 确保项目顺利进行。
对变更进行影响分析, 评估变更对项目进度、 成本和质量的影响。
03 系统设计
总体设计原则与方法
模块化
将系统划分为若干个相对独立的模块, 每个模块具有特定的功能,模块之间 通过接口进行通信。
高内聚、低耦合
模块内部的功能应该高度相关,而模 块之间的依赖关系应该尽量减少。
要点二
软件评估技术
软件评估技术包括代码审查、走查、桌面检查等。代码审 查是一种正式的评估技术,由一组开发人员对源代码进行 详细检查以发现错误;走查是一种轻量级的评估技术,由 开发人员自行检查代码并记录下潜在的问题;桌面检查则 是一种非正式的评估技术,由评估人员通过查看文档和演 示来评价软件产品的质量。
THANKS FOR WATCHING
感谢您的观看
软件工程导论_张海藩_第五版课后习题答案
F3日前、时间
定时的生理信号 F6日志
P5 更新日志
D1患者日志 F6日志 P6 产生病情报告
10
E1 护士
13:07:42
F1要求报告
重庆工学院计算机科学与工程学院 李梁(liliang@)
P2 分析信号 E2 病人 F2生理信号 F2生理信号 F5安全范围
危及病人信息 D2患者安全范围
17
E1 储户
F1存款单 F7密码
P1 记录存款信息 F5存款信息 D1存款信息
P2 打印存单 F5存款信息 F3存单 E1 储户 F4利息
F7密码 F2取款单
F5存款信息 P3 核算密码
F4利息 F4利息 F6取款信息 P6 设置利率 P4 计算利息 F8储蓄利率
P5 打印利息清单 F8储蓄利率
5
作业及解答(第1-2章)
122629 6000 735,776,790(美元) 1-6 什么是软件过程?它与软件工程方法学有何关系? 软件过程是为了开发出高质量的软件产品所需完成的一系 列任务的框架,它规定了完成各项任务的工作步骤。 软件过程定义了运用技术方法的顺序、应该交付的文档资 料、为保证软件质量和协调软件变化必须采取的管理措施 ,以及标志完成了相应开发活动的里程碑。 软件过程是软件工程方法学的3个重要组成部分之一。
13:07:42
P6 产生病情报告 重庆工学院计算机科学与工程学院 李梁(liliang@)
12
作业及解答(第3章)
2-5 北京某高校可用的电话号码有以下几类:校内电话号 码由4位数字组成,第1位数字不是0;校外电话又分为本 市电话和外地电话两类,拨校外电话需先拨0,若是本市 电话则再接着拨8位数字(第1位不是0),若是外地电话则 拨3位区码再拨8位电话号码(第1位不是0)。 请用定义数据字典的方法,定义上述的电话号码。
软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著)
利用多态性不仅可以使对象的对外接口更加一般化, 从而降低了消息连接的复杂程度,而且还提供了一 种简便可靠的软构件组合机制。
11.3.3 软件重用的效益
1. 质量 随着每一次重用,都会有一些错误被发现并被清除,
构件的质量也会随之改善。 2. 生产率 当把可重用的软件成分应用于软件开发的全过程时,
件开发规范的重用)。 软件成分的重用。
2. 软件成分的重用级别
代码重用:通常把它理解为调用库中的模块。 代码重用的几种形式:
源代码剪贴
源代码包含
继承
设计结果重用:重用某个软件系统的设计模型 (即求解域模型)。这个级别的重用有助于把一 个应用系统移植到完全不同的软硬件平台上。
分析结果重用:重用某个系统的分析模型。这 种重用特别适用于用户需求未改变,但系统体 系结构发生了根本变化的场合。
在设计时应该力求做到高内聚。
在面向对象设计中存在下述3种内聚:
服务内聚。一个服务应该完成一个且仅完成一个功能。
类内聚。一个类应该只有一个用途,它的属性和服务应该是 高内聚的。
一般-特殊内聚。设计出的一般-特殊结构,应该符合多数人 的概念。
6. 可重用
软件重用是提高软件开发生产率和目标系统质 量的重要途径。
精心设计的“类”基本上能满足上述要求,可 以认为它是可重用软构件的雏形。
2. 类构件的重用方式
实例重用
由于类的封装性,使用者无须了解实现细节就可以 使用适当的构造函数,按照需要创建类的实例。这 是最基本的重用方式。
继承重用
继承重用提供了一种安全地修改已有类构件,以便 在当前系统中重用的手段。
3. 典型的可重用软件成分 项目计划 成本估计 体系结构 需求模型和规格说明 设计 源代码 用户文档和技术文档 用户界面 数据 测试用例
软件工程导论----张海藩(第五版)课后习(考研专用)
《软件工程导论》课后习题答案第一章软件工程概论1.什么是软件危机?软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
这些问题表现在以下几个方面:(1)用户对开发出的软件很难满意。
(2)软件产品的质量往往靠不住。
(3)一般软件很难维护。
(4)软件生产效率很低。
(5)软件开发成本越来越大。
(6)软件成本与开发进度难以估计。
(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。
2.为什么会产生软件危机?(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。
造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。
(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。
(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。
3.怎样克服软件危机?(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。
在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。
(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。
将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。
总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
4.构成软件项目的最终产品:应用程序、系统程序、面向用户的文档资料和面向开发者的文档资料。
5.什么是软件生存周期?软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。
软件工程导论(第五版)_(张海藩_著)_清华大学出版社_课后习题答案
来; (3) 它强调使用生存周期方法学和结构分析和结构技术; (4) 经过人们长期的努力和探索,围绕着实现软件优质高产这个目标,从技术
的单位面积及房租等信息。房产科可以要求系统打印住房情况的统计表,或更改某 类房屋的居住条件、单位面积和房租等。
用数据流图描绘该系统的功能需求;在数据字典中给出主要的数据流、文件和 加工说明。
参考第四章 4.5 应用举例教案之二分析。
第四章 总体设计 习题答案
1. 系统设计包括哪两个阶段? 系统设计包括总体设计与详细设计两个阶段。
(2) 在渐增型开发下的软件是随软件开发的过程而逐渐形成的。 (3) 渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认 识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完 善系统。多数研究性质的试验软件,一般采用此方法。 变换型开发方法及特点: (1)从软件需求的形式化规格说明出发,经过一系列的程序变换,得到最终的 程序系统。 (2)该方法必须有严格的数学理论和形式化技术的支持。
算出的房租写到房租文件中。 (2) 如果是退房申请,则从住房文件和房租文件中删除有关信息,再把此房号
的信息写到空房文件中。 (3) 如果是调房申请,则根据申请者的情况确定其住房等级,然后在空房文件
中查找属于该等级的空房,退掉原住房,再进行与分房类似的处理。 (4) 住户可以向系统查询目前分房的阀值分数,居住某类房屋的条件,某房号
图:
4.什么是结构化分析?它的结构化体现在哪里? 结构化分析:使用数据流程图、数据字典、结构化英语、判定表和判定树等工具,
软件工程ppt课件第11章面向对象设计
4、使用简单的protocol,减少message 中传递的
parameters
5、使用简单的method(CASE 可考虑用 inheritance替代)。
6、把设计变动减至最小。
§3. 软件重用 (Software Reuse)
过程抽象: 在SD中已讨论
数据抽象: Class即是一种抽象数据类型。外界无须知道实 现方法,按照类规格说明(即协议)可以使用合法的操作 符,利用这些操作对类实例中包含的数据进行操作。
参数抽象: 将数据类型作为参数处理。
3、信息隐藏= 对象的封装
§1. OOD准则
4、耦合: 交互耦合(interactive coupling):通过传递message发生
的任务专门分离出来先做或后做。
关键任务(key task):指关系系统成败的处理, 要求高可靠性,应分离考虑,严格测试。
协调任务(coordinator):当系统中存在三个以上 tasks时,应增设一个协调任务,用于封装不同 tasks之间的协调控制。
⑷ 数据管理子系统:
§4. 系 统 分 解
1、概念: 知识重用(例如软件工程知识的重用)
方法和标准重用(例如OO方法和国家规定 的软件开发规范的重用)
知识 工程
软件成分的重用
重用软件成分有三个级别: ① 代码重用:
• 源码剪贴 —— 无法溯源,无配置管理
• Include —— 修改后所有包含了此段代码的程
序都须重新编译。
想象一下,stdio.h 被改动之后……
一个client可使用其下任一层的supplier提供 的服务—— 开放式(open)
软件工程导论PPT课件-第11章-面向对象的分析
11.2 静态结构建模
一对一的关联。一个类的实例对象只能和另一个类的惟一对象发 生联系。
拥有
一对多关联。一对多关联是指有关联关系的两个类之间,从一个 方向上看是一对多关联,从另一个方向上看则是一对一关联。
拥有
11.2 静态结构建模
多对多关联。多对多关联是指有关联关系的两个类之间,从两个 方向上都是一对多的关联。
象模型、用户界面
系统设计
分析模型 动态模型 用例模型、对象模型
对象设计
面向对象分析过程
11.2 静态结构建模
面向对象的分析分为静态分析和动态分析两种,静态分析 是分析静态模型(类图或对象图);动态分析是分析动态 模型(顺序图或协作图)
静态结构建模确定系统的逻辑或物理部分,以及如何把它 们连接在一起,它描述了如何构建和初始化系统。
第11章 面向对象的分析
➢ 11.1 面向对象分析的任务 ➢ 11.2 静态结构建模 ➢ 11.3 动态结构建模
第11章 面向对象的分析
分析的过程都是提取系统需求、开发分析模型的过程。 这个阶段的工作既需要开发技术人员的参与,又需要 客户、未来软容,这就是理解、表达和验证。 分析过程得出的最重要的文档资料是软件需求规格说
11.2 静态结构建模
(5)完善初始的静态结构模型
- 识别继承关系 检查已经提交的类对象之间是否存在继承关系,如果存在继承,
则利用类之间的继承特征来改进类模型,从而提高类模型的可复用 性。可以从类的属性与操作及问题域中的可复用性两个角度来确定 可能存在的继承关系。 - 分解、合并系统中的类对象
对于系统中已有的类对象认真分析,检查是否有些类可以进一步 地分解为不同的类或者可以将一些类对象进行合并。
明(在面向对象分析中,主要由对象模型、动态模型 和功能模型组成)。
软件工程导论第五版第十一章
第11章面向对象设计11.1面向对象设计的准则1. 模块化2. 抽象3. 信息隐藏4. 弱耦合5. 强内聚6. 可重用11.2启发规则1. 设计结果应该清晰易懂2. 一般\|特殊结构的深度应适当3. 设计简单的类4. 使用简单的协议5. 使用简单的服务6. 把设计变动减至最小图11.1理想的设计变动情况11.3软件重用11.3.1概述1. 重用2. 软件成分的重用级别3. 典型的可重用软件成分11.3.2类构件1.可重用软构件应具备的特点2. 类构件的重用方式11.3.3软件重用的效益1. 质量2. 生产率3. 成本11.4系统分解图11.2典型的面向对象设计模型1. 子系统之间的两种交互方式2. 组织系统的两种方案图11.3典型应用系统的组织结构3. 设计系统的拓扑结构11.5设计问题域子系统1. 调整需求2. 重用已有的类3. 把问题域类组合在一起4. 增添一般化类以建立协议图11.4窄菱形模式5. 调整继承层次图11.5阔菱形模式图11.6把多重继承简化为单一层次的单继承6. ATM系统实例图11.7ATM系统问题域子系统的结构11.6设计人机交互子系统1. 分类用户2. 描述用户3. 设计命令层次4. 设计人机交互类11.7设计任务管理子系统1. 分析并发性2. 设计任务管理子系统11.8设计数据管理子系统11.8.1选择数据存储管理模式1. 文件管理系统2. 关系数据库管理系统3. 面向对象数据库管理系统11.8.2设计数据管理子系统1. 设计数据格式2. 设计相应的服务11.8.3例子11.9设计类中的服务11.9.1确定类中应有的服务11.9.2设计实现服务的方法1. 设计实现服务的算法2. 选择数据结构3. 定义内部类和内部操作11.10设计关联1. 关联的遍历2. 实现单向关联图11.8用指针实现单向关联图11.9用指针实现双向关联3. 实现双向关联图11.10用对象实现关联4. 关联对象的实现11.11设计优化11.11.1确定优先级11.11.2提高效率的几项技术1. 增加冗余关联以提高访问效率图11.11公司、雇员及技能之间的关联链图11.12为雇员技能数据库建立索引2. 调整查询次序3. 保留派生属性11.11.3调整继承关系1. 抽象与具体2. 为提高继承程度而修改类定义图11.13设计类继承的例子3. 利用委托实现行为共享图11.14用表实现栈的两种方法11.12小结习题111. 面向对象设计应该遵循哪些准则?简述每条准则的内容,并说明遵循这条准则的必要性。
张海藩《软件工程导论》(第6版)(课后习题 第11章 面向对象设计)【圣才出品】
4.试用面向对象方法,设计本书第 2 章中给出的订货系统的例子。 答:略。
break; }
int main(){ FILE *fi; int i,inQuote; fi=fopen(“xxx.c”, “r”) if(fi==NULL) return 1; i=inQuote=0;
2/8
圣才电子书 十万种考研考证电子书、题库视频学习平台
b.有明确的定义。为使类的定义明确,分配给每个类的任务应该简单。 c.简化对象之间的合作关系。 d.不要提供太多的服务。 ④使用简单的协议 ⑤使用简单的服务 ⑥把设计变动减至最小 (2)启发规则的必要性 人们使用面向对象方法学开发软件的历史虽然不长,但也积累了一些经验。总结这些经 验得出了几条启发规则,它们往往能帮助软件开发人员提高面向对象设计的质量。
char input[Len_Max+2]; int n=sizeof(input); void CheckKeyWord(){ int i,result; for(i=0;i<n;i++) {
result=strcmp(input,Key[i]); if(result==0){ count[i]++; break; } if(result<0)
3/8
圣才电子书 十万种考研考证电子书、题库视频学习平台
5.试用面向对象方法,设计本书习题 2 第 2 题中描述的储蓄系统。 答:使用面向对象方法设计出的储蓄系统的对象模型如图 11-7 所示:
软件工程导论PPT课件
软件(software)是计算机系统中与硬件 (hardware)相互依存的另一部分,
它包括程序(program)、 相关数据(data)及其 说明文档(document)。
软件特指大型复杂的程序
2021
5
软件的发展
早期 •面向批处理 •有限的分布 •自定义软件
第二阶段 •多用户 •实时 •数据库 •软件产品
是把软件当作一种工业产品,要求 “采用工程化的 原理与方法对软件进行计划、开发和维护 ”。
2021
21
围棋与软件工程的感想
围棋
围棋棋谱拿过来的时候, 大师问“后面应该走哪里?”
十个初级爱好者选择的落
点散布在棋盘各处…… 十个职业棋手说的落子点
都差不多,甚至包括后面的几 步……
这就是高手和低手的差
别……
2021
13
软件危机的原因
● 一方面是与软件本身的特点 有关
● 另一方面是由软件开发和维 护的方法不正确有关
2021
14
软件开发工作量分配比例
40% ~ 50%
10% ~ 20%
测试
程序
其它
2021
15
引入同一变化付出的代价随时间变化的趋势
2021
16
费用分配比例
55%~70%
软件维护 其它
2021
25
总之: 软件工程是应用计算机科学、 数学及管理科学等原理开发软 件的工程。它借鉴传统工程的 原则、方法,以提高质量,降 低成本为目的。
2021
26
软件工程是一门交叉学科
软件工程的主要研究内容
软件开发技术:软件开发方法学 软件开发过程 软件工具和软件工程环境
软件工程管理:软件管理学 软件经济学 软件心理学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象方法不仅支持过程抽象,而且支持数 据抽象。
3. 信息隐藏
在面向对象方法中,信息隐藏通过对象的封装 性实现。
4. 弱耦合 耦合指不同对象之间相互关联的紧密程度。
一般说来,对象之间的耦合可分为两大类:
交互耦合
如果对象之间的耦合通过消息连接来实现,则这种耦合 就是交互耦合。
各个子系统之间应该具有尽可能简单、明确的 接口。因此,可以相对独立地设计各个子系统。
在划分和设计子系统时,应该尽量减少子系统 彼此间的依赖性。
面向对象设计模型,与面向对象分析模型一样, 也由主题、类与对象、结构、属性、服务等5 个层次组成。
大多数系统的面向对象设计模型,在逻辑上都 由4大部分组成。
多态重用
利用多态性不仅可以使对象的对外接口更加一般化, 从而降低了消息连接的复杂程度,而且还提供了一 种简便可靠的软构件组合机制。
11.3.3 软件重用的效益
1. 质量 随着每一次重用,都会有一些错误被发现并被清除,
构件的质量也会随之改善。
2. 生产率 当把可重用的软件成分应用于软件开发的全过程时,
语言 1
把关联类转化为二元关联
公司 1..*
职员 1..*
工作岗位 工资
公司 1
工作岗位 1..* 工资 1..*
职员 1
7. 调整与完善属性
学生
学生
奖励
姓名 籍贯 奖励 ……
姓名 籍贯 ……
1..*
级别
1 时间 贡献
……
8. ATM系统实例
ATM系统问题域子系统的结构
11.6 设计人机交互子系统
当前所需的类的信息
比
可复用类定义的信息
不同程度的复用: = 直接复用 < 通过继承复用 > 删除可复用类的多余信息 ≈ 删除多余信息,通过继承复用
第4种情况的步骤:
(1) 把要复用的类加到问题域;
(2) 标以“复用”,划掉(或标出)不用的属 性与操作;
(3) 建立从复用类到问题域原有的类之间的泛 化关系;
人员
1 0..2 身份
研究生
教职工
聚合方式
方法二:采用压平的方式。
人员
研究生
在职研究生
教职工
压平方式
方法三:压平和聚合的方式。
人员
研究生
在职研究生
教职工
研究生信息
教职工信息
压平和聚合方式
取消继承 方法一:把继承结构展平。
研究生
在职研究生
教职工
完全取消继承
方法二:采用聚合的方法。
A
B
A
B
C
精心设计的“类”基本上能满足上述要求,可 以认为它是可重用软构件的雏形。
2. 类构件的重用方式
实例重用
由于类的封装性,使用者无须了解实现细节就可以 使用适当的构造函数,按照需要创建类的实例。这 是最基本的重用方式。
继承重用
继承重用提供了一种安全地修改已有类构件,以便 在当前系统中重用的手段。
交互耦合应尽可能松散 。
继承耦合
与交互耦合相反,应该提高继承耦合程度。 继承是一般化类与特殊类之间耦合的一种形式。通过继
承关系结合起来的基类和派生类,构成了系统中粒度更 大的模块。彼此之间应该越紧密越好。
5. 强内聚 内聚衡量一个模块内各个元素彼此结合的紧密程度。
内聚定义为:设计中使用的一个构件内的各个元素, 对完成一个定义明确的目的所做出的贡献程度。
当问题域子系统过分复杂庞大时,应该把它进 一步分解成若干个更小的子系统。
1. 调整需求
有两种情况会导致修改通过面向对象分析所确 定的系统需求:
一是用户需求或外部环境发生了变化;
二是分析员对问题域理解不透彻或缺乏领域专家帮 助。
无论出现上述哪种情况,通常都只需简单地修 改面向对象分析结果,然后再把这些修改反映 到问题域子系统中。
部
分
分
任务管理部分
11.1 面向对象设计的准则
所谓优秀设计,就是权衡了各种因素,从而使 得系统在其整个生命周期中的总开销最小的设 计。
对大多数软件系统而言,60%以上的软件费用 都用于软件维护,因此,优秀软件设计的一个 主要特点就是容易维护。
设计准则有6条。
1. 模块化
对象就是模块。它是把数据结构和操作这些数 据的方法紧密地结合在一起所构成的模块。
件开发规范的重用)。 软件成分的重用。
2. 软件成分的重用级别
代码重用:通常把它理解为调用库中的模块。 代码重用的几种形式:
源代码剪贴
源代码包含
继承
设计结果重用:重用某个软件系统的设计模型 (即求解域模型)。这个级别的重用有助于把一 个应用系统移植到完全不同的软硬件平台上。
分析结果重用:重用某个系统的分析模型。这 种重用特别适用于用户需求未改变,但系统体 系结构发生了根本变化的场合。
3. 典型的可重用软件成分 项目计划 成本估计 体系结构 需求模型和规格说明 设计 源代码 用户文档和技术文档 用户界面 数据 测试用例
11.3.2 类构件
面向对象技术中的“类”,是比较理想的可重 用软构件,称之为类构件。
1. 可重用软构件应具备的特点
模块独立性强 具有高度可塑性 接口清晰、简明、可靠
第11章 面向对象设计
11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化
分析是提取和整理用户需求,并建立问题域精 确模型的过程。
问题域子系统
人机交互子系统
任务管理子系统
数据管理子系统
可以把4大组成部分想象成整个模型的4个垂直 切片。
典型的面向对象设计模型
1. 子系统之间的两种交互方式
客户-供应商关系(Client-supplier)
作为“客户”的子系统调用作为“供应商”的子系 统,后者完成某些服务工作并返回结果。
在一个中等规模(大约包含100个类)的系统中, 类等级层次数应保持为7±2。
3. 设计简单的类 应该尽量设计小而简单的类,以便于开发和管
理。
为使类保持简单,应该注意以下几点:
避免包含过多的属性。 有明确的定义。 尽量简化对象之间的合作关系。 不要提供太多服务。 在开发大型软件系统时,设计出大量较小的类,需
要划分“主题”。
4. 使用简单的协议
一般说来,消息中的参数不要超过3个。当然, 不超过3个的限制也不是绝对的。
5. 使用简单的服务
一般说来,应该尽量避免使用复杂的服务。
如果一个服务中包含了过多的源程序语句,或 者语句嵌套层次太多,或者使用了复杂的 CASE语句,则应该仔细检查这个服务,设法 分解或简化它,考虑用一般-特殊结构代替。
(4) 由于问题域的类继承了“复用”类的特征, 所以有些属性和操作不需要了。
可复用的类
车辆
序号 厂商 样式
序号认证
问题域中的类
车辆 序号 颜色 样式 出厂年月 序号认证
车辆 (复用) 序号 厂商 样式
序号认证
车辆
序号 颜色 样式 出厂年月
序号认证
3. 把问题域类组合在一起
通过引入一个根类而把问题域类组合在一起。 此外,这样的根类还可以用来建立协议。
任何交互行为都是由前者驱动的。
平等伙伴关系(peer-to-peer)
每个子系统都可能调用其他子系统,因此,每个子 系统都必须了解其他子系统的接口。
子系统之间的交互更复杂。
总的说来,单向交互比双向交互更容易理解, 也更容易设计和修改,因此应该尽量使用客户 -供应商关系。
2. 组织系统的两种方案
在设计时应该力求做到高内聚。
在面向对象设计中存在下述3种内聚:
服务内聚。一个服务应该完成一个且仅完成一个功能。
类内聚。一个类应该只有一个用途,它的属性和服务应该是 高内聚的。
一般-特殊内聚。设计出的一般-特殊结构,应该符合多数人 的概念。
6. 可重用
软件重用是提高软件开发生产率和目标系统质 量的重要途径。
生产率得到了提高。基本上30%~50%的重用大约可 以导致生产率提高25%~40%。 3. 成本 净成本节省可以用下式估算:C=Cs-Cr-Cd 其中,Cs是项目从头开发所需要的成本;Cr是与重用 相关联的成本;Cd是交付给客户的软件的实际成本。
11.4 系统分解
系统的主要组成部分称为子系统。通常根据所 提供的功能来划分子系统。一般说来,子系统 的数目应该与系统规模基本匹配。
6. 把设计变动减至最小 出现必须修改设计的情况,应该使修改的范围
尽可能小。
理想的设计变动情况
11.3 软件重用 11.3.1 概述
1. 重用
重用也叫再用或复用,是指同一事物不作修改 或稍加改动就多次重复使用。
广义地说,软件重用可分为以下3个层次:
知识重用(软件工程知识的重用)。 方法和标准的重用(面向对象方法或国家制定的软
层次组织(水平)
把软件系统组织成一个层次系统,每层是一个子系 统。上层在下层的基础上建立,下层为实现上层功 能而提供必要的服务。在上、下层之间存在客户供应商关系。
封闭式
开放式
块状组织(垂直)
把软件系统垂直地分解成若干个相对独立的、弱耦 合的子系统,一个子系统相当于一块,每块提供一 种类型的服务。
把多重继承结构简化成单一的单继承层次结构。
在多重继承结构中的某些继承关系,经简化后将不 再存在,这表明需要在各个具体类中重复定义某些 属性和服务。
把多重继承简化为单一层次的单继承
方法一:采用聚合把多继承调整为单继承。
A