亚洲国产成人,色呦呦内射午夜,无码一级片,无码人妻少妇色欲AV一区二区

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><delect id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></delect><acronym id="jg8hh"><dd id="jg8hh"></dd></acronym><button id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></button><samp id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></samp>

<p id="jg8hh"></p>

<samp id="jg8hh"><legend id="jg8hh"></legend></samp>
<samp id="jg8hh"><legend id="jg8hh"><samp id="jg8hh"></samp></legend></samp>

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><acronym id="jg8hh"></acronym><p id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></p><p id="jg8hh"></p>

<p id="jg8hh"></p><delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect><button id="jg8hh"><listing id="jg8hh"><i id="jg8hh"></i></listing></button>
<delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect>

里氏替換原則是什么?

發(fā)布時(shí)間:2024-09-12
里氏替換原則是面向?qū)ο笤O(shè)計(jì)的基本原則之一,主張使用“抽象(abstraction)”和“多態(tài)(polymorphism)”將設(shè)計(jì)中的靜態(tài)結(jié)構(gòu)改為動(dòng)態(tài)結(jié)構(gòu),維持設(shè)計(jì)的封閉性?!俺橄蟆笔钦Z(yǔ)言提供的功能,“多態(tài)”由繼承語(yǔ)義實(shí)現(xiàn)。
里氏替換原則(liskov substitution principle,lsp)由麻省理工學(xué)院計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室的里斯科夫(liskov)女士在 1987 年的“面向?qū)ο蠹夹g(shù)的高峰會(huì)議”(oopsla)上發(fā)表的一篇文章《數(shù)據(jù)抽象和層次》(data abstraction and hierarchy)里提出來(lái)的,她提出:繼承必須確保超類(lèi)所擁有的性質(zhì)在子類(lèi)中仍然成立(inheritance should ensure that any property proved about supertype objects also holds for subtype objects)。
里氏替換原則主要闡述了有關(guān)繼承的一些原則,也就是什么時(shí)候應(yīng)該使用繼承,什么時(shí)候不應(yīng)該使用繼承,以及其中蘊(yùn)含的原理。里氏替換原是繼承復(fù)用的基礎(chǔ),它反映了基類(lèi)與子類(lèi)之間的關(guān)系,是對(duì)開(kāi)閉原則的補(bǔ)充,是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。
里氏替換原則的作用
里氏替換原則的主要作用如下。
1、里氏替換原則是實(shí)現(xiàn)開(kāi)閉原則的重要方式之一。
2、它克服了繼承中重寫(xiě)父類(lèi)造成的可復(fù)用性變差的缺點(diǎn)。
3、它是動(dòng)作正確性的保證。即類(lèi)的擴(kuò)展不會(huì)給已有的系統(tǒng)引入新的錯(cuò)誤,降低了代碼出錯(cuò)的可能性。
里氏替換原則的實(shí)現(xiàn)方法
里氏替換原則通俗來(lái)講就是:子類(lèi)可以擴(kuò)展父類(lèi)的功能,但不能改變父類(lèi)原有的功能。也就是說(shuō):子類(lèi)繼承父類(lèi)時(shí),除添加新的方法完成新增功能外,盡量不要重寫(xiě)父類(lèi)的方法。
如果通過(guò)重寫(xiě)父類(lèi)的方法來(lái)完成新的功能,這樣寫(xiě)起來(lái)雖然簡(jiǎn)單,但是整個(gè)繼承體系的可復(fù)用性會(huì)比較差,特別是運(yùn)用多態(tài)比較頻繁時(shí),程序運(yùn)行出錯(cuò)的概率會(huì)非常大。
如果程序違背了里氏替換原則,則繼承類(lèi)的對(duì)象在基類(lèi)出現(xiàn)的地方會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。這時(shí)其修正方法是:取消原來(lái)的繼承關(guān)系,重新設(shè)計(jì)它們之間的關(guān)系。
關(guān)于里氏替換原則的例子,最有名的是“正方形不是長(zhǎng)方形”。當(dāng)然,生活中也有很多類(lèi)似的例子,例如,企鵝、鴕鳥(niǎo)和幾維鳥(niǎo)從生物學(xué)的角度來(lái)劃分,它們屬于鳥(niǎo)類(lèi);但從類(lèi)的繼承關(guān)系來(lái)看,由于它們不能繼承“鳥(niǎo)”會(huì)飛的功能,所以它們不能定義成“鳥(niǎo)”的子類(lèi)。同樣,由于“氣球魚(yú)”不會(huì)游泳,所以不能定義成“魚(yú)”的子類(lèi);“玩具炮”炸不了敵人,所以不能定義成“炮”的子類(lèi)等。
下面以“幾維鳥(niǎo)不是鳥(niǎo)”為例來(lái)說(shuō)明里氏替換原則。
【例2】里氏替換原則在“幾維鳥(niǎo)不是鳥(niǎo)”實(shí)例中的應(yīng)用。
分析:鳥(niǎo)一般都會(huì)飛行,如燕子的飛行速度大概是每小時(shí) 120 千米。但是新西蘭的幾維鳥(niǎo)由于翅膀退化無(wú)法飛行。假如要設(shè)計(jì)一個(gè)實(shí)例,計(jì)算這兩種鳥(niǎo)飛行 300 千米要花費(fèi)的時(shí)間。顯然,拿燕子來(lái)測(cè)試這段代碼,結(jié)果正確,能計(jì)算出所需要的時(shí)間;但拿幾維鳥(niǎo)來(lái)測(cè)試,結(jié)果會(huì)發(fā)生“除零異?!被蚴恰盁o(wú)窮大”,明顯不符合預(yù)期,其類(lèi)圖如圖 1 所示。
程序代碼如下:
package principle;public class lsptest{ public static void main(string[] args) { bird bird1=new swallow(); bird bird2=new brownkiwi(); bird1.setspeed(120); bird2.setspeed(120); system.out.println("如果飛行300公里:"); try { system.out.println("燕子將飛行" bird1.getflytime(300) "小時(shí)."); system.out.println("幾維鳥(niǎo)將飛行" bird2.getflytime(300) "小時(shí)。"); } catch(exception err) { system.out.println("發(fā)生錯(cuò)誤了!"); } }}//鳥(niǎo)類(lèi)class bird{ double flyspeed; public void setspeed(double speed) { flyspeed=speed; } public double getflytime(double distance) { return(distance/flyspeed); }}//燕子類(lèi)class swallow extends bird{}//幾維鳥(niǎo)類(lèi)class brownkiwi extends bird{ public void setspeed(double speed) { flyspeed=0; }}程序的運(yùn)行結(jié)果如下:
如果飛行300公里:燕子將飛行2.5小時(shí).幾維鳥(niǎo)將飛行infinity小時(shí)。程序運(yùn)行錯(cuò)誤的原因是:幾維鳥(niǎo)類(lèi)重寫(xiě)了鳥(niǎo)類(lèi)的 setspeed(double speed) 方法,這違背了里氏替換原則。正確的做法是:取消幾維鳥(niǎo)原來(lái)的繼承關(guān)系,定義鳥(niǎo)和幾維鳥(niǎo)的更一般的父類(lèi),如動(dòng)物類(lèi),它們都有奔跑的能力。幾維鳥(niǎo)的飛行速度雖然為 0,但奔跑速度不為 0,可以計(jì)算出其奔跑 300 千米所要花費(fèi)的時(shí)間。
其類(lèi)圖如圖 2 所示。
更多相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):php中文網(wǎng)!
上一個(gè):塑料板密度測(cè)試方案
下一個(gè):商丘水浴鍋HH-8 單列八孔

別墅無(wú)線AP覆蓋-監(jiān)控安裝及IPTV解決方案
央視開(kāi)發(fā)的軟件(央視電視臺(tái)軟件)
隔膜泵是如何實(shí)現(xiàn)腐蝕性液體的輸送的?
超音波恒溫水循環(huán)箱
plasma設(shè)備改善TMCS和樺木材表面疏水源自沉積原理
詳細(xì)分析德國(guó)REXROTH力士樂(lè)流量控制閥工作原理:
瀝青低溫凍斷系統(tǒng)參數(shù)
關(guān)于數(shù)控加工中心刀庫(kù)分類(lèi)的依據(jù)
耐磨阻漏熱電偶的測(cè)量原理與應(yīng)用概述
20tjoloy無(wú)線打印電子吊鉤秤 維護(hù)注意事項(xiàng)