《新编大学计算机基础教程》-第九章_第1页
《新编大学计算机基础教程》-第九章_第2页
《新编大学计算机基础教程》-第九章_第3页
《新编大学计算机基础教程》-第九章_第4页
《新编大学计算机基础教程》-第九章_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章程序设计基础计算机能完成预定的任务是硬件和软件协同工作的结果,而计算机之所以比电视机、DVD机、计算器等其他电子设备功能更灵活,是因为计算机软件的“可编程”,也就是说,同样的硬件配置,加载不同的软件就可以完成不同的工作。当用户使用计算机来完成某项工作时,将会面临两种情况。一种情况是可借助现成的应用软件完成,如文字处理可使用Word,表格处理可使用Excel,科学计算可选择Matlab,绘制图形可采用Photoshop等;另一种情况是没有完全合适的软件可供使用,这时就需要使用计算机语言编制程序来完成特定功能,这就是程序设计。什么是程序呢?程序就是解决实际问题的操作步骤,它是一个有限的操作序列。如求一元二次方程ax2+bx+c=0实根的程序是:下一页返回第9章程序设计基础(1)输入系数a,b,c。(2)计算Δ=b2−4ac。(3)判断:若Δ>=0,则计算x1=(−b+)/(2a),x2=(−b−)/(2a),并输出x1

,x2

,然后结束;若Δ<0则输出该方程无实根的信息,结束。显然,如果程序由人来执行的,程序只要用人工语言来描述就行了,如果是由计算机来执行的,则必须用计算机能够接受的计算机语言来描述。因此,程序是计算机能够完成的实际操作指令序列。上一页返回9.1程序设计的基本过程9.1.1程序设计语言的分类根据程序设计语言发展的历程,可将其大致分四类。1.机器语言机器语言是用二进制代码表示的计算机能直接识别和执行的机器指令的集合,即处理器的指令系统。机器语言的优点是能够被计算机直接识别、执行速度快。其缺点是难记忆、难书写、难编程、易出错、可读性差、可移植性差。下一页返回9.1程序设计的基本过程2.汇编语言为了克服机器语言的缺点,人们采用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码,产生了汇编语言(也称为符号语言)。汇编语言是由一条条助记符所组成的指令系统。使用汇编语言编写的程序(汇编语言源程序),计算机不能直接识别,需要由一种起翻译作用的程序(汇编程序),将其翻译成机器语言程序(目标程序),计算机方可执行,这一翻译过程称之为“汇编”。不同指令集的处理器系统都有自己相应的汇编语言,因此汇编语言与机器语言一样可移植性较差。上一页下一页返回9.1程序设计的基本过程3.高级语言计算机技术的发展促使人们寻求一种与人类语言相接近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言。这种与自然语言相近并为计算机所接受和执行的语言称为高级语言。用高级语言编写程序时,程序员可以不必了解计算机的内部逻辑,而主要考虑问题的解决方法。高组语言的源程序需要翻译成机器语言程序才能执行,翻译方式有两种:编译方式和解释方式。编译方式是由编译程序将高级语言源程序“翻译”成目标程序;解释方式是由解释程序对高级语言的源程序逐条“翻译”执行,不生成目标程序。上一页下一页返回9.1程序设计的基本过程(1)传统的高级程序设计语言①1954年,约翰·巴克斯发明了FORTRAN语言。FORTRAN是最早出现的高级程序设计语言,主要应用在科学、工程计算领域。②1958年,诞生了ALGOL语言,其优点是引入了局部变量和递归过程概念,提供了较为丰富的控制结构和数据类型,对后来的高级语言产生了深刻的影响。③1960年出现的COBOL是商用数据处理应用中广泛使用的标准语言。COBOL通用性强,容易移植,并提供了与事务处理有关的大范围的过程化技术。上一页下一页返回9.1程序设计的基本过程④1964年,汤姆·库斯和约翰·凯孟尼创建了一种新的计算机高级语言,这种语言语句简洁、语法简单,风格轻松活泼,又简单易学,被称为“初学者通用符号指令代码”,这就是著名的BASIC语言,该语言在微型机上得到了广泛应用。目前BASIC语言有多种版本,MicrosoftVisualBasic是目前使用最广泛的BASIC语言开发工具,它提供了一个可视的开发环境,具有图形设计工具、面向对象的结构化的事件驱动编程模式、开放的环境,使用户可以既快又简便地编制出Windows的各种应用程序。(2)通用的结构化程序设计语言结构化程序设计语言的特点是具有很强的过程功能和数据结构功能,并提供结构化的逻辑构造。这一类语言的代表有Pascal、C和Ada等,它们都是从ALGOL语言派生出来的。上一页下一页返回9.1程序设计的基本过程①20世纪60年代末研制的Pascal语言体现了结构化程序设计的思想,特别适合用来进行程序设计原理和高级语言的数学。Borland公司的TurboPascal是使用比较广泛的版本。②1972年,美国贝尔实验室的DennisRitchie发明了C语言。C语言的主要特点是:具有丰富的数据结构;基本程序结构是函数调用,支持用户自定义函数以扩充语言的功能;与汇编语言接口好;具有丰富的函数库;具有比较强的图形处理能力。Borland公司的TurboC是早期广泛使用的C语言开发工具。上一页下一页返回9.1程序设计的基本过程③Ada语言是由美国国防部出资开发的,作为一种用于嵌入式实时计算机设计的标准语言。Ada语言在结构和符号方面类似于Pascal语言。(3)专用语言专用语言是为特殊的应用而设计的语言。通常具有自己特殊的语法形式,面对特定的问题,输入结构及词汇与该问题的相应范围密切相关。有代表性的专用语言有APL、LISR、PROLOG、Smalltalk、C++、Java等。上一页下一页返回9.1程序设计的基本过程4.4GL语言4GL语言的出现,将语言的抽象层次又提高到一个新的高度。与其他人工语言一样,它也采用不同的文法表示程序结构和数据结构,但是在更高一级抽象的层次上表示这些结构,不再需要规定算法的细节。关系数据库的标准语言SQL即属于该类语言。4GL语言兼有过程性和非过程性两重特性。程序员规定条件和相应的动作,这是过程性的部分,需要指出想要的结果,就是非过程性部分。然后由4GL语言系统运用它的专门领域的知识来填充过程细节。上一页下一页返回9.1程序设计的基本过程9.1.2程序设计语言选择在程序设计的时候,选择程序设计语言非常重要,若选择了合适的语言,就能减少编码的工作量,产生易读、易测试、易维护的代码。在选择程序设计语言时,既要考虑程序设计语言的特性,又要考虑是否能满足需求分析和设计阶段所产生的模型的需要。一般而言,衡量某种程序设计语言是否适合特定的项目,应考虑下面的一些因素:(1)应用领域;(2)算法和计算复杂性;(3)软件运行环境;(4)用户需求中关于性能方面的需要;上一页下一页返回9.1程序设计的基本过程(5)数据结构的复杂性;(6)软件开发人员的知识水平和心理因素等。其中,应用领域常常被作为选择程序设计语言的首要标准,这主要是因为若干主要的应用领域长期以来已固定地选用了某些标准语言,例如,C语言经常用于系统软件开发;Ada、C和Modula-2对实时应用和嵌入式软件更有效;COBOL是适用于商业信息处理的语言;FORTRAN适用于工程及科学计算领域;人工智能领域则使用LISP、PROLOG。上一页下一页返回9.1程序设计的基本过程9.1.3程序设计的基本过程程序设计就是使用某种程序设计语言编写程序代码来驱动计算机完成特定功能的过程。程序设计的基本过程一般由分析所求解的问题、抽象数学模型、选择合适算法、编写程序、调试通过直至得到正确结果等几个阶段所组成,如图9.1所示。其设计步骤如下:(1)确定要解决的问题,对任务进行调查分析,明确要实现的功能。(2)对要解决的问题进行分析,找出它们的运算和变化规律,建立数学模型。当一个问题有多个解决方案时,选择适合计算机解决问题的最佳方案。上一页下一页返回9.1程序设计的基本过程(3)依据解决问题的方案确定数据结构和算法,绘制流程图。(4)依据流程图描述算法,选择一种用合适的计算机语言编写程序。(5)通过反复执行所编写程序,找出程序中的错误,直到程序的执行效果达到预期的目标。(6)对解决问题整个过程的有关资料进行整理,编写程序使用说明书。上一页下一页返回9.1程序设计的基本过程9.1.4程序设计方法与风格程序设计是一门技术,需要相应理论、技术、方法和工具来支持。程序设计方法和技术的发展,主要经过了结构化程序设计阶段和面向对象程序设计阶段。除了好的程序设计方法和技术之外,程序设计风格也很重要。良好的程序设计风格,可以使程序结构清晰合理,使程序代码便于测试和维护。要形成良好的程序设计风格,应注重考虑下列因素。1.源程序文档化源程序文档化主要包括选择标识符的名称、程序注释和程序的视觉组织。上一页下一页返回9.1程序设计的基本过程(1)符号名的命名。符号名的命名应具有一定的实际含义,以便于对程序功能的理解,(2)程序注释。正确的注释能够帮助读者理解程序。(3)视觉组织。为了使程序的结构一目了然,在程序中利用空格、空行、缩进等技巧可使程序逻辑结构清晰,层次分明。2.数据说明在编写程序时,需要注意数据说明的风格,以便使程序中的数据说明更易于理解和维护。应注意如下几点:(1)数据说明的次序规范化;(2)说明语句中变量安排有序化;(3)使用注释,说明复杂数据的结构。上一页下一页返回9.1程序设计的基本过程3.语句的结构语句构造力求简单直接,不应该为提高效率而使语句复杂化。一般应注意:(1)在一行内只写一条语句,并采用适当的缩进格式,使程序的逻辑和功能变得明确;(2)程序编写应优先考虑清晰性;(3)除非对效率有特殊要求,否则程序编写要做到清晰第一,效率第二;(4)首先要保证程序正确,然后才要求提高速度;(5)数据结构要有利于程序的简化;(6)尽可能使用库函数;上一页下一页返回9.1程序设计的基本过程(7)避免使用临时变量而使程序的可读性降低;(8)避免使用无条件转移语句;(9)避免采用复杂的条件语句;(10)避免过多的循环嵌套和条件嵌套;(11)要模块化,使模块功能尽量单一;(12)利用信息隐蔽,确保每一个模块的独立性。4.输入和输出输入、输出方式和格式,往往是用户对应用程序是否满意的一个因素,应可能方便用户的使用。在设计和编程时都应该考虑如下原则:(1)对所有的输入数据都要检验数据的合法性;(2)检查输入项的各种重要组合的合理性;上一页下一页返回9.1程序设计的基本过程(3)输入格式要简单,输入的步骤和操作尽可能简洁;(4)输入数据时,应允许使用自由格式;(5)应允许缺省值;(6)输入一批数据时,最好使用输入结束标志;(7)在以交互式输入/输出方式进行输入时,要在屏障上使用提示符明确提示输入的请求,同时在数据输入过程中和输入结束时,在屏幕上给出状态信息;(8)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;(9)给所有的输出加注释,并设计输出报表格式。上一页返回9.2算法9.2.1算法的概念算法是对解决某一特定问题的操作步骤的具体描述。在计算机科学中,算法是描述计算机解决给定问题的有明确意义操作步骤的有限集合。计算机算法一般可分为数值计算算法和非数值计算算法。数值计算算法就是对所给的问题求数值解,如求函数的极限、求方程的根等;非数值计算算法主要是指对数据的处理,如对数据的排序、分类、查找及文字处理、图形图像处理等。下一页返回9.2算法9.2.2算法特征算法应具有以下基本特征。(1)可行性:算法中描述的操作必须是可执行的,通过有限次基本操作可以实现。(2)确定性:算法的每一步操作,必须有确切的含义,不能有二义性和多义性。(3)有穷性:一个算法必须保证执行有限步骤之后结束。(4)输入:一个算法有零个或多个输入,以描述运算对象的初始情况,所谓零个输入是指算法本身定出了初始条件。(5)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的。上一页下一页返回9.2算法9.2.3算法的表示算法的描述应直观、清晰、易懂,便于维护和修改。描述算法的方法有多种,常用的表示方法有自然语言、传统流程图、N—S图、伪代码和计算机语言等。其中最常用的是传统流程图和N—S图。1.自然语言自然语言即人们日常使用的语言,用它描述算法流程,通俗易懂。缺点是文字冗长,有时容易出现“二义性”(歧义性)。【例9.1】用自然语言描述交换两个变量值的算法。交换两个变量的值不能直接交换,需借助中间变量采取间接交换的办法。设有变量a、b和中间变量c。上一页下一页返回9.2算法解决问题的算法如下:(1)输入两个值到变量a和变量b中;(2)将变量a的值赋给中间变量c;(3)将变量b的值赋给变量a;(4)将中间变量c的值赋给变量b。【例9.2】用自然语言描述求Sum=1+2+…+10的算法。设用变量sum存放累加和,n为自然数的项数。解决问题的算法如下:(1)将0赋给变量sum;(2)将1赋给变量n;上一页下一页返回9.2算法(3)计算sum+n,将结果存入变量sum中;(4)取下一个自然数(n加1)给变量n;(5)若n小于或等于10,则重复步骤(3)和步骤(4)否则继续下一步;(6)输出累加和sum。2.传统流程图流程图是用一些图形符号、箭头线和文字说明来表示算法的框图。优点是比较直观;缺点是过于精细比较难画,含有指向线也比较难读,但描述简单的问题或模块间的流程还是比较有效的。美国国家标准化协会(AmericanNationalStandardInstitute,ANSI)规定了如下一些常用的流程图符号。上一页下一页返回9.2算法(1)起止框:表示流程开始或结束。(2)输入/输出框:表示输入或输出。(3)处理框:表示对基本处理功能的描述。(4)判断框:根据条件是否满足,在几个可以选择的路径中,选择某一路径。(5)流向线→、↑:表示流程的路径和方向。(6)连接点○:用于将画在不同地方的流程线连接起来。通常在各种图符中加上简要的文字说明,以进一步表明该步骤所要完成的操作。上一页下一页返回9.2算法【例9.3】用传统流程图描述Sum=1+2+…+10的算法,如图9.2所示。3.N—S图N—S图,直观易读易懂,便于结构化程序设计,但对于复杂问题的算法,仍要注意先按模块画N—S图,然后再画出将各模块装配起来的N—S图或传统流程图。【例9.4】用N—S图描述Sum=1+2+…+10的算法,如图9.3所示。4.伪代码“伪代码”,它是用介于自然语言和计算机编程语言之间的文字和符号来描述算法。优点是不用图形符号,书写方便,格式紧凑,也比较好懂,便于向程序过渡,缺点是直观性稍差些。上一页下一页返回9.2算法【例9.5】用“伪代码”描述打印x的绝对值的算法。ifx非负printxelseprint—x5.高级语言(计算机语言)可以利用某种高级语言(计算机语言)描述算法,很容易向程序过渡。【例9.6】用c语言描述Sum=1+2+…+10的算法。#include〈stdio.h〉voidmain()上一页下一页返回9.2算法{intn,sum;sum=0;n=1;while(n<=10){sum=sum+n;n=n+1;}printf("sum=5d\n,"sum);}上一页下一页返回9.2算法算法和程序是有区别的。算法是对解题步骤(过程)的描述,可以与计算机无关;而程序是利用某种计算机语言对算法的具体实现。可以用不同的计算机语言编写程序实现同一个算法,算法只有转换成计算机程序才能在计算机上运行。上一页返回9.3程序设计方法目前,广泛采用的程序设计方法是“结构化程序设计”和“面向对象程序设计方法”,这两种方法也是我们今后进行程序设计时必须掌握的基本方法。本节就这两种方法基本思路的要点作一介绍。9.3.1结构化程序设计方法由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。20世纪70年代提出了“结构化程序设计”(StructuredProgramming)的思想和方法,该方法引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。它的设计思想主要有三个方面。下一页返回9.3程序设计方法1.“自项向下,逐步细化,模块化”的设计过程具体包括以下两个方面:(1)将一个大问题,分解为若干子问题(模块)组成的层次结构;(2)将模块细化成更小更简单的模块直至能容易给出一系列处理步骤,并能由程序设计语言的语句来实现。2.关于程序结构限制为三种基本结构问题只有将程序的结构限制为顺序、选择和循环三种基本结构才可以提高程序的易读、易改性。如果程序的结构是由三种基本结构组成的,这样的程序就是结构化程序。如果算法结构是由这三种基本结构组成的,那么该算法就是结构化的算法。结构化程序源于结构化算法。程序实质就是用计算机语言描述的算法。上一页下一页返回9.3程序设计方法结构化程序的主要优点是:(1)结构清晰,易读、易懂,易修改、易维护、易移植;(2)便于多人协作,编制大型软件。任何算法都包含三种控制结构:顺序结构、选择结构和循环结构。(1)顺序结构。如图9.4所示,所谓顺序结构是指执行完A才执行B。顺序结构是最简单的控制结构。(2)选择结构,又称“分支结构”。如图9.5所示,选择结构必须包含一个条件判断框。当条件P成立时,执行A,否则执行B。(3)循环结构。如图9.6(a)、(b)所示。图(a)为先判断条件P,为真执行语句,如此反复,否则退出循环。图(b)先无条件地执行一次语句,再判断条件P,为真继续执行语句,如此反复,否则退出循环。上一页下一页返回9.3程序设计方法以上三种控制结构的共同特点:(1)只有一个入口;(2)控制结构内的每一部分都有机会被执行。3.限制使用goto语句因为使用goto语句会破坏程序的结构化,降低程序的可读性,因而不提倡使用goto语句。综上可知,结构化程序设计方法是一种较好的程序设计方法,使用该方法设计出来的程序不仅质量高,而且使程序设计工作化难为易,使过去“无章可循”的程序设计变得思路清晰,做法规范,从而极大地提高了编程效率。它也是下面要介绍的“面向对象”程序设计方法的基础。应该很好地掌握这一基本的程序设计方法。上一页下一页返回9.3程序设计方法9.3.2面向对象程序设计方法面向对象程序设计,是当前程序设计的主流方向,是程序设计方式在思维上和方法上的一次飞跃。面向对象程序设计方式是一种模仿人们建立现实世界模型的程序设计方式,是对程序设计的一种全新的认识。1.面向对象程序设计的基本概念(1)对象(object)。客观世界中任何一个事物都可以看成一个对象。或者说,客观世界是由千千万万对象组成的。对象可以是自然物体(如汽车、房屋),也可以是社会生活中的一种逻辑结构(如班级、连队),一篇文章、一个图形等都可视作对象,对象是构成系统的基本单位。上一页下一页返回9.3程序设计方法任何一个对象都应该具有这两个因素,即属性和行为。它能够根据外界给出的信息进行相应的操作,操作表示对象的动态行为。一个对象往往是由一组属性和一组行为构成的。一台录像机是一个对象,它的属性是生产厂家、品牌、重量、体积、颜色、价格等,它的行为就是它的功能,例如可以根据外界给它的信息进行录像、放像、快进、倒退、停止等操作。一般来说,凡是具备属性和行为这两种要素的,都可以作为对象。一个数,也是一个对象,因为它有值,对它能进行各种算术运算;一个单词也可以作为对象,它有长度、字符种类等属性,可以对它进行插入、删除、输出等操作。上一页下一页返回9.3程序设计方法操作描述了对象执行的功能,如果通过消息传递,则还可以为其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,只需要调用就可以了,用户不必去关心这一过程是如何编写的。事实上,这个过程已经封装在对象中,用户也看不到。对象的这一特性,即是对象的封装性。对象有如下一些基本特点:①标识唯一性。指对象是可区分的,并且由对象的内在本质来区分,而不是通过描述来区分。②分类性。指可以将具有相同属性和操作的对象抽象成类。③多态性。指同一个操作可以是不同对象的作为。④封装性。从外面看只能看到对象的外部特性。上一页下一页返回9.3程序设计方法(2)类(Class)。将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其相应类的一个实例。例如:Integer是一个整数类,它描述了所有整数的性质。因此任何整数都是整数类的对象,而一个具体的整数“123”则是类Integer的一个实例。由类的定义可知,类是关于对象性质的描述,它与对象一样,包括一组数据属性和在数据上的一组合法操作。上一页下一页返回9.3程序设计方法(3)消息(Message)。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一求的信息。消息的使用类似于函数调用,消息中指定了某一个实例、一个操作名和一个参表。接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来在消息传递过程中,由发送消息的对象(发送对象)的触发操作产生输出对果,作为消息送至接收消息的对象(接收对象),引发接收消息的对象一系列的操作。所传送的消息实质是接收对象所具有的操作/方法名称,有时还包含相应的参数,消息传递如图9.7所示。上一页下一页返回9.3程序设计方法消息中只包含传递者的要求,它告诉接收者需要进行哪些处理,但并不指示接收者应该怎样完成这些处理。消息完全由接收者解释,接收者独立决定采用什么方式完成所需的处理发送者对接收者不起任何控制作用。一个对象能够接收不同形式、不同内容的多个信息;相同形式的消息可以送往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够作出不同的反映。一个对象可以同时往多个对象传递消息,两个对象也可以同时向某个对象传递消息。(4)继承(Inheritance)。继承是面向对象方法的一个主要特征。继承是使用己有的类(父类)定义作为基础建立新类(子类)的定义。已有的类可当做基类来引用,则新类相应地可当做派生类来引用。上一页下一页返回9.3程序设计方法无论台式计算机还是笔记本式计算机,都是从早期的电子数字计算机进化而来的,因而继承了现代计算机所固有的采用二进制和存储程序等特点,这就是在现实世界中对象与类所具有的继承性的例子。对象与类的继承性在面向对象程序设计中得到了充分的体现。由某个类可以生成若干个对象,这些对象将自动拥有该类所具有的属性和方法;也可以由现有的类派生出新类,该新类将自动拥有其父类所具有的属性和方法。上一页下一页返回9.3程序设计方法由于子类与父类之间存在继承性,所以在父类中所做的修改将自动反映到它所有的子类上,而无须更改子类,这种自动更新的能力可以节省用户大量的时间和精力。例如:当为某父类添加一个所需的新属性时,它的所有子类将同时具有这种属性:同样,当修复了父类中的一个错误时,这个修复也将自动体现在它的全部子类中。充分利用对象与类的继承性,可以使整个应用程序的设计和维护工作大大简化,并使其更加规范与统一。上一页下一页返回9.3程序设计方法(5)多态性(Polymorphism)。对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行动,该现象称为多态性。例如:在Windows环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序;如果对象是一个文本文件,则启动文本编辑器并打开该文件。在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。上一页下一页返回9.3程序设计方法多态性是面向对象程序设计的一个重要特征,多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著地提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时,只需派生出与新实体类相应的新的子类,完全无须修改原有的程序代码,甚至不需要重新编译原有的程序。利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接收消息的对象。上一页下一页返回9.3程序设计方法2.面向对象程序设计的思想面向对象程序设计的基本思想:一是从现实世界中客观存在的事物(即对象)出发,尽可能运用人类自然的思维方式去构造软件系统,也就是直接以客观世界的事务为中心来思考问题、认识问题、分析问题和解决问题;二是将事物的本质特征经抽象后表示为软件系统的对象,以此作为系统构造的基本单位;三是使软件系统能直接映射问题,并保持问题中事物及其相互关系的本来面貌。因此,面向对象方法强调按照人类思维方法中的抽象、分类、继承、组合、封装等原则去解决问题。这样,软件开发人员便能更有效地思考问题,从而更容易与客户沟通。上一页下一页返回9.3程序设计方法面向对象的方法,实质上是面向功能的方法在新形势下(由功能重用发展到代码重用)的回归与再观,是在一种高层次上(代码级重用)新的面向功能的方法论,它设计的“基本功能对象(类或构件)”,不仅包括属性(数据),而且包括与属性有关的功能(或方法,如增加、修改、移动、放大、缩小、删除、选择、计算、查找、排序、打开、关闭、存盘、显示和打印等)。它不仅将属性与功能融为一个整体,而且对象之间可以继承、派生以及通信。因此,面向对象设计是一种新的、复杂的、动态的、高层次的面向功能设计。它的基本单元是对象,对象封装了与其有关的数据结构及相应层的处理方法,从而实现了由问题空间到解析空间的映射。上一页下一页返回9.3程序设计方法3.面向对象程序设计步骤(1)面向对象分析(ObjectOrientedAnalysis,OOA)。软件工程中的系统分析阶段,系统分析员要和用户结合在一起,对用户的需求作出精确的分析和明确的描述,从宏观的角度概括出系统应该做什么(而不是这么做)。面向对象的分析,要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(包括对象的属性和方法)以及对象之间的联系,并将具有相同属性的方法的对象用一个类来表示,建立一个能反映真实工作情况的需求模型。在这个阶段中形成的模型是比较粗略的。上一页下一页返回9.3程序设计方法(2)面向对象设计(ObjectOrientedDesign,OOD)。根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计,首先是进行类的设计,类的设计可能包含多少层次(利用继承与派生)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。在设计阶段,并不牵涉某一种具体的计算机语言,而是用一种更通用的描述工具(如UML)来描述。(3)面向对象编程(ObjectOrientedProgramming,OOP)。根据面向对象设计的结果,用一种计算机语言把它写成程序,显然应该选用面向对象的计算机语言(例如C++、Java),否则是无法实现面向对象设计的要求的。上一页下一页返回9.3程序设计方法(4)面向对象测试(ObjectOrientedTest,OOT)。在写好程序后交给用户使用前,必须对程序进行严格的测试。测试的目的是发现程序中的错误并改正它。面向对象测试是用面向对象的方法进行测试,以类作为测试的基本单元。(5)面向对象维护(ObjectOrientedSoftMaintenance,OOSM)。正如对任何产品都需要进行售后服务和维护一样,软件在使用中也会出现一些问题,或者软件商想改进软件的性能,这就需要修改程序。由于使用了面向对象的方法开发程序,因而使得程序的维护比较容易。因为对象的封装性,修改一个对象对其他对影响很小。利用面向对象的方法维护程序,大大提高了软件维护的效率。上一页返回9.4高级语言程序设计实例不同的高级语言虽其功能、特点和应用领域有差异,但是用它们编程的思想和方法,特别是涉及基础知识都是相通的,为了给以后系统学习高级语言程序设计打下基础,本节以C语言编写程序实例,不作系统介绍,只让读者了解高级语言程序结构,创建和运行高级语言程序的环境(平台)等。9.4.1创建和运行一个C语言程序目前,VisualC++已是被广泛应用的程序开发平台,越来越多的学校用它作为C/C++程序设计课程的教学平台。根据这一实际需求,下面的步骤是以MicrosoftVisualC++6.0(简称VC++)为软件环境进行操作。下一页返回9.4高级语言程序设计实例在此过程中,VisualC++将把我们的程序称为“工程”。每个工程会建立一个文件夹、工程中包含一组文件,这组文件可以具有不同的扩展名,其中部分文件由VisualC++自动创建,这组文件组合在一起形成一个完整的应用程序。操作步骤:(1)打开MicrosoftVisualC++工作界面,如图9.8所示。(2)使用MicrosoftVisualC++不仅可以创建控制台应用程序,也可以创建Windows应用程序,在此选择创建一个控制台应用程序。选择“文件”→“新建”→选择“工程”选项卡→单击“Win32ConsoleApplication”选项,如图9.9所示。上一页下一页返回9.4高级语言程序设计实例(3)单击“确定”按钮,显示对话框如图9.10所示。(4)选中“一个空工程”选项后,单击“完成”按钮,在弹出的“新建工程信息”对话框中,单击“确定”按钮,出现如图9.11所示的窗口。(5)选择命令“工程”→“添加工程”→“新建”,出现如图9.12所示的对话框。(6)在“文件”选项卡下,选择“C++SourceFile”选项,在“文件”文本框中输入“hello.c”,如图9.13所示。(7)单击“确定”按钮,出现如图9.14所示的窗口,右边有字符输入光标闪烁,提示输入程序。上一页下一页返回9.4高级语言程序设计实例(8)输入程序的全部内容,如图9.15所示,在输入的时候不要输入中文标点符号,然后选择菜单命令“文件”→“保存”,把输入的内容保存到文件d:\c-program\hello.c。(9)选择命令“编译”→“编译hello.c”,结果如图9.16所示。窗口下部的显示框内最后一行说明在程序中发现了多少错误。如果不是“0error(s),0warning(s)”,则要检查输入的程序,纠正错误,再重复此步骤,直到没有错误为止。修改完成后,请注意按照步骤(8)保存修改后的程序。(10)选择命令“编译”→“构件hello.exe”,结果如图9.17所示。(11)选择命令“执行hello.exe”,结果如图9.18所示。上一页下一页返回9.4高级语言程序设计实例观察程序运行结果后,按任意键,运行窗口消失。这个程序在一个黑色窗口中运行,这是一种最简单的程序,在这本书中,我们编写程序都是这样编辑运行的。(12)选择命令“文件”→“退出”,关闭MicrosoftVisualC++。下面是对这个程序的一些解释,读者目前只需在表面上了解,暂且不必深究,随着以后系统地学习C语言程序设计,会逐渐加深理解。①“/*……*/”:表示注释部分,目的是帮助有关人员了解、管理程序。计算机在接受程序时,忽略此内容。注释分为行注释和块注释,行注释用“//”表示,它的范围只到本行结束,不允许跨行。块注释用“/*……*/”表示。两种注释均可以加在程序中的任何位置。为了便于理解,我们用汉字表示注释,当然也可以用英语或汉语拼音作注释。上一页下一页返回9.4高级语言程序设计实例②“#incluce”:以#开始的语句称为预处理命令语句。因为在编译器开始工作之前,先要对这些命令进行预处理,然后将预处理命令的结果和源程序一起再进行通常的编译处理,以得到目标代码。并不是每个C语言程序都必须有该语句,但是,如果程序有该语句,就必须将它放在程序的开始处,位于任何其他语句之前。③“〈stdio.h〉”:以.h为扩展名的文件被称为头文件,文件名写在“〈”和“〉”之间或一对“"”之间,它可以是C语言程序中现成的标准库文件,也可以是自定义的库文件。标准库文件定义任何程序内可以使用的函数,使得开发人员可以更轻松地执行日常任务。stdio.h文件中包含了有关输入输出语句的函数。上一页下一页返回9.4高级语言程序设计实例④“voidmain(){……}”:是程序的主体。“main()”表示主函数,“main”是它的函数名。由一组大括号“{}”括起来的是函数体。⑤“printf("HelloWorld!\n:");”:在屏幕上产生一行输出“HelloWorld!”,并换行(\n)。函数主体中的每个语句都以分号结束。上一页下一页返回9.4高级语言程序设计实例9.4.2C语言程序的结构C语言程序的一般结构如图9.19所示。在C语言中,同一字母的大小写被当做两个不同字母,例如A和a不能混为一谈。程序编写好后,需要以文件形式保存在磁盘上,以便长期保存和修改。以“.c”为文件名后缀的文件就保存着C程序。用任何文本编辑工具打开这种文件,都可以查看、修改程序的内容。上面程序注释区中的“源文件名:hello.c”就是说明文件名的。上一页下一页返回9.4高级语言程序设计实例9.4.3C语言程序设计实例【例9.7】编写程序实现下述功能:输入三角形的三个边长a、b、c,求出三角形的面积。使用海伦公式计算三角形面积,并且要对构成三角形的条件进行判断。三角形构成的条件是任意两边之和大于第三边。具体程序如下:/*源文件名:ch10_1.c功能:求三角形面积*/#include<stdio.h>#include<math.h>上一页下一页返回9.4高级语言程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论