關注點分離

關注點分離是日常生活和生產中廣泛使用的解決複雜問題的一種系統思維方法。大體思路是,先將複雜問題做合理的分解,再分別仔細研究問題的不同側面(關注點),最后綜合各方面的結果,合成整體的解決方案。在概念上分割整體以使實體個體化的觀點可以追溯到柏拉圖。柏拉圖把探究自然比作在關節處切割自然,竅門在於要找到關節,不要像生疏的屠夫那樣把關節切得粉碎。莊子在庖丁解牛寓言中也闡釋了類似的真知灼見。 作為最重要的計算思維原則之一,關注點分離是計算科學和軟體工程在長期實踐中確立的一項方法論原則。此原則在業界更多的時候以分而治之的面目出現,即將整體看成為部分的組合體並對各部分分別加以處理。模組化是其中最有代表性的具體設計原則之一

簡介

關注點分離(Separation of concerns,SOC)是對只與“特定概念、目標”(關注點)相關聯的軟體組成部分進行“標識、封裝和操縱”的能力,即標識、封裝和操縱關注點的能力。是處理複雜性的一個原則。由於關注點混雜在一起會導致複雜性大大增加,所以能夠把不同的關注點分離開來,分別處理就是處理複雜性的一個原則,一種方法。

關注點分離是面向對象的程式設計的核心概念。分離關注點使得解決特定領域問題的代碼從業務邏輯中獨立出來,業務邏輯的代碼中不再含有針對特定領域問題代碼的調用(將針對特定領域問題代碼抽象化成較少的程式碼,例如將代碼封裝成function或是class),業務邏輯同特定領域問題的關係通過側面來封裝、維護,這樣原本分散在在整個應用程式中的變動就可以很好的管理起來。

實作

面向對象設計,或程式語言提供的模組化提供開發人員選用的SOC機制。例如,C#,C++,Delphi和 Java等面向對象的程式語言可以將關注點分解為物件,像 MVC 或 MVP這樣的架構設計模式,將內容從呈現和數據處理(模型)與內容分開。服務導向的設計可將關注點分解為服務。諸如 C 和 Pascal 之類的程式式程式語言可將關注點分成程式或功能。面向方面的程式語言可以將關注點分解為方面和對象。

在許多其他領域,例如城市規劃、建築,分離關注點也是一個重要的設計原則。目標是更有效地理解,設計和管理許多功能相互依存的複雜系統,以便功能可以重用,獨立於其他功能進行最佳化,並且避免其他功能的潛在故障。常見的例子包括將一個空間分隔成多個房間,這樣一個房間的活動不會影響其他房間的人;或是配電將爐子保持在一個電路,而燈光則保持在另一個電路上,這樣爐子的超載就不會影響燈光。房間分隔的例子顯示了封裝,其中一個房間內的資訊(無論有多混亂)不會用於其他房間,除非通過界面(門是接口)。電路的例子表明,一個模組內部的活動是一個電力消費者附加的電路,不會影響不同模組中的活動,因此每個模組不會額外去關注另一個模組發生的情況。

面向對象程式設計

面向對象程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有對象概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程式的基本單元,將程式和數據封裝其中,以提高軟體的重用性、靈活性和擴展性,對象里的程式可以訪問及經常修改對象相關連的數據。在面向對象程式編程里,電腦程式會被設計成彼此相關的對象。

面向對象程式設計可以看作一種在程式中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對計算機下達的指令。面向對象程式設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。目前已經被證實的是,面向對象程式設計推廣了程式的靈活性和可維護性,並且在大型項目設計中廣為套用。此外,支持者聲稱面向對象程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。

當我們提到面向對象的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。在這一方面,我們必須了解更多關於面向對象系統分析和面向對象設計(Object Oriented Design,簡稱OOD)方面的知識。許多流行的程式語言是面向對象的,它們的風格就是會透由對象來創出實例。

重要的面向對象程式語言包含Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby與PHP等。

相關詞條

相關搜尋

熱門詞條

聯絡我們