亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

一些面向對象的設計法則(1)

2019-11-18 11:55:27
字體:
來源:轉載
供稿:網友

  法則1:優先使用(對象)組合,而非(類)繼續
  
  [ Favor Composition Over Inheritance ]
  
  
  
  
  
  
  
  
  組合
  
  
  
  
  
  
  1.(對象)組合是一種通過創建一個組合了其它對象的對象,從而獲得新功能的復用方法。
  
  2.將功能委托給所組合的一個對象,從而獲得新功能。
  
  3.有些時候也稱之為"聚合"(aggregation)或"包容"(containment),盡管有些作者對這些術語賦予了專門的含義
  
  4.例如:
  
  a.聚合:一個對象擁有另一個對象或對另一個對象負責(即一個對象包含另一個對象或是另一個對象的一部分),并且聚合對象和其所有者具有相同的生命周期。(譯者注:即所謂的"同生共死"關系,可參見GOF的Design
  Patterns: Elements of Reusable Object-Oriented Software的引言部分。)
  
  b.包容:一種非凡類型的組合,對于其它對象而言,容器中的被包含對象是不可見的,其它對象僅能通過容器對象來訪問被包含對象。(Coad)
  
  
  
  
  
  
  
  
  5.包含可以通過以下兩種方式實現:
  
  a.根據引用(By reference)
  
  b.根據值(By value)
  
  6.C++答應根據值或引用來實現包含。
  
  7.但是在java中,一切皆為對象的引用!
  
  
  
  
  
  
  
  
  
  組合的優點和缺點
  
  
  
  
  
  
  
  
  
  1.優點:
  
  a.容器類僅能通過被包含對象的接口來對其進行訪問。
  
  b."黑盒"復用,因為被包含對象的內部細節對外是不可見。
  
  c.對裝性好。
  
  d.實現上的相互依靠性比較小。(譯者注:被包含對象與容器對象之間的依靠關系比較少)
  
  e.每一個類只專注于一項任務。
  
  f.通過獲取指向其它的具有相同類型的對象引用,可以在運行期間動態地定義(對象的)組合。
  
  
  
  
  
  
  
  2.缺點:
  
  a.從而導致系統中的對象過多。
  
  b為了能將多個不同的對象作為組合塊(composition block)來使用,必須仔細地對接口進行定義。
  
  
  
  
  
  
  
  
  
  繼續
  
  
  
  
  
  
  1.(類)繼續是一種通過擴展一個已有對象的實現,從而獲得新功能的復用方法。
  
  2.泛化類(超類)可以顯式地捕捉那些公共的屬性和方法。
  
  3.非凡類(子類)則通過附加屬性和方法來進行實現的擴展。
  
  
  
  
  
  
  
  
  
  
  繼續的優點和缺點
  
  
  
  
  
  
  1.優點:
  
  a.輕易進行新的實現,因為其大多數可繼續而來。
  
  b.易于修改或擴展那些被復用的實現。
  
  2.缺點:
  
  a.破壞了封裝性,因為這會將父類的實現細節暴露給子類。
  
  b. "白盒"復用,因為父類的內部細節對于子類而言通常是可見的。
  
  c.當父類的實現更改時,子類也不得不會隨之更改。
  
  d.從父類繼續來的實現將不能在運行期間進行改變。
  
  
  
  
  
  
  
  
  
  
  Coad規則
  
  
  
  
  
  
  僅當下列的所有標準被滿足時,方可使用繼續:
  
  a.子類表達了"是一個…的非凡類型",而非"是一個由…所扮演的角色"。
  
  b子類的一個實例永遠不需要轉化(transmute)為其它類的一個對象。
  
  c.子類是對其父類的職責(responsibility)進行擴展,而非重寫或廢除(nullify)。
  
  d.子類沒有對那些僅作為一個工具類(utility class)的功能進行擴展。
  
  e.對于一個位于實際的問題域(PRoblem Domain)的類而言,其子類特指一種角色(role),交易(transaction)或設備(device)。
  
  
  
  繼續/組合示例1
  
   一些面向對象的設計法則(1)(圖一)
  
  1."是一個…的非凡類型",而非"是一個由…所扮演的角色"
  
  -->失敗。乘客是人所扮演的一種角色。代理人亦然。
  
  2.永遠不需要轉化
  
  -->失敗。隨著時間的發展,一個Person的子類實例可能會從Passenger轉變成Agent,再到Agent Passenger。
  
  3.擴展,而非重寫和廢除
  
  -->通過。
  
  4.不要擴展一個工具類
  
  -->通過。
  
  5.在問題域內,特指一種角色,交易或設備
  
  -->失敗。Person不是一種角色,交易或設備。
  
  
  
  
  
  
  
  
  
  繼續并非適用于此處!
  
  
  
  使用組合進行拯救!
  
  
   一些面向對象的設計法則(1)(圖二)
  
  繼續/組合示例2
  
   一些面向對象的設計法則(1)(圖三)
  
  1."是一個…的非凡類型",而非"是一個由…所扮演的角色"
  
  -->通過。乘客和代理人都是非凡類型的人所扮演的角色。
  
  2.永遠不需要轉化
  
  -->通過。一個Passenger對象將保持不變;Agent對象亦然。
  
  3.擴展,而非重寫和廢除
  
  -->通過。
  
  4.不要擴展一個工具類
  
  -->通過。
  
  5.在問題域內,特指一種角色,交易或設備
  
  -->通過。PersonRole是一種類型的角色。
  
  
  
  
  
  
  
  
  
  繼續適用于此處!
  
  
  
  
  
  
  
  
  
  繼續/組合示例3
  
   一些面向對象的設計法則(1)(圖四)
  
  1."是一個…的非凡類型",而非"是一個由…所扮演的角色"
  
  -->通過。預訂和購買都是一種非凡類型的交易。
  
  2.永遠不需要轉化
  
  -->通過。一個Reservation對象將保持不變;Purchase對象亦然。
  
  3.擴展,而非重寫和廢除
  
  -->通過。
  
  4.不要擴展一個工具類
  
  -->通過。
  
  5.在問題域內,特指一種角色,交易或設備
  
  -->通過。是一種交易。
  
  
  
  
  
  
  
  
  
  繼續適用于此處!
  
  
  
  
  
  
  
  
  
  繼續/組合示例4
  
  一些面向對象的設計法則(1)(圖五)
  
  1."是一個…的非凡類型",而非"是一個由…所扮演的角色"
  
  -->失敗。預訂不是一種非凡類型的observable。
  
  2.永遠不需要轉化
  
  -->通過。一個Reservation對象將保持不變。
  
  3.擴展,而非重寫和廢除
  
  -->通過。
  
  4.不要擴展一個工具類
  
  -->失敗。Observable就是一個工具類。
  
  5.在問題域內,特指一種角色,交易或設備
  
  -->不適用。Observable是一個工具類,并非一個問題域的類。。
  
  
  
  
  
  
  
  
  
  繼續并非適用于此處!
  
  
  
  
  
  
  
  
  
  繼續/組合總結
  
  
  
  
  
  
  1.組合與繼續都是重要的重用方法
  
  2.在OO開發的早期,繼續被過度地使用
  
  3.隨著時間的發展,我們發現優先使用組合可以獲得重用性與簡單性更佳的設計
  
  4.當然可以通過繼續,以擴充(enlarge)可用的組合類集(the set of composable classes)。
  
  5.因此組合與繼續可以一起工作
  
  6.但是我們的基本法則是:
  
  優先使用對象組合,而非(類)繼續
  
  [ Favor Composition Over Inheritance ]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影免费观看高清完整版| 国产精彩精品视频| 在线播放日韩专区| 国产97在线|日韩| 欧美在线激情视频| 久久久国产精彩视频美女艺术照福利| 91精品久久久久久久久久| 91av在线视频观看| 亚洲欧美一区二区三区在线| 国产精品中文久久久久久久| 最近中文字幕mv在线一区二区三区四区| 欧美精品激情视频| 美日韩精品免费观看视频| 国产日韩亚洲欧美| 在线精品视频视频中文字幕| 一区二区三区四区在线观看视频| 中文字幕欧美日韩在线| 久久精品国产91精品亚洲| 狠狠躁夜夜躁人人爽超碰91| 亚洲人午夜精品| 国产欧美精品一区二区三区介绍| 国产精品丝袜久久久久久高清| 日韩美女av在线免费观看| 亚洲免费电影在线观看| 中文字幕日韩免费视频| 久久伊人精品视频| 久久久欧美精品| 国产精品27p| 中文字幕国产精品| 免费av一区二区| 91精品久久久久久综合乱菊| 亚洲美女av在线| 久久久久久久成人| 91亚洲一区精品| 最近中文字幕2019免费| 国产精品偷伦免费视频观看的| 亚洲第一区在线观看| 97免费在线视频| 欧美成人在线免费视频| 亚洲激情视频网| 欧美精品国产精品日韩精品| 狠狠躁夜夜躁久久躁别揉| 欧美中文字幕在线播放| 欧美成人精品h版在线观看| 国产亚洲欧洲黄色| 美女精品久久久| 亚洲精品mp4| 色中色综合影院手机版在线观看| 久久久国产一区| 亚洲欧美国产日韩天堂区| 国产精品色午夜在线观看| 亚洲黄页网在线观看| 日韩黄色在线免费观看| 中文字幕欧美专区| 欧美成人免费全部观看天天性色| 欧美激情国内偷拍| 亚洲男人天堂九九视频| 精品免费在线视频| 国产成人小视频在线观看| 色偷偷av亚洲男人的天堂| 亚洲一区二区三区777| 久久综合久久88| 国产午夜精品视频| 亚洲国产美女精品久久久久∴| 久久伊人精品一区二区三区| 久久久久久18| 亚洲成人中文字幕| 国产欧美精品一区二区| 91av在线看| 亚洲免费av电影| 久久色在线播放| 18一19gay欧美视频网站| 91国产精品视频在线| 成人激情在线播放| 国产精品久久久久久久久久久久久| 精品国产网站地址| 清纯唯美亚洲综合| 国产精品视频一| 国产欧美精品日韩精品| 久久99青青精品免费观看| 欧美一区三区三区高中清蜜桃| 国产不卡av在线| 国产精品美女www| 成人国产精品av| 亚洲精品av在线| 亚洲欧美日韩精品久久亚洲区| 91人人爽人人爽人人精88v| 欧美性jizz18性欧美| 欧美性色视频在线| 91精品国产91久久久久久不卡| 亚洲日韩中文字幕在线播放| 国产成+人+综合+亚洲欧洲| 亚洲午夜色婷婷在线| 亚洲视频一区二区三区| 成人免费午夜电影| 亚洲精品资源美女情侣酒店| 精品久久久久久久久中文字幕| 国产99久久精品一区二区永久免费| 国产噜噜噜噜久久久久久久久| 性欧美xxxx交| 欧美激情国内偷拍| 亚洲乱码一区二区| www.精品av.com| www.xxxx欧美| 日韩中文字幕网站| 日韩精品中文字幕有码专区| 欧洲亚洲妇女av| 亚洲午夜女主播在线直播| 国产精品美腿一区在线看| 中文字幕亚洲欧美在线| 欧美性生交xxxxxdddd| 亚洲成人av中文字幕| 日韩中文字幕久久| 国产精品白丝av嫩草影院| 国产精品88a∨| 97人洗澡人人免费公开视频碰碰碰| 国产欧美一区二区三区在线看| 亚洲综合精品一区二区| 国产精品www色诱视频| 亚洲伊人成综合成人网| 狠狠躁夜夜躁人人爽天天天天97| 亚洲尤物视频网| 国产精品高潮视频| 中文字幕久热精品视频在线| 日本亚洲欧洲色α| 国产成人精品免高潮在线观看| …久久精品99久久香蕉国产| 日韩av手机在线| 欧洲亚洲在线视频| 国产精品十八以下禁看| 日本精品视频在线观看| 亚洲国产另类久久精品| 欧美在线性爱视频| 日本人成精品视频在线| 国产91色在线免费| 国产精品久久久久久搜索| 超碰精品一区二区三区乱码| 精品国产美女在线| 欧美精品免费看| 91精品国产91久久久久| 国产欧美日韩视频| 欧美另类暴力丝袜| 日韩成人av网址| 91在线观看免费高清完整版在线观看| 欧美在线一级va免费观看| 91在线网站视频| 国产美女精品视频| 亚洲欧美成人在线| 亚洲欧美国产日韩中文字幕| 国产视频久久久| 有码中文亚洲精品| 精品视频偷偷看在线观看| 91精品国产91| 国产亚洲精品美女| 日韩精品免费视频| 国产成人精品亚洲精品| 欧美激情三级免费| 国产亚洲一区精品| 亚洲人精品午夜在线观看| 亚洲韩国欧洲国产日产av| 国产成人欧美在线观看| 最新的欧美黄色| 性欧美激情精品| 青草热久免费精品视频|