複製鏈接
請複製以下鏈接發送給好友

單一功能原則

鎖定
單一功能原則是一個計算機編程原理,指出每一個模塊應當擁有的一個部分責任的功能由提供軟件,而責任應完全封裝在類。其所有服務應與該責任嚴格一致。羅伯特·C·馬丁(Robert C. Martin)將這一原則表達為“一個班級應該只有一個改變的理由”。
中文名
單一功能原則
性    質
計算機編程原理
領    域
計算機

單一功能原則簡介

面向對象編程領域中,單一功能原則(Single responsibility principle)規定每個類都應該有一個單一的功能,並且該功能應該由這個類完全封裝起來。所有它的(這個類的)服務都應該嚴密的和該功能平行(功能平行,意味着沒有依賴)。
這個術語由羅伯特·C·馬丁(Robert Cecil Martin)在他的《敏捷軟件開發,原則,模式和實踐》一書中的一篇名為〈面向對象設計原則〉的文章中給出。馬丁表述該原則是基於的《結構化分析和系統規格》一書中的內聚原則(Cohesion)上。
馬丁把功能(職責)定義為:“改變的原因”,並且總結出一個類或者模塊應該有且只有一個改變的原因。一個具體的例子就是,想象有一個用於編輯和打印報表的模塊。這樣的一個模塊存在兩個改變的原因。第一,報表的內容可以改變(編輯)。第二,報表的格式可以改變(打印)。這兩方面會的改變因為完全不同的起因而發生:一個是本質的修改,一個是表面的修改。單一功能原則認為這兩方面的問題事實上是兩個分離的功能,因此他們應該分離在不同的類或者模塊裏。把有不同的改變原因的事物耦合在一起的設計是糟糕的。
保持一個類專注於單一功能點上的一個重要的原因是,它會使得類更加的健壯。繼續上面的例子,如果有一個對於報表編輯流程的修改,那麼將存在極大的危險性,因為假設這兩個功能存在於同一個類中,修改報表的編輯流程會導致公共狀態或者依賴關係的改變,打印功能的代碼會因此不工作。 [1] 

單一功能原則關注點分離

關注點分離(Separation of concerns,SOC)是對只與“特定概念、目標”(關注點)相關聯的軟件組成部分進行“標識、封裝和操縱”的能力,即標識、封裝和操縱關注點的能力。是處理複雜性的一個原則。由於關注點混雜在一起會導致複雜性大大增加,所以能夠把不同的關注點分離開來,分別處理就是處理複雜性的一個原則,一種方法。
關注點分離在計算機科學中,是將計算機程序分隔為不同部分的設計原則,是面向對象的程序設計的核心概念。每一部分會有各自的關注焦點。關注焦點是影響計算機程式代碼的一組資訊。關注焦點可以像是將代碼優化過的硬件細節一般,或者像實例化類別的名稱一樣具體。展現關注點分離設計的程序被稱為模組化程序。模組化程度,也就是區分關注焦點,通過將資訊封裝在具有明確界面的程序代碼段落中。封裝是一種資訊隱藏手段。資訊系統中的分層設計是關注點分離的另一個實施例(例如,表示層,業務邏輯層,數據訪問層,維持齊一層)。分離關注點使得解決特定領域問題的代碼從業務邏輯中獨立出來,業務邏輯的代碼中不再含有針對特定領域問題代碼的調用(將針對特定領域問題代碼抽象化成較少的程式碼,例如將代碼封裝成function或是class),業務邏輯同特定領域問題的關係通過側面來封裝、維護,這樣原本分散在整個應用程序中的變動就可以很好的管理起來。
關注點分離的價值在於簡化計算機程序的開發和維護。當關注點分開時,各部分可以重複使用,以及獨立開發和更新。具有特殊價值的是能夠稍後改進或修改一段代碼,而無需知道其他部分的細節必須對這些部分進行相應的更改。 [2] 

單一功能原則內聚性跳到導航跳到搜索

內聚性Cohesion)也稱為內聚力,是一軟件度量,是指機能相關的程序組合成一模塊的程度,或是各機能凝聚的狀態或程度。是結構化分析的重要概念之一。量測內聚性的方式很多,有些方法是由分析源代碼,得到非量化的結果,有些方法則是檢查源代碼的文本特徵,以得到內聚性的量化分數。內聚性是屬於順序式的量測量,一般會以“高內聚性”或“低內聚性”來表示。一般會希望程序的模塊有高內聚性,因為高內聚性一般和許多理想的軟件特性有關,包括魯棒性可靠度可複用性及易懂性(understandability)等特性,而低內聚性一般也代表不易維護、不易測試、不易複用以及難以理解。
耦合性是一個和內聚性相對的概念。一般而言高內聚性代表低耦合性,反之亦然。內聚性是由賴瑞·康斯坦丁所提出,是以實務上可減少維護及修改的“好”軟件的特性為基礎。 [2] 
參考資料
  • 1.    [編輯] 跳轉 ^ Martin, Robert C. Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. 2002
  • 2.    DeMarco, Tom. Structured Analysis and System Specification. Prentice Hall. 1979.