第六章软件开发技术
学习目标:
人的本质是什么1.理解软件的功能与开发流程。
2.了解计算机程序设计的基本概念,程序设计语言的发展;数据结构和算法在程序设计中的作用;软件工程的定义、主要内容和过程;软件开发常用的方法和技术
计算机是可以帮助人们完成工作的工具。但是,它又和我们见到的普通刀、锯有所不同,计算机是一种特殊的工具,当计算机要执行指定的任务时,是通过执行内部的程序完成的。计算机程序最基本的功能是把原始的数据转变成有意义的信息。程序指导计算机获取原始数据,然后将数据转换为对于最终用户有用的信息。但是,程序的编写并不是简单的事情,学习编程需要一段时间,需要懂得如何把你想要叫计算机做的事情教给计算机去做。这就需要掌握和计算机交流的语言,需要学习有关程序设计的知识和方法。本章我们针对软件开发涉及的主要技术进行介绍。
第一节程序设计语言与解题过程
前面我们已经知道,计算机包括硬件系统和软件系统,硬件系统好比人的躯体,软件系统好比人的灵魂。为了让计算机做更多的事,不仅要为它配备一套性能良好的硬件,还要为其设计出一套套解决各式
各样问题的软件,即计算机程序。
开家政公司要设计出一个好的程序,首先必须了解利用计算机解决实际问题的过程,其次必须掌握程序设计的基本技术,最后要熟练掌握某种程序设计语言。
一、计算机如何解题
我们看到,计算机可以画图,可以放影碟,可以玩游戏,诸如此类,不一而足。这是因为计算机内部使用了不同的程序,才可以处理不同的问题。
1.程序
“程序”一词,从广义上讲可以认为是任何行动的方案或步骤,例如一场大型演唱会的程序,大学新生报到的程序,电脑组装的程序等等。
计算机程序同日常生活中的程序含义基本上是相同的,表示的也是处理事务的顺序和步骤。由于组成计算机程序的基本单位是指令,因此,计算机程序就是按照工作步骤事先编排好的、具有特殊功能的指令序列。
使用计算机解决问题与人解决问题类似,必须将解题过程分为若干步骤。为了让计算机代替人脑的部
分功能,要教会计算机按照人所规定的步骤和顺序对数据进行处理。但用计算机解题有其自身的特点。
首先,人类凭借自然语言进行思维。所谓自然语言就是人所使用的语言。由于国家或民族不同,他们所使用的语言也是不同的,例如绝大多数的中国人使用汉语,英美国家的人使用英语,俄罗斯人使用俄语,如此等等。计算机进行“思维”也要通过语言,这就是计算机语言。控制计算机解题过程的算法必须以计算机能够“读懂”的形式表示出来。这种以计算
机语言描述的算法就是程序。
其次,人解决问题的过程是一个“自适应”和“自动调节”的过程。也就是说,人在解决问题之初,只要在脑海中形成一个初步的、“模糊”的方案,就可以着手处理;在处理过程中,若发现方案有不妥或错误,可随时调整,直至问题解决。而计算机解决问题是一个完全“机械”的过程,也就是说,计算机在解题前,必须输入一个包含完整的、确定的方法和步骤的程序,不允许有丝毫的含糊;解题过程开始之后,严格按确定的方法和步骤执行,不可能作任何修改;如发现错误,执行过程只能被迫停止,需修改程序,从头再来。
行将就木的意思因此,确切地说,所谓程序,是用计算机语言对所要解决的问题中的数据以及处理问题的方法和步骤所做的完整而准确的描述,描述的过程就称为程序设计。对数据的描述就是指明数据结构形式;对处
理方法和步骤的描述也就是算法设计。因而,数据结构与算法是程序设计过程中密切相关的两个方面。从这个意义上讲,程序是建立在数据结构基础上使用计算机语言描述的算法。发明Pascal语言的著名计算机科学家Wirth教授关于程序就提出了一个著名公式:程序=数据结构+算法。这个公式很形象地说明了程序设计的主要任务。
2.程序设计过程
程序员和建筑师、作曲家以及作家一样,是富有创造性的人。有如建筑师通过图形、文字构筑起高楼大厦,作家运用文学手段描写人物的个性和特征,作曲家用跳动的音符谱写动听的旋律,程序设计者通过调动各种程序设计手段,先形成程序框架,然后翻译成最初的程序版本,再反复修改,最后形成一个完美的程序。
对于程序设计的初学者来说,首先要学会设计一个正确的程序。一个正确的程序,通常包括两个含义:一是书写正确,二是结果正确。书写正确是指程序在语法上正确,符合程序语言的规则;而结果正确通常是指对应于正确的输人,程序能产生所期望的输出,符合使用者对程序功能的要求。程序设计的基本目标是编制出正确的程序,但这仅仅是程序设计的最低要求。
一个优秀的程序员,除了程序的正确性以外,更要注重程序的高质量。所谓高质量是指程序具有结构化程度高、可读性好、时空效率高、可靠性高、便于调试维护等一系列特点。毫无疑问,无论是一个
正确的程序,还是一个高质量的程序,都需要通过精心设计才能达到预期的目标。
对复杂程度较高的问题,想直接编写程序一般是不现实的,必须首先从问题描述入手,经过对具体问题的分析,抽象出合适的数学模型并设计合适的算法,然后编写程序、调试和运行直至得到正确结果。这一完整的过程称为程序设计。
那么,如何进行程序设计呢?程序设计的基本过程一般包含以下几个步骤:
(1)确定要解决的问题。接到任务后,首先对要处理的对象进行调查,了解其要求。然后确定哪些任务由计算机完成,哪些任务手工完成,并对计算机要完成的任务,详细地给出原始数据、处理后的结果及处理功能。
(2)分析问题,建立数学模型。由于程序是以数据处理的方式解决客观世界中的问题,因此在程序设计之初,首先应该将实际问题用数学语言描述出来,形成一个抽象的、具有一般性的数学问题,从而给出问题的抽象数学模型,然后制定解决由该模型所代表的数学问题的算法。数学模型精确地阐述了问题所涉及的各种概念、已知条件、要求结果,以及已知条件与要求结果之间的联系等信息。数学模型是下一步确定算法的基础。
(3)选择计算方法。根据特定的数学模型,选择适合计算机解决问题的方法。当同一问题有多个解决方
案时,可根据计算的速度、求值的精度、计算要求与计算机硬件性能的关系进行选择。数学模型和算法的结合给出了问题的解决方案。
(4)确定数据结构和算法。解决方案确定后,要考虑数据的组织形式,也就是数据结构,并设计与之相适应的算法。然后对算法进行描述。算法的初步描述可以采用自然语言,然后
逐步转化为流程图或其他直观方式。要求描述方式简单明确,能够明显地展示设计者的思想,是进行程序调试的重要参考。
(5)绘制流程图。根据已确定的算法,画出流程图或结构化流程图。这能使程序员保持思路清晰,减少编程的错误。
(6)编写程序。使用计算机系统提供的某种程序设计语言,将已设计好的算法表达出来,这个过程称为程序编制(编码)。编写的程序一般需要经过反复调试、修改才能得到可以运行且结果“正确”的程序。
这一步应注意的是,要选择一种合适的语言来适应实际算法和所处的计算机环境,并要正确地使用语言,准确地描述算法。
(7)调试并测试程序。调试程序就是对送入计算机的程序进行排错、试运行的过程,调试的结果是得到一个能正确运行的程序。程序编写完成后必须经过科学的、严格的测试,才能最大限度地保证程序的
正确性。同时,通过测试可以对程序的性能作出评估。
(8)整理资料,交付使用。程序调试通过后,应将有关资料进行整理,编写程序使用说明书,交付用户使用。
图6.1程序设计的流程。
由此可见,程序设计涉及四个方面的问题:数据结构、算法、编程语言以及隐含在程序设计过程中的设计方法。这四个方面的知识都是程序设计人员所必须具备的,其中算法是至关重要的一个方面。图6.1描述了程序设计的流程。
3.程序设计技术与基本原则
综上所述,程序设计过程是算法、数据结构和程序设计语言三者相结合与统一的过程。要设计出一个好的程序,必须掌握程序设计的基本技术,熟练掌握某种程序设计语言。
对问题和算法的最初描述,无论是形式上还是内容上,离最终以计算机语言描述的算法(程序)都有相当大的距离。如何从问题描述入手构造出解决问题的算法,如何组织好计算机处理的数据,如何设计出结构和风格良好的高效程序,这涉及多方面的理论和技术,它们形成了计算机科学的一个重要分支——程序设计方法学。
对于规模不很大的问题,程序设计的核心是算法和数据结构,只要构造出解决问题的高效算法和数据结构,则完成剩下的任务已经不存在太大困难。如果问题规模大、功能复杂,则有必要将问题分解成功能相对单一的一些小模块分别实现。这时,程序的组织结构和层次设计越来越显示出重要性,程序
设计方法将起到重要作用。在这种情况下,程序设计过程实际上成为算法、数据结构以及程序设计方法学三个方面相结合与统一的过程,这三个方面被称为程序设计三要素。
为了编写出高质量的程序,必须首先明确评价程序质量性能的如下一些准则:
(1)正确性:指程序具备且只具备程序设计规格说明书中所列举的全部功能。它是判断程序质量的首要标准。
(2)可靠性:指程序在多次反复使用过程中,保持不失败的概率。
促销方式(3)简明性:要求程序简明易读。
(4)有效性:程序在计算机上运行需要使用一定数量的计算机资源,如CPU的时间、存储器的存储空间。有效性就是在一定的软、硬件条件下,程序综合效率的反映。
(5)可维护性:程序的维护分为校正性维护、适应性维护和完善性维护。软件的可维护性关系到程序的可用性,应特别予以关注。
(6)可移植性:程序与其所完成的任务有关,也与它的运行环境有关。程序的开发应尽可能远离机器的特征,以提高它的可移植程度。
可可托海景区由于程序类别以及应用领域的不同,上述判别准则在评估程序整体性能质量时所占的比重会有所不同,需要具体问题具体分析。
由此可知,程序设计涉及到多方面的内容。有些初学程序设计的人认为,进行程序设计就是用计算机语言写出源程序,其实这仅仅是完成了程序的编码。事实上程序设计从问题分析就开始了,它包括了从问题分析直到取得正确结果这样一个完整过程。忽视编码之前的阶段,即不讲究问题的定义和分析及数据结构和算法的设计,其结果很可能是“事倍功半”,很难对付日益复杂的程序设计问题,难于满足高质量程序的基本标准。
二、人和计算机交流的语言――计算机语言
语言是交流思想、传达信息的工具。要叫计算机做人交给的任务,就需要使计算机理解人所设计的算法,这就需要用计算机能够理解的语言――计算机语言来描述算法。计算机语言是人们设计的专用于人与计算机交流、进而计算机能够自动识别的语言。计算机语言描述的算法就是计算机程序。
1.计算机语言的分类
程序设计语言是人与计算机之间进行信息交换的工具。人们利用程序设计语言编制程序,然后送入计算机,计算机对程序进行解释或翻译,识别人的意图并按人的意图进行处理,达到解决问题的目的。
随着计算机技术的飞速发展,人们总是希望设计出来的语言方便使用,于是不同风格的程序设计语言,从最低级的机器语言到汇编语言,再到高级语言,以及更高级、智能化的语言不断涌现。
计算机语言作为在计算机上实现算法的工具,其语法应该满足能简洁明了地描述算法结构、数据、控制操作流程等各方面的需要。从最初的机器语言发展到今天各种各样的高级语言,主要原因是计算机硬件技术的飞速发展,使得计算机能够处理的问题规模和计算机的应用领域不断扩大。此外也由于人们一直在追求更良好、优美的编程风格。这就使得计算机语言的抽象程度越来越高,描述能力越来越强,越来越向专业化或通用化两个不同方向发展,程序风格也越来越接近自然语言,使程序设计过程也越来越接近人类的思维过程。
几十年来,程序设计语言发展迅速,出现了各种各样的程序语言。
(1)按语言类型分类
按语言类型分类,程序设计语言有机器语言、汇编语言和高级语言。
机器语言:人们在设计计算机硬件时就为计算机设计了一些基本操作,每一种基本操作叫一条指令,这种指令的功能用计算机的逻辑电路可以直接实现。计算机能直接执行的指令叫机器指令。最初的程序设计直接使用机器指令,也称为机器语言。使用机器指令进行程序设计要求设计者具有深入的计算
机专业知识,对机器的硬件有充分的了解。这种程序的可读性差,而且由于不同机器的机器指令不同,因此程序的可移植性差,所编写的程序只能在相
同的硬件环境下使用,大大地限制了计算机的应用。
机器语言编写的程序是由二进制代码组成的序列。可以直接访问和使用计算机的硬件资源。计算机能直接识别并执行这种程序,效率高,这是它的优点。
但机器语言处理问题的方式与人们的习惯有较大差距,例如使用机器语言实现两个整数加法,首先要将一个加数放入一个被称为累加器的运算器中,然后将另一个加数与累加器的内容相加(运算结果在累加器中),最后再把累加器中的内容放入存放运算结果的存储单元中。很显然,用机器语言写出这个过程与直接书写x=a+b是大相径庭的。
汇编语言:由于用机器语言编写程序非常不方便,难以记忆各种不同的二进制形式,因此提出将每一条机器语言指令用一串有比较清晰含义的符号来代替,用符号进行程序设计,这样的语言称为符号语言或汇编语言,其符号常常用英语的动词或动词的缩写表示。用汇编语言编写的程序称为汇编语言源程序。
汇编语言源程序与机器语言源程序相比,阅读和理解都比较方便,但计算机却无法识别和执行了。由
于汇编语言的符号命令和机器指令有很好的一一对应关系,于是人们设计了汇编程序,汇编程序的任务是自动地将用汇编语言编写的源程序翻译成计算机能够直接理解并执行的机器语言程序,即目标程序。再通过连接程序将目标程序中所需要的一些系统程序片段(如标准库函数等)连接到目标程序中,形成可执行文件执行,获得所希望的结果。
汇编语言除了可读性比机器语言好外,同样也存在机器语言的缺点,尤其是描述问题方式与人类习惯相差太远,而且通常仍要求编程者对计算机硬件有深入的了解。
高级语言:针对汇编语言的缺点,通过进一步抽象,产生了高级语言(也称为通用程序设计语言)。与汇编语言等低级语言相比,高级语言的表达方式更接近人类自然语言,对各种公式的表示也近似于数学公式,具有很高的可读性。而且高级语言不像汇编语言那样直接针对计算机硬件编程,因此不依赖于计算机的具体型号,具有良好的可移植性。虽然高级语言不如汇编语言效率高,但一般都有广泛的应用范围。而且,一条高级语言语句的功能往往相当于很多条汇编语言的指令,程序编制相对比较简单。因此,在工程计算、定理证明和数据处理等方面,人们常用高级语言来编制程序。
用高级语言编写的程序称为高级语言源程序,同汇编语言源程序一样,计算机也不能理解和执行,于是,人们设计了各种编译程序和解释程序,用于将高级语言源程序翻译成计算机能直接理解并执行的二进制代码的目标程序。
(2)按用户要求分类
按用户要求,程序设计语言有过程式语言和非过程式语言之分。
过程式语言,也叫命令式语言或强制式语言,它是通过指明一系列可执行的运算及运算的次序来描述计算过程的语言。过程式语言的主要特征是,用户可以描述一系列可顺序执行的运算,以表示相应的计算过程。例如,FORTRAN,ALGOL60,COBOL,PASCAL,C 等都是过程式语言。
凡是不必指明计算过程的语言,都是非过程式语言。例如结构化查询语言SQL,只要用户给出查询范围、查询条件和查询对象,不必指明“如何去查询”的具体操作系列,便可自动获得所需的查询结果。
对普通用户来说,在大多数情况下使用的是高级语言。微机中常用的高级语言主要有3类:面向过程的程序设计语言、面向问题的程序设计语言和面向对象的程序设计语言。
面向过程的程序设计语言。传统的程序设计高级语言几乎都是面向过程的程序设计语言,在程序中需要将任务的每个步骤逐一编写出来,对问题的描述接近于问题求解过程,易于掌握和书写。经常用的这类高级语言有BASIC、FORTRAN、PASCAL、C等。
面向问题的程序设计语言。是为了易于定义和解决某些问题而设计的一类与机器无关
的程序设计语言,其主要有点是减少了程序员编写程序的工作量。例如,报表语言、判定语言、机床控制专用语言、医学诊断专用语言、电路设计专用语言等,都是面向问题的程序设计语言。
益阳疫情数据库语言属于面向问题的程序设计语言,编写程序时只要写清楚要调用数据库的什么功能或对数据进行哪种操作即可,至于具体如何完成这种功能或操作,则由语言本身提供。数据库语言提供数据(记录)的存储、管理和维护,以及诸如检索、插入等各种高效的常见数据库操作,比较适用于管理信息系统。目前广泛使用的数据库语言有数据库查询语言SQL 等。SQL不仅具有丰富的数据查询功能,而且具有数据定义和数据控制功能,集查询、DDL、DML和DCL于一体,充分体现了数据库语言的特点和优点。
面向对象的程序设计语言。传统的高级语言,用户不仅要告诉计算机“做什么”,而且要告诉计算机“怎么做”,也就是把每一步的操作事先都设想好,用高级语言编成程序,让计算机按指定好的步骤去执行。近年来出现了“面向对象”的程序设计语言。所谓对象是数据及相关方法的软件实体,可以在程序中用软件中的对象来代表现实世界中的对象。
面向对象语言提供了一系列语法,使编程者能够方便地按照人类思维的最一般规律,以与对所研究对象认知程度相同步的方式开发软件,是一种全新风格的语言。
目前计算机上流行的这类程序设计语言有JAVA、C++、VB、VC、Delphi等。
(3)按应用范围分类
按应用范围,程序设计语言有通用语言和专用语言之分。
目标非单一的语言称为通用语言。如FORTRAN,ALGOL60,COBOL,PASCAL,C 等都是通用语言。目标单一的语言称为专用语言,如自动数控程序工具语言APT,就是专门用于数控机床加工的语言。
(4)按使用方式分类
按使用方式,程序设计语言有交互式语言和非交互式语言之分。
具有人—机交互作用的语言称为交互式语言。利用这种语言编写的程序在执行过程中会向用户随时发出提示,警告等信息,用户可椐此采取相应措施。没有这种功能的语言为非交互式语言。例如,BASIC、APL就是交互式语言,而FORTRAN、ALGOL60、COBOL、PASCAL,C等都是非交互式语言。
2.语言处理程序
对于用某种程序设计语言编写的程序,通常要经过编辑处理、语言处理、装配连接处理后,才能够在计算机上运行。
编辑处理是指计算机通过编辑程序将人们编写的源程序送入计算机。编辑程序可以使用户方便地修改源程序,包括添加、删除、修改等,直到用户满意为止。
语言处理程序是把用一种程序设计语言表示的程序转换为与之等价的另一种程序设计语言表示的程序的程序。
在计算机软件中经常用到的语言处理程序是把汇编语言或高级语言“翻译”成机器语言的翻译程序。被翻译的程序称为源程序或源代码,经过翻译程序“翻译”出来的结果程序称为目标程序。
翻译程序有两种典型的实现途径,分别称为解释方式与编译方式。
(1)解释方式
解释方式是按照源程序中语句的执行顺序,逐句翻译并立即予以执行。即由事先放入计算机中的解释程序对高级语言源程序逐条语句翻译成机器指令,翻译一句执行一句,直到程序全部翻译执行完。解释方法类似于不同语言的口译工作。翻译员(解释程序)拿着外文版的说明书(源程序)在车间现场对操作员作现场指导。对说明书上的语句,翻译员逐条译给
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论