免费国产美女一级A作爱播放免费,日本动漫精品一区二区三区,ⅩⅩ国产全无遮挡无码,国产精品无码视频2020

  • <delect id="1z9bx"><center id="1z9bx"><ruby id="1z9bx"></ruby></center></delect>

      1. <u id="1z9bx"><sub id="1z9bx"></sub></u>

      2. 里氏替換原則是什么?

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

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