1. 程式人生 > >面向物件設計的五個基本原則

面向物件設計的五個基本原則

面向物件的3個基本要素:封裝、繼承、多型

面向物件的5個基本設計原則:

單一職責原則(Single-Resposibility Principle)

    其核心思想為:一個類,最好只做一件事,只有一個引起它的變化。單一職責原則可以看做是低耦合、高內聚在面向物件原則上的引申,將職責定義為引起變化的原因,以提高內聚性來減少引起變化的原因。職責過多,可能引起它變化的原因就越多,這將導致職責依賴,相互之間就產生影響,從而大大損傷其內聚性和耦合度。通常意義下的單一職責,就是指只有一種單一功能,不要為類實現過多的功能點,以保證實體只有一個引起它變化的原因。
    專注,是一個人優良的品質;同樣的,單一也是一個類的優良設計。交雜不清的職責將使得程式碼看起來特別彆扭牽一髮而動全身,有失美感和必然導致醜陋的系統錯誤風險。

開放封閉原則(Open-Closed principle)

    其核心思想是:軟體實體應該是可擴充套件的,而不可修改的。也就是,對擴充套件開放,對修改封閉的。開放封閉原則主要體現在兩個方面1、對擴充套件開放,意味著有新的需求或變化時,可以對現有程式碼進行擴充套件,以適應新的情況。2、對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對其進行任何嘗試的修改。
    實現開開放封閉原則的核心思想就是對抽象程式設計,而不對具體程式設計,因為抽象相對穩定。讓類依賴於固定的抽象,所以修改就是封閉的;而通過面向物件的繼承和多型機制,又可以實現對抽象類的繼承,通過覆寫其方法來改變固有行為,實現新的拓展方法,所以就是開放的。
    “需求總是變化”沒有不變的軟體,所以就需要用封閉開放原則來封閉變化滿足需求,同時還能保持軟體內部的封裝體系穩定,不被需求的變化影響。

Liskov替換原則(Liskov-Substituion Principle)

    其核心思想是:子類必須能夠替換其基類。這一思想體現為對繼承機制的約束規範,只有子類能夠替換基類時,才能保證系統在執行期內識別子類,這是保證繼承複用的基礎。在父類和子類的具體行為中,必須嚴格把握繼承層次中的關係和特徵,將基類替換為子類,程式的行為不會發生任何變化。同時,這一約束反過來則是不成立的,子類可以替換基類,但是基類不一定能替換子類。
    Liskov替換原則,主要著眼於對抽象和多型建立在繼承的基礎上,因此只有遵循了Liskov替換原則,才能保證繼承複用是可靠地。實現的方法是面向介面程式設計:將公共部分抽象為基類介面或抽象類,通過Extract Abstract Class,在子類中通過覆寫父類的方法實現新的方式支援同樣的職責。
    Liskov替換原則是關於繼承機制的設計原則,違反了Liskov替換原則就必然導致違反開放封閉原則。
    Liskov替換原則能夠保證系統具有良好的拓展性,同時實現基於多型的抽象機制,能夠減少程式碼冗餘,避免執行期的型別判別。

依賴倒置原則(Dependecy-Inversion Principle)

    其核心思想是:依賴於抽象。具體而言就是高層模組不依賴於底層模組,二者都同依賴於抽象;抽象不依賴於具體,具體依賴於抽象。
    我們知道,依賴一定會存在於類與類、模組與模組之間。當兩個模組之間存在緊密的耦合關係時,最好的方法就是分離介面和實現:在依賴之間定義一個抽象的介面使得高層模組呼叫介面,而底層模組實現介面的定義,以此來有效控制耦合關係,達到依賴於抽象的設計目標。
    抽象的穩定性決定了系統的穩定性,因為抽象是不變的,依賴於抽象是面向物件設計的精髓,也是依賴倒置原則的核心。
    依賴於抽象是一個通用的原則,而某些時候依賴於細節則是在所難免的,必須權衡在抽象和具體之間的取捨,方法不是一層不變的。依賴於抽象,就是對介面程式設計,不要對實現程式設計。

介面隔離原則(Interface-Segregation Principle)

    其核心思想是:使用多個小的專門的介面,而不要使用一個大的總介面。
    具體而言,介面隔離原則體現在:介面應該是內聚的,應該避免“胖”介面。一個類對另外一個類的依賴應該建立在最小的介面上,不要強迫依賴不用的方法,這是一種介面汙染。
    介面有效地將細節和抽象隔離,體現了對抽象程式設計的一切好處,介面隔離強調介面的單一性。而胖介面存在明顯的弊端,會導致實現的型別必須完全實現介面的所有方法、屬性等;而某些時候,實現型別並非需要所有的介面定義,在設計上這是“浪費”,而且在實施上這會帶來潛在的問題,對胖介面的修改將導致一連串的客戶端程式需要修改,有時候這是一種災難。在這種情況下,將胖介面分解為多個特點的定製化方法,使得客戶端僅僅依賴於它們的實際呼叫的方法,從而解除了客戶端不會依賴於它們不用的方法。
    分離的手段主要有以下兩種:1、委託分離,通過增加一個新的型別來委託客戶的請求,隔離客戶和介面的直接依賴,但是會增加系統的開銷。2、多重繼承分離,通過介面多繼承來實現客戶的需求,這種方式是較好的。

    以上就是5個基本的面向物件設計原則,它們就像面向物件程式設計中的金科玉律,遵守它們可以使我們的程式碼更加鮮活,易於複用,易於拓展,靈活優雅。不同的設計模式對應不同的需求,而設計原則則代表永恆的靈魂,需要在實踐中時時刻刻地遵守。就如ARTHUR J.RIEL在那邊《OOD啟示錄》中所說的:“你並不必嚴格遵守這些原則,違背它們也不會被處以宗教刑罰。但你應當把這些原則看做警鈴,若違背了其中的一條,那麼警鈴就會響起。”

相關推薦

Java面向物件基本原則

參考部落格:Ask馬小向的專欄,網址:http://blog.csdn.net/happymatilian/article/details/48440073 1  單一職責原則(Single-Responsibility Principle):就一個類而言,應該僅有一個引

面向物件的三基本特徵和設計原則

面向物件的三個基本特徵 抽象與封裝: 抽象是把系統中需要處理的資料和在這些資料上的操作結合在一起,根據功能、性質和用途等因素抽象成不同的抽象資料型別。每個抽象資料型別既包含了資料,又包含了針對這些資料的授權操作。在面向物件的程式設計中,抽象資料型別是用“類”

面向物件設計基本原則

面向物件的3個基本要素:封裝、繼承、多型 面向物件的5個基本設計原則: 單一職責原則(Single-Resposibility Principle)     其核心思想為:一個類,最好只做一件事,只有一個引起它的變化。單一職責原則可以看做是低耦合、高內聚在面向物件原

面向物件的三基本特徵和設計原則

面向物件的精神:可維護、可擴充套件、可複用、靈活性好。 三個基本特徵【封裝、繼承、多型】 封裝:每個物件都包含它能進行操作所需要的所有資訊,這個特性稱為封裝。 因為物件不必依賴其他物件來完成自己的操作,這樣方法和屬性包裝在類中,通過類的例項來實現。 封裝的好處:1、良好

面向物件的三基本特徵 和 設計原則

一、三個基本特徵 面向物件的三個基本特徵是:封裝、繼承、多型。 封裝 封裝最好理解了。封裝是面向物件的特徵之一,是物件和類概念的主要特性。 封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。 繼承 面向物件程式設計 (OOP) 語言的一個

SOLID:面向物件設計基本原則

在程式設計領域,SOLID 是由羅伯特·C·馬丁在 21 世紀早期引入的記憶術首字母縮略字,指代了面向物件程式設計和麵向物件設計的五個基本原則。當這些原則被一起應用時,它們使得一個程式設計師開發一個容易進行軟體維護和擴充套件的系統變得更加可能。**SOLID** 是以下五個單詞的縮寫: - Single R

SOLID面向物件設計原則

單一職責原則(Single Resposibility Principle) 開放封閉原則(Open Closed principle) 里氏替換原則(Liskov Substitution Principle) 介面分離原則(Interface Segregation Prin

面向物件的四基本特徵和七大設計原則

複習一哈~ 基本特徵抽象 將一些事物的共性抽離出來歸為一個類。 如對於動物,具有生命體徵、活動能力等區別於其它事物的共同特徵 封裝 有選擇地隱藏和暴露資料和方法 比如有U盤這個類,我希望隱藏內部組成和實現,只暴露USB介面以供使用 繼承 子類可以直接使用父類的部分資料和方法,可以

c++ 面向物件設計基本原則

類設計五項基本原則 原則: 單一職責原則 開放封閉原則 Liskov替換原則 依賴倒置原則 介面隔離原則 第8章 單一職責原則 ( SRP ) 就一個類而言.應該僅有一個引起它變化的原因.   一個class就其整體應該只提供單一的服務 如果一個class提供多樣的服務,那麼就應該把它拆分,反之,如果一個

面向物件的三基本元素,基本原則

三個基本元素: 1. 封裝: 封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。2. 繼承: 繼承是一種聯結類的層次模型,並且允許和鼓勵

面向物件的三基本要素,基本原則

文章摘自http://blog.csdn.net/Lee_Xq_/article/details/38994047 在C++ primer及相關書籍中未看到過這個知識點,特此記錄一下。 三個基本元素:         封裝、繼承和多型。 1. 封裝: 封裝是把過程和資料包

面向對象的三基本元素,基本原則

pro mark 基本 ocs color 技術分享 b- ima docs 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見: https://www.yuque.com/docs/share/3e942cb0-f659-435b-ad0e-5fbd2d4a89e7面

【JAVA】面向物件設計原則

    程式設計編碼理論上只要跑得起來就沒有問題了,但實際上程式是為需求服務的,需求無時無刻都有可能變更,程式也需要做出相應改變,這時如果程式設計混亂,那麼大多數時候都是沒有辦法輕微改動程式就達到需求目標的,而此時給程式大開刀也不允許,最後進入了兩難境地。所以最好一開始就

[紙上談兵]面向物件的5編碼原則

一、多聚合,少繼承.高內聚、低耦合 高內聚、低耦合 內聚:每個模組儘可能獨立完成自己的功能,不依賴於模組外部的程式碼。 耦合:模組與模組之間介面的複雜程度,模組之間聯絡越複雜耦合度越高,牽一髮而動全身。 目的:使得模組的“可重用性”、“移植性”大

面向物件設計之開放-封閉原則(Open

開放-封閉原則: 對擴充套件開放,對修改關閉,既軟體實體應儘量在不修改原始碼的情況下進行擴充套件 。  好處: 高內聚,低耦合。 降低了各程式之間的耦合性,抽象化設計是開閉原則的關鍵。

面向物件程式設計的六大基本原則

面向物件六大原則 單一原則:每一個類或者一個方法只有一個功能,或者是隻有一個重要的功能 開閉原則:對於類的拓展是開放的,修改是關閉的(儘量不要修改之前的程式碼) 里氏替換原則:在使用父類的任何地方都可以使用子類,並且不影響程式的執行。 依賴倒置原則:高模組和低模組都應

面向物件的三基本特徵是:封裝、繼承、多型。(詳解示例)

什麼是封裝:  封裝是實現面向物件程式設計的第一步,封裝就是將資料或函式等集合在一個個的單元中(我們稱它為類)。被封裝的物件通常被稱為抽象資料型別。也可以稱作抽象,將現實中的資料抽象成為資料型別 封裝的意義:   封裝的意義在於保護或者防止程式碼(資料)被我們無意中破壞。

java面向物件程式設計的六大基本原則

1.開閉原則(Open Close Principle) 定義:一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。 開放-封閉原則的意思就是說,你設計的時候,時刻要考慮,儘量讓這個類是足夠好,寫好了就不要去修改了,如果新需求來,我們增加一些類就完事了,原來的

面向物件的感念和基本原則

三大特性是:封裝,繼承,多型 所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。封裝是面向物件的特徵之一,是物件和類概念的主要特性。 簡單的說,一個類就是一個封裝了資料以及操作這些資料的程式

面向物件設計的11條原則

[size=large]面向物件設計是什麼?都包含了哪些內容?它所帶來的好處是什麼?需要你為之付出些什麼?在如今這個年代,問這些問題似乎顯得很愚蠢,因為這年頭幾乎每位軟體開發人員都知道如何使用某種面向物件程式語言。可是這個問題還是很重要,因為在我看來,絕大多數人在使用這些語言