软件设计概论

任何技能,都是由很多细节组成。我们学习一种技能,最好能先对整个技能及框架有一个大概的把握,然后再学习他的细节。软件设计同样如此。

我们将整个软件设计的体系(框架)看成一棵树,首先我们需要对整个体系的树干从上到下有一个较为清晰地轮廓,进而熟悉树枝、树叶等细节信息。

网络

应用(主要)

驱动

操作系统

CPU-内存-外存(硬盘,I/O设备(USB,鼠标,键盘等))

我们知道,计算机是由硬件和软件组成的,硬件相当于哲学里的物质,而软件相当于精神。硬件(物质)是客观存在的,可见的,而软件(精神)是看不见的。只有硬件没有软件,硬件就是一坨废铁,相当于没有思想的植物人。而只有软件没有硬件更是不可能,因为硬件是保存软件的容器,相当于人的身体是我们思想的容器。硬件和软件缺一不可。

谈软件设计,就不能脱离硬件。否则软件设计就成了无源之水,无本之木。

硬件有很多,如CPU(相当于我们的大脑),硬盘,内存,鼠标,键盘等等。软件从根本上的功能都是由硬件实现的(反之软件可以扩展硬件的功能)。从细节上来说,就是门,电子电路,触发器等。计算机能做的事,就是CPU的取指令,译指令,执行指令这些指令也叫机器指令,那什么是指令?计算机是我们的仆人,指令就是我们叫计算机所作的工作。比如我们叫计算机计算“1+1”等于几?叫计算机给我们买个IPhone4s回来(当然,至今计算机还没有发展成这样的智能)

从硬件底层看,计算机只能执行一些简单的指令(对精简指令集计算机而言可能只有十几条指令),这些指令分别对应一些电路,可以理解为一条指令对应一块电路。这里的电路指的是什么?比如我们输入10101010,电路处理后,输出是11001001。这个电路嵌入在CPU里。所有程序最终执行的都是机器指令。

当我们叫计算机计算“1+1”等于几时,计算机为什么知道结果是2?

计算机硬件(CPU)只认识01,因为我们是按照这个理论设计制造它的。10对应电压的大(如3.3V附近)和小(如0V附近)。

我们可以将计算机理解为一个智商很低的小娃娃,机器指令就是它会的语言,它是不认识它的机器指令以外的任何东西的。所以我们编写的C/C++程序,Java程序,PythonRubyjavascript所有程序都最终要转化为计算机所能理解的机器指令,这样他才能理解并执行。 

要深入理解其原理,我们要看诸如《计算机体系结构》之类的书。

最开始我们只能用机器语言编写机器指令,程序员必须熟悉每条机器指令,当编写很大的程序时,非常令人头疼。(大名鼎鼎的贝尔实验室的研究人员最开始用机器语言编写了Unix操作系统。C语言发明后,又用C重新编写了他的内核。)最初编写的程序就是一系列的01串。比如:

00101011

11101011

0101000

。。。

为了简化工作,聪明的程序员们编写了一个软件叫汇编器,他能将一种特定格式(符合汇编语法)的代码转化为机器指令。这种特定格式的代码我们就叫他汇编代码,这种语法格式的语言就叫汇编语言。汇编代码示例如下:

MOVE AL,3                            00101011

ADD AL,5                             11101011

MUL AL,25     最终要转化为:         0101000

从本质上讲,汇编器这个软件就是一个文本转化工具,将一种形式的文本转化为01串形式的文本。要深入理解其原理,我们要看诸如《汇编语言》之类的书。

懒惰的程序员觉得汇编指令还是太麻烦,因为编写这样的代码需要给出熟悉硬件的寄存器,以及所有指令。于是程序员又编写了一个名为编译器的软件,他能将一种特定格式(符合编译语法)的代码转化为汇编指令

编译器这个软件本质上也是一个文本转化工具,将一种形式的文本转化为汇编指令的文本。要深入理解其原理,我们要看诸如《编译原理》之类的书。

编译器很多,按语言不同有:C编译器,C++编译器,java编译器等等。

还有一种软件叫解释器,和编译器的原理差不多。他的实现语言有javascript,vbscript,perl等。

举个例子说明一下编译,汇编的过程。比如我们输入一个简单的C程序,如下:

#include <stdio.h>

Int main(){

   Printf(“1+1=\n”,1+1)

Return 0;

}

我们将他保存为Hello.c文件,我们先要用名字叫编译器的软件编译它,它就变成了一些汇编指令,再用用名字叫汇编器的软件汇编编译后的汇编代码,它最后变成了一些机器指令,这样计算机就能认识他了,当我们运行最后生成的机器指令时(PC指向第一条指令),就会输出:1+1=2

理解了以上内容后,我们开始学习一种语言如C(要学习编程,C应该是必须学的)时,就知道只要学习他的语法,编写符合语法格式的代码就可以了。

猜你喜欢

转载自blog.csdn.net/a379039233/article/details/7402864