面向对象方法学精选文档.ppt

上传人:石*** 文档编号:44844035 上传时间:2022-09-22 格式:PPT 页数:70 大小:2.41MB
返回 下载 相关 举报
面向对象方法学精选文档.ppt_第1页
第1页 / 共70页
面向对象方法学精选文档.ppt_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《面向对象方法学精选文档.ppt》由会员分享,可在线阅读,更多相关《面向对象方法学精选文档.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象方法学面向对象方法学本讲稿第一页,共七十页讨论讨论l软件?l软件危机?l软件工程?l你开发软件采用的方法?本讲稿第二页,共七十页软件危机软件危机l软件定义:软件定义:一个软件必须由一个完整的配置组成。一个软件必须由一个完整的配置组成。软件软件是程序、数据及相关文档的完整集合。是程序、数据及相关文档的完整集合。本讲稿第三页,共七十页软件开发的高成本与低质量的矛盾称为软件危机。软件危机本讲稿第四页,共七十页 软件开发和维护过程中遇到一系列严重的问题(1)对软件开发成本和进度估计不准确。对软件开发成本和进度估计不准确。经费预算经常突破,完成时间一再拖延。经费预算经常突破,完成时间一再拖延。(

2、2)开发的软件不能满足用户要求。开发的软件不能满足用户要求。开发初期对用户的要求了解不够明确,未能得到明确表达。开发开发初期对用户的要求了解不够明确,未能得到明确表达。开发工作开始后,软件人员和用户又未能及时交换意见,使得一些问题工作开始后,软件人员和用户又未能及时交换意见,使得一些问题不能及时解决,导致开发的软件不能满足用户的要求,使开发失败。不能及时解决,导致开发的软件不能满足用户的要求,使开发失败。(3)软件产品质量靠不住。软件产品质量靠不住。(4)软件可维护性差。软件可维护性差。开发过程没有统一的、公认的规范,软件开发人员按各自的风格工作,开发过程没有统一的、公认的规范,软件开发人员按

3、各自的风格工作,各行其事。开发过程无完整、规范的文档,发现问题后进行杂乱无章的修各行其事。开发过程无完整、规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。改。程序结构不好,运行时发现错误也很难修改,导致维护性差。本讲稿第五页,共七十页(5)开发的软件可靠性差。开发的软件可靠性差。由于在开发过程中,由于在开发过程中,没有确保软件质量的体系和措没有确保软件质量的体系和措施,在软件测试时,又没有严格的、充分的、完全的施,在软件测试时,又没有严格的、充分的、完全的测试,测试,提交给用户的软件质量差,在运行中暴露出大提交给用户的软件质量差,在运行中暴露出大

4、量的问题。这种不可靠的软件,轻者会影响系统正常量的问题。这种不可靠的软件,轻者会影响系统正常工作,重者会发生事故,造成生命财产的重大损失。工作,重者会发生事故,造成生命财产的重大损失。(6)(6)软件没有适当的文档材料软件没有适当的文档材料(7)(7)传统的软件开发速度远远跟不上应用速度。传统的软件开发速度远远跟不上应用速度。本讲稿第六页,共七十页与软件本身的特点有关与软件本身的特点有关和软件开发与维护的方法不正确有关。和软件开发与维护的方法不正确有关。产生软件危机的原因本讲稿第七页,共七十页缺乏缺乏“可见性可见性”管理和控制软件开发过程相当困难管理和控制软件开发过程相当困难 软件较难维护。软

5、件较难维护。规模庞大规模庞大为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,然而,如何保证每个人完成的工作合在一起确实能构成一个高质量的然而,如何保证每个人完成的工作合在一起确实能构成一个高质量的大型软件系统,不仅涉及许多技术问题,更重要的是必须有严格而科大型软件系统,不仅涉及许多技术问题,更重要的是必须有严格而科学的管理。学的管理。(1)与软件本身的特点有关)与软件本身的特点有关本讲稿第八页,共七十页忽视软件需求分析的重要性忽视软件需求分析的重要性 (2)与软件开发与维护的方法不正确有关)与软件开发与维护的方法不正确有关

6、轻视维护轻视维护 软件已经完成之后进行的维护是极端艰巨复杂的工作,软件已经完成之后进行的维护是极端艰巨复杂的工作,需要花费很大代价。需要花费很大代价。统计数据表明,实际上用于软件维护的费用占软件总费统计数据表明,实际上用于软件维护的费用占软件总费用的用的55%55%70%70%。作好软件定义时期的工作,是降低软件成本提高软件作好软件定义时期的工作,是降低软件成本提高软件质量的关键。质量的关键。本讲稿第九页,共七十页 克服软件危机的途径软件危机的途径用现代工程的概念、原理、技术和方法进行软件开发、用现代工程的概念、原理、技术和方法进行软件开发、管理和维护。管理和维护。l组织管理措施组织管理措施软

7、件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。管理严密、各类人员协同配合、共同完成的工程项目。l技术措施技术措施(方法和工具方法和工具)在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。软件工具辅助下,开发人员可以把这类工作做得既快又好。本讲稿第十页,共七十页系统工程系统工程系统建模系统建模 本讲稿第十一页,共七十页 系统模型的定义系统模型的定义l系统模型是一个系

8、统某一方面本质属性的描述,它以某种确定的形式(例如文字、符号、图表、实物、数学公式等)提供关于该系统的知识。l系统模型一般不是系统对象本身,而是现实系统的描述、模仿或抽象。系统是复杂的,系统的属性也是多方面的。对于大多数研究目的而言,没有必要考虑系统的全部属性,因此,系统模型只是系统某一方面本质属性的描述,本质属性的选取完全取决系统工程研究的目的 本讲稿第十二页,共七十页l根据不同的研究目的,同一个系统可以建立不同的系统模型。例如,城市经济模型,可以用一、二、三产业表示,也可以用各个行政管理部门来表示。l同一种模型可以代表多个系统。例如,y=kx(k是为常量),几何上:代表一条通过原点的直线;

9、代数上:表示比例关系;设k,x代表直径,则y表示圆周长;设k表示弹簧刚度,x表示伸长量,则y表示弹簧力大小;当ka表示加速度,xm表示质量,则y表示物体所受外力大小等等。本讲稿第十三页,共七十页 系统模型与原型系统模型与原型l系统模型反映实际系统的主要特征,但它又高于实际系统而具有同类问题的共性。因此一个适用的系统模型应该具有如下三个特征:l(1)它是现实系统的抽象或模仿;l(2)它是由反映系统本质或特征的主要因素构成的;l(3)它集中体现了这些主要因素之间的关系。本讲稿第十四页,共七十页 系统模型与原型系统模型与原型l给对象实体以必要的简化,用适当的表现形式或规则把它的主要特征描绘出来,这样

10、得到的模仿品称为模型,对象实体称为原型。l模型也有结构,模型结构与原型结构是不同的两码事,但两者又有直接或间接的联系。l原型中必须考虑的结构问题都应在模型中有所反映,能以模型的语言描述出来。本讲稿第十五页,共七十页 系统模型与原型系统模型与原型l数学模型是抽象模型,不能要求它直接反映系统原型的结构,但必定与原型结构有内在联系,原型中的结构问题在模型中用数学语言描述,能用数学方法分析和解决。例如,原型的结构稳定与否可以转化为模型中数学结构的稳定与否。l构造模型是为了研究原型,通过模型研究能够把握原型的主要特性。模型又是对原型的简化,应当压缩一切可以压缩的信息 力求经济性好,便于操作。l没有简化不

11、成其为模型,同原型比较未能显著简化的模仿品不是好模型。本讲稿第十六页,共七十页 系统模型的分类系统模型的分类l实体模型 即系统本身,当系统的大小刚好适合研究而又不存在危险时,就可以把系统本身作为模型。实体模型包括抽样模型,例如标准件的生产检验是从总体中抽取一定数量的样本进行的,样本就是实体模型。l相似模型 根据相似原理,利用一种系统去代替另一种系统。例如用电路系统代替机械系统、热力学系统进行研究,则电路系统就是后二者的相似模型。本讲稿第十七页,共七十页 系统模型的分类系统模型的分类l比例模型 是放大或缩小的系统,使之适合于研究。l文字模型 如技术报告、说明书等。在物理模型和数学模型都很难建立时

12、,有时不得不用它来描述研究结果。l网络模型 用网络图来描述系统的组成元素以及元素之间的相互关系(包括逻辑关系与数学关系)本讲稿第十八页,共七十页 系统模型的分类系统模型的分类l图表模型 用图像和表格描述的模型,它们可以互相转化,这里说的图像是指坐标系中的曲线、曲面和点等几何图形。l逻辑模型 表示逻辑关系的模型,如方框图、程序单等。l数学模型 用数学方程式表示的模型。l计算机模型 用计算机设计语言描写的模型。本讲稿第十九页,共七十页 数学模型数学模型l所谓系统的数学模型,指的是描述元素之间、子系统之间、层次之间相互作用以及系统与环境相互作用的数学表达式。l原则上讲,现代数学所提供的一切数学表达形

13、式,包括几何图形、代数结构、拓扑结构、序结构、分析表达式等,均可以作为一定系统的数学模型。l大量的数学模型是定量分析系统的工具。用数学形式表示的输出对输入的响应关系,就是广泛使用的一种定量分析模型 本讲稿第二十页,共七十页 数学模型数学模型l技术科学层次的系统理论和系统工程,都主要使用数学模型作为定量分析工具,以便给出设计、操作系统所必须的定量结论。l数学模型同样可以作为定性描述系统的工具,对于描述系统演化现象来说,人们关心的主要是系统定性性质的改变与否,定性分析是更基本的。l定量描述系统的数学模型必须以正确认识系统的定性性质为前提。描述系统的特征量的选择建立在建模者对系统行为特性的定性认识基

14、础上。本讲稿第二十一页,共七十页 数学模型数学模型l优点l定量分析的基础 在自然科学和工程技术领域里,数量不准将招致质量低劣,在社会科学领域里,没有定量分析会使人心中无数,造成决策失误,引起不必要的混乱。因此,采用数学模型进行定量分析已成为当代自然科学和社会科学进一步发展的共同要求。本讲稿第二十二页,共七十页 数学模型数学模型l优点l系统预测和决策的工具 可以利用系统已有的数据建立预测模型,用来预测系统的未来状态,为正确决策提供依据。l灵活性好 它可变性好、适应性强、分析问题速度快,省时省钱,而且便于使用计算机,因此,它是所有模型中使用最广泛的一种。我们通常所说的系统建模,大多数情况下都是指建

15、立系统的数学模型。本讲稿第二十三页,共七十页 计算机模型计算机模型l用计算机程序定义的模型。首先明确构成系统的“构件”,把它们之间的相互关联方式提炼成若干简单的行为规则,并以计算机程序表示出来,以便通过在计算机上的数值计算来模仿系统运行演化,观察如何通过对构件执行这些简单规则而涌现出系统的整体性质,预测系统的未来走向。l所有数学模型都可以转化为基于计算机的模型,通过计算来研究系统。l许多无法建立数学模型的系统,如复杂的物理过程,特别是生物、社会和行为过程,也可能建立基于计算机的模型。本讲稿第二十四页,共七十页 计算机模型计算机模型l用数学表达式定义的传统模型,求解和处理往往需用复杂艰深的理论和

16、技巧,费时费力,可行性常常较差,所得结果有时无法用实验检验。l用计算机程序定义的模型,可以做到既严格,又可行,能够在计算机上研究和预测系统,通过计算实验来检验结果。l对于那些无法用真实的实验来检验的复杂系统,计算实验是唯一可用的实验检验手段。l 计算实验是一种新兴的实验形式,它为研究复杂巨系统提供了唯一普遍可用的实验手段。本讲稿第二十五页,共七十页 系统建模方法系统建模方法l 1 系统模型的要求l 2 建模的原则 本讲稿第二十六页,共七十页 1 系统模型的要求系统模型的要求l真实性 要求建立的模型能够很好地反映系统的客观实际,应把系统本质特征和关系反映进去,而把非本质的东西去掉,但又不影响反映

17、本质的真实程度。也就是说,系统模型应有足够的精度,以保证它的真实性。精度要求不仅与研究对象有关,而且与所处的时间、状态和条件有关。因此,为满足真实性要求,对同一对象在不同情况下可以提出不同的精度要求。本讲稿第二十七页,共七十页 1 系统模型的要求系统模型的要求l简明性 在满足真实性要求的基础上,应尽量使系统模型简单明了,以节约建模的费用和时间。这也就是说,如果一个简单的模型已能使实际问题得到满意的解答,就没有必要去建一个复杂的模型,因为建造一个复杂的模型并求解是要付出很高代价的,其次模型过于复杂难以满足快速决策的需要。本讲稿第二十八页,共七十页 1 系统模型的要求系统模型的要求l现实性 在建立

18、某些系统的模型时,如果已有某种标准化模型可供借鉴,则应尽量采用标准化模型,或者对标准化模型加以某些修改,使之适合对象系统,不追求另起炉灶。其次,在建立模型时,要考虑数据采集的可能性和今后的发展方向,使建立的模型具有现实可操性和发展潜力。本讲稿第二十九页,共七十页 2 建模的原则建模的原则l抓住主要矛盾 模型只应包括与研究目的有关的方面,而不是对象系统的所有方面。例如,对个空运指挥调度系统的研究,建模只需考虑飞机的飞行航向而无需考虑其飞行姿态。l清晰明了 一个大型复杂系统是由许多联系密切的子系统组成的,因此对应的系统模型也是由许多子模型(或模块)组成的。在子模型与子模型之间,除了保留研究目的所必

19、要的信息联系外,其它的耦合关系要尽可能减少,以保证模型结构尽可能清晰明了。本讲稿第三十页,共七十页 2 建模的原则建模的原则l精度要求适当 建立系统模型,应该视研究目的和使用环境不同,选择适当的精度等级,以保证模型切题、实用,而又不致花费太多。l例如,一个受外力F作用下的物体M,其动力学系统的数学模型,在不同使用环境下有不同精度等级,应该适当选择。本讲稿第三十一页,共七十页 2 建模的原则建模的原则l当物体的运动速度v足够小时,可以忽略空气阻力的影响,其符合精度要求的数学模型为l当速度v提高到必须考虑空气阻力的影响时,则其符合精度要求的数学模型为l当物体的运动速度接近于光速3108ms时,按相

20、对论原理,此时M将不是常数,因此其符合精度要求的数学模型为本讲稿第三十二页,共七十页 2 建模的原则建模的原则l尽量使用标准模型 在建立一个实际系统的模型时,应该首先大量调阅模型库中的标准模型,如果其中某些可供借鉴,不妨先试用一下。如能满足要求,就应该使用标准模型,或者尽可能向标准模型靠拢。这样有利于比较分析,有利于 节省费用和时间本讲稿第三十三页,共七十页 3 建模的主要方法建模的主要方法l推理法 对于内部结构和特性已经清楚的系统,即所谓的“白箱”系统(例如大多数的工程系统),可以利用已知的定律和定理,经过一定的分析和推理,得到系统模型。l实验法 对于那些内部结构和特性不清楚或不很清楚的系统

21、,即所谓的“黑箱”或“灰箱”系统,如果允许进行实验性观察,则可以通过实验方法测量其输入和输出,然后按照一定的辨识方法,得到系统模型。本讲稿第三十四页,共七十页 3 建模的主要方法建模的主要方法l统计分析法 对于那些属于“黑箱”,但又不允许直接进行实验观察的系统(例如非工程系统多数属于此类),可以采用数据收集和统计分析的方法来建造系统模型。本讲稿第三十五页,共七十页 3 建模的主要方法建模的主要方法l类似法 即建造原系统的类似模型。有的系统,其结构和性质虽然已经清楚,但其模型的数量描述和求解却不好办,这时如果有另一种系统其结构和性质与之相同,因而建造出的模型也类似,但是该模型的建立及处理要简单得

22、多,把后一种系统的模型看成是原系统的类似模型。利用类似模型,按对应关系就可以很方便地求得原系统的模型。例如很多机械系统、气动力学系统、水力学系统、热力学系统与电路系统之间某些现象彼此类似,特别是通过微分方程描述的动力学方程基本一致,因此可以利用成熟的电路系统来构造上述系统的类似模型本讲稿第三十六页,共七十页 3 建模的主要方法建模的主要方法l混合法 大部分系统模型的建造往往是上述几种方法综合运用的结果l真正解决系统建模问题还必须充分开发人的创造力,综合运用各种科学知识,针对不同的系统对象,或者建造新模型,或者巧妙地利用已有的模型,或者改造已有的模型,这样才能创造出更加适用的系统模型。l因此,有

23、人把建造系统模型看成是一种艺术,这说明建造系统模型确实需要充分发挥人的创造性,而不可能有现成的模式可以照搬本讲稿第三十七页,共七十页软件生命周期软件生命周期-传统方法传统方法软件生命周期软件生命周期是指一个软件项目被提出并着手实施开始,到该软件报废是指一个软件项目被提出并着手实施开始,到该软件报废或停止使用为止。或停止使用为止。经历三个时期经历三个时期 .软件定义软件定义 .软件开发软件开发 .运行维护运行维护(也称为软件维护也称为软件维护)本讲稿第三十八页,共七十页软件生命周期各阶段的基本任务1.问题定义问题定义2.可行性研究可行性研究3.需求分析需求分析4.总体设计总体设计5.详细设计详细

24、设计 6.编码和单元测试编码和单元测试7.综合测试综合测试8.运行与维护运行与维护 软件生命周期由软件定义、软件开发和运行维护软件生命周期由软件定义、软件开发和运行维护(也称为软件维护也称为软件维护)3 3个时期组成,每个时期又进一步划分成若干个阶段。个时期组成,每个时期又进一步划分成若干个阶段。本讲稿第三十九页,共七十页1.问题定义问题定义 回答:回答:“要解决的问题是什么要解决的问题是什么?”通过调研,写出关于问题性质、工程目标和工程规模的通过调研,写出关于问题性质、工程目标和工程规模的书面报告,并得到客户的确认。书面报告,并得到客户的确认。2.可行性研究可行性研究 回答:回答:“对于上一

25、个阶段所确定的问题有行得通的解决办法对于上一个阶段所确定的问题有行得通的解决办法吗吗?”研究并论证软件系统的可行性,对方案进行选择并形成可研究并论证软件系统的可行性,对方案进行选择并形成可行性分析报告。行性分析报告。本讲稿第四十页,共七十页3.需求分析需求分析这个阶段的任务主要是确定目标系统必须具备哪些功能。这个阶段的任务主要是确定目标系统必须具备哪些功能。建立逻辑模型建立逻辑模型 必须准确完整地体现用户的要求。必须准确完整地体现用户的要求。数据模型数据模型 (实体(实体-联系图)联系图)功能模型功能模型 (数据流图)(数据流图)行为模型行为模型 (状态转换图)(状态转换图)书写规格说明书书写

26、规格说明书 用正式文档准确地记录对目标系统的需求。用正式文档准确地记录对目标系统的需求。本讲稿第四十一页,共七十页4.总体设计总体设计(概要设计概要设计)回答回答“概括地说,应该怎样实现目标系统概括地说,应该怎样实现目标系统?”软件设计的一条基本原理就是,程序应该模块化,也就是说,一软件设计的一条基本原理就是,程序应该模块化,也就是说,一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成

27、以及模块间的关系。定程序由哪些模块组成以及模块间的关系。建立软件系统的总体结构建立软件系统的总体结构定义功能模块的接口定义功能模块的接口设计全局数据库或数据结构设计全局数据库或数据结构规定设计约束规定设计约束编制概要设计文档编制概要设计文档本讲稿第四十二页,共七十页5.详细设计(模块设计)详细设计(模块设计)把解法具体化,回答把解法具体化,回答“应该怎样具体地实现这个系统呢应该怎样具体地实现这个系统呢?”模块详细设计模块详细设计 模块的详细功能、算法、数据结构、模块间的接口等设计,模块的详细功能、算法、数据结构、模块间的接口等设计,拟定模块测试方案。拟定模块测试方案。编制模块的详细规格说明编制

28、模块的详细规格说明 汇总模块详细设计的结果,形成模块详细规格说明书。汇总模块详细设计的结果,形成模块详细规格说明书。本讲稿第四十三页,共七十页6.编码和单元测试编码和单元测试写出正确的容易理解、容易维护的程序模块。写出正确的容易理解、容易维护的程序模块。编码编码 根据模块详细规格说明书,把详细设计的结果翻译成根据模块详细规格说明书,把详细设计的结果翻译成用选定的语言书写的程序。用选定的语言书写的程序。单元测试单元测试 对模块程序进行测试,验证模块功能及接口与详细设计文档的对模块程序进行测试,验证模块功能及接口与详细设计文档的一致性,并形成单元测试报告。一致性,并形成单元测试报告。本讲稿第四十四

29、页,共七十页7.综合测试综合测试 通过各种类型的测试通过各种类型的测试(及相应的调试及相应的调试)使软件达到预定的要求。使软件达到预定的要求。集成测试集成测试 根据设计的软件结构,把经过单元测试检验的模块按某种根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试验收测试 按照规格说明书的规定,由用户对目标系统进行验收。按照规格说明书的规定,由用户对目标系统进行验收。现场测试或平行运行现场测试或平行运行 平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,平行运行就是同时运行新

30、开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。以便比较新旧两个系统的处理结果。用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。来,作为软件配置的一个组成部分。本讲稿第四十五页,共七十页8.软件维护软件维护 维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。用户的需要。改正性维护改正性维护 诊断和改正在使用过程中发现的软件错误;诊断和改正在使用过程中发现的软件错误;适应性维护适应性维护

31、修改软件以适应环境的变化;修改软件以适应环境的变化;完善性维护完善性维护 根据用户的要求改进或扩充软件使它更完善;根据用户的要求改进或扩充软件使它更完善;预防性维护预防性维护 修改软件为将来的维护活动预先做准备。修改软件为将来的维护活动预先做准备。每一项维护活动都应该经过提出维护要求每一项维护活动都应该经过提出维护要求(或报告问题或报告问题),分析维护,分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收等一系列步骤。改程序,测试程序,复查验收等一系列步骤。本讲稿第四十六页,共七十页传

32、统的生命周期方法学传统的生命周期方法学 l传统方法学的本质传统方法学的本质l是在具体的软件开发工作开始之前,通过需求分析是在具体的软件开发工作开始之前,通过需求分析预先定义软件需求,然后一个阶段接着一个阶段有预先定义软件需求,然后一个阶段接着一个阶段有条不紊地开发用户所要求的软件,实现预先定义的条不紊地开发用户所要求的软件,实现预先定义的软件需求。软件需求。l生命周期方法学是一个巨大的进步,对实现软生命周期方法学是一个巨大的进步,对实现软件开发工程化曾经起了重要的促进作用,部分件开发工程化曾经起了重要的促进作用,部分地缓解了软件危机。地缓解了软件危机。本讲稿第四十七页,共七十页 结构化程序设计

33、思想的提出背景结构化程序设计思想的提出背景 回首计算机的发展历程,人们发现计算机软件的发展回首计算机的发展历程,人们发现计算机软件的发展速度始终滞后于计算机硬件的发展,它已经成为制约速度始终滞后于计算机硬件的发展,它已经成为制约计算机产业整体发展的瓶颈。究其原因可能有很多方计算机产业整体发展的瓶颈。究其原因可能有很多方面,但下面两点不容忽视。面,但下面两点不容忽视。l 软件产业的个体化软件产业的个体化l 受限于程序设计语言受限于程序设计语言结构化程序设计方法学结构化程序设计方法学 本讲稿第四十八页,共七十页结构化程序设计方法结构化程序设计方法n自顶向下、逐步求精的开发方法自顶向下、逐步求精的开

34、发方法n 模块化的组织方式模块化的组织方式n 结构化的语句结构结构化的语句结构本讲稿第四十九页,共七十页自顶向下、逐步求精自顶向下、逐步求精 将编写程序看成是一个逐步演化的过程。所谓自顶将编写程序看成是一个逐步演化的过程。所谓自顶向下是指将分析问题的过程划分成若干个层次,每向下是指将分析问题的过程划分成若干个层次,每一个新的层次都是上一个层次的细化,即步步深入,一个新的层次都是上一个层次的细化,即步步深入,逐层细分。逐层细分。本讲稿第五十页,共七十页模块化模块化 将整个系统分解成若干个模块,每个模块实现特定的功将整个系统分解成若干个模块,每个模块实现特定的功能,最终的系统将由这些模块组装而成。

35、模块之间通过能,最终的系统将由这些模块组装而成。模块之间通过接口传递信息,力求模块具有良好的独立性。接口传递信息,力求模块具有良好的独立性。本讲稿第五十一页,共七十页语句结构化语句结构化ABTAB顺序结构顺序结构分支结构分支结构YN本讲稿第五十二页,共七十页结构化程序设计的特点结构化程序设计的特点程序设计数据结构算法程序设计数据结构算法程序内容过程过程调用程序内容过程过程调用本讲稿第五十三页,共七十页结构化程序设计的基本过程结构化程序设计的基本过程软件开发的基本过程:软件开发的基本过程:l需求分析需求分析l系统设计系统设计l系统实现系统实现l系统测试系统测试l系统维护系统维护当结构化思想贯穿于

36、每个过程时,当结构化思想贯穿于每个过程时,其基本过程:分解和组装其基本过程:分解和组装本讲稿第五十四页,共七十页MM1M2M3M4MnM31M32M33分解过程组装过程组装过程一个结构化程序设计的例子一个结构化程序设计的例子本讲稿第五十五页,共七十页一个结构化程序设计的例一个结构化程序设计的例子子本讲稿第五十六页,共七十页问题问题l创建一个程序显示给定日期的月历。既程序提示用户输入年和月,然后显示该月的日历。本讲稿第五十七页,共七十页思考思考1把问题分解为两个子问题:读取用户输入(readInput)和打印日历(printMonth)l 在这一步,我们思考的是怎样分解子问题而不是用什么方法输入

37、数据和打印日历,可以画一个结构图把问题的分解表达出来。打印日历系统readInput子系统printMonth子系统本讲稿第五十八页,共七十页思考思考2 要打印一个月的日历,应当知道这个月的第一天是星期几以及该月有几天,有了这些信息就可以打印日历的标题和主体了。因此,打印月历问题进一步可以分解成四个子问题:得到第一天对应的星期(getStartDay),求得这个月的天数(getNumOfDaysInMonth),打印标题(printMonthTitle),打印月历主体(printMonthBody)。打印日历系统readInput子系统printMonth子系统getStartDaygetNu

38、mOfDaysInMonthprintMonthTitleprintMonthBody本讲稿第五十九页,共七十页思考思考3怎样知道一个月的第一天是星期几呢?l有几种方法可以求得(如使用有几种方法可以求得(如使用javajava中的中的DateDate和和CalendarCalendar类)。我们采用另外类)。我们采用另外一种方法:假设知道一种方法:假设知道18001800年年1 1月月1 1日是星期三(日是星期三(startDay1800startDay18003 3),计算),计算18001800年年1 1月月1 1日和该月第一天相差的总天数(日和该月第一天相差的总天数(totalNumOf

39、DaystotalNumOfDays),该月第一),该月第一天的星期就是(天的星期就是(totalNumOfDays+startDay1800totalNumOfDays+startDay1800)7 7。l想要计算想要计算18001800年年1 1月月1 1日和月历第一天之间的总天数,需要求出日和月历第一天之间的总天数,需要求出18001800年年到该年的天数,并求出在该年中日历前的天数。这两个数相加就是到该年的天数,并求出在该年中日历前的天数。这两个数相加就是totalNumOfDaystotalNumOfDays。l为了计算这个天数还需要知道一年和一个月的天数。算法:为了计算这个天数还需

40、要知道一年和一个月的天数。算法:本讲稿第六十页,共七十页l一月、三月、五月、七月、八月、十月和十二月各31天l四月、六月、九月和十一月各30天l二月通常有28天,但是在闰年有29天,因此一年通常有365天,闰年366天。利用下面的条件可以判定某年是否 为闰年:if(year%400=0)|(year%4=0)&(year%100!=0)return true;else return false。l我们把判断是否是润年的工作也放在一个子问题中解决(isLeapYear)。l把计算总天数的工作放在子问题getTotalNumOfDays中。本讲稿第六十一页,共七十页完整的结构化分完整的结构化分打印

41、日历系统readInput子系统printMonth子系统getStartDaygetNumOfDaysInMonthprintMonthTitleprintMonthBodygetTotalNumOfDaysisLeapYear本讲稿第六十二页,共七十页实验:月历系统主要方法实现实验:月历系统主要方法实现l打印日历子程序static void printMonth(int year,int month)/获得该月的第一天是星期几 int startDay=getStartDay(year,month);/获得该月共多少天 int numOfDaysInMonth=getNumOfDaysIn

42、Month(year,month);/打印月历的表头 printMonthTitle(year,month);/打印月历的表体 printMonthBody(startDay,numOfDaysInMonth);本讲稿第六十三页,共七十页static int getStartDay(int year,int month)int startDay1800=3;/先计算从1800/1/1到该月之前的总天数 long totalNumOfDays=getTotalNumOfDays(year,month);/计算该月第一天的星期并返回该值 return (int)(totalNumOfDays+st

43、artDay1800)%7);本讲稿第六十四页,共七十页l计算总天数static long getTotalNumOfDays(int year,int month)long total=0;for(int i=1800;iyear;i+)/从1800到该年的前一年的每年循环 if(isLeapYear(i)total=total+366;/如果是闰年,则天数是366 else total=total+365;/否则是365for(int i=1;i month;i+)/该年第1个月到该月的前一个月循环 total=total+getNumOfDaysInMonth(year,i);/计算每个

44、月的天数并加到total中return total;/计算结果返回本讲稿第六十五页,共七十页l计算某月的天数static int getNumOfDaysInMonth(int year,int month)if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)/大月情况 return 31;if(month=4|month=6|month=9|month=11)/小月情况 return 30;if(month=2)/闰月情况 if(isLeapYear(year)return 29;else return 28;return

45、 0;本讲稿第六十六页,共七十页l判断是否是闰月的程序static boolean isLeapYear(int year)if(year%400=0)|(year%4=0)&(year%100!=0)return true;return false;本讲稿第六十七页,共七十页l打印月历体的程序static void printMonthBody(int startDay,int numOfDaysInMonth)int i=0;for(i=0;istartDay;i+)/该星期之前输出空格 System.out.print();for(i=1;i=numOfDaysInMonth;i+)/输

46、出月历 if(i10)System.out.print(“”+i);/如果是1位输出日期前多空一些 else System.out.print(+i);if(i+startDay)%7=0)System.out.println();/每行输出7天 本讲稿第六十八页,共七十页l输出月历的头static void printMonthTitle(int year,int month)System.out.println(+getMonthName(month)+,+year);System.out.println(_);System.out.println(Sun Mon Tue Wed Thu

47、Fri Sat);l求某月对应的英文名字static String getMonthName(int month)String monthName=null;switch(month)case 1:monthName=January;break;case 2:monthName=February;break;case 3:monthName=March;break;case 4:monthName=April;break;case 5:monthName=May;break;case 6:monthName=June;break;case 7:monthName=July;break;case

48、 8:monthName=August;break;case 9:monthName=September;break;case 10:monthName=October;break;case 11:monthName=November;break;case 12:monthName=December;break;return monthName;本讲稿第六十九页,共七十页传统的生命周期方法学传统的生命周期方法学l实践表明,传统的生命周期方法学并不能完全实践表明,传统的生命周期方法学并不能完全消除软件危机。消除软件危机。l对某些类型的软件开发,这种方法学比较适用,对某些类型的软件开发,这种方法学比较适用,对另一些类型的软件则可能完全不适用。对另一些类型的软件则可能完全不适用。l近年来软件工程的新途径近年来软件工程的新途径快速原型法快速原型法和和面面向对象方法学向对象方法学已经进入实用阶段,应用得已经进入实用阶段,应用得越来越广泛了。越来越广泛了。本讲稿第七十页,共七十页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁