软件工程第九章
软件工程导论第9章
(3) 按照子类(或称为派生类)与父类(或称为基类)的 关系,把若干个对象类组成一个层次结构的系统 (也称为类等级)。在这种层次结构中,通常下层的 派生类具有和上层的基类相同的特性(包括数据和 方法),这种现象称为继承(inheritance)。但是,如 果在派生类中对某些特性又做了重新描述,则在派 生类中的这些特性将以新描述为准,也就是说,低 层的特性将屏蔽高层的同名特性。
面向对象方法基于构造问题领域的对象模型,以对 象为中心构造软件系统。它的基本作法是用对象模 拟问题领域中的实体,以对象间的联系刻画实体间 的联系。因为面向对象的软件系统的结构是根据问 题领域的模型建立起来的,而不是基于对系统应完 成的功能的分解,所以,当对系统的功能需求变化 时并不会引起软件结构的整体变化,往往仅需要作 一些局部性的修改。例如,从已有类派生出一些新 的子类以实现功能扩充或修改,增加或删除某些对 象等。总之,由于现实世界中的实体是相对稳定的, 因此,以对象为中心构造的软件系统也是比较稳定 的。
众所周知,软件系统本质上是信息处理系统。数据 和处理原本是密切相关的,把数据和处理人为地分 离成两个独立的部分,会增加软件开发的难度。与 传统方法相反,面向对象方法是一种以数据或信息 为主线,把数据和处理相结合的方法。面向对象方 法把对象作为由数据及可以施加在这些数据上的操 作所构成的统一体。对象与传统的数据有本质区别, 它不是被动地等待外界对它施加操作,相反,它是 进行处理的主体。必须发消息请求对象主动地执行 它的某些操作,处理它的私有数据,而不能从外界 直接对它的私有数据进行操作。
面向对象的软件技术为开发者提供了随着对某个应 用系统的认识逐步深入和具体化的过程,而逐步设 计和实现该系统的可能性,因为可以先设计出由抽 象类构成的系统框架,随着认识深入和具体化再逐 步派生出更具体的派生类。这样的开发过程符合人 们认识客观世界解决复杂问题时逐步深化的渐进过 程。
《软件工程》 第09章
顺序结构
A
重复结构
A
选择结构
A
B
C
B
*
B
°
C
°
A seq B C A end
A select cond1 B A or cond2 C A end
A iter until (或while) cond B A end
ZLL
9.2.3 确定输入/输出数据的逻辑结构
BeiHua
类似于面向对象分析中对象的识别,Jackson方法针 对初步需求分析形成的用户需求描述进行语法分析。 名词及名词短语是潜在的实体。分析人员根据应用 问题的边界及自己的理解,决定对潜在实体的取舍。 通过分析形成逻辑结构。 【例9.1】一个正文文件由若干个记录所组成,每个记 录是一个字符串。要求统计每个记录中空格字符的 个数,以及文件中空格字符的总数。要求的输出数 据格式是,每复制一行输入字符串之后,另起一行 印出这个字符串中的空格数,最后印出文件中空格 的总个数。
ZLL
BeiHua
(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数 据结构。 (2)找出输入数据结构与输出数据结构中有对应关系的数据元素,即有直接因 果关系者,它们在程序中可以一并处理。 (3)依据下述三条规则从数据结构图导出Jackson结构图。 ① 在Jackson结构图中,为有对应关系的每对数据元素画一个处理框,该框所 处层次取这两个数据元素在各自数据结构图中层次较低者。 ② 参照输入数据结构图中剩余的每个数据元素所处层次,在Jackson结构图的 相应层次上画一个处理框。 ③ 参照输出数据结构图中剩余的每个数据元素所处层次,在Jackson结构图的 相应层次上画一个处理框。 (4)列出所有操作和条件(包括分支和循环条件),并把它们分配到Jackson 结构图中。
软件工程第九章
成本估计
• 对于一个大型的软件项目,要进行一系列的估算处理, 对于一个大型的软件项目,要进行一系列的估算处理, 主要靠分解和类推的方法进行,基本估算方法分为三类: 主要靠分解和类推的方法进行,基本估算方法分为三类 • 1.自顶向下的估算方法。这种方法是从项目的整体出发, 自顶向下的估算方法。 自顶向下的估算方法 这种方法是从项目的整体出发, 进行类推。估算人员根据以前已完成项目所消耗的总成本, 进行类推。估算人员根据以前已完成项目所消耗的总成本, 来推算将要开发的软件的总成本, 来推算将要开发的软件的总成本,然后按比例将它分配到 各开发任务单元中去。这种方法的优点是估算工作量小, 各开发任务单元中去。这种方法的优点是估算工作量小, 速度快。缺点是对项目中的特殊困难估计不足, 速度快。缺点是对项目中的特殊困难估计不足,估算出来 的成本盲目性大,有时会遗漏被开发软件的某些部分。 的成本盲目性大,有时会遗漏被开发软件的某些部分。
软件项目管理的职能
• 软件项目的特点主要表现在以下几个方面 软件项目的特点主要表现在以下几个方面: • 1.智力密集,可见性差。软件开发充满了高强度的脑 智力密集,可见性差。 智力密集 力劳动,而且软件开发的成果是无形的逻辑实体, 力劳动,而且软件开发的成果是无形的逻辑实体,软件产 品的质量难以定量度量。软件项目的管理者不仅要求深入 品的质量难以定量度量。 掌握软件知识,还要具有软件开发的实际经验。 掌握软件知识,还要具有软件开发的实际经验。 • 2.独特的研制方式。软件研制通常是在特定机型上, 独特的研制方式。 独特的研制方式 软件研制通常是在特定机型上, 即采用特定硬件配置且由特定的系统软件或支撑软件支持 的特定开发环境中进行的。这种建立在内容、 的特定开发环境中进行的。这种建立在内容、形式各异基 础上的研制或生产方式, 础上的研制或生产方式,与其他领域中的大规模现代化生 产有很大的差别,也自然会给管理工作造成许多实际困难。 产有很大的差别,也自然会给管理工作造成许多实际困难。
软件工程第九章 软件过程.ppt
1) 管理过程 管理包括进度管理、成本管理、质 量管理、人员管理、资源管理、标准化管理。
谢谢你的关注
谢谢你的关注
17
管理的对象是进度、系统规模及工作量估算、 经费、组织机构、人员、风险、质量、作业和 环境配置等。主要活动有:过程实施准备,制 定计划,监控计划的实施,评审和评价计划的 完成程度,涉及到有关过程的产品管理、项目 管理和任务管理。
公共过程框架 框架活动 任务集合 工作任务 里程碑、交付物 SQA点
保护伞活动
谢谢你的关注
谢谢你的关注
6
9.1.3 软件过程的模型
软件工程过程模型的选择基于项目和应用的特点、 采用的方法和工具、要求的控制和需交付的产品。
所有的软件开发都可以看成是一个问题循环解决 过程,其中包括 4 个阶段: 1) 状态捕获: 描述事物的当前状态; 2) 问题定义: 标识需要解决的问题; 3) 技术开发: 利用某些技术来解决问题; 4) 方案综合: 导出最终结果(如文档、程序、数据、 新的事务功能、新的产品)。
3) 质量保证过程 这是一个为使软件过程和软件产 品符合规定需求,并按预定计划按时完成提供适 当保证的过程。主要活动有:过程实施准备,软 件产品的质量保证,软件过程的质量保证。
4) 验证过程 确定系统或软件的需求是否完备和正 确,以及每一阶段的软件产品是否达到前一阶段 对它的要求和条件。主要活动有:过程实施准备, 验证,合同验证,过程验证,需求验证,设计验 证,代码验证,集成验证,文档验证。
b) 工程 ENG (Engineering) 过程:这类过程包括 开发、系统与软件维护等 2 个过程。
c) 支持 SUP (Support) 过程:这类过程包括文档、 配置管理、质量保证、验证、确认、联合评审、 审计和问题解决等 8 个过程。
软件工程课件第9章
2. 什么是软件测试
软件测试是测试中的特例,它的测试对象不是一般的 产品,而是人类的智力产品----软件。 【定义9-2】软件测试是发现软件错误的过程. 为了深入理解软件测试的定义,请从下面几个角度来 思考: (1) 从软件测试的目的来理解。测试的目的是发现软 件中的错误,是为了证明软件有错,而不是证明软件 无错,是在软件投入运行前,对软件需求分析、设计 和编码各阶段产品的最终检查,是为了保证软件开发 产品的正确性、完全性和一致性,从而检测软件错误、 修正软件错误的过程。
测试对象的“问题”分为如下几种:
(1) 缺陷。这是轻量级的问题,因为它并不影响 系统的正常运行,只是有点美中不足。例如:多 了或少了某些次要的功能。有缺陷的产品可降级 使用; (2) 错误。这是重量级的问题,因为它影响系统 的正常运行,使系统在运行中出现错误,但这些 错误还不是致命性的。有错误的产品不能使用; (3) 严重错误。这是最重量级的问题,因为它不 但影响系统的正常运行,而且使系统在运行中出 现致命性的错误。例如造成系统的死锁、生命危 险或系统崩溃。 有严重错误的产品绝对不能使 用。
9.1 软件测试概论
软件测试的输入是《测试计划》、《用户需求报 告 》/《 需 求 规 格 说 明 书 》 , 输 出 是 《 测 试 报 告》。或者说,软件测试输入的是测试用例(数 据),输出的是测试报告(或Bug报告)。根据 “五个面向理论”,软件测试的主要方法是“面 向功能测试”。 测试的目的是为了发现测试对象的问题,而不是 证明测试对象没有问题。
实用软件工程概论
----IT企业软件的开发与管理 赵池龙
第9章 软件测试
本章导读:
随着中国IT行业的发展,软件产品的测试和质量保证 工作逐渐成为企业生存与发展的关键。每个IT企业的 产品在发布前,都需要进行大量的测试工作,而这些 工作必须依靠拥有娴熟技术的专业测试人员来完成。 本章首先论述软件测试的理论基础,帮助读者扫清概 念、术语和理念上的障碍。接下来讲解实用软件测试 的流程和技术,遵循所学即所用的思想,注重与实践 相结合,让读者对测试工作有一个直接的感性认识, 使测试工作的开展更有成效。最后介绍软件测试文档、 软件测试案例和测试员职业素质培养。因为测试工作 不仅仅依靠技术,从业人员的素质同样重要。培养和 提高测试人员的从业素质,是快速提升测试行业地位 的有力保证。
软件工程-电子教案第9章
9.3.2 设计用户界面 9.3.3 画UML顺序图或活动图
【例9.4】画出招聘考试管理系统的顺序图 某市人事局举行统一招聘考试。首先,各招聘 单位向人事局登记本单位各专业的招聘人数, 由人事局向社会公布招聘情况;考生报名、填 志愿;人事局组织安排考试;录入考试成绩; 向考生和招聘单位公布成绩;招聘单位进行录 用;发录用通知书。这里,共有三个对象类: 人事局、考生和招聘单位。
《软件工程》 陆惠恩主编
3
9.2.2 确定类的相互关系 1. 类的一般-特珠关系
《软件工程》 陆惠恩主编
4
2. 聚集关系
“整体-部分”关系
90 80 70 60 50 40 30 20 10 0 第一季度 第三季度 东部 西部 北部
《软件工程》 陆惠恩主编
5
3. 关联关系
阶 链属性
限定
《软件工程》 陆惠恩主编
《软件工程》 陆惠恩主编 18
9.7 UML的应用
9.7.1 UML模型 1. 用例模型 2. 静态模型 3.动态模型 4.实现模型
《软件工程》 陆惠恩主编
19
9.7.2 UML视图
视图域 视图 静态视图 结构分类 用例视图 实现视图 部署视图 状态视图 动态行为 活动视图 交互视图 图 类图 用例图 构件图 部署图 状态图 活动图 顺序图 协作图 模型管理 可扩展性 模型管理视图 类图 所有 所有 主要概念 类、关联、泛化、依赖关系、实现、接口 用例、执行者、关联、扩展、包含、用例 继承 构件、接口、依赖关系、实现 结点、构件、依赖关系、位置。 状态、事件、转换、动作 状态、活动、转换、分叉、连接 交互、对象、消息、激活 协作、交互、角色、消息 包、子系统、模型。 约束、版型、标签值
第九章软件工程面向对象实现
② 减小方法的规模 若某个方法规模过大(代码长度超过一页纸),即应将其分
解为几个更小的方法。 ③ 保持方法的一致性
一般而言,功能相似的方法应有一致的名字、参数特征(包括参数 个数、类型、次序)、返回值类型、使用条件及出错条件等。
同样,属性和关联也可分为公有和私有两大类,公有属性或关 联又可进一步设置为具有只读权限或只写权限两类。
3、提高健壮性
编写实现方法的代码时,既应考虑效率,也应考虑健壮性,通 常需要在健壮性与效率之间做适当的折衷。
作为软件不可忽视的质量指标。提高健壮性应遵守如下准则: ① 预防用户的操作错误
软件系统必须具有处理用户操作错误的能力。当用户在输入数据时发 生错误,不应该引起程序运行中断,更不应该造成“死机”。
若在执行过程中发现错误,仅返回执行状态。由于实现方法是自含式算法,相 对独立于具体应用,因此在其他应用系统中也可能重用它们。
为提高可重用性,在编程时不应将策略和实现放在同一个方法中,而应将算法 的核心部分放在一个单独的具体实现方法中。为此需要从策略方法中提取具体参 数,作为调用实现方法的变元。
⑤ 全面覆盖 若输入条件的各种组合都可能出现时,应针对所有组合写出方
2、提高可扩充性
上述提高可重用性的准则,也能提高程序的可扩充性。 此外,以下面向对象程序设计准则也有助于提高可扩充性。 ① 封装实现策略
将类的实现策略(包括描述属性的数据结构、修改属性的算法 等)封装起来,对外只提供公有的接口,否则将降低今后修改数 据结构或算法的自由度。 ② 避免用一个方法遍历多条关联链
软件工程第九章
9.4.2、再生工程 、
3. 软件再生工程的风险 软件再生工程是一种软件工程活动,它与 任何软件工程项目一样,可能遇到各种风 险 (1) 过程风险(2) 人员风险(3) 应用风险 (4) 技术风险(5) 工具风险(6) 策略风险
9.1.3、软件维护的特点 、
3. 维护的特点 --非结构化维护。因为只有源程序,而 文档很少或没有文档,维护活动只能从阅 读、理解、分析源程序开始 --结构化维护。用软件工程思想开发的 软件具有各个阶段的文档,对于理解和掌 握软件功能、性能、系统结构、数据结构、 系统接口和设计约束有很大的作用
9.1.3、软件维护的特点 、
9.4.2、再生工程 、
再生工程综合了逆向工程的分析和设计抽 象的特点,具有对程序数据、体系结构和 逻辑的重构能力。执行重构可生成一个设 计,它产生与原来程序相同的功能,但具 有比原来程序更高的质量。
9.4.2、再生工程 、
1. 实施软件再生工程的目的 软件再生工程能够帮助软件机构降低软件演化的 风险。 再生工程可帮助软件机构补偿软件的投资。 再生工程可使得软件易于进一步变更。。 再生工程有着广阔的市场,可以取得良好的社会 效益和经济效益。 再生工程是推动自动软件维护发展的动力,因此 研究再生工程有十分重要的意义
1. 建立明确的软件质量目标和优先级,这样做有 助于提高软件的质量,降低软件生存周期的费用 。 2. 使用提高软件质量的技术和工具 (1) 模块化 (2) 结构化程序设计 (3) 使用结构化程序设计技术,提高现有系统的 可维护性
9.3.3、提高软件可维护性的方法 、
软件工程基础-ch09
第9章 统一建模语言UML 教学提示:本章介绍UML的概念、发展和主要内容;UML的静态建模机制:用例图、类图、对象图、包图、构件图和配置图;UML的动态建模机制:顺序图、协作图、状态图和活动图。
教学要求:重点讲述UML的主要内容,UML的建模机制;要求学生重点掌握用例图、类图、活动图和状态图、交互图。
一般了解包图、构件图、配置图。
统一建模语言(Unified Modeling Language,UML),由Booch、Rumbaugh和Jacobson 等3位专家提出。
不仅统一了他们的面向对象分析和设计表示方法,而且吸收了很多优秀的软件方法和思想,成为了面向对象建模的标准语言,即统一的OOA方法。
近年来,UML 不论在计算机学术界、软件产业界还是在商业界,UML已经逐渐成为人们为各种系统建模、描述系统体系结构、商业体系结构和商业过程时使用的统一工具,而且在实践过程中人们还在不断扩展它的应用领域。
9.1 UML概述面向对象的分析与设计(OOA&OOD)方法的发展在20世纪80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。
它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,还对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
9.1.1 UML的产生和发展公认的面向对象建模语言出现于20世纪70年代中期。
从1989年到1994年,其数量从不到10种增加到了50多种。
在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实践中不断完善。
但是,OO方法的用户并不了解不同建模语言的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模语言,于是爆发了一场“方法大战”。
90年代中,一批新方法出现了,其中最引人注目的是Booch 1993、OOSE和OMT-2等。
Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。
1991 年,他将以前向Ada的工作扩展到整个面向对象设计领域,提出的Booch 1993方法比较适合于系统的设计和构造。
软件工程讲义_第九章 构件级设计
传统观点
考虑ComputePageCost模块。该模块的目的在 于根据用户提供的规格说明来计算每页的印刷费用。 为了实现该功能需要以下数据:文档的页数,文档 的印刷份数,单面或者双面印刷,颜色,纸张大小。 这些数据通过该模块的接口传递给 ComputePageCost。ComputePageCost根据任 务量和复杂度,使用这些数据来决定一页的费用— —这是一个通过接口将所有数据传递给模块的功能。 每一页的费用与任务的大小成反比,与任务的复杂 度成正比。
什么是构件
通常来讲,构件是计算机软件中的一个模 块化的构造块。OMG UML规范将构件定 义为“系统中模块化的、可部署的和可替 换的部件,该部件封装了实现并暴露一系 列接口”。 构件存在于软件体系结构中,因而构件在 完成所建系统的需求和目标中起重要作用。 由于构件驻留于软件体系结构的内部,它 们必须与其他的构件和存在于软件边界以 外的实体进行通信和合作。
传统观点
在传统软件工程环境中,一个构件就是程序的 一个功能要素,程序由处理逻辑及实现处理逻辑 所需的内部数据结构以及能够保证构件被调用和 实现数据传递的接口构成。传统构件也被称为模 块,作为软件体系结构的一部分,它承担如下三 个重要角色之一:(1)控制构件,协调问题域中 所有其他构件的调用;(2)问题域构件,完成部分 或全部用户的需求;(3)基础设施构件,负责完成 问题域中所需相关处理的功能。
传统观点
图9-3给出了使用UML建模符号描述的构件级 设计。其中ComputePageCost模块通过调用 getJobData模块和数据库接口accessCostDB 来访问数据。接着,对ComputePageCost模 块进一步细化,给出算法和接口的细节描述。其 中算法的细节可以由图中显示的伪代码或者 UML活动图来表示。接口被表示为一组输入和 输出的数据对象或者数据项的集合。设计细化的 过程需要一直进行下去,直到能够提供指导构件 构造的足够细节为止。
软件工程九章面向对象方法学
4
2.软件重用程度很低 重用也称为再用或复用,是指同一事物不经修改或 稍加改动就多次重复使用。 软件重用是节约人力,提高软件生产率的重要途径。 结构分析、结构设计和结构程序设计(简写为 SA- SD-SP)技术,虽然给软件产业带来了巨大进步, 但却没能很好地解决软件 重用问题。 几乎每次开发一个新的软件系统时,都要针对这个 具体的系统作大量重复而又繁琐的工作。
14
原型法的基本思想: 首先建立一个能反映用户主要需求的原型系统,让 用户在计算机上运行、试用这个原型系统,通过实 践,了解未来系统的概貌,提出许多修改意见,根 据这些意见,快速修改原型系统,然后用户再次试 用修改后的原型系统„ 用户在试用原型系统的过程中,很容易判断它是否 真正满足自己的业务工作需要。 软件开发人员首先向用户提供一个“样品”(即原 型系统),用户经过试用向开发人员作出“反馈”。 通过“试用一反馈一修改”的多次反复,最终开发 出真正符合用户需要的应用系统,这就是用原型法 开发软件的优点。
7
出现问题的原因
1.僵化的设计模型 瀑布模型意味着在生命周期各阶段间存在着严格的 顺序性和依赖性。生命周期方法学特别强调预先定 义需求的重要性。 要求在着手进行具体的开发工作之前,必须通过需 求分析预先定义并“冻结”软件需求,然后再一步 一步地实现这些需求。
8
实践表明,在系统建立起来之前,往往很难仅仅 依靠分析就确定出一套完整、准确、一致、有效 的应用需求,这种预先定义需求的方法更不能适 应用户需求不断变化的情况: 预先定义需求的策略所作的假设,只对某些 软件成立,对于多数软件并不成立。人们为了 充实和细化他们的初步设想,通常需要经过在 某个能运行的系统上的实践过程。 项目参与者之间存在通信鸿沟 良好的通信和相互理解对于保证工程成功是至 关重要的。 各种文档,本质上是被动、静止的通信工具, 9 通过它们来理解一个动态系统是困难的。
软件工程第九章
} 对象是类的实例:CPeople Tom
2、 实例(instance) 实例是某个特定类所描述的一个具体对 象。 如:“张三”、“李四”是类“学生” 的实例。 对象:可以是一个具体的对象,也可以 泛指一 般的对象。 实例:必然是指一个在客观世界中存在 的具体对象。
3、消息(message)
对象之间通信的手段,是一个对象要 求另一 对象执行类中定义的某个操作的规 格说明。 通常一个消息由三部分组成:
§9.2.2 其他概念
1、类(Class) 具有相同属性和服务的一组对象的集合,它 为属于该类的全部对象提供了统一的抽象描述。 “类”好比是一个对象模板,用它可以产生 多个对象。
例:
类(class):是对象的“类型”(type)。 一般用关键字class来表示。 class CPeople { long ID; string name; void DoSomething();
继承性的优点
使得相似的对象可以共享程序代码和数据 结构,大大减少程序中的冗余信息。 便于软件修改维护。 用户在开发新系统时不必从零开始,可以 继承原有相似功能或者从类库中选取需要的 类,再派生新类。
8、 多态性(polymorphism)
指对象根据所接受的消息而做出动作, 同样的消息为不同的对象接受时可导致完 全不同的行动。
软件工程第9章
软件工程第9章
9.2.3
程序员在编写实现方法的代码时,既 应该考虑效率,也应该考虑健壮性。通常 需要在健壮性与效率之间做出适当的折衷。 必须认识到,对于任何一个实用软件来说, 健壮性都是不可忽略的质量指标。为提高
软件工程第9章
1. 2. 3. 4.
软件工程第9章
9.1 程序设计语言
9.1.1
选择编程语言的关键因素,是语言的 一致的表达能力、可重用性及可维护性。 从面向对象观点看来,能够更完整、更准 确地表达问题域语义的面向对象语言的语 法是非常重要的,因为这会带来下述几个
软件工程第9章
1. 一致的表示方法 2. 3.
软件工程第9章
9.1.2 面向对象语言的技术
软件工程第9章
最后,把系统作为一个整体来测试, 以发现软件需求中的错误。测试面向对象 软件的策略,与上述策略基本相同,但也
软件工程第9章
9.3.1 面向对象的单元测试
最小的可测试单元是封装起来的类和 对象。一个类可以包含一组不同的操作, 而一个特定的操作也可能存在于一组不同 的类中。因此,对于面向对象的软件来说,
软件工程第9章
5. 6. 7. 8. 9. 10.
软件工程第9章
9.1.3 选择面向对象语言
开发人员在选择面向对象语言时,还
软件工程第9章
1. 2. 3. 4.
软件工程第9章
9.2 程序设计风格
良好的程序设计风格对面向对象实现 来说尤其重要,不仅能明显减少维护或扩 充的开销,而且有助于在新项目中重用已
特点
一般说来,纯面向对象语言着重支持 面向对象方法研究和快速原型的实现,而 混合型面向对象语言的目标则是提高运行 速度和使传统程序员容易接受面向对象思 想。
软件工程导论(第9章)
与传统程序的“调用/返回”所不同的是,
对于传来的消息,对象可以返回相应的回答
信息,也可以不返回。
一个消息由三个部分组成:
1)接收信息的对象;
2)信息选择符(即消息名);
3)零个或多个变元(参数)。
如:MyCircle.Show(GREEN);
4、方法(Method)
方法,是对象所能执行的操作。
C++中把方法称为成员函数,如Circle类中
丈夫
结婚 图9.7 关联的角色 上图是一个递归关联的例子。
这种情况下,标明角色名有助于理解类图。
3)限定关联
目录
保存 被保存 普通关联 1…*
文件
目录
文件名
文件
图9.8 限定关联
利用限定词把一对多关系简化成了一对一关系。
4)关联类
队列 电梯控制器 4 电梯
*
按钮 图9.9 关联类示例
控制器对象和电梯对象之间的连接,对应着一个队列 (对象),它存储着控制器和电梯内部按钮的请求信息。
2)运算符重载 指同一运算符可以施加于不同类型的操作数 上面。当被操作数类型不同时,运算符的含义
是不同的。
编译时根据被操作数的类型,决定使用算符
的哪种语义。
另外,在实现一个类成员函数时,必须通过用类名
限定函数名来告诉编译器这个函数属于哪个类。
如,编写qput( )函数:
Void Queue :: qput (int i) { if (sloc = =100) {cout << “Queue if full” ; return; }
层次的类中,虚函数实现算法不同,在运行时根据
接收消息的对象所属于的类来决定执行虚函数的版 本,称为动态联编。
软件工程第9章
9.2.1 产品规模的度量
Slide 9.11
代码行--Lines of code (LOC)和千行交付源代码指 令(KDSI)以及千代码行( KLOC) FFP度量(File、Flow、Process) 功能点----Function Points COCOMO----构造性成本模型(Constructive Cost Model
© The McGraw-Hill Companies, 2007
9.2.2 成本估算技术
用类推法进行专家评判 自底向上方法 算法成本估算模型
Slide 9.28
© The McGraw-Hill Companies, 2007
用类推法进行专家评判
Slide 9.29
专家将目标产品和已经完成的产品进行比较
看每人月的KDSI 看每条源语句的成本
每个功能点的成本就非常有意义了
Figure 9.5
© The McGraw-Hill Companies, 2007
功能点的分析
Slide 9.26
和FFP一样,产品维护通常很难准确测度 可以在不改变以下输入的情况下对产品进行主要修 改
文件数、信息流数和过程数 输入、输出、查询、主文件和接口数
Slide 9.30
把产品分割成更小的组件
虽然更小的组件也不容易进行估算 但是,可以一步一步进阶进行成本估算
当使用面向对象范型时
类的独立性对此就会有所帮助 然而,在类之间的交互会使估算过程更复杂
© The McGraw-Hill Companies, 2007
算法成本估算模型
Slide 9.31