軟件架構設計的目的簡單說就是在保持軟件內在聯系的前提下,分解軟件系統,降低軟件系統開發的復雜性,而分解軟件系統的基本方法無外乎分層和分割。但是在保持軟件內在聯系的前提下,如何分層分割系統,分層分割到什么樣的粒度,并不是一件容易的事,這方面有各種各樣的分解方法,比如:關注點分離,面向方面,面向對象,面向接口,面向服務,依賴注入,以及各種各樣的設計原則等,
耦合可以分為以下幾種,它們之間的耦合度由高到低排列如下:
(1) 內容耦合:一個模塊直接訪問另一模塊的內容,則稱這兩個模塊為內容耦合。
若在程序中出現下列情況之一,則說明兩個模塊之間發生了內容耦合:
1. 一個模塊直接訪問另一個模塊的內部數據。
2. 一個模塊不通過正常入口而直接轉入到另一個模塊的內部。
3. 兩個模塊有一部分代碼重疊(該部分代碼具有一定的獨立功能)。
4. 一個模塊有多個入口。
內容耦合可能在匯編語言中出現。大多數高級語言都已設計成不允許出現內容耦合。這種耦合的耦合性最強,模塊獨立性最弱。
(2) 公共耦合:一組模塊都訪問同一個全局數據結構,則稱之為公共耦合。公共數據環境可以是全局數據結構、共享的通信區、內存的公共覆蓋區等。如果模塊只是向公共數據環境輸入數據,或是只從公共數據環境取出數據,這屬于比較松散的公共耦合;如果模塊既向公共數據環境輸入數據又從公共數據環境取出數據,這屬于較緊密的公共耦合。
公共耦合會引起以下問題:
1. 無法控制各個模塊對公共數據的存取,嚴重影響了軟件模塊的可靠性和適應性。
2. 使軟件的可維護性變差。若一個模塊修改了公共數據,則會影響相關模塊。
3. 降低了軟件的可理解性。不容易清楚知道哪些數據被哪些模塊所共享,排錯困難。
一般地,僅當模塊間共享的數據很多且通過參數傳遞很不方便時,才使用公共耦合。
(3) 外部耦合:一組模塊都訪問同一全局簡單變量,而且不通過參數表傳遞該全局變量的信息,則稱之為外部耦合。
(4) 控制耦合:模塊之間傳遞的不是數據信息,而是控制信息例如標志、開關量等,一個模塊控制了另一個模塊的功能。
(5) 標記耦合:調用模塊和被調用模塊之間傳遞數據結構而不是簡單數據,同時也稱作特征耦合。表就和的模塊間傳遞的不是簡單變量,而是像高級語言中的數據名、記錄名和文件名等數據結果,這些名字即為標記,其實傳遞的是地址。
(6) 數據耦合:調用模塊和被調用模塊之間只傳遞簡單的數據項參數。相當于高級語言中的值傳遞。
(7) 非直接耦合:兩個模塊之間沒有直接關系,它們之間的聯系完全是通過主模塊的控制和調用來實現的。耦合度最弱,模塊獨立性最強。
總結:耦合是影響軟件復雜程度和設計質量的一個重要因素,為提高模塊的獨立性,應建立模塊間盡可能松散的系統,在設計上我們應采用以下原則:若模塊間必須存在耦合,應盡量使用數據耦合,少用控制耦合,慎用或有控制地使用公共耦合,并限制公共耦合的范圍,盡量避免內容耦合。
紫云(深圳)軟件有限公司
云數據時代引領者
微信:Chizcloud
微博:http://weibo.com/Chizcloud
官網:http://www.chizcloud.com/
聯系&投稿:service@chizcloud.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。