freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

面向?qū)ο缶幊淘瓌tppt課件(編輯修改稿)

2025-02-13 19:33 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 鳥(niǎo)類(lèi)派生,鳥(niǎo)類(lèi)所有的特性和行為都被鴕鳥(niǎo)類(lèi)繼承。大多數(shù)的鳥(niǎo)類(lèi)在人們的印象中都是會(huì)飛的,所以,我們給鳥(niǎo)類(lèi)設(shè)計(jì)了一個(gè)名字為 fly的方法,還給出了與飛行相關(guān)的一些屬性 ,比如飛行速度( velocity)。 鳥(niǎo)類(lèi) Bird: class Bird { double velocity。 public : ? void fly() { //I am flying。 }。 ? void setVelocity(double velocity) { = velocity。 }。 double getVelocity() { return 。 }。 } 鴕鳥(niǎo)不會(huì)飛怎么辦?我們就讓它扇扇翅膀表示一下吧,在 fly方法里什么都不做。至于它的飛行速度,不會(huì)飛就只能設(shè)定為 0了,于是我們就有了鴕鳥(niǎo)類(lèi)的設(shè)計(jì)。 鴕鳥(niǎo)類(lèi) Ostrich: class Ostrich :public Bird { public fly() { //I do nothing。 }。 public setVelocity(double velocity) { = 0。 }。 public getVelocity() { return 0。 }。 } 深藍(lán)軟件 鴕鳥(niǎo)不是鳥(niǎo) ? 好了,所有的類(lèi)都設(shè)計(jì)完成,我們把類(lèi) Bird提供給了其它的代碼(消費(fèi)者)使用。現(xiàn)在,消費(fèi)者使用 Bird類(lèi)完成這樣一個(gè)需求:計(jì)算鳥(niǎo)飛越黃河所需的時(shí)間。 對(duì)于 Bird類(lèi)的消費(fèi)者而言,它只看到了 Bird類(lèi)中有 fly和 getVelocity兩個(gè)方法,至于里面的實(shí)現(xiàn)細(xì)節(jié),它不關(guān)心,而且也無(wú)需關(guān)心,于是給出了實(shí)現(xiàn)代碼: 測(cè)試類(lèi) TestBird: class TestBird { public: void calcFlyTime(Bird bird) { try{ double riverWidth = 3000。 cout.riverWidth / ()endl。 } catch(…){ coutAn error occured!endl 。 } }。 } 深藍(lán)軟件 鴕鳥(niǎo)不是鳥(niǎo) ? 如果我們拿一種飛鳥(niǎo)來(lái)測(cè)試這段代碼,沒(méi)有問(wèn)題,結(jié)果正確,符合我們的預(yù)期,系統(tǒng)輸出了飛鳥(niǎo)飛越黃河的所需要的時(shí)間;如果我們?cè)倌螟r鳥(niǎo)來(lái)測(cè)試這段代碼,結(jié)果代碼發(fā)生了系統(tǒng)除零的異常,明顯不符合我們的預(yù)期。 對(duì)于 TestBird類(lèi)而言,它只是 Bird類(lèi)的一個(gè)消費(fèi)者,它在使用 Bird類(lèi)的時(shí)候,只需要根據(jù) Bird類(lèi)提供的方法進(jìn)行相應(yīng)的使用,根本不會(huì)關(guān)心鴕鳥(niǎo)會(huì)不會(huì)飛這樣的問(wèn)題,而且也無(wú)須知道。它就是要按照“所需時(shí)間 = 黃河的寬度 / 鳥(niǎo)的飛行速度”的規(guī)則來(lái)計(jì)算鳥(niǎo)飛越黃河所需要的時(shí)間。 我們得出結(jié)論:在 calcFlyTime方法中, Bird類(lèi)型的參數(shù)是不能被 Ostrich類(lèi)型的參數(shù)所代替,如果進(jìn)行了替換就得不到預(yù)期結(jié)果。因此, Ostrich類(lèi)和 Bird類(lèi)之間的繼承關(guān)系違反了里氏代換原則,它們之間的繼承關(guān)系不成立,鴕鳥(niǎo)不是鳥(niǎo)。 深藍(lán)軟件 鴕鳥(niǎo)到底是不是鳥(niǎo) ? ? “鴕鳥(niǎo)到底是不是鳥(niǎo)”,鴕鳥(niǎo)是鳥(niǎo)也不是鳥(niǎo),這個(gè)結(jié)論似乎就是個(gè)悖論。產(chǎn)生這種混亂有兩方面的原因: ? 原因一:對(duì)類(lèi)的繼承關(guān)系的定義沒(méi)有搞清楚。 面向?qū)ο蟮脑O(shè)計(jì)關(guān)注的是對(duì)象的行為,它是使用“行為”來(lái)對(duì)對(duì)象進(jìn)行分類(lèi)的,只有行為一致的對(duì)象才能抽象出一個(gè)類(lèi)來(lái)。 類(lèi)的繼承關(guān)系就是一種“ IsA”關(guān)系,實(shí)際上指的是行為上的“ IsA”關(guān)系,可以把它描述為“ ActAs”。 我們?cè)賮?lái)看“正方形不是長(zhǎng)方形”這個(gè)例子,正方形在設(shè)置長(zhǎng)度和寬度這兩個(gè)行為上,與長(zhǎng)方形顯然是不同的。長(zhǎng)方形的行為:設(shè)置長(zhǎng)方形的長(zhǎng)度的時(shí)候,它的寬度保持不變,設(shè)置寬度的時(shí)候,長(zhǎng)度保持不變。正方形的行為:設(shè)置正方形的長(zhǎng)度的時(shí)候,寬度隨之改變;設(shè)置寬度的時(shí)候,長(zhǎng)度隨之改變。所以,如果我們把這種行為加到基類(lèi)長(zhǎng)方形的時(shí)候,就導(dǎo)致了正方形無(wú)法繼承這種行為。我們“強(qiáng)行”把正方形從長(zhǎng)方形繼承過(guò)來(lái),就造成無(wú)法達(dá)到預(yù)期的結(jié)果。 “鴕鳥(niǎo)非鳥(niǎo)”基本上也是同樣的道理。我們一講到鳥(niǎo),就認(rèn)為它能飛,有的鳥(niǎo)確實(shí)能飛,但不是所有的鳥(niǎo)都能飛。問(wèn)題就是出在這里。如果以“飛”的行為作為衡量“鳥(niǎo)”的標(biāo)準(zhǔn)的話(huà),鴕鳥(niǎo)顯然不是鳥(niǎo);如果按照生物學(xué)的劃分標(biāo)準(zhǔn):有翅膀、有羽毛等特性作為衡量“鳥(niǎo)”的標(biāo)準(zhǔn)的話(huà),鴕鳥(niǎo)理所當(dāng)然就是鳥(niǎo)了。鴕鳥(niǎo)沒(méi)有“飛”的行為,我們強(qiáng)行給它加上了這個(gè)行為,所以在面對(duì)“飛越黃河”的需求時(shí),代碼就會(huì)出現(xiàn)運(yùn)行期故障。 深藍(lán)軟件 鴕鳥(niǎo)到底是不是鳥(niǎo) ? ? 原因二:設(shè)計(jì)要依賴(lài)于用戶(hù)要求和具體環(huán)境。 繼承關(guān)系要求子類(lèi)要具有基類(lèi)全部的行為。這里的行為是指落在需求范圍內(nèi)的行為。圖中鳥(niǎo)類(lèi)具有 4個(gè)對(duì)外的行為,其中 2個(gè)行為分別落在 A和 B系統(tǒng)需求中: 系統(tǒng)需求和對(duì)象關(guān)系示意圖 深藍(lán)軟件 ? A需求期望鳥(niǎo)類(lèi)提供與飛翔有關(guān)的行為,即使鴕鳥(niǎo)跟普通的鳥(niǎo)在外觀上就是 100%的相像,但在 A需求范圍內(nèi),鴕鳥(niǎo)在飛翔這一點(diǎn)上跟其它普通的鳥(niǎo)是不一致的,它沒(méi)有這個(gè)能力,所以,鴕鳥(niǎo)類(lèi)無(wú)法從鳥(niǎo)類(lèi)派生,鴕鳥(niǎo)不是鳥(niǎo)。 B需求期望鳥(niǎo)類(lèi)提供與羽毛有關(guān)的行為,那么鴕鳥(niǎo)在這一點(diǎn)上跟其它普通的鳥(niǎo)一致的。雖然它不會(huì)飛,但是這一點(diǎn)不在 B需求范圍內(nèi),所以,它具備了鳥(niǎo)類(lèi)全部的行為特征,鴕鳥(niǎo)類(lèi)就能夠從鳥(niǎo)類(lèi)派生,鴕鳥(niǎo)就是鳥(niǎo)。 ? 所有派生類(lèi)的行為功能必須和使用者對(duì)其基類(lèi)的期望保持一致,如果派生類(lèi)達(dá)不到這一點(diǎn),那么必然違反里氏替換原則。在實(shí)際的開(kāi)發(fā)過(guò)程中,不正確的派生關(guān)系是非常有害的。伴隨著軟件開(kāi)發(fā)規(guī)模的擴(kuò)大,參與的開(kāi)發(fā)人員也越來(lái)越多,每個(gè)人都在使用別人提供的組件,也會(huì)為別人提供組件。最終,所有人的開(kāi)發(fā)的組件經(jīng)過(guò)層層包裝和不斷組合,被集成為一個(gè)完整的系統(tǒng)。每個(gè)開(kāi)發(fā)人員在使用別人的組件時(shí),只需知道組件的對(duì)外裸露的接口,那就是它全部行為的集合,至于內(nèi)部到底是怎么實(shí)現(xiàn)的,無(wú)法知道,也無(wú)須知道。所以,對(duì)于使用者而言,它只能通過(guò)接口實(shí)現(xiàn)自己的預(yù)期,如果組件接口提供的行為與使用者的預(yù)期不符,錯(cuò)誤便產(chǎn)生了。里氏代換原則就是在設(shè)計(jì)時(shí)避免出現(xiàn)派生類(lèi)與基類(lèi)不一致的行為。 深藍(lán)軟件 如何正確地運(yùn)用里氏代換原則 ? 里氏代換原則目的就是要保證繼承關(guān)系的正確性。我們?cè)趯?shí)際
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1