<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    軟件設(shè)計“內(nèi)聚度”“耦合度”介紹
    ?
    ?
    一、聯(lián)系
    ?
    ??? 當個程序段或語句(指令)引用了其它程序段或語句(指令)中所定義或使用的數(shù)據(jù)名(即存貯區(qū)、地址等)或代碼時,他們之間就發(fā)生了聯(lián)系。一個程序被劃分為若干模塊時,聯(lián)系既可存在于模塊之間,也可存在于一個模塊內(nèi)的程序段或語句之間,即模塊內(nèi)部。聯(lián)系反映了系統(tǒng)中程序段或語句之間的關(guān)系,不同類型的聯(lián)系構(gòu)成不同質(zhì)量的系統(tǒng)。因此,聯(lián)系是系統(tǒng)設(shè)計必須考慮的重要問題。
    ?
    ??? 系統(tǒng)被分成若干模塊后,模塊同模塊的聯(lián)系稱為塊間聯(lián)系;一個模塊內(nèi)部各成份的聯(lián)系稱為塊內(nèi)聯(lián)系。顯然,模塊之間的聯(lián)系多,則模塊的相對獨立性就差,系統(tǒng)結(jié)構(gòu)就混亂;相反,模塊間的聯(lián)系少,各個模塊相對獨立性就強,系統(tǒng)結(jié)構(gòu)就比較理想。同時,一個模塊內(nèi)部各成份聯(lián)系越緊密,該模塊越易理解和維護。
    ?
    ?
    二、評判模塊結(jié)構(gòu)的標準
    ?
    ??? 1.模塊獨立性
    ???
    ??? 模塊化是軟件設(shè)計和開發(fā)的基本原則和方法,是概要設(shè)計最主要的工作。模塊的劃分應(yīng)遵循一定的要求,以保證模塊劃分合理,并進一步保證以此為依據(jù)開發(fā)出的軟件系統(tǒng)可靠性強,易于理解和維護。根據(jù)軟件設(shè)計的模塊化、抽象、信息隱蔽和局部化等原則,可直接得出模塊化獨立性的概念。所謂模塊獨立性,即:不同模塊相互之間聯(lián)系盡可能少,應(yīng)盡可能減少公共的變量和數(shù)據(jù)結(jié)構(gòu);一個模塊應(yīng)盡可能在邏輯上獨立,有完整單一的功能。
    ?
    ??? 模塊獨立性(Moduleindependence)是軟件設(shè)計的重要原則。具有良好獨立性的模塊劃分,模塊功能完整獨立,數(shù)據(jù)接口簡單,程序易于實現(xiàn),易于理解和維護。獨立性限制了錯誤的作用范圍,使錯誤易于排除,因而可使軟件開發(fā)速度快,質(zhì)量高。
    ?
    ??? 為了進一步測量和分析模塊獨立性,軟件工程學引入了兩個概念,從兩個方面來定性地度量模塊獨立性的程度,這兩個概念是模塊的內(nèi)聚度和模塊的耦合度。
    ?
    ??? 2.塊內(nèi)聯(lián)系的度量——內(nèi)聚度
    ?
    ??? 軟件概要設(shè)計是以需求分析所產(chǎn)生的文檔為依據(jù),著手解決實現(xiàn)“需求”的軟件體系結(jié)構(gòu),簡稱軟件結(jié)構(gòu)。這一階段確定軟件結(jié)構(gòu)的具體任務(wù)是將系統(tǒng)分解成模塊,確定各模塊的功能及調(diào)用關(guān)系,將用戶的需求分配到適當?shù)奈恢蒙先?,得出系統(tǒng)的結(jié)構(gòu)圖。
    ?
    ??? 軟件概要設(shè)計的原則是模塊化、抽象化和信息隱藏,要達到這些原則,就要求模塊具有獨立性。模塊內(nèi)聚度用于衡量模塊內(nèi)部各成分之間彼此結(jié)合的緊密程度,模塊內(nèi)聚度由強到弱的順序如圖:
    ?
    ??? 高<----------------------------- 內(nèi)聚度 -----------------------------低
    ??? | 功能內(nèi)聚 | 信息內(nèi)聚 | 通信內(nèi)聚 | 過程內(nèi)聚 | 時間內(nèi)聚 | 邏輯內(nèi)聚 | 巧合內(nèi)聚 |
    ??? 強<--------------------------- 模塊獨立性 ----------------------------弱
    ?
    ??? 1> 功能內(nèi)聚 (Functional Cohesion)
    ?
    ????功能內(nèi)聚是內(nèi)聚度最高的一種模塊類型。如果模塊僅完成一個單一的功能,且該模塊的所有部分是實現(xiàn)這一功能所必須的,沒有多余的語句,則該模塊為功能內(nèi)聚。功能內(nèi)聚模塊的結(jié)構(gòu)緊湊、界面清晰,易于理解和維護,因而可靠性強;又由于其功能單一,故復(fù)用率高。所以它是模塊劃分時應(yīng)注意追求的一種模塊類型。
    ?
    ??? 2> 信息內(nèi)聚 (Informational Cohesion)
    ?
    ??? 這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能都一個唯一的入口。這個模塊將根據(jù)不同的要求,確定該執(zhí)行哪一個功能。由于這個模塊的所有功能都是基于同一數(shù)據(jù)結(jié)構(gòu)(符號表),因此它是一個信息內(nèi)聚模塊。
    ?
    ??? 信息內(nèi)聚模塊可以看作多個功能內(nèi)聚模塊的組合,并且達到信息的隱蔽。即把某個數(shù)據(jù)結(jié)構(gòu)、資源或設(shè)備隱蔽在一個模塊內(nèi),不為別的模塊所知曉。如果一個模塊的各個成分和同一個功能密切相關(guān),而且一個成分的輸出作為另一個成分的輸入,則稱為順序內(nèi)聚
    ?
    ??? 順序內(nèi)聚的模塊內(nèi),后執(zhí)行的語句或語句段往往依賴先執(zhí)行的語句或語句段,以先執(zhí)行的部分為條件。由于模塊內(nèi)各處理元素間存在著這種邏輯聯(lián)系,所以順序內(nèi)聚模塊的可理解性很強,屬高內(nèi)聚度類型模塊。
    ?
    ??? 3> 通信內(nèi)聚 (Communication Cohesion)
    ?
    ??? 若一個模塊中的各處理元素需引用共同的數(shù)據(jù)(同一數(shù)據(jù)項、數(shù)據(jù)區(qū)或文件),即使用了相同的輸入數(shù)據(jù)或輸出數(shù)據(jù),則稱其元素間的聯(lián)系為通信內(nèi)聚。通信內(nèi)聚的各部分間是借助共同使用的數(shù)據(jù)聯(lián)系在一起的,故有較好的可理解性。通常內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。
    ?
    ??? 4> 過程內(nèi)聚 (Procedural Cohesion)
    ?
    ??? 如果一個模塊內(nèi)的各個處理元素是相關(guān)的,而且必須按固定的次序執(zhí)行,這種內(nèi)聚就叫做過程內(nèi)聚。過程內(nèi)聚的各模塊內(nèi)往往體現(xiàn)為有次序的流程。
    ?
    ??? 在使用流程圖作為工具設(shè)計程序時,把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。例如把流程圖中的循環(huán)部分、判定部分、計算部分分成三個模塊,則這三個模塊都是過程內(nèi)聚的。
    ?
    ??? 5> 時間內(nèi)聚 (Classical Cohesion)
    ?
    ??? 時間內(nèi)聚又稱為經(jīng)典內(nèi)聚或瞬時內(nèi)聚。時間內(nèi)聚是指一個模塊中包含的任務(wù)需要在同一時間內(nèi)執(zhí)行(如初始化,結(jié)束等所需操作)。與巧合內(nèi)聚和邏輯內(nèi)聚相比,這種內(nèi)聚類型要稍強些,因為至少在時間上,這些任務(wù)可以一起完成。但時間內(nèi)聚和偶然內(nèi)聚、邏輯內(nèi)聚一樣,都屬低內(nèi)聚度類型。
    ?
    ??? 6> 邏輯內(nèi)聚 (Logical Cohesion)
    ?
    ??? 一個模塊完成的任務(wù)在邏輯上屬于相同或相似的一類(例如用一個模塊產(chǎn)生各種類型的輸出),則該種模塊內(nèi)的聯(lián)系稱為邏輯內(nèi)聚。每次調(diào)用模塊時,由傳送給模塊的判定參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。
    ?
    ??? 邏輯內(nèi)聚的模塊各成分之間在功能上并無關(guān)系,即使局部功能的修改有時也會影響全局,因此主要的困難有:
    ?
    ??? ① 修改困難,調(diào)用模塊中有一個要對其改動,還要考慮到其它調(diào)用模塊;
    ??? ② 模塊內(nèi)需要增加開關(guān),以判別是誰調(diào)用,因而增加了塊間聯(lián)系;
    ??? ③ 實際上每次調(diào)用只執(zhí)行模塊中的一部分,而其它部分也一同被裝入內(nèi)存,因而效率不高。
    ?
    ??? 7> 巧合內(nèi)聚(Coincidental Cohesion)
    ?
    ??? 塊內(nèi)的各個任務(wù)(通過語句或指令來實現(xiàn)的)沒有什么有意義的聯(lián)系,它們之所以能構(gòu)成一個模塊完全是偶然的原因。
    ?
    ??? 這類模塊內(nèi)部沒有實質(zhì)性的聯(lián)系,很可能在某種情況下一個調(diào)用模塊需要對它修改而別的模塊不需要。這時就很難處理。同時,這種模塊的含義也不易理解,甚至難以為它取一個合適的名字,偶然內(nèi)聚的模塊也難于測試。所以,在空間允許的情況下,不應(yīng)使用這種模塊。
    ?
    ??? 2.塊間聯(lián)系的度量——耦合度
    ?
    ??? 耦合度是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。耦合強弱取決于模塊間接口的復(fù)雜程度、進入訪問一個模塊的點及通過接口的數(shù)據(jù)。在軟件設(shè)計中應(yīng)該追求盡可能松散的耦合系統(tǒng),在這樣的系統(tǒng)中可以研究、測試或修改、維護任何一個模塊,而不需要對系統(tǒng)的其它模塊有很多的了解或影響其它模塊的實現(xiàn)。此外,當某處發(fā)生錯誤時,低耦合度系統(tǒng)的錯誤傳播的范圍相對小些。
    ?
    ??? 耦合度取決于各個模塊間接口的復(fù)雜程度、調(diào)用模塊的方式,以及哪些信息通過接口。耦合度的強弱依賴以下幾個因素:
    ?
    ??? (1)一個模塊對另一個模塊的調(diào)用
    ??? (2)一個模塊向另一個模塊傳遞的數(shù)據(jù)量
    ??? (3)一個模塊施加到另一個模塊的控制的多少
    ??? (4)模塊之間接口的復(fù)雜度
    ?
    ??? 一般模塊之間可能的連接方式有以下幾種,耦合度由低到高如下所示:
    ?
    ??? 低<------------------------------ 耦合性 ------------------------------低
    ??? |?非直接耦合 |?數(shù)據(jù)耦合 |?標記耦合 |?控制耦合 |?外部耦合 |?公共耦合 |?內(nèi)容耦合 |
    ??? 強<---------------------------- 模塊獨立性 -----------------------------弱
    ?
    ??? 1> 非直接耦合 (Nondirective Coupling)
    ?
    ??? 指兩個模塊彼此完全獨立,沒有直接聯(lián)系。它們之間的唯一聯(lián)系僅僅在于它們同屬于一個軟件系統(tǒng)或同有一個上層模塊。這是耦合程度最低的一種。當然,系統(tǒng)中只可能有一部分模塊屬此種聯(lián)系,因為一個程序系統(tǒng)中不可能所有的模塊都完全沒有聯(lián)系。
    ?
    ??? 2> 數(shù)據(jù)耦合 (Data Coupling)
    ?
    ??? 兩個模塊彼此交換數(shù)據(jù),如一個模塊的輸出數(shù)據(jù)是另一個模塊的輸入數(shù)據(jù),或一個模塊帶參數(shù)調(diào)用另一個模塊,下層模塊又返回參數(shù),則稱為數(shù)據(jù)耦合。注意這里的數(shù)據(jù)指的是簡單數(shù)據(jù),而不包括控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量。
    ?
    ??? 應(yīng)該說,在一個軟件系統(tǒng)中,此種耦合是不可避免的,且有其積極意義。因為任何功能的實現(xiàn)都離不開數(shù)據(jù)的產(chǎn)生、表示和傳遞。數(shù)據(jù)耦合的聯(lián)系程度也較低。
    ?
    ??? 3> 標記耦合 (Stamp Coupling)
    ?
    ??? 如果一組模塊通過參數(shù)傳遞記錄信息,這稱為標記耦合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。
    ?
    ??? 4> 控制耦合 (Control Coupling)
    ?
    ??? 如果一個模塊通過開關(guān)、標志、名字等控制信息,明顯得控制選擇另一模塊功能,這種耦合稱為控制耦合??刂岂詈蠈儆谥械瘸潭鹊鸟詈希^之數(shù)據(jù)耦合模塊間的聯(lián)系更為緊密。但控制耦合不是一種必須存在的耦合。
    ?
    ??? 當被調(diào)用模塊接收到控制信息作為輸入?yún)?shù)時,說明該模塊內(nèi)部存在多個并列的邏輯路徑,即有多個功能。控制變量用以從多個功能中選擇所要執(zhí)行的部分,因而控制耦合是完全可以避免的。排除控制耦合可按如下步驟進行:
    ?
    ??? ① 找出模塊調(diào)用時所用的一個或多個控制變量;
    ??? ② 在被調(diào)模塊中根據(jù)控制變量找出所有的流程;
    ??? ③ 將每一個流程分解為一個獨立的模塊;
    ??? ④ 將原被調(diào)模塊中的流程選擇部分移到上層模塊,變?yōu)檎{(diào)用判斷。
    ?
    ??? 通過以上變換,可以將控制耦合變?yōu)閿?shù)據(jù)耦合。由于控制耦合增加了設(shè)計和理解的復(fù)雜程度,因此在模塊設(shè)計時要盡量避免使用。當然,如果模塊內(nèi)每一個控制流程規(guī)模相對較小,彼此共性較多,使用控制耦合還是合算的。
    ?
    ??? 5> 外部耦合 (External Coupling)
    ?
    ??? 一組模塊都訪問同一全局簡單變量而不是同一全局數(shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)傳遞該全局變量的信息,則稱之為外部耦合。
    ?
    ??? 6> 公共耦合 (Common Coupling)
    ?
    ??? 公共耦合又稱公共環(huán)境耦合或數(shù)據(jù)區(qū)耦合。若多個模塊對同一個數(shù)據(jù)區(qū)進行存取操作,它們之間的關(guān)系稱為公共耦合。公共數(shù)據(jù)區(qū)可以是全程變量、共享的數(shù)據(jù)區(qū)、內(nèi)存的公共復(fù)蓋區(qū)、外存上的文件、物理設(shè)備等。當兩個模塊共享的數(shù)據(jù)很多,通過參數(shù)傳遞可能不方便時,可以使用公共耦合。公共耦合共享數(shù)據(jù)區(qū)的模塊越多,數(shù)據(jù)區(qū)的規(guī)模越大,則耦合程度越強。公共耦合最弱的一種形式是:兩個模塊共享一個數(shù)據(jù)變量,一個模塊只向里寫數(shù)據(jù),另一個模塊只從里讀數(shù)據(jù)。
    ?
    ??? 當公共耦合程度很強時,會造成關(guān)系錯綜復(fù)雜,難以控制,錯誤傳遞機會增加,系統(tǒng)可靠性降低,可理解、維護性差。
    ?
    ??? 7> 內(nèi)容耦合 (Content Coupling)
    ?
    ??? 內(nèi)容耦合是耦合程序最高的一種形式。若一個模塊直接訪問另一模塊的內(nèi)部代碼或數(shù)據(jù),即出現(xiàn)內(nèi)容耦合。內(nèi)容耦合的存在嚴重破壞了模塊的獨立性和系統(tǒng)的結(jié)構(gòu)化,代碼互相糾纏,運行錯綜復(fù)雜,程序的靜態(tài)結(jié)構(gòu)和動態(tài)結(jié)構(gòu)很不一致,其惡劣結(jié)果往往不可預(yù)測。 內(nèi)容耦合往往表現(xiàn)為以下幾種形式:
    ?
    ??? ①一個模塊訪問另一模塊的內(nèi)部代碼或數(shù)據(jù);
    ??? ②一個模塊不通過正常入口而轉(zhuǎn)到另一個模塊的內(nèi)部(如使用GOTO語句或JMP指令直接進入另一模塊內(nèi)部);
    ??? ③兩個模塊有一部分代碼重迭(可能出現(xiàn)在匯編程序中,在一些非結(jié)構(gòu)化的高級語言,如COBOL中也可能出現(xiàn));
    ??? ④一個模塊有多個入口(這意味著一個模塊有多種功能)。
    ?
    ??? 一般講,在模塊劃分時,應(yīng)當盡量使用數(shù)據(jù)耦合。少用控制耦合(盡量轉(zhuǎn)成數(shù)據(jù)耦合),限制公共耦合的范圍,完全不用內(nèi)容耦合。
    ?
    ?
    ?
    ?




    -The End-

    posted on 2009-05-15 21:08 decode360-3 閱讀(3043) 評論(0)  編輯  收藏 所屬分類: Exam
    主站蜘蛛池模板: 久久国产精品亚洲综合| 久久黄色免费网站| 亚洲精品午夜国产va久久| 亚洲午夜国产精品无码老牛影视| 成人黄软件网18免费下载成人黄18免费视频 | 亚洲综合久久1区2区3区 | 日韩在线观看免费| 亚洲人成图片网站| 亚洲第一永久在线观看| 亚洲人成人网站色www| 亚洲精品国产精品乱码不卞| 午夜免费福利在线| 国色精品卡一卡2卡3卡4卡免费| 国产精品区免费视频| xxxxx做受大片视频免费| 在线精品自拍亚洲第一区| 亚洲精品天堂在线观看| 亚洲ts人妖网站| 亚洲成人黄色在线观看| 久久久久无码精品亚洲日韩| 亚洲午夜久久久久久久久电影网| 亚洲熟伦熟女新五十路熟妇| 免费在线观看中文字幕| 四虎影视精品永久免费| 国产一精品一aⅴ一免费| 无码一区二区三区免费视频| 黄页网站在线看免费| 综合在线免费视频| 三年片在线观看免费大全| 久久久久久久免费视频| av无码免费一区二区三区| 亚洲高清中文字幕免费| 国产无人区码卡二卡三卡免费| 99re在线这里只有精品免费| 在线免费观看国产| 37pao成人国产永久免费视频| 一区二区三区观看免费中文视频在线播放| 国产真人无码作爱视频免费| 一个人看的www免费视频在线观看| 成在线人免费无码高潮喷水| 国产色无码精品视频免费|