象類別的資料成員或成員函數變動而受到衝擊的強度。另外,當衝擊情 況發生在繼承深度越深的類別繼承關係時,只要越上層的抽象類別進行 變動,將會影響到所有直接或間接繼承此抽象類別的類別,且越下層的 類別受到衝擊的機會將越大,造成嚴重的漣漪效應。因此對於繼承深度 造成變動衝擊的因素,除了必須考量類別繼承的資料成員及成員函數 外,還必須考量繼承深度的問題,以判斷抽象類別變動可能產生的衝擊 值。有鑑於此,在繼承深度的量測上,除了引用 AIF 以及 MIF 兩項量測 方式外,還必須要結合繼承深度的量測方式 DIT[17]以進行量測。由於本
量測方式是要求出在繼承關係中各類別產生的變動衝擊,因此使用繼承
別 B 有 3 個資料成員(其中 2 個為覆寫,1 個為新增)及 4 個成員函數(其
由繼承關係量測方式可以求出,AIF(B,A) = 0.57、MIF(B,A) = 0.5、AIF(C,B)
= 0.56、MIF(C,B) = 0.67、AIF(D,C) = 0.7、MIF(D,C) = 0.64。計算圖 4-3 類別繼承深度情形中各類別資料成員及成員函數的變動衝擊值方式如下
CI
depA76
CI
depM96
CI
depA95
CI
depM7 CI
depA64 CI
depM0 ) ( D = CI
depA0 ) ( D = CI
depM(二)、繼承廣度的量測
∑
=A
AIF(B,A) = 0.71、MIF(B,A)= 0.5、AIF(C,A) = 0.71、MIF(C,A) = 0.5、
AIF(D,A) = 0.5、MIF(D,A) = 0.71、AIF(E,A) = 0.63、MIF(E,A) = 0.56。計 算圖 4-4 類別繼承廣度情形中各類別資料成員及成員函數的變動衝擊值
CI
widA27 CI
widM其中 CI
widA (B) 、 CI widM (B) 、 CI widA (C) 、 CI widM (C) 、 CI widA (D) 、 CI widM (D) 、 CI widA (E)
以及 CIwidM (E)因為並沒有被其他類別繼承,因此皆等於 0。
(三)、非繼承性連結關係的量測
coupA
C CoupA C
CI
j = CBO…n (4.10)C 及 D 有連結關係,因此類別 A 的 n = 3,類別 B 與類別 D 有連結關係,
因此類別 B 的 n = 1。假設類別 B 引用類別 A 3 個資料成員及 2 個成員函 數,類別 C 引用類別 A 2 個資料成員及 2 個成員函數,類別 D 引用類別 A 3 個資料成員及 3 個成員函數,同時引用類別 B 2 個資料成員及 1 個成 員函數。首先求出各類別因為連結相依類別而產生的變動衝擊強度,其 中 CoupA(B,A) = 0.75、CoupM(B,A) = 0.5、CoupA(C,A) = 0.5、CoupM(C,A)
= 0.5、CoupA(D,A) = 0.75、CoupM(D,A) = 0.75、CoupA(D,B) = 0.67、
CoupM(D,B) = 0.5。
CI
coupA67
CI
coupA0 ) ( C = CI
coupA0 ) ( D = CI
coupA75 CI
coupM5 CI
coupM0 ) ( C = CI
coupM0 ) ( D = CI
coupM(四)、類別過載情形的量測
時所造成的衝擊。同時由變動衝擊量測所得到的相關數據,可以搭配專 家的經驗與知識加以調整,以降低某些類別的變動衝擊。此外由於內聚 力低的類別,並不一定會與其他類別有所連結,因此在調整法則方面,
會先以類別內的因素進行調整,其次再考量類別間的因素進行調整,以 下即針對類別間及類別內的變動衝擊量測值,提出變動衝擊改善法則。
(一)、類別內調整法則
為了使各類別能夠保持集中化的特性,同時使各類別在調整後不致 於影響類別責任的明確性,因此依據整合性的量測模式,在此針對類別 內聚力提出調整的法則。
法則 1
IF LCOM 值 > 0
THEN 當 LCOM 值越高時,表示該類別同時處理越多性質不同的工作越 多,因此必須將此類別進行分解,使 LCOM 值降低,最理想的情況為 LCOM 值降為 0,以提高類別的內聚力。
(二)、類別間調整法則
類別間主要分為繼承與非繼承性連結關係的變動,依據整合性的量 測模式,在此針對類別間的關係提出調整的法則。在各個調整法則中以 CR 值代表在不同情況下的基準值,而在基準值的選擇方面,可以先求得 各類別造成變動衝擊的臨界值,臨界值代表在各種不同的情況下,各類 別所造成最嚴重情況下的變動衝擊值。基準值可以由佔臨界值的百分比 決定。
法則 2
IF CI
depA
值 > CRdepA
值THEN 代表該類別在繼承關係中,同時被過多的類別直接或間接繼承,
將造成因為本身資料成員的變動,而對直接或間接繼承此類別的子類別 產生變動的衝擊,因此必須加以調整,使 CI
depA
值小於可接受的基準值,以降低該類別因資料成員變動而產生的衝擊,調整的方式可以針對性質 相近的類別進行合併,以降低類別繼承的深度進而降低 CI
depA
值,而合併 對象的選擇以合併後能夠符合法則 1 的類別為優先考量,但是當找不到 符合法則 1 的類別時,則可以選擇合併後類別的 LCOM 值最小的類別進 行合併。法則 3
IF CI
depM
值 > CRdepM
值THEN 代表該類別在繼承關係中,同時被過多類別直接或間接繼承,將 造成因為本身成員函數的變動,而對直接或間接繼承此類別的類別產生 變動的衝擊,進而發生嚴重的漣漪效應,因此必須加以調整,使 CI
depM
值小於可接受的基準值,以降低該類別因為成員函數變動而產生的衝 擊,調整的方式可針對性質相近的類別進行合併,以降低類別繼承的深 度進而降低 CIdepM
值,合併對象的選擇以合併後能夠符合法則 1 的類別 為優先考量,但是當找不到符合法則 1 的類別時,則可以選擇合併後類 別的 LCOM 值最小的類別進行合併。法則 4
IF CI
widA
值 > CRwidA
值THEN 代表該類別在繼承關係中,同時被過多子類別所繼承,同時將因 為本身資料成員的變動,而對所有繼承此類別的子類別產生變動的衝
擊,發生嚴重的漣漪效應,因此必須加以調整,使 CI
widA
值低於可接受基 準值,以降低該類別因為資料成員變動而產生的衝擊,調整的方式可以 針對性質相近的類別進行合併,以降低類別繼承的廣度進而降低 CIwidA
值,合併對象的選擇以合併後能夠符合法則 1 的類別為優先考量,但是 當找不到符合法則 1 的類別時,則可以選擇合併後類別的 LCOM 值最小 的類別進行合併。法則 5
IF CI
widM
值 > CRwidM
值THEN 代表該類別在繼承關係中,同時被過多子類別所繼承,同時將因 為本身成員函數的變動,而對所有繼承此類別的子類別產生變動的衝 擊,發生嚴重的漣漪效應,因此必須加以調整,使 CI
widM
值低於可接受 基準值,以降低該類別因為成員函數變動而產生的衝擊,調整的方式可 以針對性質相近的類別進行合併,以降低繼承同一抽象類別的總數進而 降低 CIwidM
值,合併對象的選擇以合併後能夠符合法則 1 的類別為優先 考量,但是當找不到符合法則 1 的類別時,則可以選擇合併後類別的 LCOM 值最小的類別進行合併。法則 6
IF CI
copuA
值 > CRcoupA
值THEN 代表該類別在非繼承性的連結關係中,類別本身的資料成員同時 被過多的類別基準,因此將造成因為本身資料成員的變動,而對所有基 準此相依類別資料成員的類別產生變動的衝擊,發生嚴重的漣漪效應,
因此必須加以調整,使 CI
copuA
值低於可接受基準值,以降低該類別因為 資料成員變動而產生的衝擊,調整的方式可以針對性質相近的類別進行選擇以合併後能夠符合法則 1 的類別為優先考量,但是當找不到符合法 則 1 的類別時,則可以選擇合併後類別的 LCOM 值最小的類別進行合併。
法則 7
IF CI
coupM
值 > CRcoupM
值THEN 代表該類別在非繼承性的連結關係中,類別本身的成員函數同時 被過多的類別基準,因此將造成因為本身成員函數的變動,而對所有基 準此相依類別成員函數的類別產生變動的衝擊,發生嚴重的漣漪效應,
因此必須加以調整,使 CI
coupM
值低於可接受基準值,以降低該類別因為 成員函數變動而產生的衝擊,調整的方式可以針對性質相近的類別進行 合併,以降低連結同一相依類別的總數進而降低 CIcopuA
值,合併對象的 選擇以合併後能夠符合法則 1 的類別為優先考量,但是當找不到符合法 則 1 的類別時,則可以選擇合併後類別的 LCOM 值最小的類別進行合併。透過整合性的量測模式,以及上述 7 條調整的法則,即可以針對物 件導向設計作出調整,以降低物件導向軟體因為變動而造成的變動衝 擊,藉此提升軟體的可維護性。