[心得整理] c# 物件導向程式 - 2.封裝、繼承、多型的三大特性
前言
這三大特性封裝、繼承、多型 已經有許多人寫過,不過我還是想寫一些我的心得分享,
其中也包含Bill叔C#物件導向的上課心得
封裝
拿現實世界來舉例的話
自動販賣機 來說好了 ,有投錢的裝置,選擇商品的按鈕,拿取商品的箱子
買可樂的步驟 投錢,選可樂,拿可樂
你不用知道為何投錢後按鈕燈會亮,按按鈕後可樂如何掉下來
這些知識都被封裝起來了
程式的世界來舉例
//範例一
var flag = string.IsNullOrWhiteSpace(temp);
//範例二
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA1 sha = new SHA1CryptoServiceProvider();
result = sha.ComputeHash(data);
不用知道string 是如何去判斷,是不是null跟空白,
只需要知道把字串傳入就會回傳bool (有興趣知道嗎 原始碼連結)
不用知道sha1的雜湊的知識,你只要呼叫ComputeHash傳入參數
就會得到sha1的雜湊值
封裝我是這樣想
就是把邏輯或知識給取個形容詞也就是方法名稱,定義傳入與傳出
然後把將同性質的邏輯(方法),集合在一起,建立一個class (物件藍圖)
這樣就是呼叫方法,得到結果(投錢,得到可樂)
繼承
現實世界舉例就是物種
看到上圖就知道 被繼承的物種一定會有上一層的特徵與行為
章魚一定就是8腕,魷魚就是8腕+兩觸手
程式來說舉例
public class myList<T> : List<T>
{
}
static void Main(string[] args)
{
myList<int> tempList= new myList<int>();
tempList.Add(1);
}
我去繼承list<T>我就有add這方法可以呼叫,
注意我故意在myList<T>沒有寫任何一行code
因為我繼承list<T>所有屬性與方法 (特徵與行為)
繼承我是這樣想的
繼承class,是想重用(Reuse)
繼承介面,為了有彈性
多型
多型跟繼承有很大的關係
現實世界的多型可以用 老鷹與企鵝來比喻 (連結是連到維基百科)
老鷹與企鵝都是繼承鳥綱但是兩者最快速移動方式
老鷹是飛翔,企鵝是游泳
他們都繼承鳥類所有繼承特徵與行為,
但移動的行為老鷹是在天上飛最快,企鵝在海裡遊最快
同樣都是移動,但行為不同,結果一樣,這就是多型
程式來說明就是91重構文章的算運費
算運費是每一家貨運公司都會有的,但是每一家計價方式都不同
同樣都是算運費,但計價邏輯不同,結果得到價錢,這就是多型
寫法的話
抽象類別 - 當抽象類別的方法有用virtual 這樣繼承的class就可以override
程式碼請看 MSDN 多型 (C# 程式設計手冊)
介面 - 當繼承介面的類別就要實做方法簽章
程式碼請看 MSDN介面 (C# 程式設計手冊)
多型我是這樣想
就是抽象化,可以被抽象化的東西,通常可以有多樣表現
結語
物件導向三大特性,理解後就能寫出好程式嗎??是還不夠的
需要學習SOLID原則,才能寫出好的物件導向程式
延伸閱讀
物件導向:封裝、繼承、多型
[預告]: 物件導向初學者應該要知道的事情
為什麼我找出來的物件都是UI物件? 物件導向初學者應該要知道的事情(二)
繼承是父子關係?才怪! 物件導向初學者應該要知道的事情(四)
課程推薦
如果內容有誤請多鞭策謝謝