面向对象与面向过程的区别-面向对象和面向过程的区别(个人总结)
面向对象和面向过程的优缺点
面向过程是以事件为中心,按照我们编写的代码是根据完成一个步骤的过程来进行。
面向对象以对象为中心,我们把要完成的功能封装成一个一个的对象,调用对象的方法或属性来完成功能。
面向对象相比面向过程的好处:
封装:我们可以根据不同功能和操作的数据来封装成不同对象,由对象实现具体的操作,我们只需要调用对象的方法即可,代码简洁、而且方便测试。
可能你会说面向过程也可以分离出一个一个的函数出来啊,也可以分成各个模块来调用啊,为什么要用面向对象?
接下来看下面的特性:
继承:假如有同一类操作,然后这些操作都有一部分共同的操作,通过面向对象,我们可以让子类对象继承父类对象,父类对象实现了这部分操作,所有子类对象都可以很容易复用这些代码,不用自己实现一遍。
那你可能有会说,面向过程也可以分离出公共的函数来调用吧,为什么要面向对象?
好,接下来看下面向对象的这个特性:
多态:其实前面的继承不单单是复用了父类的代码,还表示所有继承了父类的子类都是同一类对象。
假如我们有这么一个操作,要判断传进来的动物类型,然后执行这个动物的eat操作,面向过程是怎么做的呢?
void dogEat(){
...
}
void catEat(){
...
}
void humanEat(){
...
}
void eat(String s){
if(s=="dog")dogEat();
if(s=="cat")catEat();
if(s=="human")humamEat();
面向过程是上面这么做的,也就是在编译期就一定会确定调用了哪个函数,而且要写一大堆判断代码面向对象与面向过程的区别,假如又加进来了几种动物,又得修改这份代码面向对象与面向过程的区别,耦合度很高。
而面向过程是这么做的:
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();
通过多态,我们只需要声明我需要某一类对象的父类,然后传进来一个具体子类,在运行的时候我们调用的是子类的方法。而且不管后面有加多了多少个子类,都不用改我写好的代码,耦合度大大降低,而且代码易维护。
这下没话说了吧,哈哈
那么面向对象有什么缺点嘛?
面向过程的性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,所以单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
总结:
面向对象:代码易复用、易测试、易扩展、耦合度低、易维护。但性能没面向过程高,因为有对象的实例化,开销较大。
面向过程:没有面向对象的易复用、易测试、易扩展、耦合度低、易维护。但性能高。
上面是我对面向对象和面向过程的见解,可能有不对的地方,还望大家指正,谢谢~
本文共 824 个字数,平均阅读时长 ≈ 3分钟
相关文章
- 详解数据仓库和数据库的区别「建议收藏」
- 【说站】java yield()和sleep()的区别
- java重写和重载的区别总结_java覆盖和重载
- Map和Set的区别「建议收藏」
- 【解惑】软硬链接及挂载之间的区别总结
- 【科研利器】关于 “.bash_profile” 和 “.bashrc”区别的总结
- SAP ABAP 方法调用里传值(Pass Value)和传引用(Pass Reference)的区别试读版
- OSPF和RIP个人总结,概念+区别,易于记忆,收藏!
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- SpringMVC和Springboot的区别详解编程语言
- 外媒总结 Win11 家庭版、专业版区别:专业版可支持 2TB 内存
- 比较Redis队列和MQ的不同特性(redis队列和mq区别)
- Oracle和Greenplum,异曲同工(Oracle与gp的区别)
- Javascript中null、NaN和undefined的区别总结
- 深入c#类和结构的区别总结详解
- 类成员函数的重载、覆盖与隐藏之间的区别总结
- php中OR与||AND与&&的区别总结
- javascript与jquery中跳出循环的区别总结
- JS中typeof与instanceof之间的区别总结