导语
大家都知道,C语言是面向过程的语言,C++和Java是面向对象的语言。
但如果细究起来,究竟什么是面向过程?什么是面向对象?大家可能又会有点迟疑,给不出有条理的答案。
我也在这方面有所欠缺,于是打算借着这篇博客梳理一下面向过程和面向对象的特点与区别。
面向过程
什么是面向过程
面向过程(Procedure Oriented,PO),是以过程为中心的编程思想。
面向过程编程的过程就是,先分析解决问题的步骤,然后用函数一步步实现这些步骤,再依次调用。
以五子棋为例,面向过程就是先划分步骤:开始游戏、黑手下棋、绘制、判断输赢、白手下棋、绘制、判断输赢、返回黑手下棋步骤、输出输赢结果。
对于每个步骤,都用方法来实现,然后调用即可。
面向过程的优缺点
优点:
- 性能比较高
缺点:
- 耦合度较高,不易扩展、复用、维护
面向对象
什么是面向对象
面向对象(Object Oriented,OO),是以事务为中心的编程思想。
面向对象编程的过程就是,先将构成问题的事务分解成各个对象,然后对各个对象在解决过程中需要完成的行为进行定义,通过调用各个对象的行为来解决问题。
以五子棋为例,面向对象需要先分析问题设计到了哪些对象:玩家对象(黑白手,行为是下棋)、棋盘系统(行为是绘制图画)、规则系统(行为是判断输赢)。利用玩家对象进行下棋(接收输入),然后告知棋盘对象棋子已经改变;棋盘对象进行绘制,然后告知规则对象进行胜负判断。
面向对象的特点
封装
封装是对象和类的主要特性,是指将客观事物封装成抽象的类,类可以只允许可信的类和对象访问自己的数据和方法,而对不可信的类和对象进行隐藏。
封装的目的是为了隐藏代码细节,使代码模块化。
继承
继承是指,对现有的类进行扩展,是一个从一般到特殊的过程。
这部分包含继承复用和组合复用两种方式。
继承的目的是为了扩展已存在的代码模块,实现代码重用。
多态
多态是指允许你将子类对象赋值给父类对象。
这样一来,父类对象可以根据当前赋值给它的子类对象的特性来以不同方式运作。
Java实现多态,有三种方式:接口、重写、抽象类和抽象方法。
关于接口和抽象类,可以移步[Java基础] 0x02 一篇文章厘清接口、抽象类、实体类
多态的作用,是为了接口重用。
面向对象的优缺点
优点:
- 易维护、易复用、易扩展
- 低耦合
缺点:
- 类调用时需要实例化,开销比较大,比较消耗资源
结束语
总结来说,面向过程编程,数据和流程是在一起的,是流水线式的编程。
面向对象编程,数据与流程相分离,实现封装,通过调用类对象的方法进行编程。