目录
一、计算机与程序
(1)计算机只能识别和执行二进制(0和1)的一系列指令信息
人们为了让计算机能够工作,就编写由0和1组成的指令,指挥计算机工作,而这些指令的集合称为程序。
(2)程序与源程序
- 程序就是一组计算机能识别和执行的指令。
- 用高级语言编写的程序称为源程序。
二、机器语言和高级语言
(1)机器语言(低级语言)
- 定义:能够被计算机直接识别的指令
- 特点:难(学、记、写、修改、维护)互不通用
(2)高级语言
- 定义:比较接近于人们习惯使用的自然语言和数学语言
- 特点:易(学、理解、写、修改、维护、推广)且计算机之间通用
三、高级语言分为面向对象编程语言和面向过程编程语言
(一)面向过程编程语言(POP)
概念:以过程为中心的编程思想。将问题解析成多个步骤,按照步骤过程进行解决 —— 具体化。比如:C语言
举例:洗衣机里有脏衣服,怎么洗干净
实现:(里面和外面的执行方式)
- 打开洗衣机盖
- 添加洗衣粉 和 水
- 关闭洗衣机盖
- 执行清洗功能
- 执行烘干功能
面向过程编程的优劣:(与面向对象编程对应)
- 优点:运行性能比面向对象强,但是比较消化资源
- 缺点:难维护、难复用、难扩展
(二)面向对象编程语言(OOP)
概念:将问题解析划分并构建联系,拆分成对象【类(Class)】,给每个对象设定特有的操作【属性和方法】,再将对象进行实例化【实例化对象(Instance)】,通过访问(调用)实例对象来执行属性和方法 <目的:问题在解决过程中,通过对象执行操作处理> —— 模型化。比如:C++、python、Java
举例:洗衣机里有脏衣服,怎么洗干净
实现:(里面的执行方式)
- 分析联系:洗衣机洗衣服,人操作洗衣机和完成其他工作 ==> 对象:洗衣机、人
- 对象特有的操作:
- 洗衣机:清洗功能、烘干功能
- 人:打开洗衣机盖、添加洗衣粉和水、关闭洗衣机盖
- 实例化对象:实例对象——(人)我、(洗衣机)机器
- 执行:
- 我.打开洗衣机盖
- 我.添加洗衣粉 和 水
- 我.关闭洗衣机盖
- 机器.清洗功能
- 机器.烘干功能
看着比面向过程编程的操作繁琐,但是在外面就是(我让洗衣机洗衣服)—— 封装、继承和多态
举例:如何吃到一份鱼香肉丝
- 自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里
- 去饭店,张开嘴:老板!来一份鱼香肉丝!
1就是面向过程,2就是面向对象
面向对象编程的优劣:
- 优点:高内聚,低耦合
- 高内聚:你只负责喊菜;老板只负责做菜(面向过程:自己想吃,还要自己买菜,还要自己做菜)
- 低耦合:突然不想吃鱼香肉丝,想吃宫保鸡丁,就让老板换成宫保鸡丁(面向过程:重新买菜)
- 优点:代码复用、便于管理、便于调用、维护性高、易扩展
- 代码复用、维护性高、易扩展可体现在低耦合
- 便于管理和调用:老板做得难吃,你可以直接找老板,老板去找厨师
- 缺点:运行性能比面向过程差
面向对象的三大特性:
- 封装:隐藏对象的属性和实现细节,仅提供对外公共访问方式(提高复用性和安全性)
- 继承:继承是多态的前提(提高复用性)
- 多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象(提高了拓展性)
(三)由面向过程过渡为面向对象的原因
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便使用的就是面向对象。
- 面向对象编程可以实现低耦合
耦合是影响软件复杂程度和设计质量的一个重要因素,在设计上我们应采用以下原则:
如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合。
- 面向对象更符合人类的思维,面向过程则是机器的思想。
四、高级语言分为编译型语言和解释型语言
高级语言编写的程序,计算机不能直接识别和执行,需要通过编译系统(编译器) 或 解释系统(解释器),转换成可被计算机执行的语言(机器码)
(一)编译型语言
概念:使用编译器,针对特定的平台,将源程序一次性编译成可被该平台硬件执行的机器码,并包装成可被该平台所能识别的可执行程序的格式(exe文件)。比如:C、C++
特点:
- 一次编译,多次执行,运行效率高(不用每次运行都要编译)
- 无法移植到其他平台
- 会生成exe文件,需将代码编译成二进制后才能运行
(二)解释型语言
概念:使用解释器,对源程序解释成特定平台的机器码并立即执行。每次运行,都要解释成机器码,并且是动态解释(行行解释)。比如:Java、python
特点:
- 每次运行,都要解释(缺点:代码越多,运行效率越低)
- 只要平台提供相应的解释器,就可以运行源程序,可以移植到其他平台
- 不生成exe文件,可以直接运行代码
五、高级语言分为动态类型语言和静态型语言
数据类型检查:确保表达式中的变量类型是否合法。
(一)动态类型语言(弱类型语言)
概念:在运行阶段中进行数据类型检查的语言。在编写代码中,变量在使用前可以不声明数据类型。在运行程序中,系统会自动分配数据类型。比如:Php、Asp、JavaScript、python。
f = 0.5 #定义变量不需要显示声明
动态语言思维不受约束,可以任意发挥,把更多的精力放在产品本身上;集中思考业务逻辑实现,思考过程就是实现过程。
动态类型语言优劣:
- 优点:方便阅读,不需要写非常多的类型相关代码。
- 缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。
(二)静态类型语言(强类型语言)
概念:在编译阶段中进行数据类型检查的语言。在编写代码中,变量在使用前必须声明数据类型。比如:Java、C、C++、C#。
float f = 0.5 #定义变量必须显示声明类型
静态语言由于强制声明数据类型,让开发工具(IDE)对代码有很强的判断能力,在实现复杂的业务逻辑和开发大型商业系统、以及那些声明周期很长的应用中,开发者可以依托强大的IDE来更高效、更安全地开发。
静态类型语言优劣:
- 优点:把数据类型检查放置编译期,提前检查可能出现的类型错误。
- 优点:使变量的数据变量的结构规范,便于调试和数据类型安全。
- 缺点:结构规范会导致其需写更多的类型相关代码,导致不易阅读。
六、高级语言分为强类型语言和弱类型语言
(一)强类型语言
概念:变量不通过强制转换,那么该变量永远是该数据类型,不允许隐式的类型转换。有更强的类型检查机制,表达式计算中会做严格的类型检查。
举例:定义了一个double类型变量a,不经过类型强制转换,那么程序int b = a无法通过编译。
data = 5 # 在运行时,data被赋值为整型
data = data + "xiaoming" #报错
(二)弱类型语言
概念:与强类型语言相反,但允许编译器进行隐式的类型转换。允许各种变量类型间做一些运算。
var data = 5
data = data + 'xiaoming' //string和int可以结合,程序正常执行
(三)两者的优劣
- 在速度上,弱类型语言 > 强类型语言。
- 使用弱类型语言可节省很多代码量,有更高的开发效率。
- 在构建大型项目中,使用强类型语言可能会比使用弱类型更加规范可靠。