查看“︁耦合性 (計算機科學)”︁的源代码
←
耦合性 (計算機科學)
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{otheruses|耦合}} {{noteTA |G1=IT |T=zh-cn:耦合性 (计算机科学);zh-hk:耦合性 (電腦科學);zh-tw:耦合性 (電腦科學) }} '''耦合性'''({{lang-en|'''Coupling'''}})或稱'''耦合力'''或'''耦合度''',是一種[[軟體度量]],是指一程式中,[[軟體模組|模組]]及模組之間資訊或參數依赖的程度。 而[[内聚性]]({{lang-en|Cohesion}})是一個和耦合性相對的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出結構化設計概念的{{link-en|賴瑞·康斯坦丁|Larry Constantine}}所提出<ref>W. Stevens, G. Myers, L. Constantine, "Structured Design", IBM Systems Journal, 13 (2), 115-139, 1974.</ref><!-- who was also an early proponent of these concepts (see also [[Structured Systems Analysis and Design Methodology|SSADM]])-->。低耦合性是結構良好[[電腦程式|程式]]的特性,低耦合性程式的可讀性及可維護性會比較好。 ==耦合性的分類== [[File:Coupling sketches cropped 1.svg|thumb|300px|upright=2.0|耦合性的概念模型]] 耦合性可以是低耦合性(或稱為鬆散耦合),也可以是高耦合性(或稱為緊密耦合)。以下列出一些耦合性的分類,從高到低依序排列: ;內容耦合(content coupling,耦合度最高):也稱為病态耦合(pathological coupling)当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。 ;共用耦合/公共耦合(common coupling):也稱為全局耦合(global coupling.)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程度随耦合模块的个数增加而增加。 ;外部耦合(external coupling):發生在二個模組共用一個外加的資料格式、通訊協定或是設備界面,基本上和模組和外部工具及設備的溝通有關。 ;控制耦合(control coupling):指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能; ;特徵耦合/标记耦合(stamp coupling):也稱為資料結構耦合,是指幾個模組共享一個複雜的資料結構,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址; ;資料耦合/数据耦合(data coupling):是指模組藉由傳入值共享資料,每一個資料都是最基本的資料,而且只分享這些資料(例如傳遞一個整數給計算平方根的函數)。 ;訊息耦合(message coupling,是無耦合之外,耦合度最低的耦合):可以藉由以下二個方式達成:狀態的去中心化(例如在物件中),組件間利用傳入值或[[訊息傳遞 (計算機科學)|訊息傳遞]]來通訊。 ;無耦合:模組完全不和其他模組交換資訊。 ===物件導向程式設計=== ;子類別耦合(subclass coupling):描述子類別和父類別之間的關係,子類別連結到父類別,但父類別沒有連結到子類別。 ;時空耦合(temporal coupling):二個動作只因為同時間發生,就被包裝在一個模組中。 後來的研究提出了許多不同層面的耦合性,並且用來評估實務上各種的模組化法則的實施程度<ref>F. Beck, S. Diehl. On the Congruence of Modularity and Code Coupling. In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering (SIGSOFT/FSE '11), Szeged, Hungary, September 2011. [http://dx.doi.org/10.1145/2025113.2025162 doi:10.1145/2025113.2025162]</ref>。 == 缺點 == 緊密耦合的系統在開發階段有以下的缺點: # 一個模組的修改會產生[[漣漪效應]],其他模組也需隨之修改。 # 由於模組之間的相依性,模組的組合會需要更多的精力及時間。 # 由於一個模組有許多的相依模組,模組的{{link-en|可復用性|reusability}}低。 == 改善方法 == {{link-en|機能設計|Functional_design}}是一種可以降低耦合性的方法,此方法以機能性的角度設法限制各模組需負責的事務。在類別'''''A'''''及'''''B'''''之間,若有以下任何一種情形,會提高二者的耦合性: *'''''A'''''有一個屬性是參考類別'''''B'''''(此屬性的形態為類別'''''B''''') *'''''A'''''呼叫物件'''''B'''''提供的服務 *'''''A'''''有一個方法會參考類別'''''B'''''(此方式會傳回一形態為類別'''''B'''''的物件) *'''''A'''''是類別'''''B'''''的子類別。 鬆散耦合是指二個彼此相關的模組,其中的介面是一個簡單而穩定的介面,且其介面和任一模組內部的實現方式無關(參考[[信息隐藏 (電腦科學)|信息隐藏]])。 像[[CORBA]]或[[组件对象模型]]等系統,允許一物件在不知道另一物件實現方式的情形下和另一物件互動。這類系統甚至允許一物件和用其他語言撰寫的物件進行互動。 == 耦合性和內聚性 == 耦合性和[[內聚性 (計算機科學)|內聚性]]二個名詞常一起出現,用來表示一個理想模組需要有的特點,也就是低耦合性及高內聚性。耦合性著重於不同模組之間的相依性,而內聚性著重於一模組中不同功能之間的關聯性。低內聚性表示一個模組中的各機能之間沒什麼關聯,當模組擴充時常常會出現問題。 == 模組的耦合性 == 以下是一種計算模組耦合性的方法<ref name="Pressman">Pressman, Roger S. Ph.D (1982). Software Engineering - A Practitioner's Approach - Fourth Edition. ISBN 0-07-052182-4</ref>: 對於資料和控制流的耦合: * '''d<sub>i</sub>''':輸入資料參數的個數 * '''c<sub>i</sub>''':輸入控制參數的個數 * '''d<sub>o</sub>''':輸出資料參數的個數 * '''c<sub>o</sub>''':輸出控制參數的個數 全域耦合: * '''g<sub>d</sub>''':用來儲存資料的全域變數 * '''g<sub>c</sub>''':用來控制的全域變數 環境耦合: * '''w''':此模組呼叫的模組個數([[扇出]]) * '''r''':呼叫此模組的模組個數([[扇入]]) <math>\mathrm{Coupling}(C) = 1 - \frac{1}{d_{i} + 2\times c_{i} + d_{o} + 2\times c_{o} + g_{d} + 2\times g_{c} + r + w}</math> 若<code>Coupling(C)</code>數值越大,表示模組耦合的情形越嚴重,數值一般會界於0.67(低度耦合)到1.0(高度耦合)之間。 舉例,若一模組只有一個輸入資料參數,一個輸出資料參數: <math>C = 1 - \frac{1}{1+0+1+0+0+0+1+0} = 1 - \frac{1}{3} = 0.67</math> 若一模組的輸入資料參數、輸入控制參數、輸出資料參數及輸出控制參數都是5個,存取10個全域變數,扇出和扇入的模組個數別是3個及4個: <math>C = 1 - \frac{1}{5 + 2\times 5 + 5 + 2\times 5 + 10 + 0 + 3 + 4} = 0.98</math> ==相關條目== *[[相依性地狱]] *{{link-en|傳出耦合|Efferent coupling}} *[[内聚力 (計算機科學)]] *{{link-en|物件導向程式設計用語列表|List of object-oriented programming terms}} *[[make]] *[[靜態程序分析]] *[[控制反转]] *[[鬆散耦合]] *[[死碼刪除]] ==參考資料== {{reflist}} {{UML}} [[Category:面向对象的程序设计]] [[Category:软件架构]] [[Category:軟體度量]] [[fr:Dépendance logicielle]]
该页面使用的模板:
Template:Lang-en
(
查看源代码
)
Template:Link-en
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Otheruses
(
查看源代码
)
Template:Reflist
(
查看源代码
)
Template:UML
(
查看源代码
)
返回
耦合性 (計算機科學)
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息