大学计算机基础(第6版)(微课版) 课件 第7章 计算机语言与程序设计_第1页
大学计算机基础(第6版)(微课版) 课件 第7章 计算机语言与程序设计_第2页
大学计算机基础(第6版)(微课版) 课件 第7章 计算机语言与程序设计_第3页
大学计算机基础(第6版)(微课版) 课件 第7章 计算机语言与程序设计_第4页
大学计算机基础(第6版)(微课版) 课件 第7章 计算机语言与程序设计_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

第7章计算机语言与程序设计大学计算机基础课程组2022年4月主要内容计算机语言基础1计算机程序2程序设计风格和原则32程序设计方法4软件集成开发环境与开发平台5主要内容1计算机语言计算机语言的分类计算机程序2程序设计风格和原则33计算机语言基础什么是程序由问题到程序程序的基本控制结构程序设计风格程序设计原则程序设计方法4软件集成开发环境与开发平台5结构化方法面向对象方法软件开发过程软件集成开发环境开发平台7.1.1计算机语言计算机语言(ComputerLanguage)指用来编写计算机程序以实现人与计算机之间通信的语言,是软件的基础和组成部分,也称为程序设计语言。指令是通过语言传达给机器的。为了使计算机按照人们的要求进行各种工作,就需要为编写计算机程序制定一套关于数值、字符的规定,为一些特定表达设置语法规则,这些字符和语法规则构成计算机的各种指令或语句,根据规则,由记号构成的记号串的总体就构成计算机可以接受的语言。7.1.1计算机语言计算机语言的基本成分有数据、运算、控制和传输,其中,数据成分用于描述程序所涉及的数据对象,包括原始数据、中间结果和最终结果;运算成分用于描述程序中可以进行的算术、关系、逻辑、字符串等运算;控制成分用来控制程序中语句的执行顺序;传输成分用以描述程序中的数据传输操作。学习一种计算机语言就是要熟悉这些基本成分在这种语言中的规定并能熟练运用实现设计要求。7.1.1计算机语言程序设计语言的发展经历了从低级到高级的发展历程,发展的核心思想是“更容易编程”。1.第一代计算机语言是机器语言由于计算机内部只能接受和识别二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编写的程序称为机器语言程序,其指令格式、数据等都是二进制形式。机器语言是计算机唯一识别的语言。7.1.1计算机语言例7.1机器语言示例:数据流指令:00000100LODX,代表把存储单元X的值加载(LOAD)到运算器00010100LOD#X,代表把值X加载(LOAD)到运算器00000101STOY,代表把运算器的值存储(STORE)到存储单元Y部分算术运算指令:00000000ADDX,代表把运算器的值加上(ADD)存储单元X的值00010000ADD#X,代表把运算器的值加上(ADD)值X00000001SUBX,代表把运算器的值减去(SUB)存储单元X的值00010001SUB#X,代表把运算器的值减去(SUB)值X00000010MULX,代表把运算器的值乘以(MUL)存储单元X的值00010010MUL#X,代表把运算器的值乘以(MUL)值X00000011DIVX,代表把运算器的值除以(DIV)存储单元X的值00010011DIV#X,代表把运算器的值除以(DIV)值X7.1.1计算机语言部分暂存器:01000000代表暂存器T101000001代表暂存器T2部分存储器:10001000代表地址为136的存储单元10001010代表地址为138的存储单元10001100代表地址为140的存储单元10001110代表地址为142的存储单元7.1.1计算机语言假设A的地址是136,B的地址是138,C的地址是140,则实现:C=(2*A)+(3/B)的机器语言程序段是:00010100 00000010 LOD#200000010 10001000 MULA00000101 01000000 STOT100010100 00000011 LOD#300000011 10001010 DIVB00000000 01000000 ADDT100000101 10001100 STOC机器语言灵活、可以直接执行、执行速度快,但是直观性差,难以记忆,容易出错,不便阅读和书写,且依赖于具体机器,局限性很大,机器语言属于低级语言。7.1.1计算机语言2.第二代计算机语言是汇编语言由于机器语言编码冗长、表示困难,其学习和使用难度系数极高,难以被人们掌握并使用。汇编语言是为了克服机器语言的缺陷而开发的一种用助记符代替机器码而形成的面向机器的语言,汇编语言亦称为符号语言,它利用英文助记符来帮助人们记忆指令,之后再由汇编程序翻译为计算机可以识别的二进制代码。7.1.1计算机语言例7.2用汇编语言实现输出字符串“HelloWorld!”DATASEGMENTBUFDB'HELLOWORLD!$' ;汇编语言字符串的最后一个字符必须是“$”DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUF ;等价于MOVDX,OFFSETBUFMOVAH,09HINT21H ;通过功能号为9的DOS功能调用实现显示字符串

MOVAH,4CHINT21HCODEENDSENDSTART汇编语言方便了人与计算机的沟通交流,汇编语言占用空间少,运行速度快,但仍然与机器语言接近,不易开发及维护。7.1.1计算机语言3.第三代计算机语言是高级语言高级语言是为了克服汇编语言的缺点产生的,与自然语言接近并为计算机所接受和执行的程序设计语言,它是面向用户的语言,形式上接近于算术语言和自然语言,概念上接近于人们通常使用的定义,独立于计算机种类和结构。它不是某一种语言,而是一类语言。高级语言使语言脱离了具体机器的限制,而且易于学习、记忆和理解,大大促进了软件产业的发展。7.1.1计算机语言例7.3教室里有男生x人,女生y人,计算总人数sum=x+y。男生人数x存储在地址为3的内存单元;女生人数y存储在地址为5的内存单元;sum的内存单元为13;分别用机器语言、汇编语言、高级语言及自然语言描述。机器语言实现:0000,0000,000000000011代表LOADA,30010,0000,000000000101代表ADDA,50001,0000,000000001101代表STOREA,13汇编语言实现:LOADA,3代表0000,0000,000000000001ADDA,5代表0010,0000,000000000010STOREA,13代表0001,0000,000000001101高级语言实现:sum=x+y自然语言实现:教室里的总人数sum等于男生人数x加上女生人数y。很显然,对同一个问题的描述,从机器语言、汇编语言到高级语言变得越来越直观,方便。7.1.1计算机语言4.第四代计算机语言是面向应用的语言第三代计算机语言对具体问题的处理是过程性的:首先读取数据,然后处理数据,通过控制语句控制重复执行或者根据条件执行一些具体的操作步骤,如比较大小、数据交换、累加求和或者乘积等,最后取数据结果输出。程序员必须非常清楚问题的解决方法并把解决问题的具体步骤用程序设计语言精确描述出来,非常详尽地告诉计算机如何一步一步求解问题。这种面向过程的程序构建方式是以计算机的运行机制为核心,具有显著的过程逻辑思维,需要在实现过程中模拟计算机内部运行的原理,需要受过专门训练的程序员花费大量时间和精力进行程序设计,影响了生产率的提高。7.1.1计算机语言4.第四代计算机语言是面向应用的语言第四代计算机语言是针对以处理过程为中心的第三代语言提出的面向应用问题的、非过程化程序设计语言,其核心在于用清晰、明确、规范的语言精准描述要实现的功能,而不需要描述如何实现,不需考虑计算机内部的运行规则,只要功能目标描述得完全符合规范要求,翻译器就会自动处理和安排具体的执行步骤,生成标准处理过程。按照功能可以将第四代计算机语言划分为:查询语言和报表生成器、图形语言、应用生成器、形式规格说明语言等。第四代计算机语言具有面向问题、高度封装性和非过程化程度高等特点,可以极大地提高软件生产率,缩短软件开发周期,更加易读易写易学习,不再面向专业程序员,更广泛地被非专业程序员所使用。7.1.1计算机语言5.第五代计算机语言是智能化语言第五代计算机语言是合成了人工智能,允许直接的人类交流,让计算机像人一样学习和处理新的信息,为人工智能领域应用而设计的语言。第五代计算机语言不再像前面几代那样键入特定的命令来编码,可以直接使用人类的自然语言,如英语、中文等直接地与计算机交流。第五代计算机语言还包括可视化编程语言,它在自然的可视化编程界面中提供直观的图标,菜单和绘制工具用来创建程序代码。目前,第五代编程语言正处在起步阶段。7.1.2计算机语言的分类除了按照计算机语言的发展阶段分为机器语言、汇编语言、高级语言、面向应用的语言和智能化语言外,根据不同程序设计语言的特点以及适用领域,从不同的角度对程序设计语言进行分类。7.1.2计算机语言的分类由于计算机只能识别机器语言程序,计算机要想执行高级语言程序就需要转换成机器指令目标代码,能够实现这个功能的程序就是翻译程序。按高级语言源程序转换成机器语言程序的方式不同可分为两类:编译型语言:把高级语言源程序一次性翻译成机器语言程序,编译完成后,形成扩展名为.exe的可执行文件,再执行该文件,这样的翻译程序就是编译程序,工作过程如图7.1所示,相应的语言就是编译型语言,如Fortran、Ada、Pascal、C、C++等,就是先全部编译为机器语言再执行。图7.1编译程序的工作过程

7.1.2计算机语言的分类由于计算机只能识别机器语言程序,计算机要想执行高级语言程序就需要转换成机器指令目标代码,能够实现这个功能的程序就是翻译程序。按高级语言源程序转换成机器语言程序的方式不同可分为两类:编译型语言:目标程序可以脱离具体的语言环境独立执行,使用比较方便、效率较高。但如果需要修改应用程序,就必须先修改源代码,再重新编译生成新的目标文件,如果只有目标文件而没有高级语言源代码就很不容易修改。程序执行效率高,依赖编译器,跨平台性差。7.1.2计算机语言的分类由于计算机只能识别机器语言程序,计算机要想执行高级语言程序就需要转换成机器指令目标代码,能够实现这个功能的程序就是翻译程序。按高级语言源程序转换成机器语言程序的方式不同可分为两类:解释型语言:对于高级语言源程序,把一条语句翻译成机器语言,立即执行该语句,执行完成后,再继续翻译下一条语句,执行……即翻译一条语句就立即执行一条语句,这样的翻译程序就是解释程序,工作过程如图7.2所示,相应的语言就是解释型语言,如Python、Java、PHP、Ruby等语言。图7.2解释程序的工作过程7.1.2计算机语言的分类由于计算机只能识别机器语言程序,计算机要想执行高级语言程序就需要转换成机器指令目标代码,能够实现这个功能的程序就是翻译程序。按高级语言源程序转换成机器语言程序的方式不同可分为两类:解释型语言:由于是边翻译边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式跨平台性好,比较灵活,可以动态地调整、修改应用程序。7.1.2计算机语言的分类按照软件分析、设计和开发的思想可以分为两类:面向过程(ProcedureOriented,PO)语言是以特定语句或指令序列给出问题求解过程的程序设计语言,例如:Algol、Fortran、COBOL、C语言等都是典型的面向过程语言。面向对象(ObjectOriented,OO)语言是具有抽象、封装、封装、继承、多态等特征的程序设计语言,如:C++、Java是典型的面向对象语言。7.1.2计算机语言的分类按照用途进行划分,程序设计语言可分为5类:(1)用于科学工程计算。为了对复杂的数值进行计算和处理,大量的标准库函数在科学工程计算中被广泛应用。可供选用的语言有Fortran语言、C语言等(2)进行数据库应用和数据处理。典型代表为数据库查询语言SQL以及用于提高数据库管理系统效率的第4代语言4GL。(3)进行实时处理。可选择汇编语言、Ada语言来处理对性能的要求很高的实时处理软件。(4)编写系统软件。可选择汇编语言、C、Pascal和Ada语言来进行操作系统、编译系统等系统软件的编写。(5)处理人工智能系统。可选择Prolog、Lisp语言来搭建知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别等人工智能领域相关系统。程序是计算机能够识别的一组有序指令集,包括两个方面的内容:一是对操作的描述,即算法;二是对被处理数据的描述,即数据结构。算法加数据结构就构成了程序。7.2计算机程序程序数据结构=算法+7.2.1什么是程序“程序”通常指完成某些事务的一种既定方式和过程。可以说,程序就是步骤。让我们看看泡茶的“程序”。程序名:泡茶步骤1打开茶叶盒;步骤2取出茶叶放入茶杯内;步骤3冲入开水;步骤4盖上杯盖;步骤5等待5分钟;步骤6打开杯盖;步骤7喝茶;步骤8程序结束。泡茶的过程,就受这样的“程序”驱使,按顺序实施这些步骤即完成了该项事务。……7.2.1什么是程序在计算机领域,程序是指导计算机为完成某项功能所需要执行的命令序列。计算机执行程序,按准确的顺序实施程序中编码的步骤,直至程序结束。例7.4给出两个数1和2,计算它们的和。相应的处理过程如下:A=1B=2C=A+BPRINTC计算机执行上述程序的顺序是从上至下依次执行。前3条语句都由形如X=Y的语句构成,它们被称为赋值语句,“=”不是等号,而是赋值号,它的意义为将赋值号右面的值赋给赋值号左面的变量。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:1.分析问题明确要解决的问题,从问题的全局出发认真进行分析,主要做好以下几个方面:(1)要知道题目要求做什么,即要解决什么问题。(2)问题的已知条件是什么,需要输入哪些信息。(3)期望的输出结果是什么,需要什么类型的报告、图表或信息。(4)数据具体的处理过程和要求是什么,从给定的输入到期望输出,必要的处理步骤有哪些?(5)在分析问题的基础上,确定问题的解决方案。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:2.设计算法设计算法是指求寻求问题的解决方法。经过问题的分析,针对建好的模型要选用相应的算法进行描述。算法是编制程序代码前对处理思想的一种描述。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:2.设计算法YN计算出实根并输出Delta=b2-4ac输出“无实根”Delta>=0?输入a,b,c系数开始结束图7.3求一元二次方程根的流程图例如,对一元二次方程根的算法可以采用图7.3所示的流程图描述,也可以用自然语言描述如下:(1)输入求方程根的三个系数。(2)判断方程是实根否。(3)若是,则计算实根并显示,否则显示无实根。如果问题比较复杂,可将问题分解为几个子问题或子功能,每个子问题为一个功能模块,另外需要设计一个主功能模块来调用各个子模块,以完成整体功能。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:3.程序编码以及编辑、编译和连接当算法设计完成后,就可以编写程序代码了。首先选择编程语言,目前在高等学校中编程语言一般使用C/C++和VisualBasic等常见的程序设计语言(这也是主流的程序设计语言)。7.2.2由问题到程序例7.5用C语言编写求一元二次方程两个实根的程序。#include<stdio.h>#include<math.h>intmain(){ floata,b,c,x1,x2,deta; scanf("%d%d%d",&a,&b,&c); deta=b*b-4*a*c; if(deta>=0){ x1=(-b+sqrt(deta))/(2*a); x2=(-b-sqrt(deta))/(2*a); printf("x1=%f,x2=%f",x1,x2); } else printf("方程无实根"); return0;}7.2.2由问题到程序将源代码通过编辑器输入到计算机内,这个过程中可对输入的程序代码进行复制、粘贴、移动、插入、删除等编辑操作,把代码保存为源程序文件。利用编译程序把这个源程序翻译成目标程序。翻译过程就是编译器对源程序要进行语法和逻辑结构检查的过程。还需将生成的目标程序和程序中所需的系统中固有的目标程序模块(如调用的标准函数、执行的输入/输出操作的模块)连接后生成可执行文件,计算机才能执行。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:4.测试程序在程序的编写中,查找和修改错误的过程为程序测试。如何保证程序的正确性,如何证明和验证程序的正确性,对于一个由多人合作完成的大程序是极为困难的,比较实用的方法就是测试。7.2.2由问题到程序程序设计(Programming)是指设计、编制、调试程序的方法和过程。要进行程序设计,需要进行以下几个过程的工作:5.编写程序文档对于由多人合作开发的软件来说,由于每个人负责的功能模块不同,读起来有困难,需要编写程序文档。程序文档类似于产品的说明书,对以后软件的使用、维护、更新都很重要。它主要做两方面的工作:(1)写程序使用说明书程序使用说明书是为了让用户使用该程序服务。这些内容通常以Readme和Help形式提供。(2)写程序技术说明书程序技术说明书为了便于今后对程序的维护。7.2.3程序的基本控制结构程序是一个语句序列,执行程序就是按特定的次序执行程序中的语句。由于复杂问题的解法可能涉及复杂的执行次序,因此编程语言必须提供表达复杂控制流程的手段,即编程语言的控制结构,或程序控制结构,表示以某种顺序执行的一系列动作,用于解决某个问题。几乎所有的算法,无论复杂还是简单,均可通过顺序、选择、循环三种基本控制结构构造出来。每种结构仅有一个入口和一个出口。由这三种基本结构组成的多层嵌套程序称为结构化程序。7.2.3程序的基本控制结构常见的程序控制结构1.顺序结构顺序结构是一种简单的程序结构,如图7.4所示。在顺序结构中,程序中语句按照顺序依次执行。语句块1语句块2图7.4顺序结构7.2.3程序的基本控制结构常见的程序控制结构2.分支结构分支结构又称为选择结构,如图7.5所示。在分支结构中,可以根据控制条件的取值情况,确定执行哪条分支。分支结构包括双分支结构和多分支结构,多分支结构支持多种选择,可以处理多种不同的情况。图7.5给出的是一种双分支的结构。条件成立不成立语句块1语句块2图7.5分支结构7.2.3程序的基本控制结构例7.6输入两个数,求两个数的最大值问题分析:根据问题的需要,需设置3个变量a,b,max,其中变量a,b用来存储输入的两个数据,变量max用来存储两个数中的最大值。要求出最大值,需要经过几个步骤:(1)输入变量a和b的值;(2)比较a和b的值,如果变量a的值大于等于变量b的值,则将a的值赋值给变量max;否则,将变量b的值赋值给max;(3)输出变量max的值,完成最大值的计算。7.2.3程序的基本控制结构输入两个数,求两个数的最大值问题分析:根据问题的需要,需设置3个变量a,b,max,其中变量a,b用来存储输入的两个数据,变量max用来存储两个数中的最大值。在上述问题的求解过程中,需要根据数值大小进行判断,用到了分支结构,C代码如下:#include<stdio.h>intmain(){ inta,b,max; scanf("%d%d",&a,&b); if(a>=b)max=a; elsemax=b; printf("max=%d",max); return0;}7.2.3程序的基本控制结构常见的程序控制结构3.循环结构循环结构又被称为重复结构,是指在某些条件成立的情况下,程序重复的做相同的工作。分为当型循环和直到型循环。成立不成立条件语句块1图7.6当型循环结构图7.6所示的当型循环就是当条件成立时,重复执行循环体,在执行时,先判断条件是否成立,如果条件成立,就执行循环体,因此,在当型循环中,如果条件一开始就不成立,则循环体可能一次都不执行;7.2.3程序的基本控制结构常见的程序控制结构3.循环结构循环结构又被称为重复结构,是指在某些条件成立的情况下,程序重复的做相同的工作。分为当型循环和直到型循环。图7.7所示的直到型循环就是重复执行循环体直到条件成立,在执行时,先执行一次循环体,再判断条件是否成立,因此,即使条件一开始就不成立,直到型循环的循环体也会被执行一次,所以直到型循环的循环体至少会被执行一次。语句块1条件成立不成立图7.7直到型循环结构7.2.3程序的基本控制结构例7.7求1-100之间能被7整除的整数之和。问题分析:这是一个判断并求和的过程。可以定义sum和i两个变量,其中,sum表示求和的结果,初始值为0;i是检查的每一个数,其初始值为1;判断并求和过程如下:(1)sum=0,i=1;(2)如果i能被7整除,则sum=sum+i;(3)i=i+1;(4)如果i的值小于等于100,转向第2步继续执行;否则转第5步;(5)输出sum的值;7.2.3程序的基本控制结构求1-100之间能被7整除的整数之和。该问题的求解过程中用到了循环结构,C代码如下:#include<stdio.h>intmain(){ intsum=0,i=1; while(i<=100){ if(i%7==0) sum=sum+i;//将变量i的值累加到sum i=i+1;//将变量i的值增加1 } printf("sum=%d",sum); return0;}7.3.1程序设计风格程序设计风格是一种程序设计规范,包含优良的代码设计,格式控制,函数功能模块,接口设计及可扩展性。具有良好设计风格的程序更容易理解、调试、更容易修改和维护。1.源代码排版采用缩进对齐方式编写程序块,同一级别的代码要有一定的缩进并上下对齐;相对独立的程序块之间,变量说明之后可以加空行加以分隔。分成多行书写多于80个字符的较长语句。尽量一行只写一条语句。这样的代码容易阅读,并且方便于写注释。以松散方式编写代码,即代码行内留适当的空格,可以使代码更加清晰。7.3程序设计风格和原则2.源程序文档化标识符应按意取名,即见名知意;命名尽量使用英文单词,简单清楚,避免使用引起误解和模棱两可的词汇。对于较短的单词可以直接使用或去掉其中的元音字母形成缩写;对于较长的单词可以取前几个字母形成缩写;命名规范与所使用的系统风格一致,并在同一项目的不同模块之间保持统一。7.3.1程序设计风格程序应加注释。注释是程序员与日后阅读者之间交流的主要工具,用自然语言或伪码描述。注释说明了程序的功能,特别在后续的程序维护阶段,对了解程序提供了具体指导。注释分前言性注释和功能性注释。前言性注释应放置在每一个模块的开头。功能性注释放置在源程序內,说明程序段或关键语句的功能及其信息的情况。7.3.1程序设计风格3.数据说明的次序要规范说明语句中变量安排要有序,变量声明应尽可能靠近第一次使用处,避免一次性声明一组没有马上使用的变量。7.3.1程序设计风格4.高内聚,低耦合的模块设计一个软件通常包括多个模块,这里的模块的粒度可以是函数、类,也可以是功能块等。内聚性是就模块内部而言的,体现了一个模块中各个元素之间联系的紧密程度。如果一个模块中的各个元素之间的联系程度越高,则内聚性越高,就说这个模块是高内聚的。7.3.1程序设计风格耦合性是就模块之间的联系而言的,反映了模块之间相互联系的紧密程度。模块之间联系越紧密,则耦合性越强,模块的独立性就越差,如果对其中一个模块做了修改,其它与之联系紧密的模块可能都需要做相应改变,这就是高耦合;模块之间联系越松散,则耦合性越弱,模块的独立性就越强,如果对其中一个模块做了修改,其它的模块不受或受到较小的影响,这就是低耦合。高内聚,低耦合的模块相对独立,便于扩展、维护和测试;否则会极大降低开发效率。7.3.1程序设计风格1.可靠性软件可靠性包括两方面的含义:一方面是在规定的条件下,在规定的时间内,软件不引起系统失效的概率;另一方面是在规定的时间周期内,在规定条件下,程序执行实现所要求的功能的能力;其中的概率与系统输入和系统使用以及软件中存在的故障有关,系统输入确定是否会遇到已存在的故障。软件可靠性反映了软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力,必须在设计阶段就确定。7.3.2程序设计原则2.健壮性健壮性又称鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式,反映了软件对非法输入的容错能力。软件设计的健壮与否直接反应了分析设计和编码人员的水平。3.可修改性系统或软件的可修改性反映了能够快速地以较高的性价比进行变更的能力。这就要求设计软件的工具和方法科学合理,结构良好,文档完备,易于调整系统性能。7.3.2程序设计原则4.易理解软件本身结构简洁明了,文档清晰可读,是可靠性和可修改性的前提。5.可测试性可测试性是指在一定的时间和成本前提下,进行测试设计、测试执行以发现软件缺陷、隔离和定位软件故障的能力。为了全面发现存在的问题,需要设计适当的数据集合,全面检验和测试系统。7.3.2程序设计原则6.效率性效率性指软件在运行过程中使用资源发挥性能的能力。从时间和资源两个角度衡量效率,用程序的执行时间反应时间效率性,内存使用量,存储空间占用量和网络传输量等衡量资源效率性。通常用所占用的内存容量来度量。在实现所需的功能的条件下,程序运行所需时间越短和占用存储容量越小,效率就越高。7.3.2程序设计原则7.可扩展性软件的可扩展性包括两个方面内容。对内部来说,在软件系统实现新增业务时,对现有系统功能影响少,对已经实现的功能不需要做改动或很少改动;对外部来说,软件系统本身与其他存在协同关系的外部系统之间存在松耦合关系,软件系统的变化不影响其他软件系统,否则,软件的可扩展性就差。即,对扩展开放,对修改关闭,一个软件应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。7.3.2程序设计原则8.安全性安全性是使软件所控制的系统始终处于不危及人的生命财产和生态环境的安全状态。在保持用户信息、操作等多方面安全要求的同时,系统也要能够及时修复、处理本身存在的各种安全漏洞,提升安全性能。7.3.2程序设计原则软件开发方法指在软件开发项目投资规模和时间限制内,设计、编制、调试、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发策略。随着计算机软件、硬件技术的不断发展,大型软件的开发过程中出现了三大难题:复杂程度高、开发周期长、难以保证正确性,引发了“软件危机”。在提高软件效率和质量的实践中,针对不同的对象采取了不同的方法,主要经历了结构化程序设计和面向对象程序设计两个阶段。7.4程序设计方法结构化方法把待解决的问题看作一个系统,用系统科学的思想方法来分析和解决问题。遵循抽象原则、分解原则和模块化原则;以数据和功能为中心;以模块为基本单位;以算法为程序核心;强调自顶向下逐步求精。采用结构化编程方法开发的程序结构良好,易于理解和维护。7.4.1结构化方法例7.8采用结构化方法实现简单的账户收入支出计算。问题分析:某账户现有余额为amount,进行收入或支出操作type,这里用1表示收入,0表示支出,收入或支出款额为value,计算并输出收入或支出款额后商户的余额数。要完成收入或支出的计算,需要经过以下步骤:输入amount,value,type;根据收入或支出类型计算收/支款后的余额;输出计算结果。根据模块化设计原则,可以定义收入和支出两个计算余额的函数,在主程序中根据收入或支出类型分别调用其中一个函数,计算余额。7.4.1结构化方法c语言代码实现如下:#include<stdio.h>#include<stdlib.h>intinc(intcount,intvalue){returncount+value;}intdec(intcount,intvalue){returncount-value;}intmain(){intcount;intvalue;inttype;scanf("%d%d%d",&count,&value,&type);if(type)count=inc(count,value);elsecount=dec(count,value);printf("%d",count);return0;}7.4.1结构化方法结构化程序设计是一种过程式的“解题”的方式,代码直接体现算法,要求开发者从开始就要了解所要解决的问题。如果问题比较复杂或发生需求上的变化,程序编写麻烦和困难。结构化程序设计难以适应变化的需求,难以修改和扩充,由于数据和操作是分离的,导致一些需重用的构件与具体应用环境密不可分,降低了软件的可重用性。随着计算机科学的发展和应用领域的不断扩大,结构化方法已无法满足大规模程序设计和用户需求的变化。7.4.1结构化方法现实世界由各种实体组成,实体之间通过消息传递进行沟通交流,相互协作完成任务。面向对象(Object-Oriented,OO)程序设计的基本思想是使用现实世界的概念以及事物之间的联系抽象地思考问题,自然地解决问题。面向对象以类而不是模块对现实世界建模。7.4.2面向对象方法1.面向对象的基本概念对象(Object)对象是人们要进行研究的任何事物,是现实世界中的一个实体。例如人就是一个对象。任何对象都拥有一组数据和操作。对象所拥有的数据称为对象的属性。在现实世界中,对象都具有一定的行为,比如,人要吃饭、睡觉、工作、交友等。对象所拥有的行为称为对象所具有的操作。对象实现了数据和操作的封装。类(Class)类是对象的抽象。相同特征的一组对象进行抽象形成了类。比如,可以对人的不同个体进行抽象,形成人类。对象的特征可以抽象成属性和行为,通过类这种独立单元的形式反映出来。本质上讲,类是一种数据类型,是由程序员根据处理问题的需要创建的用户自定义数据类型。任何一个对象都是类的实例化之后得到的。7.4.2面向对象方法数据封装(DataEncapsulation)对象的属性可以用数据描述,行为可以用对数据的操作描述,把数据和对数据的操作封装在一个单独的类中的行为称为封装。数据封装是类的最典型特点。在类中,被封装的数据不能被外界直接访问,只能被封装在同一个类中的函数直接访问。这些函数提供了对象数据和程序之间的接口。数据抽象(Dataabstraction)抽象指仅表现核心的特性而不描述背景细节的行为。类使用了抽象的概念,定义了一系列抽象的属性和操作这些属性的函数。类封装了对象的所有核心属性。7.4.2面向对象方法继承(Inheritance)继承是可以让某个类型的对象获得另一个类型的对象的属性和行为的一种技术。它支持按层次级别分类,每一个子类都具有父类的公共特性。例如,麻雀属于鸟类,麻雀具有鸟类的公共特性。通过继承支持代码重用,可以在子类中添加新的特性,而不必改变它的父类。子类具有原父类的特性,还有新添加的特性。多态性(Polymorphism)多态是指向不同的对象发送同一个信息,不同的对象在接收时会产生不同的行为,对像可以用自己的方法去响应共同的信息,这个行为依赖于所要操作数据的类型。比如“加”这个操作,如果操作的数据是整数或浮点数,它对两个数求和;如果操作的数据是字符串,则它将两个字符串连接。多态机制使具有不同内部结构的对象可以共享相同的外部接口。虽然针对不同对象的具体操作不同,但可以利用一个公共的父类,以相同的方式调用不同的操作。多态通过继承实现。7.4.2面向对象方法消息传递(Messagepassing)面向对象的程序中的多个对象之间通过收发信息进行沟通,对象a向对象b发出消息请求执行某个操作,对象b响应接收到的消息调用一个函数产生预期的结果。传递的消息的内容包括接收消息的对象的名字,需要调用的函数的名字,以及必要的参数。7.4.2面向对象方法2.面向对象分析面向对象分析要识别问题域的复杂性和连接关系,主要定义两种结构,一种是分类结构,另一种是组装结构。分类结构描述了一般与特殊的关系,组装结构反映了对象之间的整体与部分的关系。面向对象的分析在定义属性和行为的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。在用面向对象方法分析事物时有五个基本步骤:第一步,确定对象和类。这里的对象是对数据及其处理方式的抽象,类描述了多个对象的共同属性和方法的集合。第二步,确定结构(structure)。分类结构反映了一般与特殊的关系,组装结构反映整体和部分之间的关系。第三步,确定主题(subject)。主题是指事物的总体概貌和总体分析模型。第四步,确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例。第五步,确定方法(method)。方法是在收到消息后必须进行的一些处理。7.4.2面向对象方法3.面向对象设计面向对象设计(Object-OrientedDesign,OOD)是进一步规范整理面向对象分析的结果,以便能够被面向对象程序设计直接接受。用对象(object)来表现问题领域(problemdomain)的实体,每个对象都有相应的状态和行为。类是对象的抽象,创建的抽象不依赖于任何细节,而细节则高度依赖于抽象,过程和数据结构都隐藏在类中。面向对象把属性和操作通过数据和函数封装到类中形成一个整体。7.4.2面向对象方法例7.9采用面向对象方法实现简单的账户收入支出计算。问题分析:每个账户都是一个对象,都有余额,收入或支出操作类型,收入或支出款额,因此,可以抽象出一个账户类,具有属性:余额amount,收入或支出操作类型type,收入或支出款额value。根据面向对象设计原则,定义收入和支出两个计算余额的函数,定义设置属性值函数,取账户余额函数,根据收支类型确定调用收入和支出哪个函数的控制函数,在主程序中定义账户对象,输入数据,通过对象调用类的成员函数,计算余额。7.4.2面向对象方法C++语言代码实现如下:#include<iostream>usingnamespacestd;classamount //定义一个账户类{private: //账户类的数据成员。数据成员反应了账户对象的属性

intcount,value,type;public:voidset(intct=0,intval=0,inttp=0)//设置账户属性

{count=ct;value=val;type=tp;}voidinc() //收入

{count+=value;}voiddec() //支出

{count-=value;}voidchange() //根据收支类型确定调用哪个函数

{if(type)inc();elsedec();}intgetCount() //取账户余额

{returncount;}};7.4.2面向对象方法intmain(){intcount;intvalue;inttype;amountamt; //定义一个账户对象amtcin>>count>>value>>type;amt.set(count,value,type);//通过对象amt调用成员函数set设置对象的值

amt.change(); //通过对象amt调用成员函数change()计算余额

cout<<amt.getCount();//通过对象amt调用成员函数getCount()取得余额

return0;}7.4.2面向对象方法软件是为完成某些特定任务而开发的程序以及各种相关的工作产品,软件包括程序、数据及相关文档。其中的数据是指使程序能够正常操纵信息的数据结构,文档包括与程序开发、维护和使用相关的各种资料。软件开发过程是在开发与构建系统时应遵循的步骤,是软件开发的路线图,通常分为五个阶段:阶段1问题的定义及规划阶段2需求分析阶段3软件设计阶段4程序编码阶段5软件测试7.4.3软件开发过程7.5.1软件集成开发环境程序从编写到调试执行需要使用不同的工具完成;(1)使用编辑器进行程序源代码的编写;(2)根据编程选用的语言,选择使用语言处理程序对源代码进行处理;(3)使用代码调试工具协助查找程序中的错误。所谓集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,这个程序将编写代码所使用的编辑器、编译器/解释器、调试器和以及图形用户界面工具集成在一起,提供代码编写、分析、编译、调试等一体化的开发软件服务。具备这种特性的软件称为集成开发环境,也称为开发工具。7.5软件集成开发环境与开发平台集成开发环境主要还是针对特定的编程语言,目前主流的IDE主要有:(1)VisualStudioVisualStudio简称VS,是美国微软公司发布的开发工具集,是目前最流行的Windows平台应用程序的集成开发环境,提供了高级开发工具、调试功能、数据库功能和创新功能,帮助快速创建应用程序,是C、C++、VB、C#等语言的集成开发环境。(2)PyCharmPyCharm是JetBrains公司发布的一个专门用于python程序开发的集成开发环境。它除了具备调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等功能,还提供用于Django框架开发Web项目的功能。(3)EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。它除了用作Java集成开发环境,通过插件还支持C/C++、PHP、Android等编程语言。7.5.1软件集成开发环境(4)IntelliJIDEAIntelliJIDEA由捷克JetBrains公司出品的一款主要用于JAVA开发的IDE,它集成了广泛的工具,可以用于Web和安卓移动应用程序开发,在智能代码助手、代码自动提示、重构、JavaEE支持、git、svn、github等各类版本工具、JUnit、CVS整合、代码分析、创新的GUI设计等方面具有很强的功能。(6)AndroidStudioAndroidStudio是谷歌推出的Android集成开发环境,拥有强大的可视化布局功能,可以实时展示界面布局效果。支持多种插件,可直接在插件管理中下载所需的插件,实现功能扩展。适用于Android手机、平板电脑、穿戴式设备、电视等设备的应用开发。7.5.1软件集成开发环境集成开发环境为编程工作带来了很大便利,但是开发人员仍然需要编辑大量代码,其中还有一些常用的功能通过大同小异的代码实现,程序开发人员付出了很多重复劳动。于是,将可能重复使用的代码封装起来,需要用的时候可以直接调用,或者搭建一个基本的开发框架,开发人员可以在这个框架的基础上进行二次开发,就形成了开发平台这种新型开发工具。软件开发平台是以某种编程语言或者某几种编程语言为基础,开发出来的一个用于开发软件的框架,用户在这个产品上开发各种各样的软件产品时,不需要编写大量的代码,而是需要进行一些配置,或者编写少量的代码便可完成。使用开发平台搭建系统减少了代码编写量,简化了开发过程,缩短了开发周期,提高了开发效率,节省了开发成本。目前的主流开发平台是基于Java和基于.NET的开发平台。开发平台是在传统开发工具之上的封装,即是封装一些通用的功能,形成接口,开发人员通过接口直接调用这些功能。但是,遇到无法满足的功能时还是要使用传统开发工具写代码实现。显然,传统开发工具并不能被开发平台完全取代。7.5.2开发平台高级语言不依赖于计算机硬件,程序的通用性强。使用高级语言编写程序时,编程人员将主要精力放到算法的描述上,编程效率高,因此高级语言也称“算法语言”。第一个完全脱离机器硬件的高级语言是1954年发布的FORTRAN语言,此后,出现了几百种高级语言,影响较大、使用较普遍的有几十种。7.6扩展阅读1.PythonPython是在20世纪80年代末创建的一种面向对象的结合了解释性、编译性、互动性的通用开源脚本语言,具有相对简单的语法易于使用,提高了程序的可读性和可维护性,而它庞大的函数库和过程库以及灵活的调用机制提高了程序的可重用性和扩展性。为开发大型程序提供了很多结构和支持以及更多的错误检查,具有内置的高级数据类型,如字符串、列表、元组等,用于应用程序的快速开发。2.CC语言是在1972年问世的面向过程的、抽象化的通用结构化程序设计语言。它层次清晰,按模块化方式组织程序,易于调试和维护。C语言具有非常强的表现能力和处理能力,它丰富的运算符和数据类型可以实现多种复杂的数据结构,还提供低级处理功能实现对硬件的编程操作,集高级语言和低级语言的功能于一体,同时适合于系统软件和应用软件的开发。C语言具有效率高,可移植性强等特点,得到了广泛应用。7.6.1常用的高级语言3.JavaJava是由SunMicrosystems公司于1995年推出的可以设计跨平台应用程序的面向对象的程序设计语言。使用它可在不同种机器、不同种操作平台的网络环境中开发软件。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,成为Internet应用的主要开发语言。4.C++C++是在C语言的基础上开发的一种面向对象程序设计语言,支持过程化编程、面向对象编程和泛型编程,它综合了高级语言和低级语言的特点。C++语言保留了C语言的有效性、灵活性、便于移植等特点,又添加了对面向对象编程的支持。C++程序可读性好,生成的

温馨提示

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

最新文档

评论

0/150

提交评论