众所周知,Java 是面向对象的语言,那这个面向对象是怎么来的呢?与之相对的面向过程又是什么呢?下面我说大家分享一下自己的看法:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
面向对象是把问题中的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
通俗点说就是:
如果要你去设计一个棋局的话,面向对象可能是这样的:
- 黑棋和红棋对象:负责棋子的走向,两者行为相同
- 棋盘系统:通过黑棋和红棋对象的行为展示棋局情况
- 规则系统:判断“战场”的变化以及胜负等
面向过程可能是这样的:
- 开始游戏,红棋先走
- 展示棋局情况
- 判断战况(是否有棋子被吃、胜负情况)
- 黑棋接着走
- 展示棋局情况
- 判断战况(是否有棋子被吃、胜负情况)
- ……
所以可以看出来,面向对象把问题中的事务分解成了各个对象,每个对象有自己的任务,而面向过程是通过实现解决问题的每一个步骤去解决问题。
优缺点
面向对象
优点:易维护、复用、扩展,由于面向对象所具有的封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活
缺点:性能比面向过程低
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
举个例子
上面的特点可能还是有一些不好理解,那么再来个例子说明一下面向过程的“高效率”特点和面向对象“易扩展、复用、维护”的特点
蛋炒饭和盖浇饭大家喜欢吃哪个?
做法相信大家都大概知道一些,蛋炒饭的做法大概是:
- 鸡蛋炒熟并铲碎
- 隔夜饭翻炒热
- 加入鸡蛋
- 继续翻炒,让蛋和饭充分混合
盖浇饭的做法大概是:
- 炒好需要的菜,如青椒肉丝
- 将青椒肉丝盖在饭上
别说我炒菜不放油和调料啊,省略了省略了
从上面的例子可以看出来,蛋炒饭可以粗略的看做为面向过程,而盖浇饭可以粗略的看做为面向对象
面向过程的“高效率”
其实可以看出来,盖浇饭中虽然步骤看起来少一些,但是里面的“青椒肉丝”这个步骤其实还是相当于蛋炒饭中加工鸡蛋的过程
在做盖浇饭的时候,多了“调用”“青椒肉丝“这一步骤,毕竟盖浇饭究竟盖什么我们还是不清楚的,而蛋炒饭则不需要这一步骤。
面向对象的易维护、易复用、易扩展
我们可以随意改变“菜”这一对象,比如改成“西红柿鸡蛋”,那我们就拥有了一份西红柿鸡蛋盖饭了!(易维护、易复用)
如果不太巧,没米饭了,那我们完全可以把米饭给换成面,给大家奉上一碗青椒肉丝盖面!(易扩展)