乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      五大原則之

       云中凌 2014-08-04

      闡述:子類型(subtype)必須能夠替換掉它們的基類型(basetype)

       

      先提出一個(gè)問(wèn)題:正方形是不是一種特殊的長(zhǎng)方形(IS - A關(guān)系)?

      先不要回答這個(gè)問(wèn)題,看下面的分析。

       

      理解:LSP原則的一個(gè)例子,假如有個(gè)people的基類,兩個(gè)字類man類和woman類,都繼承于people類。那么針對(duì)people類的任何操作,比如fun吃飯、fun睡覺(jué)、fun走路,對(duì)于man類和woman類都成立。這個(gè)很好理解,不管是man還是woman,歸根結(jié)底,還都是一個(gè)people。

      (一)正常思維

      如下例子:

       

      class CShape
      {
      public:
       CShape(void);
       ~CShape(void);
      public:
       virtual void Draw();
      };

      class CCircle:public CShape
      {
      public:
       CCircle(void);
       ~CCircle(void);
      public:
       virtual void Draw();
      };

      class CSquare:public CShape
      {
      public:
       CSquare(void);
       ~CSquare(void);
      public:
       virtual void Draw();
      };

       

      在使用CShape對(duì)象的任何地方,都可以使用CCircle對(duì)象或者CSquare對(duì)象。

       

      (二)、特殊情況呢?

       回到最初的問(wèn)題,正方形是不是矩形的問(wèn)題。

      如下類:

      class CRectangle
      {
      public:
       CRectangle(void);
       ~CRectangle(void);
      protected:
       int  width;
       int  height;
      };

      class CSquare:public CRectangel
      {
      public:
       CSquare(void);
       ~CSquare(void);
      };

       

      假如有個(gè)函數(shù)

      void g(CRectangle * r)

      {

          r.width = 4;

          r.height = 5;

          if( r.Area() != 20)

             break;

      }

      請(qǐng)問(wèn),對(duì)于函數(shù)g來(lái)說(shuō),能用一個(gè)CSquare對(duì)象,代替CRectangle對(duì)象嗎?很明顯,不能!

      很明顯,違反了LSP原則。

      那么,正方形到底是不似乎矩形呢?也就是說(shuō)CSquare和CRectangle之間,是否存在(IS - A)關(guān)系呢?

      解釋:

      1、從屬性方面講,正方形是矩形,是一種特殊矩形,即width = height;

      2、從行為方式將,正方形可能不是矩形。

          比如,對(duì)于函數(shù)g來(lái)說(shuō),描述了矩形的一種行為方式,很明顯,正方形不符合這種行為方式。

       

          OOD中的IS-A關(guān)系,是就行為方式而言的,行為方式是可以進(jìn)行合理假設(shè)的。而行為方式,才是我們進(jìn)行面向?qū)ο筌浖O(shè)計(jì)真正所關(guān)注的問(wèn)題。

          因此,可以講,正方形不是一個(gè)矩形。


       

       

      (三)、怎么處理此類問(wèn)題呢?

      1、基于契約進(jìn)行設(shè)計(jì)。

          每個(gè)類設(shè)計(jì)時(shí),都會(huì)有一些假設(shè),每個(gè)方法,都有前置條件,后置條件,這些條件都是契約。對(duì)這些方法,要注明契約。

          要想從基類派生子類,就必須滿足這些契約。如果不滿足這些契約,就不能繼承出子類。(即使他們看起來(lái)很像,比如正方形與矩形)

      2、但是我們又需要LSP原則,怎么辦呢?

          從CRectangle類和CSquare類,提取出公共部分,做為一個(gè)基類。比如CShape類。

          CRectangle和CSquare都繼承自CShape類。

           具體一些例子,參考《敏捷軟件開(kāi)發(fā)》相關(guān)章節(jié)

       

       

       

       

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多