欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

組件設計原則之概念篇(四)

系統 1996 0

穩定抽象原則SAP 是六個組件設計原則中的最后一個,它通常與穩定依賴原則SDP結合在一起,用于創建具有較高質量的組件依賴結構。終于是最后一個了, 吐舌頭

穩定抽象原則(The Stable-Abstractions Principle, SAP)

A component should be as abstract as it is stable.
組件的抽象程度應該與其穩定程度一致。

SAP將組件的穩定性和抽象性聯系了起來。SAP原則規定, 一個穩定的組件應該是抽象的 ,這樣在具備穩定性的同時也將具備較好的可擴展性。此外,它還規定, 一個不穩定的組件應該是具體的 ,它的不穩定性要求其內部的具體代碼應該是易于修改的,這種修改不會給其他組件帶來太大的影響。

在一個相對穩定的組件中,應該包含一些抽象類,這樣就可以對它進行擴展。

SAP和SDP一起構成了組件的DIP(依賴倒轉原則)。SDP要求依賴應該朝著穩定的方向進行,而SAP則規定穩定性意味著抽象性,組件的穩定程度要與其抽象程度一致。因此,依賴也應該朝著抽象的方向進行。根據DIP,為了降低類與類之間的耦合度,我們要針對接口編程,而不要針對實現編程,同理,為降低組件之間的耦合度,我們要針對抽象組件編程,依賴應該沿著抽象而又穩定的組件來進行。

由于在一個組件中可以包含多個類,其中有些類是抽象的,而另一些類是具體的,因此在評價一個組件的抽象程度時,可以通過計算“ 抽象類的數量占類總數的百分比 ”來度量一個組件的抽象性。

抽象性度量

為了度量組件的抽象性,需引入以下幾個度量指標:

Nc(The number of classes) :組件中類的總數。

Na(The number of abstract classes) :組件中抽象類的數目,一個抽象類中至少包含一個抽象的方法,抽象類不能被實例化。

A(Abstractness) :抽象性因子。

A = 0表示組件中沒有任何抽象類;A = 1表示組件中所有的類全部都是抽象類。

我們可以先計算出每一個組件的抽象性因子A, 結合SAP和SDP兩大原則,不難得知,依賴需要沿著穩定的方向進行,也需要沿著抽象的方向進行,可以通過比較一個依賴鏈上每個組件的A值來判斷依賴鏈是否需要進行調整,A值可以作為一個改善和調整依賴鏈的指標,但這并不是強制性的。

主序列分析

在Bob大叔的ASD一書中,有專門的一節來分析穩定性和抽象性之間的關系,并得到了一條 主序列(Main Sequence) 。Sunny覺得這個過程有點像是在做軟件工程的理論研究,與軟件工程的實踐還是有所區別的,但是, 軟件工程的發展既需要理論研究的支持,又需要實踐經驗的驗證 ,而且了解一下人家如何做研究,本身也是一件挺有意思的事情,接下來我介紹一下Bob大叔如何分析組件穩定性和抽象性之間的關系。

為了更好地研究組件的穩定性和抽象性,我們可以引入了一個二維坐標圖,其中抽象性A作為縱軸,不穩定性I作為橫軸,縱軸和橫軸的坐標刻度都是從0到1,最穩定、最抽象的組件位于坐標左上角(0,1)處, 也就是說當不穩定性I=0,抽象性A=1時,組件是最穩定、最抽象的; 而那些最不穩定、最具體的組件位于坐標的右下角(1,0)處,此時不穩定性I=1而抽象性A=0。理想情況下,我們希望組件都能夠落在這兩個位置附近,也就是說,組件要么是最穩定最抽象的,要么是最不穩定最具體的,但是這畢竟只是理想情況,絕大部分組件的抽象性和穩定性都具有一定程度,位于這兩個點之間。

Bob大叔認為,在(0,0)附近的組件,是一些具有高度穩定性且具體的組件,但是這種組件僵化程度很高,因為它是具體的,無法對其進行擴展,又因為它是高度穩定的,因此很難對它進行更改。簡單來說,位于此處的組件,它會被很多其他組件所依賴(穩定性),但是它很難擴展和修改(具體性)。(0,0)附近的區域被稱為 痛苦地帶(Zone of Pain)

在(1,1)附近的組件,也不是一個好的位置,此處的組件雖然具有最低的穩定性和最高的抽象性,但是由于其穩定性低,因此沒有其他組件依賴它們,即使具有很高的抽象性也不能得到使用。所以這個(1,1)附近的區域被稱為 無用地帶(Zone of Uselessness)

我們希望所設計的組件能夠盡量遠離這兩個區域,而將距離這兩個區域都最遠的軌跡點連接成一條線,這條線就是連接(1,0)和(0,1)點的線,這條線稱為 主序列(Main Sequence) ,所圖1所示。

組件設計原則之概念篇(四)

圖1 主序列和被排除的區域示意圖

位于主序列上或者靠近主序列的組件都具有一定程度的穩定性和抽象性,雖然組件的理想位置是主序列的兩個端點,但是在實際項目中,大部分組件能夠位于主序列上或者主序列附近就已經很不錯了。

為了更好地度量一個系統的組件設計是否足夠好,最后再介紹一個度量: 到主序列的距離

到主序列的距離(簡稱距離)是指一個組件到主序列之間的距離(D),計算公式如下:

該度量值的取值范圍是[0,0.707]。

除此之外,還可以用一種規范化距離(D')來表示,計算公式如下:

D'的取值范圍是[0,1],0表示組件正好位于主序列上,1表示組件到主序列的距離最遠。

通過使用這個度量,我們可以全面分析一個組件設計方案和主序列之間的一致性。首先可以計算出每個組件的D值,然后對所有D值不在0附近的組件進行復查和調整。這將有助于設計者確定哪些組件更容易維護,哪些組件對變化不敏感、更加穩定。

此外,還可以對組件設計方案進行統計學的分析,例如可以計算出設計中所有組件的D度量值的均值和方差,并且期望得到一個均值和方差都接近于0,也就是盡量符合主序列的設計。通過方差分析,可以找出一些比較特殊的組件,如圖2所示,在這個分布圖中,大部分組件都沿著主序列分布,但是也有一些組件離主序列較遠,標準偏差Z值超過1甚至2,我們需要留意這些偏離較大的組件,盡量找出是什么原因導致它們非常抽象但具有較少的依賴者,或者非常具體但是有較多的依賴者,必要時我們需要對這些組件進行重構,進一步改進系統的設計。

組件設計原則之概念篇(四)

圖2 組件的D值分布圖(示例)

除此之外,我們還可以 繪制每個組件的D'度量值隨時間變化的分布圖 ,看是否隨著系統版本的升級或者演化導致某個(或某些)組件的D'值發生了較大的改變,如果在某個版本中一個組件的D'值發生異常變化或者超過預先設定的一個閾值,需要找出改變的原因,以便對系統實施更好的重構。

總結

組件設計以及組件之間的依賴關系是有好壞之分的,通過應用這六個組件設計原則,可以在一定程序上改進組件的設計。

重用 - 發布等價原則( REP ):重用的粒度就是發布的粒度。

共同重用原則( CRP ):一個組件中的類需一起被重用。如果你重用了組件中的一個類,那么就要重用其中所有的類。

共同封閉原則( CCP ):一個組件中的所有類對于同一種類型的變化應該是共同封閉的。一個變化若對一個組件產生影響,則將影響該組件中所有的類,而對其他組件不造成影響。

無環依賴原則( ADP ):在組件的依賴關系圖中不允許存在環。

穩定依賴原則( SDP ):朝著穩定的方向進行依賴。

穩定抽象原則( SAP ):組件的抽象程度應該與其穩定程度一致。

至此,6個組件設計原則全部介紹完畢,雖然有些原則的分析過于理論,看起來也挺枯燥的,但是一旦深入進去發現還是挺有意思的,希望這幾篇文章對大家能夠有所幫助! 吐舌頭

【作者:劉偉 http://blog.csdn.net/lovelion

組件設計原則之概念篇(四)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美一区二区久久香蕉 | 美女伊人 | 成人网在线观看 | 欧美最猛性xxxxx亚洲精品 | 色婷婷影院 | 亚洲 欧美日韩 国产 中文 | 日韩精品免费在线视频 | 国产一区二区三区免费观看 | 日日狠日 | 日本免费小视频 | 91嫩草精品| 色婷婷六月丁香在线观看 | 久草青青在线视频 | 羞羞网页 | 久久女人被添全过程A片 | 女人裸体让男人桶全过程 | 亚洲欧美日韩在线不卡中文 | 免费免费视频片在线观看 | 一区二区精品 | 亚洲精品一区二区三区在线看 | 国产自产拍精品视频免费看 | 五月婷婷色综合 | 色网站在线免费观看 | 午夜av成人 | 国产一区二区三区久久 | 日韩欧美h| 色www精品视频在线观看 | 日韩成人性视频 | 久久久久国产一区二区三区 | 羞羞的视频在线 | 天天艹夜夜艹 | 91白丝制服被啪到喷水在线 | 久久一本久综合久久爱 | www.国产一区 | 久久久久久91香蕉国产 | 亚洲国产欧洲精品路线久久 | 久操青青 | 亚洲女人天堂 | 精品无人乱码一区二区三区 | 新版天堂资源中文在线 | 国产视频91在线 |