原文链接:https://blog.csdn.net/qq_45096273/article/details/106455108
面向对象和面向过程的区别(个人总结)_GoGoGoHan!的博客-CSDN博客
一、面向对象OOP
面向对象编程(Object Oriented Programming,面向对象程序设计)的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现,面向对象是一种解决问题的思想,面向对象的计算机语言通过对目标对象的属性、行为封装最终拿到目标对象。
二、面向过程PO
面向过程编程:面向过程(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。面向过程是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,注重的是过程,分析函数并一步步实现然后再调用。
三、面向对象的优缺点
优点:
1.易维护;2.易复用;3.易扩展
4.由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
5.在复用时直接调用封装好的方法即可,而且安全性相对较高,可以避免不必要的更改引起的错误;
6.允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰;
7.安全性较高
缺点: 其程序处理的效率比较低
四、面向过程的优缺点
优点:性能比面向对象高,因为类调用时需要实例化,比较消耗资源;比如Linux/Unix等一般采用面向过程开发,性能是最重要的因素;
缺点:
1.复用性较低,因为面向过程时逐步进行功能的实现;
2.代码维护更改性低,在面向过程编程中没有面向对象的封装方法,如果出问题得全局进行逐步代码分析;
五、举例
在面向对象的编程中,只考虑:
1.双方的行为 2.游戏地图的绘制 3.游戏规则的制定,判断输赢;
在面向过程的编程中,需要考虑:
1.游戏开始 2.黑子先走 3.绘制画面 4.判断输赢 5.白子移动 6.绘制画面 7.判断输赢 8.重新返回步骤2继续依次执行 9.游戏结束
六、面向对象相比面向过程的好处
封装:我们可以根据不同功能和操作的数据来封装成不同对象,由对象实现具体的操作,我们只需要调用对象的方法即可,代码简洁、而且方便测试。
可能你会说面向过程也可以分离出一个一个的函数出来啊,也可以分成各个模块来调用啊,为什么要用面向对象?
接下来看下面的特性:
继承:假如有同一类操作,然后这些操作都有一部分共同的操作,通过面向对象,我们可以让子类对象继承父类对象,父类对象实现了这部分操作,所有子类对象都可以很容易复用这些代码,不用自己实现一遍。
那你可能有会说,面向过程也可以分离出公共的函数来调用吧,为什么要面向对象?
好,接下来看下面向对象的这个特性:
多态:其实前面的继承不单单是复用了父类的代码,还表示所有继承了父类的子类都是同一类对象。
假如我们有这么一个操作,要判断传进来的动物类型,然后执行这个动物的eat操作,面向过程是怎么做的呢?
class Animal {
void eat(){
}
}
class Dog extends Ainmal{
void eat(){
...
}
}
class Cat extends Ainmal{
void eat(){
...
}
}
class Human extends Ainmal{
void eat(){
...
}
}
void eat(Animal a){
a.eat();
}
面向过程是上面这么做的,也就是在编译期就一定会确定调用了哪个函数,而且要写一大堆判断代码,假如又加进来了几种动物,又得修改这份代码,耦合度很高。
而面向对象是这么做的:
class Animal {
void eat(){
}
}
class Dog extends Ainmal{
void eat(){
...
}
}
class Cat extends Ainmal{
void eat(){
...
}
}
class Human extends Ainmal{
void eat(){
...
}
}
void eat(Animal a){
a.eat();
}
通过多态,只要声明我需要某一类对象的父类,然后传进来一个具体子类,在运行的时候调用的是子类的方法。而且不管后面有加多了多少个子类,都不用改写好的代码,耦合度大大降低,而且代码易维护
总结
面向过程:就是自顶向下的编程,注重的是过程的逐步实现,对函数进行一步一步的分析从而一步一步的解决问题;
没有面向对象的易复用、易测试、易扩展、耦合度低、易维护。但性能高。
面向对象:就是高度实物抽象化,注重的是各部分代码要实现的功能,而不是步骤。
代码易复用、易测试、易扩展、耦合度低、易维护。但性能没面向过程高,因为有对象的实例化,开销较大。