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