免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
五大原則之

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

 

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

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

 

理解:LSP原則的一個(gè)例子,假如有個(gè)people的基類,兩個(gè)字類man類和woman類,都繼承于people類。那么針對people類的任何操作,比如fun吃飯、fun睡覺、fun走路,對于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對象的任何地方,都可以使用CCircle對象或者CSquare對象。

 

(二)、特殊情況呢?

 回到最初的問題,正方形是不是矩形的問題。

如下類:

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;

}

請問,對于函數(shù)g來說,能用一個(gè)CSquare對象,代替CRectangle對象嗎?很明顯,不能!

很明顯,違反了LSP原則。

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

解釋:

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

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

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

 

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

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


 

 

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

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

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

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

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

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

    CRectangle和CSquare都繼承自CShape類。

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

 

 

 

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
運(yùn)行時(shí)的多態(tài)性.cpp
c++概述
4.3 類之間的關(guān)系(Relationships between classes)
DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技術(shù)詳解
面向?qū)ο蟮脑O(shè)計(jì)原則四 - 里氏代換原則 - 森林狼 - JavaEye技術(shù)網(wǎng)站
C++虛函數(shù)示例解讀
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服