簡介
在涉及耦合(Coupling)這個術語之前,我們先看一個立體聲電唱機放大電路的例子。從圖1可知,每一個喇叭是同放大器直接相連的,沒有放大器就不會有聲音;同時,放大器和立體聲唱機也是直接相連的。
然而,左右兩個喇叭并沒有直接相連,我們可以任意拔去一個喇叭的插頭而對其它器件均沒有影響,可見喇叭與其它器件的耦合是極弱的。它們之間的耦合又是十分松散的(loose),即隻要拔去插頭就可以把模塊分開,而不需動用電烙鐵拆焊印刷闆上的導線或焊片。反之,我們如果把模塊用導線焊接的方法連接起來,那麼它們之間的耦合就較為緊密(tighter coupling)。
電子線路中,由若幹電路構成一個有公共阻抗的網絡時,某一電路中電壓或電流變化能使其它電路也發生相應變化的現象。按公共阻抗的性質可分為電阻耦合,電感耦合,電容耦合及阻容耦合等。
主要分類
多場耦合
現實工程中,物理場是許多的,溫度場,引力場,濕度場等等均屬于物理場,而我們要解決的許多問題是這些物理場的疊加問題,因為這些物理場直接是相互影響的。比如煉鋼的時候溫度高低對于應力分布就有影響。
這種多個物理場相互疊加的問題就叫做多場耦合問題,也是一種耦合。
能量耦合
如變壓器的初級與次級之間的能量耦合。
數據耦合
一個模塊訪問另一個模塊時,彼此之間是通過簡單數據參數(不是控制參數、公共數據結構或外部變量)來交換輸入、輸出信息的。
标記耦合
一組模塊通過參數表傳遞記錄信息,就是标記耦合。這個記錄是某一數據結構的子結構,而不是簡單變量。其實傳遞的是這個數據結構的地址;
控制耦合
如果一個模塊通過傳送開關、标志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。
外部耦合
一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數表傳遞該全局變量的信息,則稱之為外部耦合。
公共耦合
若一組模塊都訪問同一個公共數據環境,則它們之間的耦合就稱為公共耦合。公共的數據環境可以是全局數據結構、共享的通信區、内存的公共覆蓋區等。
内容耦合
當一個模塊直接修改或操作另一個模塊的數據,或者直接轉入另一個模塊時,就發生了内容耦合。此時,被修改的模塊完全依賴于修改它的模塊。如果發生下列情形,兩個模塊之間就發生了内容耦合
(1) 一個模塊直接訪問另一個模塊的内部數據;
(2) 一個模塊不通過正常入口轉到另一模塊内部;
(3) 兩個模塊有一部分程序代碼重疊(隻可能出現在彙編語言中);
(4) 一個模塊有多個入口。
非直接耦合
兩個模塊之間沒有直接關系,它們之間的聯系完全是通過主模塊的控制和調用來實現的。
另類情況
如果發生下列情形,兩個模塊之間就發生了内容耦合
(1)一個模塊直接訪問另一個模塊的内部數據;
(2)一個模塊不通過正常入口轉到另一模塊内部;
(3)兩個模塊有一部分程序代碼重疊(隻可能出現在彙編語言中);
(4)一個模塊有多個入口。耦合強度,依賴于以下幾個因素:
(1)一個模塊對另一個模塊的調用;
(2)一個模塊向另一個模塊傳遞的數據量;
(3)一個模塊施加到另一個模塊的控制的多少;
(4)模塊之間接口的複雜程度。
耦合按從強到弱的順序可分為以下幾種類型:
(1)内容耦合。當一個模塊直接修改或操作另一個模塊的數據,或者直接轉入另一個模塊時,就發生了内容耦合。此時,被修改的模塊完全依賴于修改它的模塊。
(2)公共耦合。兩個以上的模塊共同引用一個全局數據項就稱為公共耦合。
(3)外部耦合。若一組模塊都訪問同一全局數據項,則稱為外部耦合。
(4)控制耦合。一個模塊在界面上傳遞一個信号(如開關值、标志量等)控制另一個模塊,接收信号的模塊的動作根據信号值進行調整,稱為控制耦合。
(5)标記耦合。模塊間通過參數傳遞複雜的内部數據結構,稱為标記耦合。此數據結構的變化将使相關的模塊發生變化。
(6)數據耦合。模塊間通過參數傳遞基本類型的數據,稱為數據耦合。
(7)非直接耦合。模塊間沒有信息傳遞時,屬于非直接耦合。
如果模塊間必須存在耦合,就盡量使用數據耦合,少用控制耦合,限制公共耦合的範圍,堅決避免使用内容耦合。
相關領域
軟件工程中
簡單地說,軟件工程中對象之間的耦合度就是對象之間的依賴性。指導使用和維護對象的主要問題是對象之間的多重依賴性。對象之間的耦合越高,維護成本越高。因此對象的設計應使類和構件之間的耦合最小。
有軟硬件之間的耦合,還有軟件各模塊之間的耦合。
耦合性是程序結構中各個模塊之間相互關聯的度量。它取決于各個模塊之間的接口的複雜程度、調用模塊的方式以及哪些信息通過接口。
耦合可以分為以下幾種,它們之間的耦合度由高到低排列如下:
(1) 内容耦合。當一個模塊直接修改或操作另一個模塊的數據時,或一個模塊不通過正常入口而轉入另一個模塊時,這樣的耦合被稱為内容耦合。内容耦合是最高程度的耦合,應該避免使用之。
(2) 公共耦合。兩個或兩個以上的模塊共同引用一個全局數據項,這種耦合被稱為公共耦合。在具有大量公共耦合的結構中,确定究竟是哪個模塊給全局變量賦了一個特定的值是十分困難的。
(3) 外部耦合。一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數表傳遞該全局變量的信息,則稱之為外部耦合。
(4) 控制耦合。一個模塊通過接口向另一個模塊傳遞一個控制信号,接受信号的模塊根據信号值而進行适當的動作,這種耦合被稱為控制耦合。
(5) 标記耦合。若一個模塊A通過接口向兩個模塊B和C傳遞一個公共參數,那麼稱模塊B和C之間存在一個标記耦合。
(6) 數據耦合。模塊之間通過參數來傳遞數據,那麼被稱為數據耦合。數據耦合是最低的一種耦合形式,系統中一般都存在這種類型的耦合,因為為了完成一些有意義的功能,往往需要将某些模塊的輸出數據作為另一些模塊的輸入數據。
(7) 非直接耦合。兩個模塊之間沒有直接關系,它們之間的聯系完全是通過主模塊的控制和調用來實現的。
總結:耦合是影響軟件複雜程度和設計質量的一個重要因素,在設計上我們應采用以下原則:如果模塊間必須存在耦合,就盡量使用數據耦合,少用控制耦合,限制公共耦合的範圍,盡量避免使用内容耦合。
内聚與耦合
内聚标志一個模塊内各個元素彼此結合的緊密程度,它是信息隐蔽和局部化概念的自然擴展。内聚是從功能角度來度量模塊内的聯系,一個好的内聚模塊應當恰好做一件事。它描述的是模塊内的功能聯系。耦合是軟件結構中各模塊之間相互連接的一種度量,耦合強弱取決于模塊間接口的複雜程度、進入或訪問一個模塊的點以及通過接口的數據。程序講究的是低耦合,高内聚。就是同一個模塊内的各個元素之間要高度緊密,但是各個模塊之間的相互依存度卻要不那麼緊密。
内聚和耦合是密切相關的,同其他模塊存在高耦合的模塊意味着低内聚,而高内聚的模塊意味着該模塊同其他模塊之間是低耦合。在進行軟件設計時,應力争做到高内聚,低耦合。
振動模式的耦合
振動模式的耦合是指兩個振動模态在某一振動模态下(或在某一廣義坐标方向上)的振動輸入,導緻另一振動模态下(或另一廣義坐标方向上)的響應。
使耦合分離稱為解耦。解耦的目的是使各個自由度上(即各振動模态)的振動相對獨立或分離,這樣可對隔振效果不佳的自由度獨立采取措施而不影響其他自由度方向上的有關性能。當各自由度獨立後,可能産生共振的頻率比存在耦合時要小,特别在激振能量大的方向上要保證解耦。
相關标準
耦合強度,依賴于以下幾個因素:
(1)一個模塊對另一個模塊的調用;
(2)一個模塊向另一個模塊傳遞的數據量;
(3)一個模塊施加到另一個模塊的控制的多少;
(4)模塊之間接口的複雜程度。
耦合效率
在光纖傳輸中,接口的入端光功率與出端光功率之比。例如,由光源發出的功率與光纖束接受到的功率之比,或在光纖束的末端接收到的光功率與落到光電檢測器上的功率之比。對于發射面大于纖芯直徑的光源,光纖的數值孔徑NA和芯徑的乘積是最大耦合效率的标志。對于發射面積小于纖芯直徑的其他光源(如激光二極管)隻用NA即可用作耦合效率的合适标志。用尾部燒球的光纖與發光管耦合,用拉錐的光纖與激光管耦合都是為了增大數值孔徑NA,提高耦合效率。