面向对象与面向过程
概念
面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。强调步骤。
面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。强调对象。
比较
面向过程 | 面向对象 |
---|---|
性能相对来说更高 | 性能相对来说比面向过程低 |
但不易维护、不易复用、不易扩展 | 易维护、易扩展、易复用 |
因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、Linux/Unix 等⼀般采⽤⾯向过程开发。
因为⾯向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
代码实现
下面以网络上关于面向对象与面向过程经典的解释——把大象装进冰箱来举例说明:
public class Demo {
public static void main(String[] args) {
/*
把大象装进冰箱的步骤:
1.打开冰箱门
2.把大象装进冰箱
3.关闭冰箱门
*/
// 使用面向过程的方式
po();
// 使用面向对象的方式
oo();
}
// 使用面向过程的方式,即一步一步按照步骤来
public static void po(){
// 第一步:打开冰箱门
System.out.println("打开冰箱门");
// 第二步:把大象装进冰箱
System.out.println("把大象装进冰箱");
// 第三步:关闭冰箱门
System.out.println("关闭冰箱门");
// 到现在为止,完成所有步骤,已经将大象关进冰箱了
}
// 使用面向对象的方式,即创建一个冰箱对象,让冰箱来打开、装大象、关门,我们只需要调用它的方法就可以了
public static void oo(){
// 实例化一个冰箱对象,让冰箱来完成这些操作
Refrigerator refrigerator=new Refrigerator();
// 调用方法,打开冰箱门
refrigerator.open();
// 调用方法,把大象装进冰箱
refrigerator.putElephant();
// 调用方法,关闭冰箱门
refrigerator.close();
}
}
/**
* 这是一个冰箱类,该类有操作冰箱的方法,如打开冰箱门等
*/
class Refrigerator{
public void open(){
System.out.println("打开冰箱门");
}
public void putElephant(){
System.out.println("把大象装进冰箱");
}
public void close(){
System.out.println("关闭冰箱门");
}
}