面向过程(Procedure Oriented 简称 PO)
- 把事情拆分成一个个的方法和数据,然后按照一定的顺序,执行完这些方法,等方法执行完了,事情就搞定了。
(因为每个方法都可以看作一个过程,所以叫面向过程)。
强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象(Object Oriented 简称 OO)
- 面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。
强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
以洗衣机洗衣粉举例
- 面向过程
加衣服-->加洗衣粉-->加水-->漂洗-->清洗-->甩干
代码
System.out.println("放衣服!");
System.out.println("加洗衣粉!");
System.out.println("加水!");
System.out.println("漂洗!");
System.out.println("清洗!");
System.out.println("甩干!");
- 面向对象
new出两个对象 “人” 和 “洗衣机”
“人” 加入属性和方法:放衣服、加洗衣服、加水
“洗衣机” 加入属性和方法:漂洗、清洗、甩干
代码
// 人
class person {
public void Clothes() {
System.out.println("放衣服!");
}
public void WashingPowder() {
System.out.println("加洗衣粉!");
}
public void Water() {
System.out.println("加水!");
}
}
// 洗衣机
class machine {
public void Rinse() {
System.out.println("漂洗!");
}
public void Clean() {
System.out.println("清洗!");
}
public void SpinDry() {
System.out.println("甩干!");
}
}
// 面向对象编程
person p = new person(); // 人
machine m = new machine(); // 洗衣机
// 调用
p.Clothes();// 放衣服
p.WashingPowder();// 加洗衣粉
p.Water();// 加水
m.Rinse();// 漂洗
m.Clean();// 清洗
m.SpinDry();// 甩干
两者的运行结果
放衣服!
加洗衣粉!
加水!
漂洗!
清洗!
甩干!
总结
- 面向过程
优点:
流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结 果,具体步骤清楚,便于节点分析。
效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
缺点:
需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。
- 面向对象
优点:
结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
缺点:
性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。
开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。