1. 程式人生 > 實用技巧 >面向物件(一)

面向物件(一)

1.面向過程和麵向物件?
1)面向過程的理解:
面向過程是將一個問題拆分成許多步驟實現
比如:將大象裝入冰箱,包括以下幾個步驟:
第一步、開啟冰箱
第二步、將大象放入
第三步、關上冰箱
面向過程關注的是實現的步驟,以函式為最小單位,考慮的是怎麼做。

2)面向物件的理解:
面向物件是將問題抽象化為多個類/物件,考慮誰來做。
比如:將大象裝入冰箱,包含大象,冰箱,人

如果把面向過程和麵向物件比喻成歷史,
面向過程是編年體史書;
面向物件是紀傳體史書;

3)區別和優缺點:
區別:
面向過程關注解決問題的過程,以函式為最小單位,考慮怎麼做;
面向物件關注解決問題的物件,已類/物件為最小單位,考慮誰來做;
優缺點:
面向過程佔用的資源少,速度快;面向物件佔用的資源多,速度低;但是面向物件創造一次,重複使用,方便複用和擴充套件。

2.面向物件的3大基本特徵
1)封裝
將類中的屬性和方法提供給可信任的類和物件操作,對不可信的類和物件進行隱藏。
public > protected > default > private

把該隱藏的隱藏,該暴露的暴露,提高了程式碼的安全性。

 1 public class Girl
 2 {
 3     private int age;
 4 
 5     public int getAge()
 6     {
 7         return this.age;
 8     }
 9 
10     public void setAge(int age)
11     {
12 if(age > 25) 13 { 14 this.age = 18; 15 } 16 else { 17 this.age = age; 18 } 19 } 20 }

2)繼承
對於現有類的所有功能,可以在不修改原有類的基礎上,對其進行擴充套件。
通過繼承得到的新類成為"子類"或者派生類;
原來類成為"父類"或者"基類"。

提高了程式碼的擴充套件性。

3)多型
多型是指一個類例項的相同方法,在不同情形下有不同的表現形式。
多型需要3個條件:
第一、需要繼承或者介面實現;
第二、子類重寫父類方法;
第三、父類引用指向子類物件。

 1 public class Parent{
 2 
 3     public void call(){
 4         sout("im Parent");
 5     }
 6 }
 7 
 8 public class Son extends Parent{// 1.有類繼承或者介面實現
 9     public void call(){// 2.子類要重寫父類的方法
10         sout("im Son");
11     }
12 }
13 
14 public class Daughter extends Parent{// 1.有類繼承或者介面實現
15     public void call(){// 2.子類要重寫父類的方法
16         sout("im Daughter");
17     }
18 }
19 
20 public class Test{
21 
22     public static void main(String[] args){
23         Parent p = new Son(); //3.父類的引用指向子類的物件
24         Parent p1 = new Daughter(); //3.父類的引用指向子類的物件
25     }
26 }

多型是一種動態繫結,是程式執行期特性,方法的重寫是一種多型;傾向於認為方法的過載不是一種靜態多型。