资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,第,1,章 绪论,企业信息化建设与,ERP,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,1,章 绪论,企业信息化建设与,ERP,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,信息产业发展机理及测度理论与方法研究,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,主讲人:王欣,第,1,章,Microsoft Project,与项目管理,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,UML,系统建模及系统分析与设计,编著,第,1,章 面向对象软件开发方法,教学目的,了解软件的发展和软件工程的概念。,了解软件开发的常用方法。,重点掌握面向对象技术的基本概念和开发过程。,了解几种典型的面向对象开发方法。,了解可行性研究方法。,掌握可行性分析报告的书写格式。,1.1,软件发展与软件工程,软件是一种特别的产品,随着其规模和复杂性的进步及应用领域的扩大,逐渐形成了工程。,软件(,software,)是计算机系统中与硬件(,hardware,)相互依存的另一部分,它包括程序(,program,)、相关数据(,data,)及其说明文档(,document,)。,1.1,软件发展与软件工程,软件工程(,Software Engineering,,简称为,SE,)是针对软件这一具有特殊性质的产品的工程化方法。,软件工程涵盖了软件生存周期的所有阶段,并提供了一整套工程化的方法来指导软件人员的开发工作。,1.1.1,软件的发展与特征,1.,软件的发展阶段,软件发展的历史可以大致分为如下的四个阶段:,第一个阶段(,20,世纪,50,年代到,60,年代)是程序设计阶段,基本是个体手工劳动的生产方式。,20,世纪,50,年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。,20,世纪,60,年代美国大学开始有计算机专业,专门教人们写软件。,早期的软件开发也没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。,1.1.1,软件的发展与特征,1.,软件的发展阶段,第一个阶段严格来说这个时期尚无软件的概念,基本上只有程序、程序设计概念,不重视程序设计方法。,软件主要是用于科学计算,规模很小,采用简单的工具(基本上采用低级语言),硬件的存储容量小,运行可靠性差。,20,世纪中期,盘算机从军用领域转向民用领域应用,那时编写程序的工作被视为艺术家的创作。,第一阶段的主要特征是:,程序设计只是一个隐含在开发者头脑中的过程,程序设计的结果,除了程序流程图和源程序清单可以留下来之外没有任何其他形式的文档资料保留下来。,此时只有程序的概念,没有软件的概念。,主要采用汇编语言,甚至是机器语言,以解决计算机内存容量不够和运算速度太低的矛盾。由于过分追求编程技巧,程序设计被视为某个人的神秘技巧,程序除作者本人外,其他人很难读懂。,1.,软件的发展阶段,第二阶段(,20,世纪,60,年代到,70,年代)是软件设计阶段,采取小组合作生产方式。,这一时期盘算机的利用领域得到进一步扩大,对软件系统的需求和软件自身的复杂度急剧上升,传统的开发方法无法适应用户在质量、效率等方面对软件的需求。,人们为摆脱汇编语言和机器语言编程的困难,相继研制出了一批高级程序设计语言,大大加速了计算机应用普及的步伐,各种类型的应用程序相继出现。,1.,软件的发展阶段,第二阶段软件开始作为一种产品被广泛使用,出现了“软件作坊”。“,这个阶段的开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。最为突出的例子是美国,IBM,公司于,1963,年,1966,年开发的,IBM360,系列机的操作系统。,IBM360,操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。“软件危机”就这样开始了。,“,软件危机”,“,软件危机”使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧。,为解决这个问题,,1968,年秋季,NATO,(北大西洋公约组织)的科技委员会召集了近,50,名一流的编程人员、计算机科学家和工业界巨头讨论并制定摆脱“软件危机”的对策。在联邦德国召开的这次国际学术会议上第一次提出了“软件危机”(,software crisis,)。,“,软件危机”,软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。,概括来说,软件危机包含两方面问题:一是如何开发软件,以满足日益增长,日趋复杂的需求;二是如何维护数量不断膨胀的软件产品。,第二阶段阶段的主要特征,由于程序的规模增大,程序设计已不可能由个人独立完成,而需要多人分工协作。软件的开发方式由“个体生产”发展到“小组软件作坊”。,程序的运行、维护也不再由一个人来承担,而是由开发小组承担。,程序已不再是计算机硬件的附属成份,而是计算机系统中与硬件相互依存、共同发挥作用的不可缺少的部分。在计算机系统的开发过程中,起主导作用的已经不仅仅是硬件工程师,同时也包括软件工程师。,1.,软件的发展阶段,第三个阶段(,20,世纪,70,年代到,90,年代)采用工程化的生产方式,是传统软件工程阶段。,微处理器的出现与应用使个人计算机发展迅速,这个阶段的硬件向超高速、大容量、微型化以及网络化方向发展。,软件系统的规模、复杂性增强,促进了软件开发过程管理及工程化。,这个时期还包括开发、使用和维护过程所需的文档。软件开发范围从需求定义、分析、设计、编码、测试、使用到维护等整个软件生命周期。,第三阶段的主要特征,软件产业已经兴起,“软件作坊”已经发展为软件公司,甚至是跨国公司。,软件开发的成功率大大提高,软件的质量也有了很大的保证。软件已经产品化、系列化、标准化、工程化。,软件工程并发环境及其相应的集成工具大量涌现,软件开发技术中的度量问题受到重视,1.,软件的发展阶段,第四阶段(,20,世纪,90,年代至今)是现代软件工程阶段。,数据库、开发工具、开发环境、网络、分布式、面向对象技术等工具方法都得到应用。,Internet,技术的迅速发展使得软件系统从封闭走向开放,,Web,应用成为人们在,Internet,上最主要的应用模式,异构环境下分布式软件的开发成为一种主流需求,软件复用和构件技术成为技术热点。,第四阶段的主要特征:,面向对象技术广泛使用。,软件开发技术逐渐成熟。,这个时代的主流应用技术采用面向对象技术、软件复用技术(设计模式、软件框架、软件体系结构等)、构件设计技术、分布式计算技术、软件过程管理技术等。,2.,软件的特征,软件同传统的工业产品相比,有其独特的特性。,软件是一种逻辑实体,具有抽象性。,软件没有明显的制造过程。,软件在使用过程中,没有磨损、老化的问题。当修改的成本变得难以接受时,软件就被抛弃。,软件对硬件和环境有着不同程度的依赖性,这就导致了软件移植的问题。,2.,软件的特征,软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。,软件是复杂的,而且以后会更加复杂。,软件的成本相当昂贵。软件开发需要投入大量的、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开销。,软件工作牵涉到很多社会因素。人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。,1.1.2,软件工程,软件工程的方法就是基于软件危机的问题提出来的。,大型的、复杂的软件系统开发是一项工程,必须按工程学的方法组织软件的生产和管理,必须经过系统的分析、设计、实现、测试和维护等一系列的软件生命周期阶段。这一认识促使了软件工程学的诞生。,1.,软件工程的概念与知识体系,软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。软件工程包括两方面内容:软件开发技术和软件项目管理。,软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。软件工程的三要素是方法、工具和过程。,软件工程应该包括的知识,IEEE,的软件工程实施体系指南,SEWBOK,(,Guide to the Software Engineering Body of Knowledge 2004Version,)界定了软件工程的,10,个知识领域(,KAs,:,Knowledge Areas,),即软件需求、软件设计、软件构建、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法及软件质量。,软件工程知识体系指南(,2004,),知识域,内容,软件需求,软件需求基础、需求过程、需求获取、需求分析、需求规格说明、需求确认和实践考虑,软件设计,软件设计基础、软件设计关键问题、软件结构与体系结构、软件设计质量的分析与评价、软件设计符号、软件设计的策略与方法,软件构造,软件构造基础、管理构造、实际考虑,软件测试,软件测试基础和测试级别、测试技术、与测试相关的度量、测试过程,软件工程知识体系指南(,2004,),知识域,内容,软件维护,软件维护基础、软件维护的关键问题、维护过程、维护技术,软件配置管理,软件配置管理过程管理、软件配置标志、软件配置控制、软件配置状态统计、软件配置审核、软件发行管理和交付,软件工程管理,启动和范围定义、软件项目计划、软件项目实施、评审与评价、关闭、软件工程度量,软件工程过程,过程实施与改变、过程定义、过程评定、过程和产品度量,软件工程工具和方法,软件工程工具、软件工程方法,软件质量,软件质量基础、软件质量过程、实践考虑,相关学科,计算机工程、计算机科学、管理、数学、项目管理、质量管理、软件人类工程学和系统工程,2.,软件工程的框架,软件工程的框架由软件工程目标、软件工程活动和软件工程原则三个方面的内容构成。,开发范型,设计方法,支持过程,管理过程,需,求,设,计,实,现,确,认,支,持,可用性,正确性,合算性,软件工程活动维,软件工程目标维,软件工程原则维,图,1.,软件工程框架,软件工程的目标,是开发与生产出具有良好的软件质量和费用合算的产品,即生产具有正确性、可用性以及合算的软件产品。,正确性是指软件产品达到预期功能的程度。,可用性是指软件基本结构、实现及文档为用户可用的程度。费用合算是指软件开发运行的整个开销能满足用户要求的程度。,软件质量是指该软件能满足明确的和隐含的需求能力有关特征和特性的总和。,软件工程活动,包括需求、设计、实现、确认和支持。,需求包括问题分析和需求分析。,问题分析包括需求获取和定义,又称软件需求规约。,需求分析包括生成软件功能规约。,设计包括概要设计和详细设计。,实现就是把设计结果转换为可执行的程序代码。,确认贯穿整个开发过程,对完成的结果进行确认,保证产品满足用户的要求。,支持是修改和完善活动。,软件工程的原则,选取适宜开发范型。该原则与系统设计有关,在系统设计中,软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控制,以保证软件产品满足用户的要求。,采用合适的设计方法。在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。,软件工程的原则,提供高质量的工程支持。“工欲善其事,必先利其器”。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。,重视开发过程的管理。软件工程的管理,直接影响可用资源的有效利用、生产满足目标的软件产品和提高软件组织的生产能力等问题。因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。,软件工程的框架,软件工程的目标是可用性、正确性和合算性,软件工程活动主要包括需求、设计、实现、确认和支持等活动,每一活动可根据特定的软件工程,采用合适的开发范型、设计方法、支持过程以及过程管理。,3.,软件工程的基本原理,用分阶段的生命周期计划严格管理,坚持进行阶段评审。,实行严格的产品控制。,结果应能清楚地审查。,开发小组的人员应该少而精。,1.2,软件过程和开发方法,1.2.1,软件过程,软件过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,软件过程描述了为了开发出客户满意的软件,什么人(,who,)、在什么时候(,when,)、做什么事(,what,)以及怎么做(,how,)这些事以实现某一个特定的具体目标。,通常用生命周期模型简洁地描述软件过程。,1.2,软件过程和开发方法,1.2.1,软件过程,生命周期模型规定了把生命周期划分成哪些阶段及各阶段的执行顺序,因此,称为软件过程模型,又称为软件开发模型。,软件开发模型是指软件开发中的所有过程、活动和任务的结构框架,它能清晰、明确地表达软件开发的全过程,软件开发通常包括需求、设计、实现、确认和支持等阶段。,常见的软件过程模型有,瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,此外还有迭代模型、,V,模型和智能模型等。,1.,瀑布模型,1970,年温斯顿,罗伊斯(,Winston Royce,)提出了著名的“瀑布模型,(,Waterfall Model,),”,它有时也称为传统生存周期模型或线性顺序过程模型。,20,世纪,80,年代之前,它一直是唯一被广泛采用的软件开发模型,现在它仍然是软件工程中应用最广泛的过程模型之一。,传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。,瀑布模型将软件生命周期划分为软件计划、需求分析、系统设计、软件编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。,瀑布模型,制定计划,验证,系统设计,验证,程序编码,测试,综合测试,需求分析,验证,系统维护,传统的瀑布模型,瀑布模型的主要特点:,阶段间具有顺序性和依赖性。,推迟实现的观点。,质量保证的观点。瀑布模型在实现之前无法了解项目的实际情况,只有实现了才知道项目的情况。,及时验证是保证软件质量、降低软件成本的重要措施。,实际的瀑布模型,带反馈环,制定计划,验证,系统设计,验证,程序编码,测试,综合测试,需求分析,验证,系统维护,变化的需求,验证,瀑布模型的优点,严格地规定了每项活动必须提交的文档。可以强迫开发人员采用规范的开发方法。,为项目提供了按活动划分的检查点。每项活动交出的产品必须经过质量保证小组的仔细验证,这样可以保证软件的开发质量。,当前一阶段完成后,您只需要去关注后续阶段。,瀑布模型的缺点:,各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。,由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险。,早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。,瀑布模型是线性的,“线性”是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的“非线性”问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。,2.,快速原型模型,快速原型模型,(,Rapid Prototype Model,),的第一步就是根据用户提出的需求,由用户与开发者共同确定系统的基本要求和主要功能,并在较短时间内建立一个实验性的、简单的小型系统,称作“快速原型”。,第二步就是将原型交给用户使用,用户在使用原型的过程中会产生新的需求,开发人员依据用户提出的评价意见对快速原型进行不断的修改、补充和完善。如此不断地迭代,直至开发出客户满意的软件产品。,2.,快速原型模型,原型,快速分析,构造,运行,评价,3.,增量模型,增量模型(,Incremental Model,)又称为演化模型。这种模型融合了瀑布模型的基本成份和快速原型的迭代特征。,分析,设计,编码,测试,增量,1,分析,设计,编码,测试,增量,2,分析,设计,编码,测试,增量,3,分析,设计,编码,测试,增量,4,增量模型,3.,增量模型,增量模型也存在以下缺陷:,由于各个构件是逐渐并入已有的软件体系结构中的,要求加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。,在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。,4.,螺旋模型,1988,年,Barry Boehm,正式提出了软件系统开发的“螺旋模型,(,Spiral Model,),”,,“螺旋模型”将瀑布模型和快速原型模型结合起来,它强调了其它模型所忽视的风险分析,特别适合于大型复杂的系统。,4.,螺旋模型,5.,喷泉模型,喷泉模型,(,fountain mo,del,),也称面向对象的生存期模型,,OO,模型。,喷泉模型与传统的结构化生存期模型比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。,就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。,5.,喷泉模型,分析,设计,实现,维护,演化,喷泉模型,6.,智能模型,智能模型也称为“基于知识的软件开发模型”,它把瀑布模型和专家系统结合在一起,利用专家系统来帮助软件开发人员工作。,该模型应用基于规则的系统,采用归纳和推理机制,帮助软件人员完成开发工作,并使维护在系统规格说明一级进行。,智能模型以知识作为处理对象,这些知识既有理论知识,也有特定领域的经验。,6.,智能模型,空间、属性数据,GIS,系统,数据黑板,状态黑板,结论黑板,推理机,数据转换器,模型,运行体,智能模型运行池,决策请求,人机交互信息,分析结果,GIS,数据库,模型库,知识库,接口统一的模型,知识模型,数据,图,1.,智能模型样图,6.,智能模型,需求分析,知识获取和表示,推理机制,体系结构设计,软件原型系统,软件实现,知识库,/,专家系统,智能模型,智能模型特点,智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等,这种方法需要四代语言(,4GL,)的支持。,它以瀑布模型为基本框架,在不同开发阶段引入了原型实现方法和面向对象技术以克服瀑布模型的缺点,适应于特定领域的软件和专家决策系统的开发。,7.V,模型,V,模型是软件开发瀑布模型的变种,主要反映测试活动与分析和设计的关系。,图,1.V,模型,用户需求,概要设计,需求分析,详细设计,验收测试,集成测试,功能测试,单元测试,编码,8.,各种模型的比较,模,型,描,述,优,点,缺,点,应用场景,瀑布模型,过程划分为计划、需求、设计、编码、测试和维护阶段;,各阶段自上而下,相互衔接固定次序,如同瀑布流水;,各阶段评审确认通过,前阶段输出是后阶段输入;,文档驱动(,Document Driven,)。,严格规定应提交的文档,为项目提供检查点;,利于大型软件项目中人员的组织与管理;,利于开发方法工具的研究和使用;,提高大型项目中的开发效率与质量。,文档驱动,可能不能完全满足用户需求;,呈线性,成果未经测试时,用户看不到结果,增加了风险;,前阶段未发现的错误传到后阶段甚至扩散,可导致项目失败;,需求阶段,完全确定需求比较困难。,大型软件项目;,需求明确;,需求很少变更。,8.,各种模型的比较,模,型,描,述,优,点,缺,点,应用场景,快速原型模型,快速建造初步、非完整软件原型,实现客户与系统交互;,客户对原型评价,细化需求;,逐步调整原型满足要求,原型内部结构不重要;,原型驱动(,Prototype Driven,)。,确定客户真正需求,减少需求不确定性;,更好和客户沟通,提高客户对软件的满意度;,减少技术,应用风险,缩小成本,提高产品质量。,需要尽可能尽快建造软件原型,可能会限制开发人员创新;,所选技术工具不一定是主流,效率低;,原型快速建立的内部结构及连续修改可能导致产品设计差;,客户确定真正需求,原型可能被弃。,客户或领域专家不熟悉电脑,/,软件,软件人员不熟悉领域,沟通理解困难。,8.,各种模型的比较,模,型,描,述,优,点,缺,点,应用场景,增量模型,分阶段实现,软件增量设计,实现,集成,测试;,整个产品拆成多个构件,分次逐个构件,交付可运行产品;,功能驱动(,Function Driven,)。,反馈及时,较好适应变化;,客户看到不断变化的软件,降低开发风险;,鼓舞团队的士气。,容易退化成边做边改,失去对软件过程的整体控制,效率低;,不破坏现有架构;,产品、架构不是开放的,维护难度加大。,需求比较明确;,架构比较稳定,每次增量不影响架构。,8.,各种模型的比较,模型,描述,优点,缺点,应用场景,螺旋模型,分成计划、评估、设计实施、用户反馈四个象限;,沿着螺线进行若干次迭代;,关注风险,风险分析之后决策项目是否继续;,风险驱动(,强调可选方案及约束条件支持软件重用;,有助于提升软件质量。,要求客户接受相信其风险分析,并作出反应不容易;,风险分析成本,项目利润,项目风险分析无意义;,要善于识别风险,且准确,否则将带来更大风险。,8.,各种模型的比较,模型,描述,优点,缺点,应用场景,喷泉模型,以需求为动力,以对象为驱动,支持面向对象开发;,开发过程自下而上各阶段是相互迭代和无间隙;,对象驱动(,Object Driven,)。,各阶段无明显界限,开发人员可同步开发;,提高开发效率,节省开发时间。,各阶段重叠,需大量开发人员;,不利于项目管理;,需严格管理文档及文档变更。,适合面向对象开发。,V,模型,智能模型是上述模型的演化或者组合,,这里就不再单独列出。,1.2.2,软件开发方法,1,结构化方法,结构化开发方法是由,E.Yourdon,和,L.L.Constantine,于,1978,年提出的,即所谓的,SASD,方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法,又称为结构化生命周期法。,此方法是系统分析员、软件工程师、程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施的建立计算机信息系统的一个过程,是组织、管理和控制信息系统开发过程的一种基本框架。,SASD,方法是,80,年代使用最广泛的软件开发方法。,1,结构化方法,结构化分析以数据流图为工具,实现对问题空间即需求的描述。,它主要以数据流、数据变换为考虑对象,从这个角度来描述整个系统的状况。,结构化设计以数据流图为蓝本,提出其数据变换部分,加以功能分解,一直到最小的功能元素单位。,开发人员据此进行程序设计。,2,面向数据结构的软件开发方法,Jackson,方法。,1975,年,,M.A.Jackson,提出了面向数据结构的软件开发方法,简称为,JSP,方法。,这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。,Jackson,指出,无论数据结构还是程序结构,都限于三种基本结构及它们的组合,因此,他给出了三种基本结构的表示。三种基本的结构形式就是顺序、选择和重复。,2,面向数据结构的软件开发方法,(1)Jackson,方法,基本上由下述五个步骤组成。,分析并确定输入数据和输出数据的逻辑结构,并用,Jackson,图描绘这些数据结构。,找出输入数据结构和输出数据结构中有对应关系的数据单元。,按一定的规则由输入、输出的数据结构导出程序结构。,列出所有操作和条件,并且把它们分配到程序结构图的适当位置。,用伪码表示程序。,Warnier,方法,1974,年,,J.D.Warnier,提出了另一种面向数据结构的程序设计方法,又称为逻辑构造程序方法(简称,LCP,)方法。,这种方法由如下五个步骤组成:,分析和确定输入数据和输出数据的逻辑结构,并用,Warnier,图描绘这些数据结构。,主要依据输入数据结构导出程序结构,并用,Warnier,图描绘程序的处理层次。,画出程序流程图并自上而下依次给每个处理框编序号。,分类写出伪码指令。,把前一步中分类写出的指令按序号排序,从而得出描述处理过程的伪码。,3,面向问题的分析方法,PAM,(,Problem Analysis Method,)是,80,年代末由日立公司提出的一种软件开发方法。,它的基本思想是考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。,这一方法的具体步骤是:从输入、输出数据结构中导出基本处理框;分析这些处理框之间的先后关系;按先后关系逐步综合处理框,直到画出整个系统的,PAD,图。,3,面向问题的分析方法,这一方法本质上是综合的自底向上的方法,但在逐步综合之前已进行了有目的地分解,这个目的就是充分考虑系统的输入、输出数据结构。,PAM,方法的另一个优点是使用,PAD,图。,这是一种二维树形结构图,是到目前为止最好的详细设计表示方法之一。,由于在输入、输出数据结构与整个系统之间同样存在着鸿沟,这一方法仍只适用于中小型问题。,4,原型化开发方法,产生原型化方法的原因很多,主要是并非所有的需求都能够预先定义,而反复修改是不可避免的。,开发工具的快速发展为原型化方法奠定了基础。如用,VB,,,Delphi,等工具可以迅速的开发出一个可以让用户看得见、摸得着的系统框架。,有了这个框架,对于计算机不是很熟悉的用户就可以根据这个样板提出自己的明确需求。,4,原型化开发方法,开发原型化系统一般由以下几个阶段组成:,确定用户需求。,开发原始模型。,让用户使用原型,征求用户对初始原型的改进意见。,修改原型。,判定原型完成情况,完成后就提交文档并交付使用。,5,面向对象的软件开发方法,面向对象是当前计算机界关心的重点,它是,90,年代软件开发方法的主流。,面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、,CAD,技术、人工智能等领域。,面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。随着,OOP,(面向对象编程)向,OOD,(面向对象设计)和,OOA,(面向对象分析)的发展,最终形成面向对象的软件开发方法。,5,面向对象的软件开发方法,面向对象系统采用了自底向上的归纳、自顶向下分解的方法,它通过建立对象模型,能够真正反映用户的需求,而且系统的可维护性大大改善。,面向对象方法的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。,目前,面向对象开发方法的研究已日趋成熟,国际上已有不少面向对象产品出现。当前业界关于面向对象建模的标准是,UML,(,Unified Modeling Language,)。,6,可视化开发方法,可视化开发并不能单独的作为一种开发方法,更加贴切的说可以认为它是一种辅助工具。,可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。,目前主要是在编程这个环节上使用可视化,而不是在系统分析和设计上用可视化方法。,6,可视化开发方法,可视化编程语言的特点主要表现在两个方面:,一是基于面向对象的思想,引入了控件的概念和事件驱动;,二是程序开发过程一般遵循以下步骤,即先进行界面的绘制工作,再基于事件编写程序代码,以响应鼠标、键盘的各种动作。,国外有些公司正在进行这方面的研究,如,Business Object,就是一个非常好的数据库可视化分析工具。可视化开发使我们把注意力集中在业务逻辑和业务流程上,用户界面可以用可视化工具表示。,1.3,面向对象开发方法概述,1.3.1,面向对象开发方法的由来,面向对象(,Object Oriented,,,OO,)的概念起源于挪威的,K,.,Nyguard,等开发的模拟离散事件的程序设计语言,Simula67,。,真正的面向对象程序设计是由,Alan Keyz,主持设计的,Smalltalk,语言,“面向对象”这个词也是,Smalltalk,最先提出的。,面向对象概念的出现是程序设计方法学和软件工程方法学的里程碑。,面向对象的方法起源于面向对象的程序设计语言。,20,世纪,80,年代,随着大批面向对象编程语言的问世,面向对象方法开始向面向对象分析、面向对象设计等阶段延伸,并试图在系统开发的整个生命周期中使用面向对象的方法。,1.3.2,面向对象方法的基本思想,客观世界是由各种各样的对象组成的,每种对象都有各自的内部状态和运动规律,不同对象之间的相互作用和联系构成了各种不同的系统。,面向对象是从现实世界客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。,面向对象方法的要点:,客观世界是由各种对象组成的。任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。,所有对象划分为类。把所有对象都划分成各种对象类(简称为类(,Class,),每个对象类都定义了一组数据和一组方法,数据用于表示对象的静态属性,是对象的状态信息。,类具有等级。,对象之间通过消息进行交互。对象彼此之间仅能通过传递消息互相联系。,1.3.3,面向对象的基本概念,在面向对象的分析和设计中,对象和类是核心概念。,1.3.3,面向对象的基本概念,面向对象方法有三大重要特征:封装性、继承性和多态性。,面向对象涉及的基本概念有:,对象、类、封装、信息隐蔽、继承、多态、消息、关联和复用等。,在面向对象的分析和设计中,对象和类是核心概念。,1,类,把众多的事物归纳、划分成一些类(,class,)。,James Rumbaugh,对类的定义:类是具有相似结构、行为和关系的一组对象的描述符,,类包括属性和操作。类的属性是对象的状态的抽象,用数据结构来描述类的属性。,类的操作是对象的行为的抽象,用操作名和实现该操作的方法来描述。,类归纳是人类在认识客观世界时经常采用的思维方法,分类的原则是抽象。,类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分,一个方法有方法名、返回值、参数、方法体等。,2.,对象,对象,(,object,),是现实世界中一个实际存在的事物,它可以是有形的,如房屋,桌子等;也可以是无形的,如国家,生产计划等。,对象是构成世界的一个独立单位,它具有自己的静态特征和动态特征。,面向对象方法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位,由一组属性和一组行为构成。,对象可分为主动对象和被动对象。,4,继承,继承(,inheritance,)是指一个对象直接使用另一对象的属性和方法,,是表示相似性质的机制。,继承是指类之间有继承关系,子类有条件地继承父类的特征。,继承意味着自动地拥有,或隐含地复制,正如你同时继承父母的外貌特点一样,信息系统组成成分也从有关部件继承某些特点。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确描述共性的方法。,4,继承,一个类的上层可以有超类,下层可以有子类,形成一种层次结构。这种层次结构的一个重要特点是继承性,一个类继承其超类的全部描述。,对象的一个新类可以从现有的类中派生出来,这个过程称为类继承。,新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。,派生类可以从它的基类继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。,5,多态,多态(,polymorphism,)一般指具有多种形态的能力。如水有,3,态,即固态、液态和气态。,打印程序可以打印字符、数字、图形和图像。,对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。多态性包括参数化多态性和包含多态性。,5,多态,多态性允许每个对象以适合自身的方式去响应共同的消息。,多态性能够利用同一类(基类)类型的指针来引用不同类的对象,能够根据所引用对象的不同以不同的方式执行相同的操作。,多态性增强了软件的灵活性和重用性。,6,消息,消息(,message,)是面向对象方法中对象之间相互联系的方法,是对传送信息的对象之间所进行的通信的规约,其中带有将要发生的活动的期望。,对象之间进行通信的结构叫做消息。,在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名,发,送给该对象的消息名(即对象名、方法名)。,一般还要对参数加以说明,,6,消息,t:AirTrafficPlanner,p:FightPlan,1:getPositionAtTime(t),1.1:getLastCheckpoint(),消息,消息,7,关联,关联(,relationship,)是对象之间的一种引用关系,如客户类与订单类之间的关系,,关联关系所涉及的两个类是处于同一层次上的,而在聚合和组合关系中,两个类处在不平等的层次,一个代表整体,一个代表部分,关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两个类的关联,,可以从一个类的对象导航到另一个类的对象。,关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。,8,复用,复用(,reuse,)就是重复使用。,复用可以采用,3,种形式,即共享、复制和改造。,共享和复制是大家非常熟悉的。,改造也是常用的,例如程序员在可复用部件库内找到一段子程序、模块或段落等,该子程序、模块或段落成为程序员编制新的子程序的出发点,新的,子程序与库中子程序存在某种程度的相似。于是程序员开始对库中的子程序进行改造,删除某些代码,改变某些代码,或加入某些新的代码。,1.4,面向对象主要开发方法,面对对象开发方法起源于面向对象编程语言,它包括面向对象分析、面向对象设计、面向对象实现、面向对象测试和面向对象维护等。,20,世纪,80,年代后期到,90,年代初期,随着面向对象技术成为研究的热点,出现了几十种支持软件开发的面向对象方法。,20,世纪,90,年代中期,面向对象方法已经成为软件分析与设计方法的主流。,1.4.1 Coad Yourdon,方法,Coad Yourdon,方法是由,Peter Coad,和,Edward Yourdon,在,1991,年提出的,这是一种逐步进阶的面向对象建模方法。,Coad,和,Yourdon1991,年合写了,面向对象的分析,一书。,该书详细地阐述了面向对象系统分析的一套使用方法和具体步骤,用实例进行详细的说明。后来他们又合写了,面向对象的系统设计,一书,详细地阐明了面向对象设计的一套使用方法和步骤。,1.4.1 Coad Yourdon,方法,Coad Yourdon,方法的开发步骤也是由面向对象分析、面向对象设计和面向对象实现所组成。这种方法严格区分了面向对象分析和面向对象设计。,OOA,完成系统分析,包括以下五个步骤:确定类与对象、标识结构、定义主题、定义属性和定义服务。,在面向对象分析阶段,经过,5,个层次活动分析得到一个分成,5,个层次的问题域模型,包括主题、类及对象、结构、属性和服务,5,个层次。,1.4.1 Coad Yourdon,方法,OOD,负责系统设计,包括以下四个步骤:,设计问题域部分(,PDC,)。细化分析结果,面向对象分析的结果直接放入该部分。,设计人机交互部分(,HIC
展开阅读全文