【001】编程入门基础知识
一、计算机基础知识
现在大多数计算机都是冯·诺依曼型计算机(“储存——运行”结构)。
冯·诺依曼型计算机基本功能:输入、输出、储存、执行算术和逻辑运算。
计算机由硬件和软件两部分组成。
计算机硬件包括:中央处理器(CPU)、内存、输入/输出设备、外部存储设备。
CPU:由控制单元、程序计数器、指令寄存器、算术逻辑单元和累加器这几个部分组成。
计算机软件分为两大类:系统软件和应用软件。
系统软件:控制计算机,管理计算机资源,使硬件发挥其作用,操作系统及设备驱动程序和其它一些管理软件都可以归入系统软件的范畴。操作系统:进行内存管理、文件管理和输入输出管理并提供系统级的服务供用户调用。
应用软件:使计算机具有更多功能。
二、计算机语言
计算机语言发展:机器语言---->汇编语言---->高级语言(分为:面向过程、面向对象)。
机器语言使用时程序员需要记住各种操作的二进制代码,还要记住所有数据在内存中的位置,这种编码方式难度很大,极易出错。
汇编语言的出现简化了程序员的工作。在汇编语言中,用便于记忆的方法定义了程序指令,但计算机不能直接执行由汇编语言编写的程序,必须借助编译器“翻译”才能将汇编语言指令转换成机器语言指令的形式,再被计算机执行。
不同的计算机可能会采用不同的二进制代码集来表示程序指令,因此,汇编语言和汇编语言编译器也和所用的计算机密切相关。
高级语言更加接近于人类的自然语言,便于学习记忆,用高级语言编写的程序,需要借助编译器“翻译”将其转换为转换成机器语言指令的形式,被计算机执行。
高级语言在执行速度上比不上同样功能的低级语言,在对硬件的操作上也不如低级语言灵活,在如实时控制系统这样对程序速度要求高的情况下,或者编写某种新硬件的驱动程序使仍然会用到低级语言(主要是汇编语言)。
三、数据结构和算法
计算机程序规定了计算机要执行哪些动作及这些动作应当按什么顺序来执行,如同菜谱规定了厨师做菜的材料和步骤。一个程序主要有以下两个要素。
数据结构:即数据的存储形式,程序用到的信息。
算法:操作步骤,对操作的描述,程序用什么方法解决问题。
程序=数据结构+算法。
四、面向过程的程序设计(POP)
“软件危机”:20世纪60年代代码组织混乱,“意大利面条式编程”所导致的一系列如:质量低下、进度缓慢、预算严重超支等问题。在这背景下人们提出的结构化程序设计方法在一定程序上缓解了“软件危机”。
面向过程编程的3种基本结构:顺序、循环、分支。
结构化程序设计方法建立在Bohm和Jacopini证明的结构定理的基础上。
结构定理:任何程序逻辑都可用顺序、选择和循环3种基本结构来表示。
结构化程序设计技术的局限性:当软件规模大到一定程度时,这种程序设计方法就显出稳定性低、可修改性和可重用性差的弊端。20世纪70年代末到80年代初,面向对象的程序设计方式的出现为人们带来了新的希望。
五、面向对象的程序设计(OOP)
在结构化的程序设计中,我们要解决某一个问题,就是要确定这个问题能够分解为那些函数,数据能够分解为那些基本的类型,如int、double等。也就是说,思考方式是面向程序结构的,而不是面向问题结构的,需要在问题结构和机器结构之间建立联系。面向对象的程序设计方法的思考方式是面向问题的结构,它认为现实世界是由对象组成的。面向对象的程序设计方法解决某个问题,要确定这个问题是由哪些对象组成的,对象间的相互关系是什么。
纯粹的面向对象的程序设计的方法如下。
所有的东西都是对象。可以将对象想象成为一种新型变量,它保存着数据,而且还可以对自身数据进行操作。
程序使一大堆对象的组合。通过消息传递,各对象知道自己应该做些什么。如果需要让对象做些事情,则须向对象“发送一条消息”。具体来说可以将消息想象成为一个调用请求,它调用的从属于与目标对象的一个方法。
每个对象都有自己的存储空间,可容纳其它对象,或者封装现有的对象,可以产生新型对象。因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意高的复杂程度。
每个对象都属于某个类。根据语法,每个对象都是某个“类”的一个“实例”。一个类的最重要的特征就是“能将什么消息发送给它”,也就是类本身有哪些操作。