面向对象程序设计(作业一)
1、编译型语言和解释型语言
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。
高级语言转换为机器码的方式有两种:编译和解释,高级语言也分为编译型语言和解释型语言。
主要区别在于,编译型语言需要先编译再运行,运行速度快;解释型语言在运行期间编译,跨平台性好。
(1)编译型语言
使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
特点:
- 只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高;
- 与特定平台相关,一般无法移植到其他平台。
语言:
C、C++、Object-C等。
(2)解释型语言
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。
特点:
- 不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序,跨平台性好;
- 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低。
语言:
Python、JavaScript、PHP等。
(3)混合型语言
既然编译型和解释型各有优缺点,就可整合为半编译型语言。
比如C#,C#在编译的时候不是直接编译成机器码而是中间码;
.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。
Java先生成字节码再在Java虚拟机中解释执行。
严格来说混合型语言属于解释型语言。C#更接近编译型语言。
2、动态语言和静态语言
(1)动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。
通俗点说就是在运行时代码可以根据某些条件改变自身结构。
语言:
Object-C、JavaScript、PHP、Python、Erlang。
(2)静态语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。
语言:
Java、C、C++、C#。
3、动态类型语言和静态类型语言
(1)动态类型语言
动态类型语言和动态语言是完全不同的两个概念。
- 动态类型语言:是指在运行期间才去做数据类型检查的语言,指数据类型;
- 动态语言:说的是运行时改变结构,指代码结构。
动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。
语言:
Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。
(2)静态类型语言
静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。
语言:
C、C++、C#、Java、Object-C。
4、强类型语言与弱类型语言
(1)强类型语言
强制数据类型定义的语言。
一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
特点:
强类型语言代码复杂,性能严谨,能够避免很多错误;速度慢。
语言:
Python、JAVA、C#等。
(2)弱类型语言
数据类型可以被忽略的语言。
与强类型定义语言相反,一个变量可以赋不同数据类型的值。弱类型的语言的东西没有明显的类型,能随着环境的不同,自动变换类型。
特点:
弱类型语言代码简单,但因为变量没有确定的类型,所以容易出错;速度快。
语言:
VBScript等。