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

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

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

開(kāi)通VIP
面向對象設計原則總結

參考博文:http://www.cnblogs.com/shaosks/category/351488.html

面向對象設計的原則主要有:?jiǎn)我宦氊熢瓌t,開(kāi)放封閉原則,里氏替換原則,依賴(lài)倒置原則,迪米特法則,合成/聚合復用原則。下面將對每個(gè)原則做一個(gè)學(xué)習理解與總結,加深對面向對象的理解,促進(jìn)工作中對這些原則的運用。

1、單一職責原則(Single Responsibility Principle  SRP)一個(gè)類(lèi)只做一件事情

There should never be more than one reson for a class to change。也就是說(shuō)引起一個(gè)類(lèi)改變的原因只能有一個(gè),一個(gè)類(lèi)承擔的職責過(guò)多應進(jìn)行分離,使程序設計達到高內聚低耦合的原則。從而使一個(gè)功能的改變只需要修改一個(gè)類(lèi)而不影響到其他的功能。例如作者所說(shuō)的調制解調器,應該將連接和數據傳送兩個(gè)功能分開(kāi)抽象出兩個(gè)接口,而調制解調器同時(shí)實(shí)現這兩個(gè)接口實(shí)現鏈接和數據傳送的功能,因此當鏈接的功能改變時(shí)對數據傳送功能沒(méi)有產(chǎn)生任何影響。

單一職責原則優(yōu)點(diǎn):降低類(lèi)的復雜性,提高可維護性,提高可讀性,降低需求變化帶來(lái)的風(fēng)險。

2、開(kāi)放封閉原則(Open-Closed Principle OCP)面向抽象編程

開(kāi)放封閉原則是所有面向對象原則的核心,要求軟件實(shí)體應對擴展開(kāi)放,對修改封閉。軟件設計本身追求的目標就是封裝變化,降低耦合,而開(kāi)放封閉原則正是對這一目標的直接體現。

開(kāi)放封閉原則的實(shí)現:實(shí)現思想就是對抽象編程,而不是對具體編程,因為抽象相對穩定。讓類(lèi)依賴(lài)于固定的抽象,所以對修改就是封閉的;通過(guò)面向對象的繼承和多態(tài)機制,可以實(shí)現對抽象體的繼承,通過(guò)重寫(xiě)其方法來(lái)改變固定的行為,實(shí)現新的擴展方法,所以對于擴展就是開(kāi)放的。

開(kāi)放封閉主要是兩方面,對擴展開(kāi)放,意味著(zhù)有新的需求或變化時(shí),可以對現有代碼進(jìn)行擴展,以適應新的情況;對修改封閉,意味著(zhù)一旦設計完成,就可以獨立其工作,而不要對類(lèi)進(jìn)行任何修改。

如何實(shí)現耦合度和靈活性兼得呢?那就是抽象,將業(yè)務(wù)功能抽象為接口,當業(yè)務(wù)依賴(lài)于固定的抽象時(shí),對修改就是封閉的,而通過(guò)繼承和多態(tài),從抽象體中擴展出新的實(shí)現,這就是對擴展的開(kāi)放。這樣當業(yè)務(wù)變成時(shí),只需要修改對應的業(yè)務(wù)實(shí)現類(lèi)即可,其他不相干的業(yè)務(wù)就不必修改。當業(yè)務(wù)增加時(shí),只需要增加業(yè)務(wù)的實(shí)現就可以了。

拒絕濫用抽象,只將經(jīng)常變化的部分進(jìn)行抽象。

3、里氏替換原則,(Liskov Substitution Principle LSP)子類(lèi)可以替代父類(lèi)

里氏替換原則講的是基類(lèi)和子類(lèi)的關(guān)系,指任何基類(lèi)可以出現的地方,子類(lèi)一定可以出現。繼承必須保證超類(lèi)中所擁有的性質(zhì)在子類(lèi)中仍然成立,也就是說(shuō)子類(lèi)必須能夠替換成它們的基類(lèi)。Liskov替換原則主要用來(lái)約束繼承的泛濫問(wèn)題。

如果子類(lèi)不能完整的實(shí)現父類(lèi)的方法,建議斷開(kāi)父子繼承關(guān)系,使用依賴(lài),聚合,組合等關(guān)系。

采用里氏替換原則的目的時(shí)增加程序的健壯性,需求變更時(shí)也可以保持良好的兼容性和穩定性,即使增加子類(lèi),原有的子類(lèi)可以繼續運行。在實(shí)際項目中,每個(gè)子類(lèi)對應不同的業(yè)務(wù)含義,使用父類(lèi)作為參數,傳遞不同的子類(lèi)完成不同業(yè)務(wù)邏輯。


4、依賴(lài)倒置原則(Dependence Inversion Principle DIP)依賴(lài)于抽象不依賴(lài)于具體

依賴(lài)倒置原則就是高層模塊不應該依賴(lài)于底層模塊,而這都應該依賴(lài)其抽象。抽象不應該依賴(lài)細節,細節應該依賴(lài)抽象。

抽象:即抽象類(lèi)或接口,是不能實(shí)例化的

細節:即具體的實(shí)現類(lèi),實(shí)現接口或者繼承抽象類(lèi)所產(chǎn)生的累,可通過(guò)關(guān)鍵字new 實(shí)例化。


在實(shí)際編程中我們需要做到三點(diǎn):

  • 底層模塊盡量都要有抽象類(lèi)或者接口,或者兩者都有
  • 變量的聲明類(lèi)型盡量是抽象類(lèi)或者接口
  • 使用繼承時(shí)遵循里氏替換原則

面向過(guò)程的開(kāi)發(fā)是上層調用下層,上層依賴(lài)于下層,當下層劇烈變化時(shí),上層也要跟著(zhù)變化,這樣導致模塊的復用性降低而大大提高了開(kāi)發(fā)成本。面向對象開(kāi)發(fā)解決了這個(gè)問(wèn)題,一般情況下,抽象的變化概率較小,讓用戶(hù)依賴(lài)于抽象,實(shí)現細節也一倆與抽象。即使實(shí)現細節不斷變化,只要抽象不變,客戶(hù)程序就不需要變化,這就大大降低了客戶(hù)域實(shí)現細節的耦合度。

總之,一個(gè)應用的主要策略及業(yè)務(wù)往往集成咋高層模塊中,但是這些模塊依賴(lài)于底層模塊時(shí),底層的修改將直接影響到高層模塊,迫使它們也改變,這是不科學(xué)的。應該時(shí)處于高層的模塊迫使底層的模塊發(fā)生改變,處于高層的模塊應該優(yōu)先于底層的模塊,無(wú)論如何高層模塊也不應該依賴(lài)于底層模塊,而且我們能夠服用的時(shí)高層的模塊,只有高層模塊獨立于底層模塊時(shí),服用才有可能。最終,高層次的模塊不依賴(lài)于底層的模塊,它們都應該依賴(lài)于抽象。抽象不應該依賴(lài)于具體,具體應該依賴(lài)于抽象。

5、迪米特原則(Law of Demeter)又叫最少知識原則(Least  Knowlege Principle LKP)對象與對象之間盡可能少的交互

面向對象來(lái)說(shuō),一個(gè)軟件實(shí)體應盡可能少的與其他實(shí)體發(fā)生相互作用,降低類(lèi)之間的耦合,每個(gè)類(lèi)都盡量減少對其他類(lèi)的依賴(lài),這樣做的結果是很容易實(shí)現模塊的相互獨立,但可能造成一個(gè)后果,系統中存在大量的中介類(lèi),這些類(lèi)用來(lái)傳遞類(lèi)之間的相互調用關(guān)系,一定程度增加了系統復雜度。

迪米特法則在設計模式中的門(mén)面模式(Facade)和中介模式(Mediator)中得到應用。


6、合成復用原則又稱(chēng)組合/聚合服用原則(Composite Reuse Principle CRP)復用時(shí)盡量使用組合/聚合關(guān)系(關(guān)聯(lián)關(guān)系),少用繼承。

合成復用原則就是在一個(gè)新的對象里通過(guò)關(guān)聯(lián)關(guān)系來(lái)使用一些已有的對象,使之成為新對象的一部分,新對象通過(guò)委派調用已有對象的方法達到服用功能的目的。

在面向對象的程序設計中,可以通過(guò)兩種方法在不同的環(huán)境中服用已有的設計和實(shí)現,即通過(guò)組合/聚合或通過(guò)繼承,但首先應考慮使用組合/聚合,組合/聚合使系統更加靈活,降低類(lèi)與類(lèi)之間的耦合度,一個(gè)類(lèi)的變化對其他類(lèi)造成的影響相對較少,其實(shí)考慮繼承,使用繼承時(shí)嚴格遵循里氏替換原則,有效使用繼承會(huì )有助于對問(wèn)題的理解,降低復雜度,而濫用繼承反而增加系統構建與維護難度以及系統的復雜度,因此需要謹慎使用繼承復用。

一般而言,如果兩個(gè)類(lèi)之間時(shí)“Has-a”的關(guān)系應使用組合或聚合,如果是“Is-a”的關(guān)系使用繼承。

合成復用可以在運行時(shí)動(dòng)態(tài)進(jìn)行,新對象可以動(dòng)態(tài)的引用與成員對象類(lèi)型相同的其他對象。


總結,通過(guò)以上對面向對象程序設計中原則的梳理,希望以后代碼過(guò)程中能得到更廣泛的應用,提高代碼質(zhì)量。




本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
S.O.L.I.D 面向對象設計和編程(OOD&OOP)筆記 | Laravel China 社區
GitHub最熱!碼代碼不得不知的所有定律法則
設計模式
對面向對象設計原則的總結 - - CSDN技術(shù)中心
面向對象設計的原則
C# 面向對象
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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