欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
【轉】面向對象的幾個(gè)設計法則

【轉】面向對象的幾個(gè)設計法則

一些面向對象的設計法則 Bob Tarr 著(zhù)

法則1:優(yōu)先使用(對象)組合,而非(類(lèi))繼承

[ Favor Composition Over Inheritance ]

組合

n         (對象)組合是一種通過(guò)創(chuàng )建一個(gè)組合了其它對象的對象,從而獲得新功能的復用方法。

n         將功能委托給所組合的一個(gè)對象,從而獲得新功能。

n         有些時(shí)候也稱(chēng)之為“聚合”(aggregation)或“包容”(containment),盡管有些作者對這些術(shù)語(yǔ)賦予了專(zhuān)門(mén)的含義

n         例如:

F        聚合:一個(gè)對象擁有另一個(gè)對象或對另一個(gè)對象負責(即一個(gè)對象包含另一個(gè)對象或是另一個(gè)對象的一部分),并且聚合對象和其所有者具有相同的生命周期。(譯者注:即所謂的“同生共死”關(guān)系,可參見(jiàn)GOFDesign Patterns: Elements of Reusable Object-Oriented Software的引言部分。)

F        包容:一種特殊類(lèi)型的組合,對于其它對象而言,容器中的被包含對象是不可見(jiàn)的,其它對象僅能通過(guò)容器對象來(lái)訪(fǎng)問(wèn)被包含對象。(Coad

 

n         包含可以通過(guò)以下兩種方式實(shí)現:

F        根據引用(By reference

F        根據值(By value

n         C++允許根據值或引用來(lái)實(shí)現包含。

n         但是在Java中,一切皆為對象的引用!

組合的優(yōu)點(diǎn)和缺點(diǎn)

n         優(yōu)點(diǎn):

F        容器類(lèi)僅能通過(guò)被包含對象的接口來(lái)對其進(jìn)行訪(fǎng)問(wèn)。

F        “黑盒”復用,因為被包含對象的內部細節對外是不可見(jiàn)。

F        對裝性好。

F        實(shí)現上的相互依賴(lài)性比較小。(譯者注:被包含對象與容器對象之間的依賴(lài)關(guān)系比較少)

F        每一個(gè)類(lèi)只專(zhuān)注于一項任務(wù)。

F        通過(guò)獲取指向其它的具有相同類(lèi)型的對象引用,可以在運行期間動(dòng)態(tài)地定義(對象的)組合。

 

n         缺點(diǎn):

F        從而導致系統中的對象過(guò)多。

F        為了能將多個(gè)不同的對象作為組合塊(composition block)來(lái)使用,必須仔細地對接口進(jìn)行定義。

繼承

n         (類(lèi))繼承是一種通過(guò)擴展一個(gè)已有對象的實(shí)現,從而獲得新功能的復用方法。

n         泛化類(lèi)(超類(lèi))可以顯式地捕獲那些公共的屬性和方法。

n         特殊類(lèi)(子類(lèi))則通過(guò)附加屬性和方法來(lái)進(jìn)行實(shí)現的擴展。

繼承的優(yōu)點(diǎn)和缺點(diǎn)

n         優(yōu)點(diǎn):

F        容易進(jìn)行新的實(shí)現,因為其大多數可繼承而來(lái)。

F        易于修改或擴展那些被復用的實(shí)現。

n         缺點(diǎn):

F        破壞了封裝性,因為這會(huì )將父類(lèi)的實(shí)現細節暴露給子類(lèi)。

F        “白盒”復用,因為父類(lèi)的內部細節對于子類(lèi)而言通常是可見(jiàn)的。

F        當父類(lèi)的實(shí)現更改時(shí),子類(lèi)也不得不會(huì )隨之更改。

F        從父類(lèi)繼承來(lái)的實(shí)現將不能在運行期間進(jìn)行改變。

Coad規則

僅當下列的所有標準被滿(mǎn)足時(shí),方可使用繼承:

n         子類(lèi)表達了“是一個(gè)的特殊類(lèi)型”,而非“是一個(gè)由所扮演的角色”。

n         子類(lèi)的一個(gè)實(shí)例永遠不需要轉化(transmute)為其它類(lèi)的一個(gè)對象。

n         子類(lèi)是對其父類(lèi)的職責(responsibility)進(jìn)行擴展,而非重寫(xiě)或廢除(nullify)。

n         子類(lèi)沒(méi)有對那些僅作為一個(gè)工具類(lèi)(utility class)的功能進(jìn)行擴展。

n         對于一個(gè)位于實(shí)際的問(wèn)題域(Problem Domain)的類(lèi)而言,其子類(lèi)特指一種角色(role),交易(transaction)或設備(device)。

繼承/組合示例1

 

n         “是一個(gè)的特殊類(lèi)型”,而非“是一個(gè)由所扮演的角色”

F        失敗。乘客是人所扮演的一種角色。代理人亦然。

n         永遠不需要轉化

F        失敗。隨著(zhù)時(shí)間的發(fā)展,一個(gè)Person的子類(lèi)實(shí)例可能會(huì )從Passenger轉變成Agent,再到Agent Passenger。

n         擴展,而非重寫(xiě)和廢除

F        通過(guò)。

n         不要擴展一個(gè)工具類(lèi)

F        通過(guò)。

n         在問(wèn)題域內,特指一種角色,交易或設備

F        失敗。Person不是一種角色,交易或設備。

繼承并非適用于此處!

 

使用組合進(jìn)行挽救!

繼承/組合示例2

 

n         “是一個(gè)的特殊類(lèi)型”,而非“是一個(gè)由所扮演的角色”

F        通過(guò)。乘客和代理人都是特殊類(lèi)型的人所扮演的角色。

n         永遠不需要轉化

F        通過(guò)。一個(gè)Passenger對象將保持不變;Agent對象亦然。

n         擴展,而非重寫(xiě)和廢除

F        通過(guò)。

n         不要擴展一個(gè)工具類(lèi)

F        通過(guò)。

n         在問(wèn)題域內,特指一種角色,交易或設備

F        通過(guò)。PersonRole是一種類(lèi)型的角色。

繼承適用于此處!

繼承/組合示例3

 

n         “是一個(gè)的特殊類(lèi)型”,而非“是一個(gè)由所扮演的角色”

F        通過(guò)。預訂和購買(mǎi)都是一種特殊類(lèi)型的交易。

n         永遠不需要轉化

F        通過(guò)。一個(gè)Reservation對象將保持不變;Purchase對象亦然。

n         擴展,而非重寫(xiě)和廢除

F        通過(guò)。

n         不要擴展一個(gè)工具類(lèi)

F        通過(guò)。

n         在問(wèn)題域內,特指一種角色,交易或設備

F        通過(guò)。是一種交易。

繼承適用于此處!

繼承/組合示例4

 

n         “是一個(gè)的特殊類(lèi)型”,而非“是一個(gè)由所扮演的角色”

F        失敗。預訂不是一種特殊類(lèi)型的observable。

n         永遠不需要轉化

F        通過(guò)。一個(gè)Reservation對象將保持不變。

n         擴展,而非重寫(xiě)和廢除

F        通過(guò)。

n         不要擴展一個(gè)工具類(lèi)

F        失敗。Observable就是一個(gè)工具類(lèi)。

n         在問(wèn)題域內,特指一種角色,交易或設備

F        不適用。Observable是一個(gè)工具類(lèi),并非一個(gè)問(wèn)題域的類(lèi)。。

繼承并非適用于此處!

繼承/組合總結

n         組合與繼承都是重要的重用方法

n         OO開(kāi)發(fā)的早期,繼承被過(guò)度地使用

n         隨著(zhù)時(shí)間的發(fā)展,我們發(fā)現優(yōu)先使用組合可以獲得重用性與簡(jiǎn)單性更佳的設計

n         當然可以通過(guò)繼承,以擴充(enlarge)可用的組合類(lèi)集(the set of composable classes)。

n         因此組合與繼承可以一起工作

n         但是我們的基本法則是:

優(yōu)先使用對象組合,而非(類(lèi))繼承

作者:山東 萊州 遇到未來(lái)的自己
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
面向對象設計原則七 - 組合優(yōu)先于繼承 - 森林狼 - JavaEye技術(shù)網(wǎng)站
多態(tài)
面向對象的設計法則
Java必備基礎知識點(diǎn)(超全)
C# 多態(tài)性
任務(wù)6 系統異常處理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久