日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何设计复用性较好的类?

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何设计复用性较好的类? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

代碼復(fù)用的幾個(gè)級(jí)別:

  • 源代碼級(jí)別的復(fù)用
  • 模塊級(jí)別的復(fù)用(類/抽象類/接口)
  • 庫級(jí)別的復(fù)用(API)
  • 系統(tǒng)級(jí)別的復(fù)用:框架

白盒復(fù)用:源代碼可見、可擴(kuò)展、可修改
黑盒復(fù)用:源代碼不可見,只可調(diào)用API

找源代碼的幾個(gè)網(wǎng)站:
grepcode.com
github.com
searchcode.com

本文主要介紹模塊級(jí)別的復(fù)用——類/接口
復(fù)用一個(gè)類的方式——繼承、委托

繼承

繼承時(shí),子類將繼承父類的所有功能。
子類可以override父類的功能,也可以在父類的基礎(chǔ)上,增加新的功能。
在實(shí)現(xiàn)繼承類之前,最好先設(shè)計(jì)好繼承層次圖
子類不可以丟棄父類的屬性或方法,因此在設(shè)計(jì)繼承結(jié)構(gòu)時(shí)務(wù)必特別小心。

委托(delegation)

委托用于:一個(gè)類僅依賴于另一個(gè)類的部分功能模塊時(shí),例如,Sorter就將一部分功能委托給了Comparator。
顯式的委托:把被委托類直接傳給委托類
隱式的委托:by the member lookup rules of the language
委托是一種比較低級(jí)的共享代碼機(jī)制。

庫級(jí)別的復(fù)用(API/Package)

庫(Library)是一些具有可重用功能的類的集合。
框架(Framework)是一組可以根據(jù)應(yīng)用需求定制的代碼骨架。

系統(tǒng)級(jí)別的復(fù)用(Framework)

框架是一組抽象類、具體類及其鏈接關(guān)系,只有骨架,沒有血肉。
開發(fā)者根據(jù)自己的具體應(yīng)用需求,在框架中填入代碼,形成完整的系統(tǒng)。
白盒框架:通過代碼層面的繼承來進(jìn)行框架擴(kuò)展
黑盒框架:通過實(shí)現(xiàn)特定的接口來完成代碼復(fù)用

LSP可替換原則

行為子類型

  • 子類型可以增加方法,但不能刪除方法。
  • 子類型需要實(shí)現(xiàn)抽象類型中所有未實(shí)現(xiàn)的方法。
  • 子類型方法的返回值類型只能與原方法的返回值類型相同或是其子類型。
    override一個(gè)方法時(shí),設(shè)父類方法返回值類型是T1,子類方法返回值類型是T2,則T2必須與T1相同,或T2是T1的子類型。
    原因如下,在實(shí)現(xiàn)多態(tài)時(shí),可能有一個(gè)父類對(duì)象,用子類型實(shí)例化,就可能用一個(gè)T1類型的變量用于接收父類方法的返回值,這樣在編譯時(shí)才能通過。那么在runtime,執(zhí)行的實(shí)際上是子類方法,如果子類方法返回的是T1的父類型,則無法被T1類型的變量接收;子類方法如果返回的是T1的子類型,則可以被T1類型的變量接收,這也是一個(gè)多態(tài)的過程。因此,要求T2是T1的子類型。
  • 子類型方法的參數(shù)必須是與原方法參數(shù)類型相同或是其父類型(這種情況在Java中按overload處理)
    override一個(gè)方法時(shí),設(shè)父類方法中參數(shù)類型是T1,子類方法參數(shù)類型是T2,則T2必須與T1相同,或是T1的父類型,原因如下。
    在實(shí)現(xiàn)多態(tài)時(shí),可能有一個(gè)父類類型的對(duì)象,用子類類型實(shí)例化。在調(diào)用這個(gè)方法時(shí),傳遞的參數(shù),必須是T1或T1的子類型,這樣編譯才能通過。而在運(yùn)行時(shí),實(shí)際上調(diào)用的是子類的方法,如果子類方法要求的參數(shù)類型T2是T1的子類型,而父類傳入了T1類型,則在運(yùn)行時(shí),子類方法的參數(shù)無法用T2來接收一個(gè)T1類型的對(duì)象,就會(huì)出錯(cuò)。因此,要求子類方法接收的參數(shù)類型必須是T1或T1的父類型,這樣才能適配多態(tài)機(jī)制。而在Java中,這樣的機(jī)制不是override,而是overload。
  • 子類型方法拋出的異常必須少于或等于父類方法拋出的異常
    這個(gè)很容易理解,在調(diào)用父類方法,只處理了一部分異常使得編譯時(shí)能通過。而運(yùn)行時(shí)實(shí)際上是執(zhí)行的子類方法,如果拋出了額外的異常,就會(huì)導(dǎo)致運(yùn)行時(shí)出現(xiàn)未處理的異常。因此子類方法拋出的異常只能變少不能變多。
  • 子類型的規(guī)約必須比父類型規(guī)約更強(qiáng),或相等。
    這就意味著子類型擁有更強(qiáng)的不變量更弱的前置條件更強(qiáng)的后置條件,因?yàn)橐蟾割惤邮盏妮斎?#xff0c;子類必須也能夠接收;子類給出的返回,父類必須也能夠處理。這就要求子類接收的輸入范圍更大、子類給出的輸出范圍更小。

總結(jié)

以上是生活随笔為你收集整理的如何设计复用性较好的类?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美在线观看视频一区二区 | 欧美精品成人久久 | 久久综合久久久久 | 欧美高清大白屁股ass18 | 大学生三级中国dvd 日韩欧美一区二区区 | 最新国产精品视频 | 国产精品高潮呻吟久久av野狼 | 国产美女在线免费 | 午夜精品久久久久久久99热黄桃 | av资源在线播放 | 久久久97 | 国产精品一区二区自拍 | 婷婷网五月天 | 在线观看中文字幕一区二区 | 香蕉在线观看视频 | 亚洲一区二区三区在线视频观看 | 性感美女在线观看 | 欧日韩不卡在线视频 | www日本www | 少妇色欲网 | 亚洲国产区 | 国产主播啪啪 | 国产高清一区在线观看 | 欧美群妇大交乱 | 亚洲一区二区三区四区五区午夜 | 在线观看av国产一区二区 | 免费国产一区二区 | 超碰日日夜夜 | 精品国产18久久久久久 | 亚洲成熟丰满熟妇高潮xxxxx | 一道本一区 | 亚洲国产日韩一区无码精品久久久 | 久久综合激情网 | 91社区视频 | 日韩中文字幕av在线 | 国产麻豆一区二区 | 色啪综合 | 精品女同一区二区三区 | 日本私人影院 | 成人a级网站 | 色爽| 无码人妻一区二区三区av | 黄色69| av免费网 | 免费看美女被靠到爽的视频 | 日本大尺度做爰呻吟 | 大尺度激情吻胸视频 | 亚洲专区欧美 | 久久久国产精品视频 | www.狠狠艹| 久久久久亚洲视频 | 人人做人人爽人人爱 | 91欧美日韩麻豆精品 | 欧美三级在线视频 | 九九热这里都是精品 | 欧美综合另类 | 国产成人午夜 | 麻豆网站在线看 | 成年人免费观看网站 | 俺来也俺也啪www色 欧洲一区二区视频 | 91在线播放视频 | 脱裤吧导航 | 免费日韩一区 | 男人都懂的网址 | 一道本不卡视频 | 国产人妻精品一区二区三区不卡 | ,亚洲人成毛片在线播放 | 一区二区黄色 | 国产黑丝在线 | 一级片黄色的 | 波多野结衣之潜藏淫欲 | 久久欧美精品 | 国产精品视频久久久久久久 | 无码精品久久久久久久 | 飘花影院伦理片 | 强乱中文字幕av一区乱码 | 国产一线二线三线在线观看 | 日本三级大全 | 欧美一级艳片视频免费观看 | 中文字幕在线观看你懂的 | 国内精品久久99人妻无码 | 国产精品毛片一区二区在线看舒淇 | 国产东北女人做受av | 久久视频热 | 中文天堂在线视频 | 天堂在线日本 | 农村村妇真实偷人视频 | 色七七桃花综合影院 | 亚洲av综合色区无码二区爱av | 波多野结衣一区 | 五月天激情影院 | 亚洲蜜桃视频 | 国产大奶在线观看 | 久久久精品毛片 | 久久国产精品国语对白 | 在线观看国产精品入口男同 | 日日夜夜天天综合 | 美女被草网站 | 日本成片网 |