1.1.1. 低耦合
耦合指的兩個系統(模塊)聯系緊密。共7種,除掉無直接耦合和高級語言不存在的內容耦合,共5種。耦合從低到高,分別是:數據耦合、標記耦合、控制耦合、外部耦合、公共耦合。
1. 數據耦合兩例
JiSuan(5, 3);
CGouMaiXinXi gouMai = new CGouMaiXinXi();
//...
JiSuan(gouMai);
2. 標記耦合六例
參數是json字符串,如:{"價格":10,"數量":1}
參數為文件名,文件格式是調用方和被調用方約定的。
C#帶參數的線程函數,函數的入口參數為object類型;C++的線程入口函數,參數為LPVOID。
調用Com。
halcon的HTuple
_variant_t和VARIANT
3. 控制耦合
移動(方向)
4. 外部耦合
共用一個靜態成員變量或全局變量。
5. 公共耦合
訪問同一片內存區域。
6. 內容耦合4例
Window2000和Window98,C語言可以直接操作顯示內存指針,來改變控制台內容。至少有10%的幾率會讓操作系統崩潰。
hook技術用於監控軟件。
破解軟件、逆向工程。
游戲修改,外掛。
7. 各種耦合優缺點
耦合名稱 |
優缺點 |
數據耦合 |
如果結構發生變化,編譯的時候,就能發現錯誤。 |
標記耦合 |
如果結構發生變化,運行時才能發現錯誤。 |
控制耦合 |
控制耦合,大幅降低可測試性。 |
外部耦合 |
不知道會有多少個模塊訪問,所以確定性弱。相對公共耦合,可以通過訪問權限(public、private等)減少風險 |
公共耦合 |
不知道會有多少個模塊訪問,確定性弱。 |
公共耦合與標記耦合的區別:后者只會在參數、返回值使用共同資源。
耦合只是一方面,具體情況具體分析。比如:標記耦合大大增加了靈活性和互操作性,所以常常用於系統間通信。外部耦合,大大降低了代碼量,非常適合於一些質量要求不高的小工具。公共耦合適合的性能要求高的模塊,即使是性能要求高的系統,絕大部分模塊的性能要求並不高。