官术网_书友最值得收藏!

  • 現(xiàn)代軟件工程
  • 周蘇
  • 2104字
  • 2020-05-29 11:56:10

4.3 關(guān)注點(diǎn)分離

一個(gè)關(guān)注點(diǎn)是一個(gè)特征或行為,被指定為軟件需求模型的一部分。通過將關(guān)注點(diǎn)分割為更小的關(guān)注點(diǎn)(由此產(chǎn)生更多可管理的塊),使得解決一個(gè)問題需要付出更少的工作量和時(shí)間。

考慮兩個(gè)問題:p1和p2,如果p1的認(rèn)知復(fù)雜度高于p2,結(jié)果是:求解p1所需的工作量就會(huì)大于求解p2所需的工作量。一般情況下,這種結(jié)果是顯而易見的,因?yàn)榍蠼鈴?fù)雜問題確實(shí)需要更多的時(shí)間。

另一個(gè)結(jié)果是:兩個(gè)問題被結(jié)合到一起的認(rèn)知復(fù)雜度經(jīng)常會(huì)高于每個(gè)問題各自的認(rèn)知復(fù)雜度之和,這就引出了“分而治之”的策略——把一個(gè)復(fù)雜問題分解為若干可管理的塊來求解時(shí)將會(huì)更容易。這對(duì)于軟件模塊化具有重要的意義。

關(guān)注點(diǎn)分離是軟件設(shè)計(jì)和實(shí)現(xiàn)中的一個(gè)重要原則,它表明任何復(fù)雜問題如果被分解為可以獨(dú)立解決和/或優(yōu)化的若干塊,該復(fù)雜問題就能夠更容易地被處理。它意味著應(yīng)該這樣來組織軟件,使得程序中的每個(gè)元素(類、方法和過程等)只做一件事。這樣就能夠集中注意力在一個(gè)元素上而無須考慮程序中的其他元素。可以通過了解其關(guān)注點(diǎn)來了解程序的每個(gè)部分,當(dāng)需要進(jìn)行某些改變時(shí),變更只局限在少數(shù)的元素上。

分離關(guān)注點(diǎn)的重要性在計(jì)算機(jī)科學(xué)歷史的早期階段就被人們認(rèn)識(shí)到了。20世紀(jì)50年代初期發(fā)明了子程序,隨后的程序構(gòu)造機(jī)制,例如對(duì)象類,也設(shè)計(jì)用來為實(shí)現(xiàn)分離關(guān)注點(diǎn)提供更好的機(jī)制。

雖然人們普遍贊同分離關(guān)注點(diǎn)是一個(gè)很好的軟件工程實(shí)踐,但清楚地界定關(guān)注點(diǎn)的真正內(nèi)涵是很難的。有時(shí),它被定義為一個(gè)功能概念(比如,關(guān)注點(diǎn)是系統(tǒng)中的某些功能要素)。同樣,它也可以被定義得非常寬泛,如定義它是“程序中任意一塊興趣點(diǎn)或焦點(diǎn)片段”。這兩個(gè)定義都不是很有用,因?yàn)殛P(guān)注點(diǎn)肯定不僅僅是簡(jiǎn)單的功能元素。

實(shí)際上,關(guān)注點(diǎn)是系統(tǒng)信息持有者對(duì)系統(tǒng)需求和優(yōu)先權(quán)的真實(shí)反映。系統(tǒng)性能可以是一個(gè)關(guān)注點(diǎn),因?yàn)槭褂谜呦M軌虻玫较到y(tǒng)的及時(shí)響應(yīng);某些項(xiàng)目信息持有者關(guān)心的可能是系統(tǒng)應(yīng)該包括某特殊功能;對(duì)系統(tǒng)提供技術(shù)支持的公司關(guān)注的可能是系統(tǒng)能夠很容易地維護(hù)。因此,關(guān)注點(diǎn)可以定義為一個(gè)或一組項(xiàng)目信息持有者感興趣的或者對(duì)他們意義重大的事情。

如果把關(guān)注點(diǎn)看做是組織需求的一種方式,可以看出將關(guān)注點(diǎn)分離實(shí)現(xiàn)在不同的程序元素中是一個(gè)很好的方法。當(dāng)用關(guān)注點(diǎn)來表示一個(gè)需求或一組相關(guān)需求時(shí),很容易在實(shí)現(xiàn)這些關(guān)注點(diǎn)的程序組件中跟蹤需求。如果需求改變了,程序必須改變的部分是明顯的。

下面是幾種信息持有者關(guān)注點(diǎn)。

1)功能性關(guān)注點(diǎn)。它是包含在系統(tǒng)中的與特殊功能相關(guān)的關(guān)注點(diǎn)。例如,在火車控制系統(tǒng)中,一個(gè)特殊的功能性關(guān)注點(diǎn)是火車制動(dòng)。

2)服務(wù)質(zhì)量關(guān)注點(diǎn)。它是與系統(tǒng)的非功能性行為相關(guān)的關(guān)注點(diǎn)。這些包括性能、可靠性和可用性等特征。

3)政策關(guān)注點(diǎn)。這是與管理系統(tǒng)使用的總的政策相關(guān)的關(guān)注點(diǎn),包括信息安全關(guān)注點(diǎn),以及與業(yè)務(wù)規(guī)則相關(guān)的關(guān)注點(diǎn)。

4)系統(tǒng)關(guān)注點(diǎn)。這是與系統(tǒng)總體屬性相關(guān)的關(guān)注點(diǎn),例如它的可維護(hù)性和可配置能力。

5)機(jī)構(gòu)關(guān)注點(diǎn)。這是與機(jī)構(gòu)的目標(biāo)和優(yōu)先級(jí)相關(guān)的關(guān)注點(diǎn),例如在預(yù)算范圍內(nèi)完成系統(tǒng)構(gòu)建,對(duì)現(xiàn)存的軟件資產(chǎn)的利用,或者是維持機(jī)構(gòu)聲譽(yù)。

系統(tǒng)的核心關(guān)注點(diǎn)是那些關(guān)系到它的主要目標(biāo)的功能性關(guān)注點(diǎn)。因此,對(duì)于一個(gè)醫(yī)院病人信息系統(tǒng)來說,核心功能性關(guān)注點(diǎn)是創(chuàng)建、編輯、檢索和管理病人的記錄。除了這些核心關(guān)注點(diǎn)外,大型系統(tǒng)還有第二類的功能性關(guān)注點(diǎn)。這些包括與核心關(guān)注點(diǎn)共享信息的功能,滿足其非功能性需求所需要的功能等。

例如,考慮這樣的一個(gè)系統(tǒng),它的一個(gè)需求是提供對(duì)共享緩存的并發(fā)訪問。一個(gè)進(jìn)程向緩存中輸入數(shù)據(jù),另一個(gè)進(jìn)程從同一個(gè)緩存讀取數(shù)據(jù)。此共享緩存是數(shù)據(jù)獲取系統(tǒng)的一部分,生產(chǎn)者進(jìn)程將數(shù)據(jù)放入共享緩存,消費(fèi)者進(jìn)程從中將數(shù)據(jù)取走。在這里,核心關(guān)注點(diǎn)是維護(hù)一個(gè)共享緩存,所以核心功能是向緩存添加和從緩存刪除元素。但是,要確保生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程互不干擾,必須有一個(gè)第二類的同步關(guān)注點(diǎn)。系統(tǒng)設(shè)計(jì)需要保證生產(chǎn)者進(jìn)程在數(shù)據(jù)還沒有消費(fèi)之前不能重寫它,消費(fèi)者進(jìn)程不能從空緩存中提取數(shù)據(jù)。

除了第二類關(guān)注點(diǎn)之外,其他的關(guān)注點(diǎn)如服務(wù)質(zhì)量關(guān)注點(diǎn)和機(jī)構(gòu)政策關(guān)注點(diǎn)反映的是基本的系統(tǒng)需求。一般來講,這些關(guān)注點(diǎn)是系統(tǒng)關(guān)注點(diǎn)——它們作用于整個(gè)系統(tǒng)而不是單個(gè)需求或?qū)@些需求的程序?qū)崿F(xiàn)。為了區(qū)別于核心關(guān)注點(diǎn),就稱其為橫切關(guān)注點(diǎn)(cross-cutting concern)。第二類功能性關(guān)注點(diǎn)也可能是橫切關(guān)注點(diǎn),雖然它們不總是橫貫整個(gè)系統(tǒng);更確切地說,它們關(guān)聯(lián)于能提供若干相關(guān)功能的一組核心關(guān)注點(diǎn)。

橫切關(guān)注點(diǎn)如圖4-2所示,此圖基于一個(gè)網(wǎng)上銀行系統(tǒng),該系統(tǒng)有一些針對(duì)新客戶的需求,如信用審查和地址檢驗(yàn),它也有關(guān)于已存在客戶的管理和客戶賬戶的管理等方面的需求。所有這些都是核心關(guān)注點(diǎn),因?yàn)樗鼈兌己拖到y(tǒng)的主要目標(biāo)相關(guān)(提供網(wǎng)上銀行服務(wù))。但是,此系統(tǒng)也有根據(jù)銀行信息安全政策的信息安全需求,以及能夠確保在系統(tǒng)失敗時(shí)數(shù)據(jù)不至于丟失的恢復(fù)需求。這些是橫切關(guān)注點(diǎn),因?yàn)樗鼈儠?huì)影響系統(tǒng)所有其他需求的實(shí)現(xiàn)。

橫切關(guān)注點(diǎn)使用例(如對(duì)象或函數(shù))等構(gòu)造機(jī)制不能被局部化。為了確保對(duì)關(guān)注點(diǎn)的分離,系統(tǒng)可以設(shè)計(jì)成核心和擴(kuò)展兩部分,核心系統(tǒng)實(shí)現(xiàn)主要關(guān)注點(diǎn),而擴(kuò)展系統(tǒng)用來實(shí)現(xiàn)第二類關(guān)注點(diǎn)。

關(guān)注點(diǎn)分離在其他相關(guān)設(shè)計(jì)概念中也有體現(xiàn),如模塊化、方面、功能獨(dú)立和求精等。

978-7-111-52634-6-Chapter04-2.jpg

圖4-2 橫切關(guān)注點(diǎn)

主站蜘蛛池模板: 迁安市| 吉林市| 临沂市| 根河市| 丹寨县| 顺平县| 尚志市| 大新县| 万盛区| 甘孜县| 浪卡子县| 乌兰察布市| 商南县| 赤城县| 鄂伦春自治旗| 蓬安县| 晴隆县| 双流县| 宿州市| 克山县| 涞源县| 会理县| 焉耆| 双辽市| 二连浩特市| 广灵县| 璧山县| 麻阳| 阳信县| 白银市| 项城市| 西城区| 当涂县| 左贡县| 卫辉市| 叶城县| 安国市| 尉犁县| 黎城县| 德兴市| 德保县|