计算机基础之程序设计基础
1.程序与计算机语言
- 程序与程序设计
- 让计算机充分的发挥作用的关键是要事先设计好适当的程序编程
- 什么是程序?
- 定义了执行某个任务所需的步骤
- 怎样编程?
- 选择一种计算机能够理解的语言,学习程序设计的方法
- 程序语言的发展:
- 机器语言:用二进制代码表示的,计算机能够直接识别和执行的一种机器指令的集合(通过计算机的硬件功能,赋予计算机的操作功能)
- 特点:灵活,直接执行,速度快,不同型号计算机机器语言是不相通的
- 一种计算机的机器指令编制的程序不能在另一台计算机上执行
- 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码
- 指令的基本格式:操作码字段+地址码字段
- 操作码指明了指令的操作性质及功能,地址码给出了操作数或操作数的地址
- 前四位代表加载,次四位代表暂存器A,后数字序列代表地址为16的存储器
- 用机器语言编写程序,需要熟记计算机的全部指令代码和代码的含义,手编程序时,程序员得自己处理每条指令和每一个数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态
- 汇编语言(低级语言):用助记符和变量名代替机器指令的操作码(0,1),用地址符或标号代替指令或操作数的地址,汇编指令是机器指令便于记忆的书写格式
- 汇编器(汇编程序)
- 计算机不能直接懂得汇编语言写的程序,要通过一种工具(汇编器)把它翻译成机器语言代码(汇编器是一个软件)
- 汇编语言执行效率高,但依赖于硬件体系,且助记符量大难记
- 特定的汇编语言与特点的机器语言指令集是一一对应的,不同平台间是不可直接移植的
- 是一种面向机器的低级语言
- 汇编器(汇编程序)
- 高级语言:语法和结构更类似于汉字或普通英文,不是汇编语言和机器语言
- 高级语言与计算机的硬件结构及指令系统无关
- 更强的表达能力,能更好的表达数据的运算与程序的控制结构,更好的描述各种算法,且容易学习掌握
- 常见的语言有:
- 应用语言:C,C++,JAVA,C#
- Web语言:HTML,XML,PHP,ASP,JSP,JavaScript,VBScript,
- 专项语言:Lotus Notes,Power Builder
- 其他:perl,python,VBA
- 怎样让计算机读懂高级语言:
- 编译器(全文翻译完才执行):把源码转换为可被计算机理解的机器代码,把机器代码以可执行文件的形式保存在磁盘上,一种程序设计语言对一一种编译器,好处在于运行效率提高,但是仅限于目标平台使用
- 解释执行(同声翻译,边翻译边执行):需要有一个解释器/脚本引擎,逐条翻译执行,特点是速度慢但容易移植,因为只要更改中间环境,就能使源代码在其他平台使用
- 每种语言都有自己的特点:
- Pascal的学院气息:严格的结构化形式,丰富完备的数据类型,运行效率高,查错能力强
- C:结构化语言,
- 便于按模块化方式组织程序,实现了对硬件的编程操作,所以即可用于系统软件也适用于应用软件开发,能实现汇编语言的大部分功能,
- C++::
- 其出现目的在于通过数据封装减少程序变量的副作用,从而降低程序的复杂性并提高程序的可靠性。是C语言的扩展,但面向对象又不完全面向对象(提供了面向对象的模型以及思路,但同时兼容面向过程的模型),在效率上某一方面不如C
- Java的效率问题:
- 其出现的目的是为家用消费电子产品开发一个分布式代码系统,这样就可以将email发给电冰箱,电视机等家用电器,对他们进行控制和信息交流。开始使用C++,但C++太复杂,安全性太差,最后用一种全新的语言0ak(Java前身),0ak是一种用于网络的精巧而安全的语言
- 简单性:风格类似于C++,Java放弃了C++中容易引发程序错误的地方如:指针和内存管理;面向对象:是一种完全面向对象语言;分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此Java可凭借URL打开访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同;健壮性:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操作内存减少了内存出错的可能性;结构中立:Java将程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都执行这种中间代码。这种中间语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行;安全:删除了指针和手动释放内存等功能,避免了非法内存操作,当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,Java在机器上执行前要经过很多测试;可移植性:同体系结构无关的特性使Java应用程序可以在配备Java解释器和运行环境的任何计算机系统上运行;解释性:Java解释器能直接运行目标代码指令。链接程序通常比编译程序所需资源少;高性能:如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令;多线程;动态:动态特性允许程序动态的装入运行过程中所需要的类;
- 主要用于Web浏览器,网络应用系统
- C#的中庸之道,个性不鲜明:
- 是.net的代表语言
- 完全面向对象;支持分布式;健壮性;C#默认情况下是不能使用指针的,但在有必要时可以打开指针来使用;安全性: C#的安全是由.net平台提供的,C#的中间代码是一种受控代码,.net提供类型安全检查等机制保证代码安全。可移植性;解释性;高性能;多线程;组件模式:C#很适合组件开发,各个组件可以由其他语言实现,然后集成在.net中;
- 单纯从技术看,C#在网络编程上可以与Java匹敌;C#是一种类似于C++语言,风格是更接近于Java
- 目前主要用于网络编程,其他领域如数据库,窗体编程
- 机器语言:用二进制代码表示的,计算机能够直接识别和执行的一种机器指令的集合(通过计算机的硬件功能,赋予计算机的操作功能)
2.程序设计的步骤
- 分析问题—回答做什么
- 输入输出的具体要求是什么,要达到什么目标?
- 算法设计—回答怎么做
- 借助流程图,伪代码等手段描述
- 遵循某种方法,如结构化方法,面向对象方法
- 代码实现(编码)
- 编辑—使用编辑器,编译—使用编译器,连接—使用连接器
- 测试(调试)
- 测试—设计测试用例,运行程序,可以借助测试工具
- 调试—利用调试器,发现各种错误(如语法,逻辑,运行),检测是否达到预期目标
- 运行—运行.exe程序,提供必要的输入数据
3.面向对象程序设计概念
- 面向对象是一种计算机编程架构,基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。达到了软件工程的三个主要目标:重用性,灵活性,扩展性
- 面向对象由对象,类,继承,多态,消息等组成,其中核心概念是对象和类
-
对象:具有某种特性的具体事物的抽象,每个对象都具有描述其特性的属性及附属属于它的行为
- 属性:对象的性质,即用来描述和反映对象特征的参数
- 方法:对象能够执行的动作,方法是隶属于对象的,方法和对象是捆绑在一起的,方法只能在程序代码中调用,调用方法是对象名.方法名(参数列表)
-
类:创建对象实例的模板,是同种对象的统称
- 事件:由系统根据不同类型的对象预先设置好的,能够被对象识别或响应的动作或操作
- 事件过程:附在该对象上的用户编写的程序代码,是事件的处理程序
- 事件:由系统根据不同类型的对象预先设置好的,能够被对象识别或响应的动作或操作
-
面向对象程序设计方法是尽可能模拟人类的思维方式,是的软件的开发方法与过程尽可能接近人类认识世界,解决实际问题的方法和过程,也使描述问题的问题空间与问题解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象
-
面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系,在面向对象的程序设计中,对象是组成程序的基本模块。
-
4.程序的调试
- 程序的调试是将编制的程序投入实际运行前,用手工活编译程序等方法进行调试,修正语法错误和逻辑错误的过程
- 任务:诊断和修改程序中的错误
- 时机:调试主要在开发阶段进行
- 基本步骤:错误定位,纠正错误,回归测试
- 简单调试方法:在程序特定位置设置打印语句或自动调试工具或通过内存全部打印来排错
- 一般有回朔法,原因排除法,演绎法,归纳法,二分法
5.软件测试的方法
- 调试:程序完工前的工作,调试前的程序一般都不是正确的,程序员自己参与对程序(设计,编码)进行修改,排除错误
- 测试:程序基本完成后的步骤,一般是作为正确性验证的,是测试员与程序员都参与的工作
- 软件测试的主要方法:
- 从是否需要执行被测试软件的角度,可以分为静态测试和动态测试
- 静态测试:人工评审软件文档或程序,借以发现其中的错误,
- 主要方法:代码检查,静态结构分析,代码质量管理
- 动态测试:上机测试
- 主要方法:关键----设计高效,合理的测试用例
- 静态测试:人工评审软件文档或程序,借以发现其中的错误,
- 从功能化角度,可以分为白盒测试和黑盒测试
- 白盒测试(结构测试或逻辑驱动测试):在程序内部进行,主要用于完成软件内部操作验证,测试用例是根据程序的内部逻辑来设计的
- 主要用于单元测试
- 基本原则:逻辑覆盖(语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖和路径覆盖),循环覆盖,基本路径覆盖
- 保证所测试模块中每一个独立路径至少执行一次.
- 保证所测模块所有判断的每一个分支至少执行一次
- 保证所测模块每一个循环都在边界条件和一般条件至少执行一次
- 验证所有内部数据结构的有效性
- 主要方法:逻辑覆盖,基本路径测试
- 黑盒测试(功能测试或数据驱动测试)
- 对软件已经实现的功能是否满足需求进行测试和验证
- 根据程序的功能说明来设计测试用例
- 不用考虑软件内部的运行原理
- 主要用于:确认测试
- 主要方法:等价类划分法,边界值分析法 错误推测法,因果图等
- 白盒测试(结构测试或逻辑驱动测试):在程序内部进行,主要用于完成软件内部操作验证,测试用例是根据程序的内部逻辑来设计的
- 从是否需要执行被测试软件的角度,可以分为静态测试和动态测试
- 风追落叶叶追尘,彩云追月月自明。