C#面向對象概念
一、面向對象的概念:
以接近現實的處理手法來處理項目中的設計。一個例子:
請描述一下森林中一隻獅子捕食一隻兔子的場景。
用結構化編程實現 |
用面向對象方式實現 |
strut Lion { int lId; string name; } strut Rubbit{ int 1Id; string name; } 定義函數: void lionRunning(Lion); void lionCatch(Lion,Rubbit) void lionEating(Lion,Rubbit ) void lionHappy(Lion); void rubbitCrying(Rubbit) void rubbitRunning(Rubbit) bool rubbitIsDead(Rubbit); |
Class Lion { int lIdl string name; public void Running(){}; public void Catch(Rubbit); public void Eating(Rubbit); public void Happy(); } class Rubbit { int rId; string name; public void Running() public void Crying() public bool Isdead() } |
主程序: Lion fatty; Rubbit may; lionRunning(fatty); rubbitRunning(may); lionCatch(fatty,may); rubbitCrying(may); lionEating(fatty,may); if (rubbitIsDead(may)) lionHappy(fatty); |
主程序 Lion fatty=new Lion(); Rubbit may = new Rubbit(); Fatty.Running(); May.Running(); Fatty.Catch(may); May.Crying(); Fatty.Eating(may); If (may.IsDead()) Fatty.Happy(); |
1.從左邊的設計,我們看出代碼是一系列的函數構成,有以下幾點:
不直觀,程序的組織性不強,函數調用時不容易確定具體調用哪一個
要傳的參數太多
2.右邊代碼,看起來要好一些,函數的參數少,而且都被組織到類的內部,要調用函數時只要確定是哪一個對象要調用,就很容易找到,從程序調用來進右邊的主程序更接近現實世界的處理方式
二、面向對象的特點
1. 封裝
從上表右邊看來,函數代碼寫在類的內部,只能被類的對象所調用,別人不可隨便訪問,這樣可以保護你的代碼,而且函數與對象相關,方便調用
2. 繼承
從代碼重用方面,我們可以把共性的特徵,和行爲抽象出來,比如,程序的需求要我們實現所有的食肉動物都能捕食食草類動物,對於上表左邊程序,我們要全面修改代碼,而對於右邊的程序我們可做如下抽象:
Class Carnivore
{
int aId;
string name;
public void running()
public void Catching(Vegetarian)
public void Eating(Vegetarian);
public void Happy();
}
class Vegetarian
{
int aId;
string name;
public void running()
public void crying()
public bool Isdead()
}
然後,我們使用繼承 class Lion : Carnivore
Class Rubbit : Vegetarian
這樣,我們不用構造兩個類,就能使用它們公共的特徵和函數了
這樣一來,我們可以完成所有食肉動物與食草動物的捕食關係了
如果,我們要實現老虎捕食獵物,那也很容易了,
我們只要定義下面代碼:
Class Tigger : Carnivore
就可以了
3. 多態
從上面的繼承中我們可以看出,實現一個新的類是那麼容易,
但大家想一個問題,老虎與獅子,畢竟不是一種動物,那們的方法不可能完全相同,針對不同的子類,它的方法也不可能相同。比如它們的happy方法可能是這樣的
public void happy()
{
Console.WriteLine(“我高興,所以我發出虎嘯”); //如果是獅子,就可能發出的是獅吼
}
這個問題我們放在下一課中祥細討論
三、面向對象設計程序的作用
1. 重用代碼
2. 可維護性高
3. 可插入性(這個特點與多態相關,下次課重點講述)
意爲:程序不需修改或少做修改,就可實現用戶提出的新的問題
如上面
4. 直觀,更接近現實
5. 方便調用
四、綜合
對象是什麼
從概念層面講,對象是某種擁有責任的抽象。(職能)
從規格層面講,對象是一系列可以被其他對象使用的公共接口。(對象交互)
從語言實現層面來看,對象封裝了代碼和數據。(數據和程序)