面向過程(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();// 甩干
兩者的運行結果
放衣服!
加洗衣粉!
加水!
漂洗!
清洗!
甩干!

總結

  • 面向過程
    優點:
    流程化使得編程任務明確,在開發之前基本考慮了實現方式和最終結 果,具體步驟清楚,便于節點分析。
    效率高,面向過程強調代碼的短小精悍,善于結合數據結構來開發高效率的程序。
    缺點:
    需要深入的思考,耗費精力,代碼重用性低,擴展能力差,后期維護難度比較大。
  • 面向對象
    優點:
    結構清晰,程序是模塊化和結構化,更加符合人類的思維方式;
    易擴展,代碼重用率高,可繼承,可覆蓋,可以設計出低耦合的系統;
    易維護,系統低耦合的特點有利于減少程序的后期維護工作量。
    缺點:
    性能低,由于面向更高的邏輯抽象層,使得面向對象在實現的時候,不得不做出性能上面的犧牲,計算時間和空間存儲大小都開銷很大。
    開銷大,當要修改對象內部時,對象的屬性不允許外部直接存取,所以要增加許多沒有其他意義、只負責讀或寫的行為。這會為編程工作增加負擔,增加運行開銷,并且使程序顯得臃腫。