qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          快速提升MySQL可擴展性的五大絕招

          快速提升MySQL可擴展性的五大絕招

          我對抽象類和接口的理解

          今天公司組織培訓。講解到抽象類和接口這里的時候。好像有同事不太明白。(請允許我自作多情一下!)

            鑒于我自己對這部分也不是掌握的很透徹。所以發個博文上來,一是記錄一下。二是希望還不明白的朋友在閱讀完本文之后能有個了解。

            新手,如有不當之處,請多多包涵!

            MSDN:抽象類是從子類發現了公共的東西,泛化(也可以說把公共的東西單獨提取出來)出父類,然后子類繼承父類,而接口是根本不知道子類的存在,方法如何實現還不確定,預先定義的

            有一個人,他叫王麻子,那年,他生了個兒子,起名叫 王三。這個時候用程序來描述就是他和他老婆創建了一個對象 ,代碼如下:

          public class WangSan
              {
                  string FirstName;
                  string Sex;
                  void CanDo()
                  {
                      Console.WriteLine("我是王三,我會畫畫");
                  }
              }

            王三有 姓、性別、和一個能力,他會畫畫。

            又過了一年,王麻子和他老婆又生了個孩子,起名叫 王四,用程序來說,他們倆又創建了一個對象

          public class WangSi
              {
                  string FirstName;
                  string Sex;
                  void CanDo()
                  {
                      Console.WriteLine("我是王四,我會唱歌");
                  }
              }

            王四也有 姓、性別和一個能力,他會唱歌

            假如一下。假如他們是印度人,對計劃生育沒什么限制,他們每隔幾年都會再生個孩子出來。這樣的話。如果要用程序來描述起來豈不是很麻煩,所以這個時候我們應該考慮對代碼進行重構,提取共同的部分,也就是姓名、性別和一個能力

            如下:

          public abstract class Son
              {
                  protected string FirstName;
                  protected string Sex;
              }

            因為他們都是王麻子的孩子,咱們假設一下,假設由于他們都是王麻子的孩子,所以他們必須 姓王、有性別,所以這個 基類 Son 就必須聲明為  abstract 的(創建就為被繼承)。就是說凡是 王麻子的孩子,都必須繼承自 Son 這個基類,因為他們都有王麻子的一些特性和自己的特性,

            比如:

          public class WangSan:Son
              {
              }

            我們不必在 WangSan 這個類中寫任何代碼,因為他是王麻子的孩子,所以他有 姓 和 性別。。在New WangSan 這個對象的時候。他就自動的有了 FirstName Sex。這些屬性。

          又假如,由于王麻子是個全能人才。所以他的孩子必須會一項技術,比如游泳或者 唱歌。這個時候 基類就可以修改一下:

          public abstract class Son
              {
                 protected string Name;
                 protected string Sex;
                  /// <summary>
                  /// 抽象類中的抽象方法,在子類中必須自行實現
                  /// </summary>
                  public abstract void CanDO();
              }

            添加了 CanDo 的抽象方法。 這樣 當 王三 這個對象一被創建,他就必須繼承 Son 這個類(他必須是王麻子的兒子,莫非兩口子生的孩子是別人的??)...而又由于Son 中有個抽象的方法 CanDo. 所以。王三 他必須 得有一項技術。如果不實現 CanDo .編譯不通過(你不實現,就不能說明你是我孩子,以后我對你不好!)

          public class WangSan:Son
              {
                  public override void CanDO()
                  {
                      Console.WriteLine("我是王三,王麻子的孩子,我必須有一個擅長,那我選擇唱歌");
                  }
              }

            這樣。王三也必須會一項長處了!!

            王四也是一樣。只要他是 王麻子的兒子。他就必須實現 CanDo 方法,并且有FirstName Sex屬性

            又假如有一天,王麻子偷師學藝,學會水上漂。但是他不知道誰愿意學,又不想強迫孩子們。所以他讓孩子們自己決定。他定義了一個接口(發布了一個規范) IShuiShangPiao

          interface IShuiShangPiao {
                  void CanFly();
              }

            誰想學。就來我這里報道。結果王武想學。所以王武來報道了(程序解釋就是王武實現這個接口)

          public class WangWU : Son, IShuiShangPiao
              {
                  public override void CanDO()
                  {
                      throw new NotImplementedException();
                  }
                  /// <summary>
                  /// 實現接口(報道),老爸就教我水上漂
                  /// </summary>
                  public void CanFly()
                  {
                      throw new NotImplementedException();
                  }
              }

            回到我們軟件開發當中,假設以上類是我們程序中實現的一項功能,假如某一天,我們發現(或者客戶要求):凡是王麻子的孩子都必須會英語,這個時候,我們就僅僅只需要在 Son 這個類中 增加一個會說英語的方法。他的孩子們就都會說英語了。如果不采用繼承的話。假設王麻子有1萬個孩子,那就得修改一萬個類,很累。。。。

            以上就是我個人針對 抽象類和 接口的理解,如有不當之處,敬請提出!

            程序需要慢慢重構,這個我當時理解起來也非常不容易。多練習,多思考就會豁然開朗!

            但是切記,千萬不要為了設計而設計。造成過度設計會很糟糕的。。。就好像我們設計數據庫,雖然有3大范式,但是有時候業務迫使我們不得不違背。。。。

            以上!

            希望對這部分不明白的朋友通過本文能對這部分知識有個進一步的了解。同時希望各位的技術一天牛比一天!!

          posted on 2011-11-08 15:54 順其自然EVO 閱讀(137) 評論(0)  編輯  收藏

          <2011年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 朝阳县| 和龙市| 嘉荫县| 买车| 乌恰县| 阳西县| 寿宁县| 屏山县| 宁强县| 怀柔区| 揭阳市| 华容县| 西青区| 台南市| 隆尧县| 肃南| 韩城市| 大宁县| 邯郸市| 台南县| 图木舒克市| 拜泉县| 临江市| 商南县| 沂南县| 开化县| 城步| 冷水江市| 南丰县| 镇雄县| 色达县| 扶余县| 安龙县| 江陵县| 精河县| 繁峙县| 赤水市| 榆林市| 尼玛县| 黎城县| 宁海县|