面向过程
- 概念
面向过程:是一种以事件为中心的编程方式,分析得到问题的解决步骤,按照因果关系,一步步实现,依次进行调用。 - 优点
性能比面向对象高,因为类的调用时需要实例化开销比较大,消耗资源。当我们主要考虑性能时,比如单片机,嵌入式开发等等一般采用面向过程开发 - 缺点
面向过程开发的程序,耦合性太强,当其中一环出现问题,那么整个系统都有可能受到影响。
同时当程序的业务逻辑十分复杂的时候,面向过程开发,也显得捉襟见肘。
面向对象
- 概念
将构成事物的问题分解成各个对象,建立对象的目的不是为了完成步骤,而是为了表现出事物在解决问题的行为,靠着对象间的相互作用,来完成程序。 - 优点
由于对象具有封装,继承,多态的特性,所以能设计出耦合程度较低的程序,达到易维护,易复用,易扩展,让程序本身更加灵活,可以更好的处理业务逻辑复杂的问题。
-
缺点
面向对象的性能比面向过程低。
JAVA与C/C++的区别
- 内存分配
JAVA:
栈(局部变量)
堆(存储的是对象,垃圾回收机制进行回收)
方法区
本地方法区
寄存区
C:
栈区(存储函数参数,局部变量的指)
堆区(动态申请和释放,需要程序员手动完成)
全局区
代码区
-
JAVA没有指针,C语言内中拥有着令我闻风丧胆的指针
JAVA是一种内存安全的语言。但是C或者C++需要自己手动完成,万一没有处理好可能引起内存泄漏甚至系统的崩溃。
但是这种安全也是相对而言,Java也有可能出现内存泄漏的的情况,比如垃圾回收机制,需要让在堆内的对象无引用以后的某个时机才能对此对象的内存进行回收,那么当某个对象的引用因为某种原因一直存在,那么就会造成泄漏。
内存泄漏问题可以参考这里 -
JAVA和C++都是面向对象的语言,都需要封装,继承,多态
-
JAVA类不支持多继承,C++类支持多继承,但是接口可以多继承。
-
JAVA数组或字符串不需要再末尾加上\0 ,而C语言或者C++需要加上\0作为结束符,在Java中除了八种基本数据类型,其实其他的引用类型都可以看作对象,数组对象和字符串对象都有一个length属性或者length方法,可以获得数组或者字符串的长度,那么自然不需要多个空间来标志数组或字符串的结束了。
-
C++支持运算符的重载和函数重载,但是JAVA只支持方法方法的重载,但是运算符的重载可以通过方法来实现,但也要注意构造器不能被重载。