本文目录
一、计算机编程语言发展
计算机编程语言的发展经历了从低级到高级的发展历程,发展的核心思想是 “让人更容易编程” 。
越容易使用的语言,就有越多人使用;越多人使用,就有越多协作;越多协作,就可以创造越复杂的物体;现代社会,一个软件动辄几十人协作、几百人协作、甚至几千人协作也成为可能,这自然就为开发复杂软件提供了“人力基础”。对于语言本身的发展来说,它需要被越多的人使用,集众人所长补其短,这样才有可能在该行业中不断发展,因此让更多的人使用至关重要,由此需要 ** “让人们更容易编程”。**
这是一个普遍的人类社会现象,越容易使用的工具,通过使用数量,通过大量人的协作,彻底改变某个行业甚至人类社会。
计算机语言经历了三代:第一代是机器语言,第二代是汇编语言,第三代是高级语言。
1、第一代计算机语言:机器语言
由于计算机内部只能接受二进制代码,因此,用二进制代码 0 和 1 描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。
用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些 0 和 1 的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
以下是一些示例:
指令部份的示例
0000 代表 加载(LOAD)
0001 代表 存储(STORE)
暂存器部份的示例
0000 代表 暂存器A
0001 代表 暂存器B
存储器部份的示例
000000000000 代表 地址为0的存储器
000000000001 代表 地址为1的存储器
000000010000 代表 地址为16的存储器
100000000000 代表 地址为2^11的存储器
集成示例
0000,0000,000000010000 代表 LOAD A , 16
0000,0001,000000000001 代表 LOAD B , 1
0001,0001,000000010000 代表 STORE B , 16
优点: 因为是最底层,执行速度最快
缺点: 由于语言很复杂,开发效率最低
2、第二代计算机语言:汇编语言
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。 例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
汇编语言虽然能编写高效率的程序,但是学习和使用都不是易事,并且很难调试。另一个复杂的问题,汇编语言以及早期的计算机语言(Basic、Fortran等)没有考虑结构化设计原则,而是使用goto语句来作为程序流程控制的主要方法。这样做的后果是:一大堆混乱的调转语句使得程序几乎不可能被读懂。 对于那个时代的程序员,能读懂上个月自己写的代码都成为一种挑战。汇编语言仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等。
优点: 因为比较底层,执行速度最快
缺点: 由于语言复杂,开发效率较低
3、第三代计算机语言:高级语言
高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识(相对于之前用机器语言编程的程序员而言)。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,像最简单的编程语言PASCAL语言也属于高级语言。
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:编译型 & 解释型。 按照软件分析、设计和开发的思想可以将它们分为两类:面向过程 & 面向对象。
3.1、编译型 & 解释型
编译型: 编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是 CPU 可以理解的 2 进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++等
解释型: 执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。
- 编译型语言执行速度快,不依赖语言环境运行,缺点是跨平台差
- 解释型语言跨平台好,一份代码,随处使用,缺点是执行速度慢,依赖解释器运行
3.2、面向过程 & 面向对象
面向过程(Procedure Oriented,PO)和面向对象(Object Oriented,OO)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。
面向过程 & 面向对象 两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。
面向过程: 面向过程思想思考问题时,我们首先思考 “怎么按步骤实现?” 并将步骤对应成方法,一步一步,最终完成。 这中思想适合用于简单任务,不需要过多协作的情况下使用,比如,“如何开车?”,我们很容易就列出实现步骤:
1、打开车门 → 2、扣好安全带 → 3、发动车 → 4、挂挡 → 5、踩油门 → 6、汽车,人出动
由上面的开车流程可以看出,面向过程适合简单、不需要协作的事务。
但是当我们思考比较复杂的问题,比如 “如何造车?” 的问题时,就会发现列出 1 2 3 4 5 6 这样的步骤,是不可能的。那是因为造车太复杂了,需要很多部门协作才能完成。此时面向对象思想就应运而生了。
面向对象:面向对象(Object Oriented)思想更契合人的思维模式。 我们首先思考的是 “怎么设计这个事物?” ,比如思考造车的时候我们就会先思考 “车怎么设计?”,而不是 “怎么按步骤造车的问题”。这就是 面向过程→面向对象 思维方式的转变。
使用面向对象思想思考造车,发现车由如下对象组成:
1、轮胎 2、发动机 3、车壳 4、座椅 5、挡风玻璃 6、中控系统 7、灯控系统 ···
为了便于协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提高了效率。但是,具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开面向过程思想!
因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(具体到每个方法),仍然需要面向过程的思路去处理。我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程!
面向过程和面向对象的区别:
-
面向对象具有三大特征:封装性、继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。
-
一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
4、J2SE & J2ME & J2EE & JavaSE & JavaEE
J2EE,J2SE,J2ME三者有什么不同?
J2EE、J2SE 和 J2ME 三者的区别有哪些?
JDK、J2EE、J2SE、J2ME的区别?
java中javaSE与javaEE的区别(适合新人)
简述JavaME,JavaSE,JavaEE
5、Java8 & Java11 & Java xxx?
为什么还要使用Java8?
JDK16已发布,为什么那么多人Java8?
JDK 16都发布了,为什么我们要关心Java8?
问一下各位懂java的朋友们,为什么网上都推荐我下载jdk8和jdk11,而没有人推荐最新的15?
本文内容结合
网址 |
---|
http://www.divcss5.com/html/h54673.shtml |
https://zhuanlan.zhihu.com/p/62762377 |
https://zhuanlan.zhihu.com/p/163693285 |