本章根據表 2-1 所提出物件導向軟體變動情況,分析在各種變動的情 況下可能產生的變動衝擊,同時將根據物件導向設計可能出現的情況進 行分析,以瞭解造成變動衝擊的關鍵所在。
一、類別間變動衝擊分析
在傳統結構化開發方式中,當某個模組進行變動後,經常會影響其 他模組的正常運作,因而造成許多模組亦必須進行修改,這種情況稱為 連漪效果。連漪效果的情況,同樣會發生在物件導向軟體開發方式中。
然而,因為物件導向的相關特性,如繼承、多形等,有別於結構化的開 發方式,造成連漪效果在此二種開發方式的產生情形亦有所不同[28]。在 此以類別間的關係,分析物件導向軟體進行變動時,所可能產生的衝擊 情況。根據表 2-1 所示,在類別間的變動方面,主要可分為繼承性與非繼 承性連結關係的變動,同時在各關係中。依據這二種連結關係,分析因 變動而會造成的衝擊如下 :
(一)、繼承關係
在繼承關係中類別變動的情形,主要可以由抽象及非抽象類別變動 的情況加以分析,以下分別加以探討之 :
1、抽象類別的新增/刪除
新增一個抽象類別對現有類別造成衝擊的情形,以圖 3-1 為例,在圖 3-1(a)中,類別 A 為現有的類別,當新增一個抽象類別時,如圖 3-1(b)所 示,此時類別 A 必須進行修改才能夠繼承類別 B。因此,新增抽象類別 的變動情況,將會造成變動的衝擊。刪除抽象類別對現有的類別造成的
將造成類別 A 必需要進行修改,才能夠正常的運作。因此,刪除抽象類
3、抽象/非抽象類別範圍的變更
抽象類別範圍的變更,主要以 Public 類別轉變為 Private 類別以及 Protected 類別轉變為 Private 類別而造成變動衝擊。Public 類別轉變為 Protected 類別、Protected 類別轉變為 Public 類別、Private 類別轉變為 Public 類別以及 Private 類別轉變為 Protected 類別則不會產生衝擊。另外,非抽 象類別範圍的變更,並不會對抽象類別造成影響,因此不會造成變動的 衝擊。
在繼承關係中,因為變動而造成的衝擊情形,整理如表 3-1 所示。從 繼承關係的變動衝擊情形中可以得知,造成變動衝擊產生的關鍵,主要 是集中在抽象類別,而在非抽象類別的變動方面,並不會造成變動的衝 擊。
表 3-1 繼承關係變動衝擊評估表
繼承關係變動情形 是否產生
變動衝擊
抽象類別新增 是
抽象類別刪除 是
抽象類別範圍變更 是
非抽象類別新增 否
非抽象類別刪除 否
非抽象類別範圍變更 否
(二)、非繼承性其他連結關係
非繼承性其他連結關係,可以分為關連以及聚合關係,而主要的變
衝擊情形 :
為現有的類別,當新增一個類別 A 引用類別 B,由於類別 A 引用類別 B 的資料成員或成員函數,並不會造成類別 B 必須隨著修改,因此在關連 關係中,一般類別的新增並不會造成變動的衝擊。另外,在關連關係中 刪除一般類別時,造成衝擊產生的原因,以圖 3-3(a)為例,類別 A 引用 類別 B,當類別 A 受到刪除後,類別 B 並不會因為類別 A 的刪除而必須 要配合修改,因此在關連關係中,一般類別的刪除並不會造成變動的衝 擊。在聚合關係方面,聚合關係中新增一般類別所可能造成的衝擊,以 圖 3-3(b)為例,類別 B 為現有的類別,現新增一個類別 A 引用類別 B,
由於類別 A 引用類別 B 並不會造成類別 B 的修改,因此在聚合關係下,
一般類別的新增並不會造成變動衝擊的產生。另外,在聚合關係中刪除 一般類別時,主要造成衝擊情況的原因,以圖 3-3(b)為例,類別 A 引用 類別 B,當類別 A 受到刪除後,類別 B 並不會因為類別 A 的刪除而須要 配合修改,因此在聚合關係中,一般類別的刪除並不會造成變動的衝擊。
3、相依/一般類別範圍變更
在關連關係中相依類別範圍變動所產生的衝擊,主要以 Public 轉變 為 Protected 及 Private 為主,使得引用該類別的類別需要配合修改。如果 該類別預設為 Protected 及 Private,由於其他的類別原本就無法引用,因 此並不會造成變動的衝擊,同時,類別由 Protected 轉變為 Public 以及 Private 類別轉變為 Public 則是不會產生衝擊。另外在關連關係中一般類 別範圍的變更,由於原類別是引用其他的類別,因此類別本身範圍變更 並不會造成變動的衝擊。在聚合關係方面,在聚合關係中相依類別範圍 變動所產生的衝擊,同樣是以 Public 轉變為 Protected 及 Private 為主,使 得引用該資料成員的類別需要配合修改。若是該類別預設為 Protected 及 Private,由於其他的類別原本就無法引用,因此並不會造成變動的衝擊,
會產生衝擊。另外,在聚合關係中一般類別範圍的變更,由於原類別是 引用其他的類別,因此類別本身範圍的變更亦不會造成變動的衝擊。
在非繼承性連結關係中,因為變動而造成的衝擊情形,整理如表 3-2 所示。從變動衝擊情形中可以得知,會造成變動衝擊情形產生的關鍵,
主要是集中在相依類別上,一般類別變動並不會造成變動衝擊情況。
表 3-2 非繼承性連結關係變動衝擊評估表
是否產生變動衝擊 非繼承性連結關係變動情形
關連關係 聚合關係
相依類別新增 是 是
相依類別刪除 是 是
相依類別範圍變更 是 是
一般類別新增 否 否
一般類別刪除 否 否
一般類別範圍變更 否 否
二、類別內變動衝擊分析
根據表 2-1 所示,類別內的變動情形,分別是資料成員與成員函數的 變動情形。在此針對資料成員及成員函數不同的變動情形,對於繼承及 非繼承性連結關係所造成的變動衝擊作出分析 :
(一)、繼承關係
1、抽象類別資料成員新增/刪除
抽象類別新增或刪除資料成員時,對現有的類別造成的影響,主要
在於繼承該抽象類別的類別,以圖 3-4(a)為例,類別 B 繼承類別 A,當抽 象類別新增資料成員 d3 時,如圖 3-4(b)所示,類別 B 為了要使用類別 A 的資料成員 d3,因此必須進行修改。相同的情況,以圖 3-4(b)為例,當 類別 A 的資料成員 d3 刪除後,原本有使用資料成員 d3 的類別 B 將會受 到影響。因此抽象類別內資料成員的新增或刪除,將造成變動的衝擊。
A d1 d2
B
A d1 d2 d3
B
(a) (b) 圖 3-4 類別繼承關係(資料成員變動)
2、非抽象類別資料成員新增/刪除
非抽象類別新增或刪除資料成員,並不會對抽象類別產生衝擊的影 響。
3、抽象/非抽象類別資料成員型態變更
資料成員的型態變動時所產生的衝擊,亦是以繼承此抽象類別的類 別為主。非抽象類別型態的變更,並不會對抽象類別造成影響,因此不 會有變動的衝擊。
4、抽象/非抽象類別資料成員範圍變更
抽象類別資料成員範圍的變更,主要由 Public 轉變為 Private 以及 Protected 轉變為 Private 而造成變動衝擊。Public 轉變為 Protected、Protected 轉變為 Public、Private 轉變為 Public 以及 Private 轉變為 Protected 則不會 產生衝擊。另外,非抽象類別資料成員的刪除,並不會對受到繼承的抽
象類別產生衝擊影響。
5、抽象類別成員函數新增/刪除
抽象類別新增成員函數時,對現有的類別造成的影響,主要在於繼 承該抽象類別的類別。以圖 3-5(a)為例,類別 B 繼承類別 A,當類別 A 新增成員函數 m3 時,類別 B 為了能夠使用類別 A 的成員函數,則必須 進行修改才能夠使用。相同情況,以圖 3-5(b)為例,若將類別 A 的成員 函數 m3 進行刪除,將對類別 B 產生影響,因此抽象類別內成員函數的 新增或刪除,將造成變動的衝擊。
A m1() m2()
B
A m1() m2() m3()
B
(a) (b) 圖 3-5 類別繼承關係(成員函數變動)
6、非抽象類別成員函數的新增/刪除
非抽象類別成員函數的新增或刪除,並不會對抽象類別產生衝擊影 響。
7、抽象/非抽象類別成員函數範圍的變更
抽象類別成員函數範圍的變更,主要由 Public 轉變為 Private 以及 Protected 轉變為 Private 而造成變動衝擊。Public 轉變為 Protected、Protected 轉變為 Public、Private 轉變為 Public 以及 Private 轉變為 Protected 則不會 產生衝擊。另外,非抽象成員函數範圍的變更,並不會對抽象類別造成 影響,因此不會有變動衝擊的產生。
8、抽象/非抽象類別成員函數傳回型態的變更
在繼承關係中,抽象類別成員函數並不會傳回任何值給非抽象的類 別,因此抽象類別資料成員傳回型態的變更,並不會對繼承的類別產生 變動衝擊。另外,非抽象類別成員函數傳回型態的變更,亦不會對抽象 類別產生變動衝擊。
9、抽象/非抽象類別成員函數邏輯變動
在抽象類別中,成員函數邏輯變動,將使繼承此抽象類別的類別產 生影響,另外,在非抽象類別中,類別成員函數邏輯的變動,則是不會 對抽象類別產生影響。
類別內資料成員及成員函數變動在繼承關係中所產生的衝擊情形,
整理如表 3-3 所示,其中仍以抽象類別資料成員及成員函數變動所造成的 衝擊為主,非抽象類別的資料成員及成員函數變動並不會造成影響。
表 3-3 類別內變動衝擊評估表(繼承關係部分)
繼承關係變動情形 是否產生
變動衝擊 抽象類別資料成員新增/刪除、型態變更以及範圍變更 是 非抽象類別資料成員新增/刪除、型態變更以及範圍變更 否 抽象類別成員函數新增/刪除、範圍變更、邏輯變動以及
傳回型態的變更 是
非抽象類別成員函數新增/刪除、範圍變更、邏輯變動以
及傳回型態的變更 否
(二)、非繼承性其他連結關係
1、相依類別資料成員的新增/刪除
在關連關係中,相依類別新增資料成員時,對現有類別造成的影響,
主要在於將要引用該資料成員的類別,為了要引用該類別的資料成員而 必須進行修改,因此相依類別內資料成員的新增,將造成變動衝擊。另 外,在關連關係中相依類別刪除資料成員,由於是受到其他類別的引用,
主要在於將要引用該資料成員的類別,為了要引用該類別的資料成員而 必須進行修改,因此相依類別內資料成員的新增,將造成變動衝擊。另 外,在關連關係中相依類別刪除資料成員,由於是受到其他類別的引用,