[.net 面向對象編程基礎] (11) 面向對象三大特性——封裝

[.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.封裝能減小耦合,保持統一的對外接口,內部修改不影響外部調用

 

 

==============================================================================================

返回目錄

 <若是對你有幫助,記得點一下推薦哦,有不明白的地方或寫的不對的地方,請多交流>

============================================================================================== 

相關文章
相關標籤/搜索