[.net 面向對象編程基礎] (11) 面向對象三大特性——封裝html
咱們的課題是面向對象編程,前面主要介紹了面向對象的基礎知識,而從這裏開始纔是面向對象的核心部分,即編程
面向對象的三大特性:封裝、繼承、多態。函數
1.封裝概念加密
封裝:每一個對象都包含有它能進行操做的全部信息,這個特性稱爲封裝。這樣的方法包含在類中,經過類的實例來實現。spa
2.封裝的優勢.net
A.良好的封裝可以減小耦合(好比實現界面和邏輯分離)code
B.可讓類對外接口不變,內部能夠實現自由的修改htm
C.類具備清晰的對外接口,使用者只需調用,無需關心內部對象
D.由於封裝的類功能相對獨立,所以能更好的實現代碼複用blog
E.可保護代碼不被無心中破壞,經過私有字段等實現內部。注意:這裏的代碼保護不是指代碼自己的加密,而是對不想外部更改的代碼經過私有實現。
爲了更好的理解封裝的咱們舉幾個實際例子
實例一:有一個漂亮的房子(House類),房子裏有:牀(Bed屬性)、沙發(Sofa屬性)、書桌(Desk屬性)、錢櫃(Box屬性),還有門(Door屬性)、窗子(Window屬性),咱們能夠用一個類及他的屬性成員來表示這個房子這個對象,在定義以前,咱們能夠考慮,像錢櫃、牀這類我的隱私的東西,不能隨便讓路過的人看到,那就就是私有的。也不能把窗子也封閉起來不接受陽光,那麼窗子就是一個公有屬性。而門在離開家的時候須要鎖上,回到家須要打開,這就是一個對外的方法,固然開鎖是須要有定的條件,好比有鑰匙等。經過以上的描述,咱們來用代碼實現這個封裝
1 /// <summary> 2 /// 房子類 3 /// </summary> 4 class House 5 { 6 object _bed; 7 object _sofa; 8 object _desk; 9 object _box; 10 object _door; 11 object _window; 12 13 /// <summary> 14 /// 牀 默認私有成員 15 /// </summary> 16 object Bed 17 { 18 get { return _bed; } 19 set { _bed = value; } 20 } 21 /// <summary> 22 /// 沙發(私有) 23 /// </summary> 24 object Sofa 25 { 26 get { return _sofa; } 27 set { _sofa = value; } 28 } 29 /// <summary> 30 /// 書桌(私有) 31 /// </summary> 32 object Desk 33 { 34 get { return _desk; } 35 set { _desk = value; } 36 } 37 /// <summary> 38 /// 錢櫃(私有) 39 /// </summary> 40 object Box 41 { 42 get { return _box; } 43 set { _box = value; } 44 } 45 46 /// <summary> 47 /// 門(公有) 48 /// </summary> 49 public object Door 50 { 51 get { return _door; } 52 set { _door = value; } 53 } 54 55 /// <summary> 56 /// 窗子(公有) 57 /// </summary> 58 public object Window 59 { 60 get { return _window; } 61 set { _window = value; } 62 } 63 }
實例二:咱們單位養了一隻價值800塊錢,黃色的的牧羊犬,有陌生人來的時候,就會叫幾聲,固然越是陌生程度越高,叫的次數越多。對這樣一個事務的處理上,能夠利用面向對象的封裝特性,代碼實現以下:
1 /// <summary> 2 /// 狗狗類 3 /// </summary> 4 class Dog 5 { 6 string _dogName; 7 readonly Color _dogColor=Color.Yellow; 8 readonly double _dogPrice = 800.00; 9 int _shoutNumber; 10 11 /// <summary> 12 /// 構造函數 13 /// </summary> 14 /// <param name="dogName"></param> 15 public Dog(string dogName) 16 { 17 DogName = dogName; 18 } 19 20 /// <summary> 21 /// 狗狗名字 公有屬性 22 /// </summary> 23 public string DogName 24 { 25 get { return _dogName; } 26 set { _dogName = value; } 27 } 28 /// <summary> 29 /// 狗狗顏色 只讀屬性 (顏色一出生就是這個顏色,這裏只提供只讀,固然這裏不考慮染色) 30 /// </summary> 31 public Color DogColor 32 { 33 get { return _dogColor;} 34 } 35 /// <summary> 36 /// 狗狗價格 只讀屬性 (這是買來的價格,歷史是不能夠修改的) 37 /// </summary> 38 public double DogPrice 39 { 40 get { return _dogPrice; } 41 } 42 43 /// <summary> 44 /// 狗叫的次數 (不一樣的陌生人來,叫的次數不一樣) 45 /// </summary> 46 public int ShoutNumber{ 47 set{_shoutNumber=value;} 48 get { return _shoutNumber; } 49 } 50 51 /// <summary> 52 /// 狗叫的方法 53 /// </summary> 54 public void Shout() 55 { 56 int i=0; 57 string ShoutNum=""; 58 do 59 { 60 ShoutNum += "旺!"; 61 i++; 62 } while (i <= ShoutNumber); 63 MessageBox.Show(ShoutNum); 64 } 65 }
上面的Dog類就是對狗狗的所有信息,包括它的價格,顏色,叫聲,名字等封裝成一個類,以方便外部調用。對狗狗的價格和顏色使用了只讀屬性,由於它買來的歷史價格和顏色是不能夠更改的(染毛暫不考慮)。經過封裝的思想咱們能夠增長狗狗體重等其它公有屬性,而不會影響到外部接口的調用,對私有的只讀屬性作到了保護。
相信經過這兩個實例,咱們已經徹底對封裝熟悉了。假如咱們的狗狗又生了一個寶寶,他的不少特徵都基本相同,咱們是否是又要複製一次這個類呢?這就要用到面向對象的另外一個重要特性——繼承,下面咱們會慢慢介紹。
國際慣例,咱們概括一下封裝的要點
要點:
1.封裝,就是把一個對象所能操做的全部信息放在一塊兒
2.封裝能減小耦合,保持統一的對外接口,內部修改不影響外部調用
==============================================================================================
返回目錄
<若是對你有幫助,記得點一下推薦哦,有不明白的地方或寫的不對的地方,請多交流>
==============================================================================================