【JAVA】面向过程与面向对象的区别与联系(以JAVA,C为例)

面向过程与面向对象的区别与联系

      • 1. 面向对象理论
      • 2. 面向过程C语言的特征
      • 3. 面向对象Java语言的特征
      • 4.数据结构的选择能力
      • 5.Java字符集编码的选择

1. 面向对象理论

1.类
1)字段:实例字段,静态字段
2)方法:实例方法(实方法,虚方法),构造方法(实例构造方法,静态构造方法),静态方法,方法的重载
2.实例(对象)
3.接口类
4.抽象类
5.三大核心特征:
1)封装(隐藏,安全,可维护,模块化)Java语言可通过访问修饰符来保证封装性:private
该类的实例状态只能由该类的方法访问/修改,否则我们说该类的封装性遭到了破坏。
2)继承(可复用,实例字段的继承,实例方法(实方法,虚方法)的继承)
Java语言只支持静态继承。主要是代码和字段的复用。
3)多态(可扩展)
多态的前提是继承和虚方法。Java语言支持多态。
6. 分析方法:
1)面向过程:算法分解,“自顶向下,逐步求精”
面向对象:对象分解,“自底向上,逐步分类和抽象”
7.实现方法:面向过程:“自底向上,逐步合并”
面向对象:对象分解,“自顶向下,逐步继承”

2. 面向过程C语言的特征

1.无需面对机器本身底层硬件的字节,兼容CPU;但是不跨语言版本,不跨OS
2.封装:解决复杂系统,具有可维护性
C语言通过函数将一个大的程序拆分成体积小,功能明确的一个个简短的函数,从而将一个复杂的大问题分解成若干个简单地小问题,由繁到简。
1)函数是C语言最小的封装模块
模块化是用于解决复杂系统的技术手段。
2)封装函数是与数据结构分离的,封装函数与其所操作的数据结构是高度耦合的,尽管是高耦合,某种程度上这也给C程序带来了高性能。封装函数具有代码可维护性。
3)C函数采用结构化程序设计方法
C语言的原子指令是机器指令,C语言方法是对机器指令的封装。结构化程序设计方法:顺序结构,循环结构,选择结构,没有跳转结构
3.性能
1)是某类机器指令集合的最小交集
2)***.exe可执行文件中的二进制代码短,性能高
3)不可以动态优化,语言本身不支持可扩展性

3. 面向对象Java语言的特征

1.无需面对机器本身底层硬件的字节,兼容CPU,跨OS;但是不跨语言版本
2.封装:解决复杂系统,具有可维护性
Java语言通过类将一个大的程序拆分成体积小、功能明确的一个个简短的类,从而将一个复杂的大问题分解成若干个简单的小问题,由繁到简。
1) 类是Java语言最小的封装模块
模块化是用于解决复杂系统的技术手段。否则随便开发一个稍微难一点的功能,几万、几十万代码,没几个人能看懂,也没有几个人有耐心看。
2) 封装的是数据结构以及对数据结构中数据进行操作的方法,封装的若干方法与其所操作的数据结构是高耦合的,符合模块的高内聚低耦合的原则,带来了数据结构和代码的可维护性。可维护性指代码、数据结构和系统软件的可维护性。
3) 虽然Java方法不再是封装的手段,但也是类模块化得以实现的基础。
Java语言的原子指令是字节码,Java方法是对字节码的封装
Java方法与C方法一样同样要求具有代码的可维护性,同样采用结构化程序设计方法
3.性能
1)是本地CPU指令系统
2) 解释执行,代码长,性能低
① 本地CPU指令系统
② 代码长
不可以动态优化
④ 需要生成类和实例的数据结构
3)编译执行,代码短,性能高
① 本地CPU指令系统
② 代码短
可以动态优化
④ 都需要生成类和实例的数据结构
4) 不管解释执行还是编译执行,都需要生成类和实例的数据结构,这方面比C程序慢。
4、 Java语言本身支持可扩展性

4.数据结构的选择能力

选择数据结构考虑的主要因素
1.运行效率
运行效率=1次生成效率+n次操作效率
例如:C语言中的三维矩阵数组与三维指针数组
三维矩阵数组生成时间短,但是操作时间长
三维指针数组生成时间长,但是操作时间短
所以,从如果运行效率高的角度,操作次数少,应该选择三维矩阵数组;操作次数多,应该选择三维指针数组

2.空间
空间的总大小,分散程度
三维矩阵数组是一个连续空间,而三维指针数组需要四个连续空间
3.产生的垃圾
三维矩阵数组产生的垃圾个数比三维指针数组少。

5.Java字符集编码的选择

UTF-8占用空间小,效率慢-------***.class字节码文件使用,以节省空间为主,牺牲效率,以效率换空间
UTF-16 占用空间中,效率中------Java内存字符串使用,既考虑了空间,又考虑了效率,是一个这种选择
UTF-32 占用空间最大,效率最大-----以空间换效率

你可能感兴趣的:(JAVA核心卷I,JAVA,与C的区别)