青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

OOD原則:SRP、OCP以及LSP

Posted on 2008-05-14 13:21 RichardHe 閱讀(502) 評論(0)  編輯 收藏 引用 所屬分類: [轉]
單一職責原則(SRP : Single Response Principle)

就一個類而言,應該僅有一個引起它變化的原因。
在這里,職責的定義是: “變化的原因”。

對于何時遵循SRP有以下的考慮:
1.如果應用程序的變化會影響到類中某一種職責,那么就應該將它與另一種職責分開,這樣做可以避免客戶應用程序和類中的這兩職責耦合在一起。
2.如果應用程序的變化總是會導致兩個職責同時變化,那么就不必要分離它們。實際上,分離它們會引起不必要的復雜性。

從上可以得知:變化的軸線僅當變化實際發(fā)生時才具有真正的意義。如果沒有征兆,那么去應用SRP,或者任何其它原則都是不明智。

實際應用:持久化(Persistence)
實 際開發(fā)中,考慮到業(yè)務規(guī)則是會頻繁改變的,而持久化的方式卻不會如此頻繁的變化,并且變化的原因也是完全不同的。如果把業(yè)務規(guī)則和持久化方式綁定到一起, 就會為以后的開發(fā)、維護造成麻煩。運用分層(layer)架構模式或者TDD開發(fā)方式可以很早分離這兩個職責,特殊情況下,還可以使用FACADE或者 PROXY模式對設計進行重構,分離這兩個職責。

開閉原則(OCP : The Open-Close Principle)

描述:軟件實體(類、模型、函數(shù)等等)應該是可以擴展的,但是不可修改。

遵循開閉原則設計出的模塊具有兩個主要的特征。它們是:
1. “對于擴展是開放的”(Open for extension)。
   這意味著模塊的行為是可以擴展的。當應用的需要改變時,我們可以對模塊進行擴展,使其具有滿足那些改變的新行為。換句話說,我們可以改變模塊的功能。
2. “對于更改是封閉的”(Closed for modification)。
   對模塊行為進行擴展時,不必改動模塊的源代碼或者二進制代碼。模塊的二進制可執(zhí)行版本,無論是可鏈接的庫、DLL或者Java的.jar文件,都無需改動。

對于OCP,關鍵的是 抽象
模塊可以操作一個抽象體。由于模塊依賴于一個固定的抽象體,所以它對于更改可以是關閉的。同時,通過從這個抽象體派生,也可以擴展此模塊的行為。

在許多方面,OCP都是面向對象設計的核心所在。但實際應用中,濫用OCP原則也是錯誤的。正確的做法是應該僅僅對程序中呈現(xiàn)出頻繁變化的那些部分做出抽象。拒絕不成熟的抽象和抽象本身一樣重要。


Liskov替換原則(LSP)

描述:子類型(subtype)必須能夠替換掉它們的基類型(base type)。

此原則是Barbara Liskov首次在1988年寫下的。所以就叫做Liskov替換原則。她如此寫到:
“這里需要如下替換性質:若對每個類型S的對象o1,都存在一個類型T的對象o2,使得在所有針對T編寫的程序P中,用o1替換o2后,程序P行為功能不變,則S是T的子類型。

LSP然我們得出一個非常重要的結論:一個模型,如果孤立的看,并不具有真正意義上的有效性。模型的有效性只能通過它的客戶程序來表現(xiàn)。

在考慮一個特定設計是否恰當時,不能完全孤立的來看這個解決方案。必須要根據(jù)該設計的使用者所做出的合理假設來審視它。

有 誰知道設計的使用者會做出什么樣的合理假設呢?大多數(shù)這樣的假設都很難預測。事實上,如果試圖去預測所有這些假設,我們所得到的系統(tǒng)很可能會充滿不必要的 復雜性的臭味。因此,像所有其它原則一樣了,通常最好的辦法就是只預測那些最明顯的對于LSP的違反情況,而推遲所有其它的預測,直到出現(xiàn)相關的脆弱性的 臭味時,才去處理它們。

IS-A是關于行為的。
LSP清晰的指出,OOD中IS-A關系是就行為方式而言的,行為方式是可以進行合理假設的,是客戶程序所依賴的。

基于契約設計
基 于契約設計(DBC:Design By Contract)。使用DBC,類的編寫者能夠顯式的規(guī)定針對該類的契約。客戶代碼的編寫者可以通過該契約獲悉可以依賴的行為方式。契約是通過為每個方 法聲明的前置條件(preconditions)和后置條件(postconditions)來指定的。要使一個方法得以執(zhí)行,前置條件必須要為真。執(zhí)行 完畢后,該方法要保證后置條件為真。

在單元測試中指定契約
也可以通過編寫單元測試的方式來指定契約。客戶代碼編寫者會去查看這些單元測試,這樣他們就可以知道對于要使用的類,應該做什么合理的假設。

啟發(fā)式規(guī)則和習慣用法

1.派生類中的退化函數(shù)
  在基類中實現(xiàn)了f()方法,在派生類中的函數(shù)f()就是退化的,派生類中的退化函數(shù)并不總表示為違反LSP,但是當存在這種情況時,還是值得注意一下的。
2.從派生類中拋出異常
  在派生類的方法中添加了其基類不會拋出的異常。如果基類的使用者不期望這些異常,那么把它們添加到派生類的方法中就會導致不可替換性。此時要遵循LSP,要么就必須改變使用者的期望,要么派生類就不應該拋出這些異常。

總 結:OCP是OOD中很多原則的核心。如果這個原則應用的有效,應用程序就會具有更多的可維護性、可重用性以及健壯性。LSP是使OCP成為可能的主要原 則之一。正是子類型的可替換性才使得使用基類類型的模塊在無需修改的情況下就可以擴展。這種可替換性必須是開發(fā)人員可以隱式依賴的。因此,如果沒有顯式的 強制基類類型的契約,那么代碼就必須良好的并且明顯的表達出這一點。
      術語IS-A的含義過于廣泛以至于不能作為子類型的定義。子類型的正確定義是“可替換性”,這里的可替換性可以通過顯式或者隱式的契約來定義。

posts - 94, comments - 138, trackbacks - 0, articles - 94

Copyright © RichardHe

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品资源在线观看| 亚洲国产成人久久综合一区| 国产麻豆成人精品| 久久久亚洲一区| 91久久中文字幕| 亚洲婷婷国产精品电影人久久| 亚洲日本激情| 欧美在线视频免费播放| 国产精品视频免费观看www| 国产一区二区三区久久| 欧美久久电影| 99re66热这里只有精品4| 久久久噜噜噜久久中文字幕色伊伊| 久久色中文字幕| 欧美经典一区二区三区| 免费成人性网站| 国产亚洲精品7777| 午夜欧美精品| 欧美在线免费视频| 国产精品女主播在线观看| 亚洲一区精品电影| 日韩网站在线看片你懂的| 久久久精品网| 小黄鸭精品aⅴ导航网站入口| 国产日韩一区二区三区在线播放 | 狠狠色狠狠色综合人人| 鲁鲁狠狠狠7777一区二区| 亚洲大片在线| 午夜激情一区| 激情欧美一区二区三区| 欧美日韩国产三区| 久久久高清一区二区三区| 日韩视频在线观看免费| 麻豆国产精品777777在线 | 欧美在线看片| 最新日韩av| 国产亚洲一区在线| 欧美精品国产一区| 亚洲视频在线看| 欧美美女喷水视频| 欧美精品亚洲二区| 美女尤物久久精品| 性8sex亚洲区入口| 亚洲人成在线免费观看| 99国内精品久久| 一区二区高清视频| 亚洲理论在线观看| 久久米奇亚洲| 午夜宅男欧美| 国产精品区一区二区三区| 91久久精品国产91久久| 一区二区三区黄色| 亚洲精品国产拍免费91在线| 99热这里只有精品8| 国产一区清纯| 99视频在线精品国自产拍免费观看| 最新精品在线| 久久久久久伊人| 另类春色校园亚洲| 国产一区二区精品久久91| 欧美xxx成人| 亚洲精选视频在线| 亚洲欧美偷拍卡通变态| 国产精品亚洲а∨天堂免在线| 亚洲视频每日更新| 免费观看成人| 久久精品国产2020观看福利| 国内精品久久久久久久影视蜜臀| 蜜臀99久久精品久久久久久软件| 欧美一乱一性一交一视频| 亚洲高清自拍| 亚洲第一区在线| 亚洲免费精彩视频| 亚洲电影欧美电影有声小说| 久久精品论坛| 欧美在线啊v| 一区二区三区欧美在线| 一区二区三区高清不卡| 亚洲成人在线免费| 亚洲社区在线观看| 艳女tv在线观看国产一区| 欧美不卡视频一区发布| 亚洲午夜成aⅴ人片| 久久久国产一区二区| 亚洲欧洲av一区二区三区久久| 久久激五月天综合精品| 亚洲人成小说网站色在线| 亚洲男人av电影| 亚洲高清不卡一区| 久久婷婷丁香| 亚洲黄色成人| 欧美一区二区三区另类| 一区二区三区日韩精品| 欧美专区日韩专区| 一区二区三区精品| 美女日韩在线中文字幕| 久久黄色小说| 国产精品永久免费| 久久综合久色欧美综合狠狠| 国产欧美日韩专区发布| 亚洲日本在线观看| 一本色道久久99精品综合| 欧美一区二区视频观看视频| 午夜精品福利在线| 欧美日韩在线免费视频| 99精品视频免费在线观看| 在线视频欧美一区| 男人插女人欧美| 久久综合九色综合欧美就去吻 | 国产乱码精品一区二区三区不卡 | 欧美日产一区二区三区在线观看| 国内精品伊人久久久久av影院| 亚洲免费中文| av成人免费在线| 欧美日韩亚洲一区三区| 久久久www成人免费无遮挡大片 | 亚洲欧美一区二区三区极速播放| 亚洲精品在线电影| 国产精品一区二区黑丝| 欧美风情在线观看| 一区二区三区高清在线| 久久精品国产v日韩v亚洲| 国产精品视频一区二区三区| 女人天堂亚洲aⅴ在线观看| 亚洲视频1区| 亚洲国产精品成人综合| 亚洲欧美日韩国产成人精品影院| 中日韩美女免费视频网址在线观看| 国产麻豆日韩欧美久久| 欧美日韩精品在线视频| 久久精品国产一区二区三区免费看| 亚洲一级黄色| 麻豆精品在线视频| 欧美在线播放一区二区| 亚洲少妇在线| 亚洲午夜一级| 99精品国产福利在线观看免费| 国产日韩成人精品| 国产精品福利影院| 欧美午夜精品久久久久免费视| 欧美大香线蕉线伊人久久国产精品| 欧美一区二区三区免费视| 一本色道久久综合亚洲精品不 | 国产欧美精品va在线观看| 欧美在线视屏| 蜜桃精品久久久久久久免费影院| 欧美亚洲日本一区| 久久中文在线| 欧美日韩高清不卡| 国内久久精品| 亚洲人成网站色ww在线| 亚洲国产日韩欧美在线动漫| 一区精品在线播放| 激情丁香综合| 亚洲视频一区二区在线观看| 久久久精品午夜少妇| 欧美99在线视频观看| 久久综合久色欧美综合狠狠| 亚洲国产精品一区制服丝袜| 91久久久亚洲精品| 欧美一区二区日韩| 欧美成人网在线| 黄色资源网久久资源365| 亚洲精品欧美日韩专区| 欧美一区二区三区在线| 亚洲人成网站在线观看播放| 香蕉免费一区二区三区在线观看| 欧美日韩一区国产| 亚洲三级免费| 蜜桃视频一区| 免费在线看成人av| 极品av少妇一区二区| 午夜视频在线观看一区二区| 亚洲国产第一页| 久久黄色影院| 亚洲国产精品成人综合| 久久久视频精品| 亚洲一区免费视频| 国产精品久久久久久久第一福利| 91久久精品国产91久久性色tv| 久久久天天操| 欧美mv日韩mv国产网站| 精品福利av| 欧美日韩福利在线观看| 国产精品国产三级国产普通话蜜臀 | 亚洲美女免费精品视频在线观看| 久久高清国产| 久久综合九色综合久99| 尤物精品在线| 99精品国产一区二区青青牛奶| 欧美成年人网站| 亚洲欧美三级在线| 久久不射中文字幕| 亚洲调教视频在线观看| 欧美专区福利在线| 亚洲午夜在线视频| 欧美与黑人午夜性猛交久久久| 国产亚洲精品久久久| 99国内精品久久| 亚洲人成网站在线观看播放|