面向过程(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();// 甩干
两者的运行结果
放衣服!
加洗衣粉!
加水!
漂洗!
清洗!
甩干!

总结

  • 面向过程
    优点:
    流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结 果,具体步骤清楚,便于节点分析。
    效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
    缺点:
    需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。
  • 面向对象
    优点:
    结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
    易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
    易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
    缺点:
    性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。
    开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。