《教学课件第3章 软件系统开发方法.ppt》由会员分享,可在线阅读,更多相关《教学课件第3章 软件系统开发方法.ppt(117页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年4月23日星期六第1页第3章 软件系统开发方法o在软件开发的早期,人们常用的软件开发方法是边写边改法。这种开发方法在应用开发中最为快捷,但由于其开发的随意性,因而也最为低效。同时,使用该方法的项目常常因为管理失控而终结。基于这种情况,业界人士借鉴其它工程领域的方法,提出了许多有规则可言的软件系统开发方法。最著名的当数“瀑布式”方法了,即把软件开发过程分解成这样一些阶段:制定开发计划、需求分析和定义、系统设计、编码实现、测试验证。然而,在软件开发实践中完全遵循这种过程取得成功的案例并不多。其原因主要在于这种方法有一个前提条件,那就是系统需求必须明确、不变。但在现实应用中,这几乎是不可能
2、的。需求通常模糊不清,并且在系统开发期间随时都有可能发生变化。因此软件开发要求采用的方法过程也必须能适应这种变化,这就出现了其它一些软件开发方法,如原型法、敏捷方法等。2022年4月23日星期六第2页第3章 软件系统开发方法o3.1 软件开发生命周期o3.2 软件开发模型o3.3 传统软件开发方法o3.4 面向对象软件开发方法o3.5 RUP统一软件开发过程o3.6 敏捷软件开发技术o总结2022年4月23日星期六第3页3.1 软件开发生命周期o1. 问题引入问题引入n正如任何事物一样,软件也有其孕育、诞生、成长、成熟以及衰亡的生命过程,一般称其为“软件生命周期”。根据这一思想,可以得到软件生
3、命周期的六个阶段,即制定计划、需求分析和定义、设计、编码、测试、运行及维护。然而,在正式开发软件之前,我们必需了解软件生命周期各个阶段需要完成哪些任务?这些任务由哪些人员来完成? 2022年4月23日星期六第4页3.1 软件开发生命周期o2. 解答问题解答问题o(1) 制定计划(Planning)n团队人员:分析人员、领域专家及用户等。n这个阶段的任务是确定待开发软件系统的总体目标,给出软件系统的功能、性能及接口等方面的要求。由团队人员协作,共同研究完成该项软件开发任务的技术、经济、社会可行性,探讨解决问题的各种可能方案,并对现有可利用资源、成本、可取得的效益、开发进度等做出估计,制定出完成该
4、项开发任务的实施计划,并编写可行性研究报告。 2022年4月23日星期六第5页3.1 软件开发生命周期o(2) 需求分析和定义(Requirement Analysis and Definition)n团队人员:分析人员、测试人员、领域专家及用户等。n该阶段对于待开发软件项目获取的用户需求进行分析,并给出详细定义。这个阶段团队人员必须协同工作,让软件开发人员充分理解用户的各项需求,并确定哪些需求是可以满足的,哪些需求在现有技术下是不能满足的,对能满足的需求加以确切的描述。然后,编写出软件需求规格说明书(SRS)或系统功能说明书,以及初步的系统用户手册、测试用例等。为了团队人员之间能很好地沟通,
5、从这个阶段开始通常会采用一些标准的建模语言(如:统一建模语言,Unified Modeling Language,简称UML)对系统建模。 2022年4月23日星期六第6页3.1 软件开发生命周期o(3) 软件设计(Software Design)n团队人员:架构设计人员、软件设计人员、数据库设计员、用户界面设计员、封装体设计员和集成人员、测试人员等。n这个阶段通常分为两部分:概要设计和详细设计。n在软件设计阶段,软件开发人员把已经经过用户和领域专家确认的各项需求转换成相应的软件体系结构。结构中的每一成份都是意义明确的子系统、模块或用例,每个部分都和某些需求相对应,进行所谓的概要设计。然后对每
6、个模块或用例要完成的工作采用合适的技术进行具体的描述,如画出模块的程序流程图或描述类的属性、操作等,为源程序的编写工作打下基础,即所谓的详细设计。 2022年4月23日星期六第7页3.1 软件开发生命周期o(4) 编码(Coding)n团队人员:编程人员、测试人员等。n将详细设计阶段所描述的模块程序流程图或类的设计转换为计算机能处理的程序代码,即使用特定的程序设计语言表示的源程序。目前,通常使用高级程序设计语言编写程序,如C语言、Java语言等。2022年4月23日星期六第8页3.1 软件开发生命周期o(5) 软件测试(Software Testing)n团队人员:测试人员、开发人员、用户等。
7、n测试是保证软件质量的重要手段,其主要目的是通过软件测试暴露出软件中隐藏的错误和缺陷。软件测试的主要方式是在设计测试用例的基础上检验软件的各个组成部分。软件测试一般包括单元测试、集成测试、系统测试、验收测试等几个阶段。首先进行单元测试,查找各模块或类在功能和结构上存在的问题并加以修改,这个过程会反复进行;其次进行集成测试,验证各软件单元集成后形成的模块能否达到概要设计规格说明中各模块的设计目标;然后进行系统测试,目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计;最后进行确认测试,以检查已实现的软件是否满足了需求规格说明书中确定的各种需求,包括功能需求和性能需求,
8、决定已开发的软件能否交付用户使用。 2022年4月23日星期六第9页3.1 软件开发生命周期o(6) 运行/维护(Running/Maintenance)n团队人员:系统支持人员等。n已交付的软件投入正式使用,软件便进入运行阶段。软件在运行过程中可能会因为发现了软件中存在的错误需要修改;或为了适应变化了的软件工作环境,需做一些变更;或为了增强软件的功能需做变更等。这就称为软件维护。 2022年4月23日星期六第10页3.2 软件开发模型o一个软件的生命周期包含了若干个活动,那么,这些活动应该如何组织呢?不同的组织方式可能会产生很大差别的结果。o与其它工程项目中安排各道工序类似,为了反应软件开发
9、生命周期内的各种活动应如何组织,各活动之间应如何衔接,需要用软件开发模型做出直观的图示来表达。2022年4月23日星期六第11页3.2 软件开发模型o软件开发模型是从软件项目需求定义到软件经使用后被废弃为止,跨越整个软件生命周期的系统开发、运作和维护的全部过程、活动和任务的结构框架,它给出了软件开发活动各个阶段之间的关系。每种软件生命周期模型代表一种软件开发与管理的组织过程。 2022年4月23日星期六第12页3.2 软件开发模型o迄今为止,出现了多种软件开发模型。如:迄今为止,出现了多种软件开发模型。如:n瀑布模型n螺旋模型n演化模型n喷泉模型n智能模型n增量模型n原型化模型 2022年4月
10、23日星期六第13页3.2 软件开发模型o3.2.1 瀑布模型o3.2.2 演化模型o3.2.3 螺旋模型o3.2.4 增量模型2022年4月23日星期六第14页3.2.1 瀑布模型o1. 问题引入问题引入n为了解决边写边改方法给软件开发带来的困扰,业界人士借鉴其它工程方法率先提出了“瀑布式”开发过程,给出了瀑布模型的定义。那么,什么是瀑布模型? 2022年4月23日星期六第15页3.2.1 瀑布模型o2. 解答问题解答问题n瀑布模型将软件生命周期划分为制定开发计划、需求分析和定义、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,
11、逐级下落。采用瀑布模型的软件过程如下页图所示。 2022年4月23日星期六第16页3.2.1 瀑布模型 软件计划 需求分析和定义 软件设计 实现 测试 运行维护 2022年4月23日星期六第17页3.2.1 瀑布模型o3. 分析问题分析问题n瀑布模型每项开发活动均应具有下述特征:o(1) 从上一项活动接收本项活动的工作对象,作为本项活动的输入;o(2) 利用这一输入实施本项活动应完成的任务;o(3) 给出本项活动的工作成果,作为输出传递给下一项活动;o(4) 对本项活动实施的工作进行评审。若得到确认,则继续下一项活动;否则,返回到前项活动,或更前一项活动进行返工。 2022年4月23日星期六第
12、18页3.2.1 瀑布模型o瀑布模型中软件维护的特点:瀑布模型中软件维护的特点:n(1) 维护的具体要求是在软件投入使用以后提出来的,经过评价,确定需求变更的必要性,才进行维护工作。n(2) 维护中对软件的变更仍然要经历软件生命周期在开发中已经历过的各项活动。2022年4月23日星期六第19页3.2.1 瀑布模型o瀑布模型的优点:瀑布模型的优点:n(1) 为软件项目提供了按阶段划分的检查点,强调开发的阶段性。n(2) 强调早期计划及需求调查。n(3) 强调产品测试和阶段评审。n(4) 强调文档的重要性。 2022年4月23日星期六第20页3.2.1 瀑布模型o瀑布模型的缺点:瀑布模型的缺点:n
13、(1) 在项目各个阶段之间极少有反馈,往往会将早期的错误引入到后期各个阶段。n(2) 依赖于早期进行的唯一一次需求调查,用户参与较少,不能适应需求的变化。n(3) 只有在项目生命周期的后期才能看到结果,可能与用户的需求出现很大的偏差,使风险推迟到项目开发的后期阶段才显露出来,因而失去及早纠正的机会。n(4) 通过过多的强制完成日期和里程碑来跟踪各个项目阶段,灵活性较差。 2022年4月23日星期六第21页3.2.1 瀑布模型o瀑布模型的应用场合n瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。如操作系统、编译系统等系统软件的开发。n当用户需求不明确或经常变更时,不宜采用瀑布
14、模型,可以考虑其它的架构来进行项目管理,如:演化模型等。 2022年4月23日星期六第22页3.2.2 演化模型o1. 问题引入问题引入n前面谈到瀑布模型不宜用在用户需求不明确或经常变更需求的项目中。为了适应用户需求的变化,建议采用演化模型。那么,什么是演化模型? 2022年4月23日星期六第23页3.2.2 演化模型o2. 解答问题解答问题n演化模型主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。2022年4月23日星期六第24页3.2.2 演化模型o该模型可以表示为:n第一次迭代(需求设计编
15、码测试集成)反馈第二次迭代(需求设计编码测试集成)反馈. n如下页图所示。2022年4月23日星期六第25页3.2.2 演化模型 问 题 定 义 需求分析 设计 编码 测试 集成 交付用户 迭代 1 迭代 2 迭代 3 迭代 n 反馈 反馈 反馈 需求分析 设计 编码 测试 集成 交付用户 需求分析 设计 编码 测试 集成 交付用户 需求分析 设计 编码 测试 集成 交付用户 2022年4月23日星期六第26页3.2.2 演化模型o演化模型的主要优点:演化模型的主要优点:n(1) 用户能在开发过程中而不是开发接近尾声时看到自己所需要的软件产品。对发现的问题能够提早解决。n(2) 在一定程度上减
16、少了软件开发活动的盲目性。如果在某次迭代中,其需求没有满足用户的要求,软件开发人员可根据用户的反馈信息在下一次迭代中予以修正。n(3) 将系统中难度较大、风险较高的部分安排在早期的迭代中,可增加项目的成功率。 2022年4月23日星期六第27页3.2.2 演化模型o演化模型的缺点演化模型的缺点n(1) 由于项目需求在开发初期不可能完全弄清楚,这样会给系统总体设计带来很大的困难,并影响系统设计的完整性。n(2) 如果在开发过程中缺乏严格的过程管理,演化模型很可能退化为边写边改模式。n(3) 如果没有一定的约束条件,可能永远无法得到一个最终的软件产品。 2022年4月23日星期六第28页3.2.2
17、 演化模型o演化模型的适应场合n演化模型特别适用于用户需求不够明确的软件开发项目,但不适宜用于大而复杂的系统。 2022年4月23日星期六第29页3.2.3 螺旋模型o1. 问题引入问题引入n对于复杂的大型软件系统,开发一个原型往往很难达到要求,显然用单一的演化模型很难开发出这样的软件系统。那么,究竟要使用什么样的模型才适合用来开发大型而复杂的软件系统呢?答案就是螺旋模型。然而,什么是螺旋模型?2022年4月23日星期六第30页3.2.3 螺旋模型o2. 解答问题解答问题n螺旋模型沿着螺线旋转,在笛卡尔坐标的四个象限上分别表达了每个迭代周期的四个阶段,从左象限按顺时针方向依次为: 风险 分析
18、可运行原型 原型 1 原型 2 原型 3 风险分析 风险分析 风险分析 操作概念 需求计划、生命周期计划 开发计划 集成与测试计划 软件需求 需求确认 软件产品设计 设计确认与验证 详细设计 编码 单元测试 集成测试 验收测试 实施 累计费用 各步骤的进度 评估方案 识别并排除风险 制定目标 选择方案 设定约束条件 计划下一阶段 开发并验证下一级产品 模拟模型基准 2022年4月23日星期六第31页3.2.3 螺旋模型o(1) 制定计划n确定该阶段的软件目标,选定为完成这些目标的实施方案,设定这些方案的约束条件。o(2) 风险分析n分析所选方案,识别并努力消除各种潜在的风险,通常用构建原型的方
19、法来消除风险。如果不能消除风险,则停止开发工作或降低软件项目规模。如果成功地消除了所有风险,则转向下一个阶段。o(3) 实施工程n实施软件开发。这个阶段相当于一个纯粹的瀑布模型。o(4) 用户评估n由用户评价开发工作,提出修改建议。 2022年4月23日星期六第32页3.2.3 螺旋模型o3. 分析问题分析问题n螺旋模型将瀑布模型和演化模型结合起来,吸取了两者的优点,并加入了两种模型都忽略了的风险分析,弥补了两种模型的不足。 2022年4月23日星期六第33页3.2.3 螺旋模型o软件风险分析n软件风险是任何软件开发项目中普遍存在的实际问题,项目规模越大,问题越复杂,资源、成本、进度等因素的不
20、确定性就越大,承担该项目所冒的风险也就越大。软件风险可能在不同程度上损害软件的开发过程和软件产品的质量。因此,在软件开发过程中必须及时对风险进行识别、分析,采取应有的措施,以消除或较少风险的损害。 2022年4月23日星期六第34页3.2.3 螺旋模型o采用螺旋模型的软件开发过程n在螺旋模型中,沿着螺线由内向外每旋转一圈,也就是每完成一次迭代过程,软件开发就前进一个层次,开发出一个更加完善的软件版本。在每一圈螺线上,风险分析作为开发是否能够继续下去的判断点。假如风险太大,开发人员和用户无法承受,开发项目有可能被终止。但多数情况下沿螺线的活动会继续下去,并由内向外逐步延伸,最终得到用户所期望的系
21、统。 2022年4月23日星期六第35页3.2.3 螺旋模型o螺旋模型的优点:螺旋模型的优点:n(1) 设计上的灵活性,可以保证在项目的各个阶段进行变更。n(2) 以小的分段来构建大型系统,使资源、成本和进度的估计变得更加简单容易。n(3) 用户始终参与到每个阶段的开发中,保证了项目的正确性与可控性。2022年4月23日星期六第36页3.2.3 螺旋模型o螺旋模型的缺点:螺旋模型的缺点:n(1) 采用螺旋模型需要具有丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能及时识别出潜在的风险,或者消除风险的能力不足,都会造成极其重大的损失。n(2) 过多的迭代次数会增加软件开发成本,延迟
22、交付使用的时间。 2022年4月23日星期六第37页3.2.3 螺旋模型o螺旋模型的应用场合n螺旋模型支持需求不明确,特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法。由于螺旋模型是以风险分析驱动的,一旦在开发过程中风险过大就要停止继续开发,因此,螺旋模型比较适合应用于产品研发或机构内部大型的复杂系统的开发,而不适合用于合同项目的开发。如果要将螺旋模型作为合同项目的开发模型,则必须在签订合同之前考虑清楚所有的开发风险,否则,在开发过程中如果由于风险过大而中途停止开发,就会赔偿经济损失或者承担法律责任。 2022年4月23日星期六第38页3.2.4 增量模型o1
23、. 问题引入问题引入n采用瀑布模型或演化模型开发项目时,目标都是一次性就把一个满足所有需求的产品提交给用户。然而,增量模型则与之不同,它分批地逐步向用户提交可操作的产品。那么,增量模型的原理是怎样的?2022年4月23日星期六第39页3.2.4 增量模型o2. 解答问题解答问题n增量模型融合了瀑布模型的基本成分和快速原型模型的迭代特征。该模型采用随着日程的进展而交错进行的线性序列,每一个线性序列产生软件的一个可发布的“增量”。n当使用增量模型时,第1个增量往往是核心产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这
24、个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。n增量模型强调每一个增量均发布一个可操作的产品。采用增量模型的软件过程如下页图所示。 2022年4月23日星期六第40页3.2.4 增量模型 分析 设计 实现 测试 功能 时间 分析 设计 实现 测试 分析 设计 实现 测试 分析 设计 实现 测试 增量 1 增量 2 增量 3 增量 4 . 发布可操作的产品 2022年4月23日星期六第41页3.2.4 增量模型o3. 分析问题分析问题n和所有其它生命周期模型一样,增量模型并不是完美无缺的,在具有一些优点的同时,同样也具有一些缺点。 2022年4月23日星期六第42页3.2.4 增量
25、模型o增量模型的优点:增量模型的优点:n(1) 人员分配灵活,刚开始不用投入大量人力资源,可以避免不必要的浪费。n(2) 重要功能被首先交付,可以获得最多的测试,保证软件产品的质量。n(3) 早期发布的可操作产品可以作为原型为后期增量开发提供需求。n(4) 在较短时间内向用户提交部分工作的产品,可以让用户对开发项目和开发团队有信心。n(5) 用户能看到所开发软件的中间版本,可以使最终产品不至于偏离用户的需求。n(6) 可以将技术难度大的部分作为早期的增量,能够有效地管理与控制技术风险。 2022年4月23日星期六第43页3.2.4 增量模型o增量模型的缺点:增量模型的缺点:n(1) 在开发过程
26、中,需求的变化是不可避免的。如果不能有效地控制并管理好需求的变更,增量模型很容易退化为边写边改模式,从而使软件过程的控制失去整体性。n(2) 由于各个增量逐渐并入已有的结构,所以加入的增量部分不能破坏已构造好的系统部分,这需要软件具备开放式的体系结构,对开发团队的技术要求更高。n(3) 难以对所有增量进行有效的集成。 2022年4月23日星期六第44页3.2.4 增量模型o增量模型的应用场合n增量模型与原型模型、演化模型一样,本质上是迭代的,都能应用在需求不明确、需求变化大的软件项目的开发中,但与其它迭代式的模型不一样的是,增量模型强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可
27、拆卸”版本。用户可对每一个可操作产品进行评估,能很好地满足用户需求,大大提高了项目的成功率。 2022年4月23日星期六第45页3.3 传统软件开发方法o1. 问题引入问题引入n在传统的软件开发过程中,最重要的是明确和分解系统功能。基于传统生命周期的结构化软件开发方法逐渐暴露出了它自身的一些缺点:难以理解和维护、可重用性差等。n这些缺点是由什么原因引起的? 2022年4月23日星期六第46页3.3 传统软件开发方法o2. 问题解答n在结构化软件开发(传统的面向过程的软件开发方法)的整个过程中,重点放在了操作上。在整个开发过程中,过程化程序设计方法完全将程序中的一个非常重要的方面数据,与操作分离
28、开来,使得数据可以被所有函数或过程完全访问。 函数 函数 函数 数据 数据 2022年4月23日星期六第47页3.3 传统软件开发方法o3. 分析问题分析问题n传统软件开发方法遵循软件生命周期,整个开发过程包括可行性研究、需求分析、总体设计、详细设计、编码、测试和维护等六个阶段。 n结构化方法是传统软件开发方法的一个很好的例子,包括结构化分析、结构化设计、结构化编程和结构化测试等。2022年4月23日星期六第48页3.3 传统软件开发方法n结构化分析的工具是数据流图和数据字典,用来表达和理解问题的数据域和功能域。数据域包括数据流、数据内容和数据结构,而功能域则反映这三个方面的控制信息。通常将一
29、个复杂问题按功能进行分解并逐层细化。 2022年4月23日星期六第49页3.3 传统软件开发方法n结构化设计的基本思想是模块化思想。将数据流图进一步细化到每一个子功能都清晰易懂,每个模块完成一个子功能,每层模块合成一个高一级的功能。总体设计阶段包括数据库结构设计、用户界面设计、功能模块结构设计等。详细设计是根据每个模块的功能设计实现算法以及实现这些算法的逻辑控制流程。详细设计的表示工具有程序流程图、PAD图、N-S图、判定表和判定树、伪码和PDL等。2022年4月23日星期六第50页3.3 传统软件开发方法n编程是指把软件设计的结果转换为用某种程序设计语言所表示的程序代码。结构化的程序设计语言
30、,例如,Fortran、Pascal、C等,是通过把程序划分成函数和功能模块来控制整个程序的执行流程的。2022年4月23日星期六第51页3.3 传统软件开发方法o传统软件开发方法有以下四个特点:n(1) 以模块作为基本的构造单元。使得编程与现实世界之间存在理解鸿沟。n(2) 自顶向下逐步细分功能。系统重用性很差。n(3) 不同模块之间的信息传递通过函数的调用来完成。其控制信息传递效率极其低下。n(4) 坚持严格的阶段性评审。虽然能够保证软件质量,但整个开发过程缺少应有的灵活性。 2022年4月23日星期六第52页3.3 传统软件开发方法o传统的面向过程的结构化开发方法的另一个问题是它不能很好
31、地表示现实世界。2022年4月23日星期六第53页3.3 传统软件开发方法o为了提高系统的可理解性、可维护性和可重用性,并能很好地表示现实世界,开发软件项目时,最好采用面向对象软件开发技术。 2022年4月23日星期六第54页3.4 面向对象软件开发技术o3.4.1 面向对象的基本概念o3.4.2 面向对象的开发2022年4月23日星期六第55页3.4.1 面向对象的基本概念o概念概念3-1:对象对象n解答:o对象是指现实世界中各种各样的实体。它既可以是具体的能触及的事物,如一个人、一栋大楼、一架飞机,甚至一个地球等;也可以是无法触及的抽象事物,如一项计划、一次约会、一场演出等。一个对象既可以
32、非常简单,又可以非常复杂,复杂的对象往往可以由若干个简单的对象组合而成。 2022年4月23日星期六第56页3.4.1 面向对象的基本概念o对象定义了状态和行为。对象的状态用数据值来表示,而对象的行为则用来改变对象的状态。在面向对象的系统中,对象是基本的运行实体。2022年4月23日星期六第57页3.4.1 面向对象的基本概念o所有这些对象,除去它们都是现实世界中所存在的事物之外,它们都还具有各自不同的特征:n(1) 有一个名字用来区别于其它对象。例如:张三、李四等。 2022年4月23日星期六第58页3.4.1 面向对象的基本概念n(2) 有一个状态用来描述对象的某些特征。例如:o对象张三的
33、状态:n姓名:张三n性别:男n身高:179cmn体重:71kg 2022年4月23日星期六第59页3.4.1 面向对象的基本概念n(3) 有一组操作,每一个操作决定对象的一种功能或行为。对象的操作可分为两类:一类是自身所承受的操作,使用setter、getter作为操作名;一类是施加于其它对象的操作。例如:o对象张三的操作(可完成的功能):n回答姓名n回答性别n回答身高n回答体重n打电话n踢足球n驾车 属于对象自身所承受的操作 属于施加于其它对象的操作 2022年4月23日星期六第60页3.4.1 面向对象的基本概念o概念概念3-2:类类n解答:o类是对一组客观对象的抽象,它将该组对象所具有的
34、共同特征(包括结构特征和行为特征)集中起来,以说明该组对象的性质和能力。例如:“人”这个词就是抽象了所有人(单个的人,如张三、李四等,这些都是对象)的共同之处。 2022年4月23日星期六第61页3.4.1 面向对象的基本概念o在面向对象编程中,通常把类定义为抽象数据类型,而对在面向对象编程中,通常把类定义为抽象数据类型,而对象是类的类型变量。当定义了一个类以后,就可以生成任象是类的类型变量。当定义了一个类以后,就可以生成任意多个属于这个类的对象,这个过程叫做实例化。例如,意多个属于这个类的对象,这个过程叫做实例化。例如,用用Java语言定义一个类语言定义一个类Car为:为:npublic c
35、lass Car n no这时可生成任意多个属于这时可生成任意多个属于Car类的对象:类的对象:nCar car1 = new Car();nCar car2 = new Car(); 2022年4月23日星期六第62页3.4.1 面向对象的基本概念o概念概念3-3:类与对象的关系:类与对象的关系n解答:o组成类的对象均为该类的实例。类与对象之间的关系就是抽象与具体的关系。例如,张三是一个学生,学生是一个类,而张三作为一个具体的对象,是学生类的一个实例。类是多个实例的综合抽象,而实例又是类的个体事物。 2022年4月23日星期六第63页3.4.1 面向对象的基本概念o在面向对象编程中,定义一个
36、类就定义了这个类的一系列属性与操作,对于同一个类的不同实例之间,必定具有如下特点:n(1) 相同的属性集合;n(2) 相同的操作集合;n(3) 不同的对象名。o相同的属性集合与操作集合用于标识这些对象属于同一个类,用不同的对象名来区别不同的对象。2022年4月23日星期六第64页3.4.1 面向对象的基本概念o概念概念3-4:面向对象:面向对象n解答:o面向对象(Object-Oriented,简称OO)是指人们按照自然的思维方式认识客观世界,采用基于对象(实体)的概念建立模型,模拟客观世界,从而用来分析、设计和实现软件的方法。把软件组织成一系列离散的、合并了数据结构和行为的对象集。 2022
37、年4月23日星期六第65页3.4.1 面向对象的基本概念o采用面向对象技术开发软件的方法,称为面向对象软件开发方法。面向对象方法具有以下几个特性:n(1) 对象唯一性o每个对象都有唯一的标识(如同人们的身份证号码),通过这个标识,可以找到相应的对象。在对象的整个生命周期(从对象的创建到对象的消亡)中,它的标识都不会改变。不同的对象(即使其它属性完全相同,例如两个完全一样的球)必须具有不同的标识。n(2) 封装性o具有一致的数据结构(属性)和行为(操作)的对象抽象成类。n(3) 继承性o子类自动共享父类的数据结构和行为的机制,这是类之间的一种关系。继承性是面向对象程序设计语言不同于其它程序设计语
38、言最重要的特点,是其它语言所没有的。n(4) 多态性o它是面向对象系统中的又一个重要特性。多态性描述的是同一个消息可以根据发送消息对象的不同采用多种不同的行为方式。即是指相同的操作或函数可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象就称为多态性。 2022年4月23日星期六第66页3.4.1 面向对象的基本概念o概念概念3-5:封装及面向对象系统的封装性:封装及面向对象系统的封装性n解答:o封装也叫做信息隐藏。从字面上理解,封装就是将某事物包装起来,使外界不了解其实际内容。从软件开发的角度,封装是指将一个数据和与这个数据有关的各种操作放在一起,形
39、成一个能动的实体对象,使用者不必知道对象的内部结构,只需根据对象提供的外部接口访问对象。从使用者的角度看,这些对象就像一个“黑盒子”,其内部数据和行为是被隐藏起来、看不见的。o面向对象系统的封装性是一种信息隐藏技术,它隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传递消息给它。 2022年4月23日星期六第67页3.4.1 面向对象的基本概念o定义为公有的成员方法或函数,才是对象提供的公共消息接口。外部对象只有通过这些公共接口才能访问到对象的内部数据,这就是所谓的信息隐藏技术。 2022年4月23日星期六第68页3.4.1 面向对象的基本概念o根据对封装的定义可以看出,封装应该具有
40、下面几个条件:n(1) 具有一个清晰的边界。对象所有的私有数据、成员方法或函数的实现细节都被固定在这个边界内。n(2) 具有一个接口。这个接口描述了对象之间的交互作用,它就是消息。n(3) 对象内部的实现代码受到封装体的保护,其它对象不能直接修改本对象所拥有的数据和代码。 2022年4月23日星期六第69页3.4.1 面向对象的基本概念o概念概念3-6:继承及面向对象系统的继承性:继承及面向对象系统的继承性n解答:o继承是指一个类能够从另一个类那里获得一些特性。在这个过程中,超类把它的特性赋给了子类。o面向对象系统的继承性是对具有层次关系的类的属性和操作进行共享的一种方式。2022年4月23日
41、星期六第70页3.4.1 面向对象的基本概念o继承是面向对象软件技术中的一个概念。如果一个类A继承自另一个类B,就把这个A称为B的“子类”或“派生类”,而把B称为A的“父类”或“超类”或“基类”。2022年4月23日星期六第71页3.4.1 面向对象的基本概念o继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在子类继承父类时,既可以重新定义子类的某些属性和方法,也可以重写某些方法,来覆盖父类的原有属性和方法,使其获得与父类不同的功能。2022年4月23日星期六第72页3.4.1 面向对象的基本概念o继承有两个方面的作用:n避免代码冗余,提高可理解性和可维护性;n继承是从老
42、对象生成新对象的一种代码重用机制,使系统更具灵活性和适应性,它使得解释多态性成为可能。2022年4月23日星期六第73页3.4.1 面向对象的基本概念o继承有单继承和多继承之分。 图形 三角形 矩形 椭圆形 圆形 正方形 长方形 对话框 列表框 文本框 组合框 复选框 各种按钮 单继承多继承2022年4月23日星期六第74页3.4.1 面向对象的基本概念o多重继承的引入,使面向对象系统大大增加了模拟现实世界的能力,但是系统结构变得非常复杂,增加了系统的理解与维护难度。o在面向对象程序设计语言中,C+支持多继承,而Java语言只支持单继承,不支持多继承。 2022年4月23日星期六第75页3.4
43、.1 面向对象的基本概念o子类是否可以访问父类的所有成员变量和成员方法(或成员函数)?在前面介绍封装性时谈到,定义类的数据成员与方法成员有三种访问域(三种可见性),即公有访问域(public)、受保护访问域(protected)、私有访问域(private)。父类的成员若定义为受保护访问域和公有访问域,子类是可以访问的;若父类成员定义为私有访问域,子类则无权访问。2022年4月23日星期六第76页3.4.1 面向对象的基本概念o概念概念3-7:重载及面向对象系统的多态性:重载及面向对象系统的多态性n解答:o一个类中的操作具有相同的名称和不同的参数,这样的操作被称为“重载”。面向对象系统的多态性
44、是指,当不同的对象收到相同的消息时产生不同的动作。常用在功能相同但参数的数据类型有微小差别的操作中。 2022年4月23日星期六第77页3.4.1 面向对象的基本概念o操作名、参数及其类型和操作的返回类型合在一起称为操作的签名(注:这里的操作就是方法或函数)。一个类中的所有操作都必须具有唯一的签名,即是说一个类中不能存在两个相同签名的操作。o具有相同名称和参数但是返回类型不同的操作不能称为重载,因为在调用操作时并没有描述操作的返回类型,被调用的对象不能分辨出仅仅是返回类型不同的两个操作,因此这样的操作具有歧义性,是无效的。2022年4月23日星期六第78页3.4.2 面向对象的开发o1. 问题
45、引入问题引入n传统的软件开发生命周期包含了六个阶段:制定计划、需求分析和定义、设计、编码、测试、运行与维护,面向对象的开发和传统的软件开发方法不同,它是一种基于现实世界抽象的新的软件开发方法。n那么,面向对象的软件开发中,软件生命周期又可分为哪几个阶段?各个阶段主要完成哪些任务?2022年4月23日星期六第79页3.4.2 面向对象的开发o2. 问题解答问题解答n在面向对象的软件开发中,软件生命周期可分为以下几个阶段:n(1) 系统分析阶段o在这个阶段,需要建立一个反映现实客观世界情形的模型。为了建立这个模型,需要分析员和需求人员共同明确现实世界中的问题。这个模型应该解决系统必须做什么,而不是
46、怎么做的问题。分析之后将得到分析模型:对象模型、动态模型和功能模型。n(2) 系统设计阶段o这个阶段需要给出怎样解决问题的决策。包括将系统划分成子系统和子系统软硬件如何配置,确定系统的整体框架结构。 2022年4月23日星期六第80页3.4.2 面向对象的开发n(3) 对象设计阶段o该阶段将应用领域的概念转换为计算机软件领域的概念。在系统分析阶段所定义的问题,在这个阶段来确定解决问题的方法。将分析模型的逻辑结构映射到一个程序的物理组织,得到设计模型。n(4) 实现阶段o在这个阶段,将在对象设计阶段开发的类转换成用特定的程序设计语言编写的代码或数据库。n(5) 测试阶段o传统软件开发的测试通常经
47、过单元测试、集成测试、系统测试三个环节。由于面向对象有其自身的特点,参考面向对象软件开发模式,面向对象开发测试包括面向对象分析的测试、面向对象设计的测试、面向对象编程的测试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 2022年4月23日星期六第81页3.4.2 面向对象的开发o面向对象开发生命周期是一个迭代的增量式过程,因此,使用面向对象软件开发技术能很好地适应系统需求的变化,并能提高软件的可理解性、可维护性和可重用性,以致于提高软件企业的可持续发展性。 2022年4月23日星期六第82页3.4.2 面向对象的开发o面向对象的分析与设计过程适合于使用UML来建模,同时,使用UML
48、建模工具可以将模型(对于嵌入式系统,通常指状态图;而对于一般系统,则是指类图)映射为特定编程语言的程序代码,也可以将永久类映射为关系数据库结构,还能将分析模型中得到的边界类的属性与操作部分映射为用户界面中的图形元素。o面向对象开发特别适合采用下一节将要介绍的RUP统一软件开发过程。 2022年4月23日星期六第83页3.5 RUP统一软件开发过程oRUP(Rational Unified Process,统一软件开发过程),是由IBM Rational公司提出来的。它是一个通用的过程框架,适用面非常广,可以适用于不同种类的软件系统、应用领域、组织类型、性能水平和项目规模。它是一个演化的开发过程
49、。 2022年4月23日星期六第84页3.5 RUP统一软件开发过程oRUP是基于构件的开发过程,与其它软件过程相比,RUP具有三个显著的特点:n(1) 它是用例驱动的过程。 n(2) 它是迭代和增量式的过程。n(3) 它是以基本架构为中心的过程。2022年4月23日星期六第85页3.5.1RUP生命周期o1. 问题引入问题引入nRUP是一种软件开发过程,包括开发过程、管理过程和支撑过程,它的生命周期是怎样的呢?2022年4月23日星期六第86页3.5.1RUP生命周期o2. 问题解答问题解答n与传统的一维瀑布开发模型不同,RUP软件开发生命周期是一个二维的开发模型。横轴表示软件过程的时间维,
50、是过程展开的生命周期特征,体现开发过程的动态结构,被分成四个顺序阶段,分别是:先启阶段(Inception),精化阶段(Elaboration),构造阶段(Construction),移交阶段(Transition)。2022年4月23日星期六第87页3.5.1RUP生命周期 先启 精化 构造 移交 阶阶 段段 环境 项目管理 配置和变更管理 部署 测试 实施 分析与设计 需求 业务建模 工作流程工作流程 初始 E1 C1 T1 T2 C2 Cn E2 迭迭 代代 2022年4月23日星期六第88页3.5.2 RUP统一开发过程的核心工作流程oRUP生命周期开发模型的纵轴描述了软件项目开发和组