軟件工程教程(微課版)習(xí)題答案 和孟佯_第1頁(yè)
軟件工程教程(微課版)習(xí)題答案 和孟佯_第2頁(yè)
軟件工程教程(微課版)習(xí)題答案 和孟佯_第3頁(yè)
軟件工程教程(微課版)習(xí)題答案 和孟佯_第4頁(yè)
軟件工程教程(微課版)習(xí)題答案 和孟佯_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

?PAGE7?附錄各章習(xí)題參考答案附錄各章習(xí)題參考答案第1章軟件工程概述1.答:所謂軟件危機(jī),是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)環(huán)節(jié)中所遇到的一系列嚴(yán)峻挑戰(zhàn)。這些“嚴(yán)峻挑戰(zhàn)”遠(yuǎn)非簡(jiǎn)單的“無(wú)法正常運(yùn)行”所能概括,實(shí)際上,幾乎所有的軟件都或多或少地存在各種問(wèn)題。軟件危機(jī)主要聚焦于軟件開發(fā)的策略,如何滿足日益增長(zhǎng)的軟件需求,以及如何有效維護(hù)數(shù)量龐大的現(xiàn)有軟件。2.答:(1)軟件危機(jī)在經(jīng)費(fèi)預(yù)算和完成時(shí)間方面尤為突出,具體表現(xiàn)為:預(yù)算經(jīng)常超出預(yù)期,完成是啊金不斷推遲。這主要是因?yàn)槿狈ωS富的軟件開發(fā)的經(jīng)驗(yàn)和數(shù)據(jù)積累,導(dǎo)致計(jì)劃制定困難。主觀制定的計(jì)劃往往與實(shí)際執(zhí)行情況存在較大偏差,從而使得開發(fā)經(jīng)費(fèi)頻繁超出預(yù)算。同時(shí),由于對(duì)工作量以及開發(fā)難度的估計(jì)不足,進(jìn)度計(jì)劃往往難以按時(shí)完成,開發(fā)時(shí)間不斷被拖延,給項(xiàng)目帶來(lái)巨大壓力。(2)軟件危機(jī)在滿足用戶需求方面表現(xiàn)為:開發(fā)的軟件常常無(wú)法滿足用戶的期望。這主要是因?yàn)樵陂_發(fā)初期,對(duì)用戶的需求了解不夠明確和具體,導(dǎo)致需求表達(dá)不清。隨著開發(fā)工作的進(jìn)行,軟件開發(fā)人員與用戶之間的溝通不足,使得問(wèn)題無(wú)法及時(shí)得到解決,最終導(dǎo)致開發(fā)的軟件與用戶的要求相去甚遠(yuǎn),甚至導(dǎo)致開發(fā)失敗。(3)軟件危機(jī)在軟件可維護(hù)性方面的具體表現(xiàn)為:開發(fā)的軟件往往難以維護(hù)。由于缺乏統(tǒng)一的、公認(rèn)的規(guī)范,軟件開發(fā)人員各自為政,按照個(gè)人的風(fēng)格進(jìn)行工作,各行其是,導(dǎo)致開發(fā)過(guò)程缺乏完整、規(guī)范的文檔記錄,使得在軟件出現(xiàn)問(wèn)題時(shí)難以進(jìn)行有針對(duì)性的修改。此外,程序結(jié)構(gòu)的不合理也增加了維護(hù)的難度,一旦運(yùn)行時(shí)發(fā)現(xiàn)錯(cuò)誤,往往難以進(jìn)行有效的修復(fù),從而導(dǎo)致軟件的可維護(hù)性極差。(4)軟件危機(jī)在軟件可靠性方面的具體表現(xiàn)為:所開發(fā)的軟件往往可靠性不足。這主要是由于在開發(fā)過(guò)程中缺乏確保軟件質(zhì)量的體系和措施,導(dǎo)致軟件質(zhì)量無(wú)法得到有效的保障。同時(shí),在軟件測(cè)試階段,由于缺乏嚴(yán)格的、充分的和完全的測(cè)試,使得提交給用戶的軟件存在大量潛在問(wèn)題。這些問(wèn)題在運(yùn)行過(guò)程中逐漸暴露出來(lái),嚴(yán)重影響了軟件的可靠性和穩(wěn)定性。3.答:(1)隨著技術(shù)的進(jìn)步,軟件的規(guī)模持續(xù)擴(kuò)大,結(jié)構(gòu)也愈發(fā)復(fù)雜;(2)軟件開發(fā)管理是一項(xiàng)既困難又復(fù)雜任務(wù);(3)軟件開發(fā)費(fèi)用的持續(xù)上升是業(yè)界的一大難題;(4)軟件開發(fā)技術(shù)落后;(5)生產(chǎn)方式落后,亟待改進(jìn);(6)開發(fā)工具亟待更新,生產(chǎn)效率提升緩慢。4.答:為了應(yīng)付當(dāng)前的軟件危機(jī),軟件工程成為了關(guān)鍵的可行方案之一。5.答:答:(1)程序設(shè)計(jì)時(shí)代(1946——1956年);(2)程序系統(tǒng)時(shí)代(1956——1968年);(3)軟件工程時(shí)代(1968年至今)。6.答:這七條基本原理是:模塊化、結(jié)構(gòu)化、抽象化、可重用性、可維護(hù)性、可測(cè)試性及可靠性。7.答:軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的工程科學(xué)。軟件工程是一門研究和應(yīng)用如何以系統(tǒng)性的、規(guī)范化的、可定量的過(guò)程化方法去開發(fā)和維護(hù)軟件的學(xué)科。它涉及程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)庫(kù)、軟件開發(fā)工具、系統(tǒng)平臺(tái)、標(biāo)準(zhǔn)、設(shè)計(jì)模式等多個(gè)方面,旨在提高軟件生產(chǎn)效率,提升軟件質(zhì)量,并降低軟件成本。軟件工程通過(guò)采用工程化方法、強(qiáng)調(diào)團(tuán)隊(duì)協(xié)作和溝通、注重持續(xù)改進(jìn)和優(yōu)化以及引入先進(jìn)技術(shù)等方法來(lái)克服軟件危機(jī),為軟件行業(yè)的健康發(fā)展提供了有力的支持。8.答:流程圖是一種圖形化的表示工具,用于描述一個(gè)過(guò)程中各個(gè)步驟和操作的順序和關(guān)系。它通常包含開始節(jié)點(diǎn)、過(guò)程節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn),通過(guò)箭頭連接各個(gè)節(jié)點(diǎn),表示步驟之間的流動(dòng)方向。在流程圖中,過(guò)程節(jié)點(diǎn)可以包含條件判斷、循環(huán)和子流程等,箭頭上的標(biāo)記則可以表示條件判斷、循環(huán)或其他控制流程。流程圖技術(shù)通過(guò)提供清晰的視覺表示、方便的交流與溝通、錯(cuò)誤的早期發(fā)現(xiàn)、指導(dǎo)編碼以及文檔化與知識(shí)傳承等功能,對(duì)軟件開發(fā)過(guò)程起到了重要的輔助作用。9.答:結(jié)構(gòu)化編程是一種強(qiáng)調(diào)程序代碼清晰性、可讀性和可維護(hù)性的編程方法。它遵循一系列準(zhǔn)則和規(guī)范,以確保代碼的易讀性和可維護(hù)性,使程序更易于理解和修改。結(jié)構(gòu)化編程的主要特點(diǎn)包括模塊化、順序性等。其中,模塊化是將程序劃分為若干個(gè)模塊,每個(gè)模塊負(fù)責(zé)特定的功能,以提高代碼的可讀性和可維護(hù)性;而順序性則是按照一定的順序執(zhí)行程序,以確保程序的正確性和可讀性。PASCAL和C等現(xiàn)代編程語(yǔ)言在編寫結(jié)構(gòu)化程序方面發(fā)揮了重要作用。這些語(yǔ)言支持結(jié)構(gòu)化編程的核心理念,提供了各種工具和結(jié)構(gòu)來(lái)幫助程序員編寫清晰、易于維護(hù)的代碼。例如,它們支持將程序劃分為函數(shù)或方法,這些函數(shù)或方法各自負(fù)責(zé)特定的任務(wù),并可以在整個(gè)程序中被重用。此外,這些語(yǔ)言還提供了控制結(jié)構(gòu),如循環(huán)和條件語(yǔ)句,以支持順序執(zhí)行和邏輯判斷。與非結(jié)構(gòu)化程序相比,結(jié)構(gòu)化程序具有顯著的優(yōu)點(diǎn)。首先,結(jié)構(gòu)化程序更加易于理解和維護(hù)。由于程序被劃分為模塊和函數(shù),每個(gè)部分都有明確的功能和接口,這使得程序員可以更容易地理解程序的運(yùn)作方式,并對(duì)其進(jìn)行修改或擴(kuò)展。其次,結(jié)構(gòu)化程序通常具有更高的可靠性。由于遵循了嚴(yán)格的編程規(guī)范和準(zhǔn)則,結(jié)構(gòu)化程序更不容易出現(xiàn)錯(cuò)誤或異常行為。最后,結(jié)構(gòu)化程序也更容易進(jìn)行測(cè)試和調(diào)試。由于程序結(jié)構(gòu)清晰、模塊化,測(cè)試人員可以更容易地編寫測(cè)試用例,并定位和解決潛在的問(wèn)題。綜上所述,結(jié)構(gòu)化編程是一種重要的編程方法,PASCAL和C等現(xiàn)代編程語(yǔ)言為編寫結(jié)構(gòu)化程序提供了有力的支持。與非結(jié)構(gòu)化程序相比,結(jié)構(gòu)化程序具有更高的可讀性、可維護(hù)性和可靠性,因此在軟件開發(fā)中得到了廣泛的應(yīng)用。答:面向?qū)ο笤O(shè)計(jì)方法相對(duì)于面向數(shù)據(jù)流的設(shè)計(jì)方法的主要優(yōu)勢(shì)在于:(1)抽象與封裝:面向?qū)ο笤O(shè)計(jì)方法通過(guò)對(duì)象和類實(shí)現(xiàn)更好的抽象和封裝,提高了代碼的可讀性和安全性。(2)繼承與多態(tài):面向?qū)ο笤O(shè)計(jì)方法支持繼承和多態(tài),提高了代碼的復(fù)用性和擴(kuò)展性。(3)模塊化:面向?qū)ο笤O(shè)計(jì)方法將系統(tǒng)劃分為獨(dú)立的對(duì)象,降低了模塊間的耦合度,增強(qiáng)了系統(tǒng)的可維護(hù)性。(4)重用性:通過(guò)類和對(duì)象的重用,面向?qū)ο笤O(shè)計(jì)方法減少了代碼冗余,提高了開發(fā)效率。11.答:軟件工程的主要思想是強(qiáng)調(diào)軟件開發(fā)過(guò)程中應(yīng)用工程化原則的重要性。軟件工程的目標(biāo)是實(shí)現(xiàn)軟件的優(yōu)質(zhì)高產(chǎn)。軟件工程的目的是在經(jīng)費(fèi)的預(yù)算范圍內(nèi),按期交付出用戶滿意的、質(zhì)量合格的軟件產(chǎn)品。第2章軟件過(guò)程1.答:瀑布模型是一個(gè)順序的軟件開發(fā)過(guò)程,其中每個(gè)開發(fā)階段如需求分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、部署和維護(hù)都是線性連接的,每個(gè)階段完成后才能開始下一個(gè)。2.答:V模型與瀑布模型的主要區(qū)別在于V模型強(qiáng)調(diào)了測(cè)試階段與開發(fā)階段的對(duì)應(yīng)關(guān)系。在V模型中,測(cè)試活動(dòng)從需求分析開始就與各個(gè)開發(fā)階段相對(duì)應(yīng),以確保早期驗(yàn)證和驗(yàn)證活動(dòng)。3.答:迭代模型是一種軟件開發(fā)過(guò)程,其中開發(fā)被組織為一系列重復(fù)的小項(xiàng)目。其優(yōu)點(diǎn)包括能夠更早發(fā)現(xiàn)和修復(fù)缺陷,以及能夠更快地適應(yīng)需求變化。4.答:增量模型將軟件開發(fā)分解為多個(gè)增量構(gòu)建,每個(gè)增量構(gòu)建增加一部分功能。這種模型允許部分系統(tǒng)較早地投入使用,并且隨著每個(gè)增量的完成,逐漸構(gòu)建完整的最終系統(tǒng)。5.答:螺旋模型包括計(jì)劃、風(fēng)險(xiǎn)分析、工程和客戶評(píng)估四個(gè)基本組成部分。在每個(gè)迭代或“螺旋”中,項(xiàng)目團(tuán)隊(duì)首先進(jìn)行風(fēng)險(xiǎn)分析,以識(shí)別和解決可能的項(xiàng)目風(fēng)險(xiǎn),通過(guò)這種方式管理風(fēng)險(xiǎn)。6.答:噴泉模型特別適合于面向?qū)ο蟮拈_發(fā)項(xiàng)目,尤其是在需求不斷變化的環(huán)境中。7.答:極限編程(XP)的核心實(shí)踐包括測(cè)試先行(Test-DrivenDevelopment)、持續(xù)集成(ContinuousIntegration)、簡(jiǎn)單設(shè)計(jì)、配對(duì)編程和重構(gòu)。8.答:敏捷軟件開發(fā)的核心價(jià)值觀包括:個(gè)體和互動(dòng)高于流程和工具,工作的軟件高于詳盡的文檔,客戶合作高于合同談判,以及響應(yīng)變化高于遵循計(jì)劃。9.答:工業(yè)極限編程(IXP)是極限編程(XP)的一種擴(kuò)展,適用于更大規(guī)模的項(xiàng)目,強(qiáng)調(diào)結(jié)構(gòu)化的項(xiàng)目管理和健壯的架構(gòu)設(shè)計(jì),以適應(yīng)大型組織和項(xiàng)目的需要。10.答:敏捷過(guò)程強(qiáng)調(diào)迭代和靈活性,允許需求在項(xiàng)目過(guò)程中變化,而傳統(tǒng)的瀑布模型則遵循一個(gè)嚴(yán)格的順序,需求在項(xiàng)目開始時(shí)被確定,整個(gè)項(xiàng)目遵循計(jì)劃推進(jìn)。第3章需求分析與軟件需求規(guī)約1.答:需求是應(yīng)用程序必須提供的一些功能特性和性能要求。需求在項(xiàng)目開發(fā)中的作用:在一個(gè)項(xiàng)目的啟動(dòng)階段,需求收集是確保理解客戶需求的及其重要的一個(gè)環(huán)節(jié)。這個(gè)環(huán)節(jié)包括與客戶進(jìn)行溝通,了解其各方面的需求和期望,以便確立項(xiàng)目開發(fā)的方向。在開發(fā)階段,需要通過(guò)用戶的需求來(lái)指導(dǎo)開發(fā)的方向,確保項(xiàng)目能夠朝著正確方向進(jìn)行。在項(xiàng)目結(jié)束階段,同樣需要使用需求來(lái)驗(yàn)證已完成的應(yīng)用程序是否能實(shí)際上能夠滿足用戶的需要。2.答:好的需求,應(yīng)該有以下幾個(gè)特征:(1)清晰明確。需求應(yīng)該清晰明確地描述系統(tǒng)或產(chǎn)品的功能、性能、界面等方面。這有助于避免歧義和誤解,并確保開發(fā)團(tuán)隊(duì)和利益相關(guān)者對(duì)需求的理解一致;(2)沒有歧義。如果需求的描述不能讓人搞清楚到底需要什么,那么就很難構(gòu)建滿足此需求的系統(tǒng)。盡管這看似是任何好的需求必須具備的明顯特征,但有時(shí)比設(shè)想的更難保證;(3)一致。項(xiàng)目的需求必須相互一致。這意味著項(xiàng)目的各個(gè)部分的需求之間不僅不能自相矛盾,而且當(dāng)問(wèn)題沒有解決時(shí),還不能提供一些限制。每個(gè)需求也要保證前后一致;(4)具有優(yōu)先級(jí)。當(dāng)開始著手項(xiàng)目規(guī)劃時(shí),一大堆的需求擺在眼前,沒有需求的優(yōu)先級(jí),很可能會(huì)影響項(xiàng)目開發(fā)的方向。例如,當(dāng)界面的美觀需求和穩(wěn)定性需求同時(shí)出現(xiàn)在需求文檔中而沒有區(qū)分優(yōu)先級(jí)的時(shí)候,團(tuán)隊(duì)可能在短時(shí)間內(nèi)花費(fèi)了大量時(shí)間和資源來(lái)設(shè)計(jì)一個(gè)漂亮而復(fù)雜的用戶界面,而忽略了確保系統(tǒng)基礎(chǔ)設(shè)施的穩(wěn)定性和安全性;(5)可驗(yàn)證。需求必須可驗(yàn)證。需求的可驗(yàn)證性是指需求是否能夠被明確地驗(yàn)證和檢查,以確保軟件系統(tǒng)在開發(fā)過(guò)程中符合這些需求。它是一個(gè)關(guān)鍵的屬性,有助于確保開發(fā)團(tuán)隊(duì)和用戶對(duì)于需求的理解達(dá)成一致。因此,在開發(fā)過(guò)程中需要有效地驗(yàn)證和測(cè)試;(6)避免使用不合適的詞語(yǔ)。在我們的需求中,一些詞的含義很模糊或很主觀,把它們添加到需求中,可能使整個(gè)表達(dá)模糊不清并且很不準(zhǔn)確。例如像更快、更好、更多以及更亮等這樣的比較性的詞語(yǔ)和像最小化、最大化、提高以及優(yōu)化這種含糊不清的詞語(yǔ)等。3.答:以一種通用的需求分析方法來(lái)劃分,需求可以劃分為:業(yè)務(wù)需求、用戶需求、功能性需求、非功能性需求、執(zhí)行需求。業(yè)務(wù)需求規(guī)定了項(xiàng)目的高層次目標(biāo),解釋了客戶期望實(shí)現(xiàn)的項(xiàng)目功能。用戶需求與業(yè)務(wù)需求不同,它對(duì)最后的終端用戶如何使用此軟件項(xiàng)目進(jìn)行了詳細(xì)的說(shuō)明。功能性需求是在軟件開發(fā)或系統(tǒng)設(shè)計(jì)中定義的一種需求類型,用于描述系統(tǒng)或應(yīng)用程序應(yīng)該提供的具體功能或行為。這種類型的需求明確規(guī)定了系統(tǒng)需要執(zhí)行的任務(wù)、處理的數(shù)據(jù)以及用戶與系統(tǒng)之間的交互。功能性需求通常以明確、可測(cè)量的方式陳述,以便開發(fā)團(tuán)隊(duì)能夠理解、實(shí)現(xiàn)和驗(yàn)證系統(tǒng)的各項(xiàng)功能。它們和用戶需求類似,但可能包含用戶看不到的一些東西。例如,它們可能描述應(yīng)用程序生成的一些報(bào)告、同其他應(yīng)用程序的接口以及處理時(shí)將訂單按照某種路線從一個(gè)用戶發(fā)送到另一個(gè)用戶的工作流。非功能性需求是系統(tǒng)或軟件的質(zhì)量屬性、性能特征或約束條件,與具體功能無(wú)關(guān)。這類需求關(guān)注系統(tǒng)的性能、安全性、可靠性、可維護(hù)性等方面,對(duì)系統(tǒng)在各種條件下的有效性和可用性至關(guān)重要。這些需求通常不是直接可測(cè)量的,著重考慮系統(tǒng)整體性能和用戶體驗(yàn)。執(zhí)行需求是在向新系統(tǒng)過(guò)渡的過(guò)程中需要的臨時(shí)性功能。答:FURPS是一種軟件質(zhì)量分類模型,用于識(shí)別軟件系統(tǒng)的關(guān)鍵特征和需求。FURPS五個(gè)字母分別為:功能性(Functionality)、可用性(Usability)、可靠性(Reliability)、性能(Performance)以及可支持性(Supportability)。FURPS+是在FURPS的基礎(chǔ)之上,增加了一些軟件工程師認(rèn)為缺少的需求類別。主要提升有四個(gè)方面:設(shè)計(jì)約束:這些設(shè)計(jì)上的約束由其他因素所導(dǎo)致,如硬件平臺(tái)、軟件平臺(tái)、網(wǎng)絡(luò)特征或數(shù)據(jù)庫(kù)。例如,假定正在構(gòu)建一個(gè)銀行應(yīng)用程序,并且需要擁有一個(gè)非??煽康膫浞菹到y(tǒng)。在這種情況下,工程師可能需要項(xiàng)目使用一個(gè)鏡像數(shù)據(jù)庫(kù),在主數(shù)據(jù)庫(kù)崩潰時(shí),存儲(chǔ)每個(gè)線下交易。執(zhí)行需求:軟在某些情況下,項(xiàng)目可能要求使用特定的編程語(yǔ)言進(jìn)行開發(fā),可能是由于項(xiàng)目團(tuán)隊(duì)熟悉該語(yǔ)言,或者是出于性能或安全性等方面的考慮。接口需求:接口需求涉及系統(tǒng)與外部實(shí)體、組件或其他系統(tǒng)之間的交互方式和規(guī)范。這包括系統(tǒng)與用戶界面、硬件設(shè)備、其他軟件系統(tǒng)、數(shù)據(jù)庫(kù)以及其他外部資源的交互。接口需求的目的是確保系統(tǒng)能夠有效地與外部實(shí)體進(jìn)行通信、集成和協(xié)作,以實(shí)現(xiàn)系統(tǒng)的預(yù)期功能和性能。物理需求:物理需求描述了系統(tǒng)部署和運(yùn)行時(shí)所需的硬件、網(wǎng)絡(luò)和其他物理設(shè)施,以及系統(tǒng)與這些環(huán)境之間的交互方式。通過(guò)準(zhǔn)確地描述系統(tǒng)在物理環(huán)境中的要求和限制,可以確保系統(tǒng)能夠在各種條件下穩(wěn)定可靠地運(yùn)行,并且能夠滿足用戶和業(yè)務(wù)的需求。答:常用的需求記錄方法一般有三種。分別是UML記錄、用戶故事記錄、和原型記錄。UML通常用于描繪軟件系統(tǒng)的結(jié)構(gòu)和行為,同時(shí)也可以被運(yùn)用于記錄需求,尤其是在軟件開發(fā)的初期階段。然而,遺憾的是,只有當(dāng)每個(gè)人都能理解UML時(shí),才能夠利用它來(lái)表達(dá)復(fù)雜的需求。與之相反,用戶故事雖然看似技術(shù)含量不高,但其最大的優(yōu)勢(shì)在于人們對(duì)這種方法相當(dāng)熟悉。相較于UML方法,客戶、開發(fā)人員以及項(xiàng)目經(jīng)理無(wú)需進(jìn)行任何培訓(xùn)就能夠編寫和理解用戶故事。因此,對(duì)于設(shè)計(jì)人員而言,這種方法更易于理解,并且可以包含各種可能的情況。然而,與此同時(shí),用戶故事也存在一些缺點(diǎn)。若客戶隨意編寫故事,可能會(huì)對(duì)項(xiàng)目開發(fā)造成嚴(yán)重后果,因?yàn)楣适碌拇朕o可能存在一定程度的歧義。答:需求分析的一般步驟為:需求收集、需求記錄、需求分析、需求整理。識(shí)別需求的優(yōu)先級(jí)需要對(duì)收集到的所有需求進(jìn)行優(yōu)先級(jí)評(píng)估,以確定其重要性和緊急性。一般來(lái)說(shuō),那些對(duì)實(shí)現(xiàn)項(xiàng)目最核心功能或關(guān)鍵業(yè)務(wù)流程至關(guān)重要的需求被視為主要需求,而那些對(duì)項(xiàng)目的成功不是至關(guān)重要,但仍然有一定價(jià)值的需求被視為次要需求。另外還需要考慮需求的技術(shù)可行性。對(duì)于一些需求可能需要技術(shù)上的支持或者有一定的風(fēng)險(xiǎn),需要評(píng)估其實(shí)現(xiàn)的可行性和成本。如果某些需求在技術(shù)上實(shí)現(xiàn)起來(lái)比較困難或者成本較高,但對(duì)項(xiàng)目的成功并不是至關(guān)重要,那么這些需求可能被歸類為次要需求。答:軟件需求規(guī)約是一份詳細(xì)的文檔,用于描述軟件系統(tǒng)的功能、性能、約束和其他相關(guān)方面的需求。軟件需求規(guī)約文檔對(duì)于項(xiàng)目開發(fā)人員和客戶來(lái)說(shuō)都非常重要,因?yàn)樗_立了軟件開發(fā)的方向和范圍,為開發(fā)、測(cè)試和驗(yàn)收提供了依據(jù)。答:SRS文檔的內(nèi)容主要包括以下幾個(gè)方面:總體描述:總體描述應(yīng)當(dāng)提供對(duì)系統(tǒng)的高層概述,包括系統(tǒng)的整體功能、用戶特征、操作環(huán)境、約束等信息。功能需求:功能需求部分應(yīng)當(dāng)討論系統(tǒng)要求的功能。性能需求:性能需求部分應(yīng)當(dāng)準(zhǔn)確描述系統(tǒng)在性能方面的要求,如響應(yīng)時(shí)間、吞吐量、并發(fā)性、可擴(kuò)展性等。實(shí)施目的:實(shí)施目的部分給出了有關(guān)開發(fā)的一些普遍建議。這些建議引導(dǎo)設(shè)計(jì)決定之間的平衡。實(shí)施目的部分可能會(huì)記錄一些潛在的問(wèn)題,比如說(shuō)未來(lái)可能需要的對(duì)系統(tǒng)功能的修改、未來(lái)需要支持的設(shè)備以及復(fù)用性問(wèn)題等設(shè)計(jì)約束:設(shè)計(jì)約束部分應(yīng)該準(zhǔn)確描述各種限制條件,這些條件需要涵蓋硬件、軟件、標(biāo)準(zhǔn)和規(guī)范。硬件方面可能包括可用的處理器類型、內(nèi)存容量、存儲(chǔ)設(shè)備速度等。軟件方面可能涉及到特定操作系統(tǒng)的兼容性、第三方庫(kù)或框架的使用限制等。同時(shí),還需要遵循各種標(biāo)準(zhǔn)和規(guī)范,如安全標(biāo)準(zhǔn)、數(shù)據(jù)處理規(guī)范、用戶界面設(shè)計(jì)指南等。這些約束條件對(duì)系統(tǒng)設(shè)計(jì)具有指導(dǎo)作用,幫助開發(fā)團(tuán)隊(duì)在設(shè)計(jì)過(guò)程中避免不必要的錯(cuò)誤和沖突,確保系統(tǒng)的穩(wěn)定性、可靠性和可維護(hù)性。其他需求:通常指的是一些未在功能性需求、非功能性需求或約束條件中明確涉及的特殊要求或需求。這些需求可能涉及到系統(tǒng)的特定行為、數(shù)據(jù)存儲(chǔ)、備份和恢復(fù)、系統(tǒng)性能優(yōu)化等方面。答:功能性需求是在軟件開發(fā)或系統(tǒng)設(shè)計(jì)中定義的一種需求類型,用于描述系統(tǒng)或應(yīng)用程序應(yīng)該提供的具體功能或行為。這種類型的需求明確規(guī)定了系統(tǒng)需要執(zhí)行的任務(wù)、處理的數(shù)據(jù)以及用戶與系統(tǒng)之間的交互。功能性需求通常以明確、可測(cè)量的方式陳述,以便開發(fā)團(tuán)隊(duì)能夠理解、實(shí)現(xiàn)和驗(yàn)證系統(tǒng)的各項(xiàng)功能。功能需求的識(shí)別通常需要從一個(gè)非正規(guī)的問(wèn)題描述文檔或?qū)?wèn)題的一個(gè)概念性理解中識(shí)別。每個(gè)高級(jí)需求描述的是某些用戶執(zhí)行一些有意義的工作系統(tǒng)時(shí)使用的一種方式。需要注意的是,一個(gè)系統(tǒng)可能面向多種類型的用戶,而這些用戶對(duì)于系統(tǒng)的需求和期望可能截然不同。因此通常我們會(huì)先識(shí)別可能使用系統(tǒng)的不同類型的用戶,然后再?gòu)拿總€(gè)用戶的角度試圖識(shí)別其需求。答:下面是一些已識(shí)別的特征:一致性:所有在文檔中描述的需求應(yīng)該是一致的,不應(yīng)該存在矛盾或沖突。一致性有助于避免在后期開發(fā)中的混淆和錯(cuò)誤。清晰明確性。SRS文檔應(yīng)當(dāng)以清晰、明確的語(yǔ)言表達(dá)所有需求,避免歧義和模棱兩可的表述。每個(gè)需求都應(yīng)該能夠被準(zhǔn)確理解,而無(wú)需額外的解釋。結(jié)構(gòu)化。SRS文檔應(yīng)當(dāng)結(jié)構(gòu)良好,結(jié)構(gòu)良好的文檔易于理解和修改。通常顧客需求會(huì)隨著時(shí)間而變化,因此,為了使修改SRS文檔更加容易,使文檔結(jié)構(gòu)良好是很重要的。版本變更控制。SRS文檔文檔應(yīng)當(dāng)具有良好的變更控制機(jī)制,以便對(duì)需求的任何更改進(jìn)行記錄、審查和批準(zhǔn)。這樣做主要是為了維持文檔的一致性和可追蹤性??蓪彶樾?。SRS文檔文檔應(yīng)當(dāng)易于審查,以確保項(xiàng)目團(tuán)隊(duì)和客戶可以檢查和提出反饋。審查有助于發(fā)現(xiàn)潛在問(wèn)題和改進(jìn)需求的質(zhì)量??沈?yàn)證性。每個(gè)需求都應(yīng)當(dāng)是可驗(yàn)證的,也就是說(shuō),項(xiàng)目開發(fā)人員人員可以通過(guò)測(cè)試或其他手段進(jìn)行驗(yàn)證。這確保了在實(shí)現(xiàn)階段可以準(zhǔn)確地驗(yàn)證系統(tǒng)是否符合規(guī)格。黑匣子視圖。SRS文檔僅需要說(shuō)明系統(tǒng)應(yīng)該做什么,而不說(shuō)明系統(tǒng)內(nèi)部具體怎么實(shí)現(xiàn)。這意味著SRS文檔應(yīng)當(dāng)指明系統(tǒng)的外部行為,但不討論實(shí)施問(wèn)題。把將要開發(fā)的系統(tǒng)看作是一個(gè)黑匣子,并執(zhí)行外部可見的系統(tǒng)行為。因此,SRS文檔也被稱作系統(tǒng)的黑匣子規(guī)約。第4章結(jié)構(gòu)化分析1.答:結(jié)構(gòu)化分析采用自頂向下,逐層分解的方法,根據(jù)軟件內(nèi)部數(shù)據(jù)傳遞和變換的關(guān)系進(jìn)行建模。經(jīng)過(guò)一系列分解和抽象過(guò)程,建立系統(tǒng)的邏輯模型。這種方法的核心思想在于將軟件系統(tǒng)抽象為一系列的邏輯加工單元,這些單元之間通過(guò)數(shù)據(jù)流進(jìn)行關(guān)聯(lián)。結(jié)構(gòu)化分析技術(shù)主要有下述三個(gè)要點(diǎn):從最上層的系統(tǒng)組織機(jī)構(gòu)入手,采用自頂向下,逐層分解的方式分析系統(tǒng)。強(qiáng)調(diào)邏輯功能而不是實(shí)現(xiàn)功能的具體方法。使用圖形工具(最主要的是數(shù)據(jù)流圖)進(jìn)行系統(tǒng)分析并表達(dá)分析的結(jié)果。然而,結(jié)構(gòu)化分析方法也存在一定的局限性,主要表現(xiàn)在以下三個(gè)方面:第一,結(jié)構(gòu)化分析方法要求對(duì)系統(tǒng)進(jìn)行完整確切的需求定義,這往往是一項(xiàng)相當(dāng)困難的任務(wù)。由于需求的不斷變化和復(fù)雜性,確保需求的完整性和準(zhǔn)確性是一項(xiàng)挑戰(zhàn)。第二,結(jié)構(gòu)化分析方法需要編寫大量的文檔,隨著分析的深入,這些文檔需要及時(shí)進(jìn)行更新,即使在工具的輔助下,仍然具有一定的難度。第三,結(jié)構(gòu)化分析方法所描述的模型通常僅限于書面形式。因此該方法的人機(jī)界面表達(dá)能力方面存在局限性,很難及時(shí)地獲取用戶的反饋信息。2.答:兩個(gè)實(shí)體型之間的聯(lián)系可分為以下三種類型:①一對(duì)一聯(lián)系(1∶1)②一對(duì)多聯(lián)系(1∶n)③多對(duì)多聯(lián)系(m∶n)示意圖如下圖所示。3.答:為了準(zhǔn)確描述用戶的數(shù)據(jù)需求,系統(tǒng)分析員通常會(huì)建立一個(gè)概念性的數(shù)據(jù)模型。這種模型是面向問(wèn)題的,描述了從用戶角度在系統(tǒng)中看到的數(shù)據(jù),這個(gè)過(guò)程稱為概念結(jié)構(gòu)設(shè)計(jì),它將需求分析中得到的用戶需求抽象為信息結(jié)構(gòu),即概念模型。概念模型具有以下特點(diǎn):(1)概念模型能夠真實(shí)、充分地反映現(xiàn)實(shí)世界,是現(xiàn)實(shí)世界的一個(gè)真實(shí)模型。(2)概念模型易于理解,因此可以用它和不熟悉計(jì)算機(jī)的用戶進(jìn)行交流。這使得用戶可以更輕松地理解系統(tǒng)如何滿足他們的需求。(3)概念模型易于更改,當(dāng)應(yīng)用環(huán)境或應(yīng)用需求發(fā)生變化時(shí),概念模型易于修改和擴(kuò)充。這使得系統(tǒng)能夠靈活地適應(yīng)不斷變化的需求和環(huán)境。(4)概念模型易于向各種數(shù)據(jù)模型(如關(guān)系型、網(wǎng)狀型和層次型)轉(zhuǎn)換,從而為后續(xù)的數(shù)據(jù)庫(kù)設(shè)計(jì)提供了基礎(chǔ)。描述概念模型的工具是E-R模型。4.答:數(shù)據(jù)流圖形式簡(jiǎn)單,易于理解和使用。在構(gòu)建DFD模型時(shí),使用了數(shù)量非常有限的原始符號(hào)來(lái)表示系統(tǒng)執(zhí)行的功能以及這些功能之間的數(shù)據(jù)流。下面構(gòu)建DFD的五種不同類型的原始符號(hào),每種符號(hào)的意義如下:功能符號(hào)。一個(gè)功能用一個(gè)圓圈表示,這個(gè)符號(hào)通常稱為一個(gè)過(guò)程或一個(gè)氣泡。氣泡上會(huì)標(biāo)注相應(yīng)功能的名稱,從而清晰展現(xiàn)系統(tǒng)內(nèi)部的處理邏輯。外部實(shí)體符號(hào)。由一個(gè)長(zhǎng)方形表示,例如圖書管理員、圖書館成員等外部實(shí)體。本質(zhì)上,這些外部實(shí)體就是軟件系統(tǒng)之外的物理實(shí)體,它們通過(guò)與系統(tǒng)交換數(shù)據(jù)實(shí)現(xiàn)交互。值得注意的是,此符號(hào)不僅可用于表示用戶,還可用于指代外部的軟硬件組件。數(shù)據(jù)流符號(hào)。數(shù)據(jù)流符號(hào)是一個(gè)有指向的弧或一個(gè)箭頭。在數(shù)據(jù)流箭頭所指的方向上,數(shù)據(jù)流符號(hào)代表了兩個(gè)進(jìn)程之間或外部實(shí)體和過(guò)程之間的數(shù)據(jù)流。數(shù)據(jù)流符號(hào)上通常會(huì)標(biāo)注相應(yīng)的數(shù)據(jù)名稱,以明確數(shù)據(jù)的屬性和作用。數(shù)據(jù)存儲(chǔ)符號(hào)。一個(gè)數(shù)據(jù)存儲(chǔ)由兩條平行線表示,代表一個(gè)邏輯文件。這些邏輯文件可以代表一個(gè)數(shù)據(jù)結(jié)構(gòu)或磁盤上的一個(gè)物理文件。通過(guò)使用數(shù)據(jù)流符號(hào),每個(gè)數(shù)據(jù)存儲(chǔ)都與一個(gè)或多個(gè)過(guò)程相關(guān)聯(lián)。數(shù)據(jù)流箭頭的方向顯示了數(shù)據(jù)是從數(shù)據(jù)存儲(chǔ)中讀取還是寫入,從而反映了數(shù)據(jù)的流向和操作。因此連接到一個(gè)數(shù)據(jù)存儲(chǔ)的箭頭上不必注明對(duì)應(yīng)數(shù)據(jù)項(xiàng)的名稱。輸出符號(hào)。輸出符號(hào)用于表示生成如紙版副本等輸出數(shù)據(jù)的情形,特別是在無(wú)法明確輸出數(shù)據(jù)的使用者或存在多個(gè)輸出用戶時(shí)。此符號(hào)的使用有助于簡(jiǎn)化數(shù)據(jù)流圖,突出關(guān)鍵輸出。5.答:數(shù)據(jù)流圖不描述控制,因此,在一個(gè)數(shù)據(jù)流圖中兩個(gè)“處理”之間可能沒有通路。如果每個(gè)處理都使用不同的輸入數(shù)據(jù),并生成不同的輸出數(shù)據(jù),而且一個(gè)處理的輸出不用做另一個(gè)處理的輸人,那么,在它們之間就沒有弧。6.答:建立E-R圖的大致過(guò)程如下所述。(1)確定實(shí)體類型本問(wèn)題中共有三類實(shí)體,分別是“零件”、“工程項(xiàng)目”和“供應(yīng)商”。(2)確定聯(lián)系類型一種零件可供應(yīng)多個(gè)工程項(xiàng)目,一個(gè)工程項(xiàng)目需要使用多種零件,因此,零件與工程項(xiàng)目之間的聯(lián)系“供應(yīng)”,是多對(duì)多(M:N)聯(lián)系;類似地,零件與供應(yīng)商之間的聯(lián)系“訂購(gòu)”,也是多對(duì)多(M:N)聯(lián)系。(3)確定實(shí)體類型和聯(lián)系類型的屬性實(shí)體類型“零件”的主要屬性是零件編號(hào)、零件名稱、顏色和重量。實(shí)體類型“工程項(xiàng)目”的屬性主要是項(xiàng)目編號(hào)、項(xiàng)目名稱和開工日期。實(shí)體類型“供應(yīng)商”的屬性主要有供應(yīng)商編號(hào)、供應(yīng)商名稱和地址。聯(lián)系類型“供應(yīng)”的屬性是向某工程項(xiàng)目供應(yīng)的某種零件的數(shù)量。聯(lián)系類型“訂購(gòu)”的屬性是向某供應(yīng)商訂購(gòu)的某種零件的數(shù)量。(4)把實(shí)體類型、聯(lián)系類型及屬性組合成E-R圖倉(cāng)庫(kù)管理的E-R圖如圖所示。7.答:狀態(tài)轉(zhuǎn)換圖,簡(jiǎn)稱狀態(tài)圖,它描繪了系統(tǒng)的狀態(tài)以及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件來(lái)表示系統(tǒng)的行為。此外,狀態(tài)圖還詳細(xì)描述了系統(tǒng)在特定事件發(fā)生后所執(zhí)行的動(dòng)作。因此可以用狀態(tài)圖建立軟件系統(tǒng)的行為模型。在狀態(tài)圖中定義的狀態(tài)主要有初態(tài)、終態(tài)和中間狀態(tài)。在一張狀態(tài)圖中只能有一個(gè)初態(tài),而中間狀態(tài)和終態(tài)則可以有0至多個(gè)。狀態(tài)轉(zhuǎn)換圖的符號(hào)表示如下圖所示。在狀態(tài)圖中,初態(tài)用實(shí)心圓表示,終態(tài)用一對(duì)同心圓(內(nèi)圓為實(shí)心圓)表示。中間狀態(tài)用圓角矩形表示,該矩形可以通過(guò)兩條水平橫線分為上、中、下三個(gè)部分,上面部分為狀態(tài)的名稱,這部分是不可或缺的;中間部分為狀態(tài)變量的名字和值,這部分是可選的;而下面部分是活動(dòng)表,這部分也是可選的。在狀態(tài)圖中,兩個(gè)狀態(tài)之間通過(guò)帶箭頭的連線相連,這被稱為狀態(tài)轉(zhuǎn)換。箭頭指明了狀態(tài)轉(zhuǎn)換的方向,即系統(tǒng)從當(dāng)前狀態(tài)向下一個(gè)狀態(tài)轉(zhuǎn)變的路徑。狀態(tài)轉(zhuǎn)換通常是由事件觸發(fā)的,在這種情況下應(yīng)該在表示狀態(tài)轉(zhuǎn)換的箭頭線上明確標(biāo)出觸發(fā)轉(zhuǎn)換的事件表達(dá)式。如果在箭頭線上未標(biāo)明事件,則意味著狀態(tài)轉(zhuǎn)換是由源狀態(tài)的內(nèi)部活動(dòng)執(zhí)行完之后自動(dòng)觸發(fā)轉(zhuǎn)換的,無(wú)需外部事件的干預(yù)。因此,狀態(tài)轉(zhuǎn)換圖通過(guò)特定的符號(hào)和表示方法,清晰地展示了系統(tǒng)狀態(tài)之間的轉(zhuǎn)換關(guān)系以及觸發(fā)這些轉(zhuǎn)換的事件,為理解和分析軟件系統(tǒng)的行為提供了有力的工具。8.答:從問(wèn)題陳述可知,復(fù)印機(jī)的狀態(tài)主要有閑置、復(fù)印、缺紙和卡紙。引起狀態(tài)轉(zhuǎn)換的事件主要是復(fù)印命令、完成復(fù)印命令、發(fā)現(xiàn)缺紙、裝滿紙、發(fā)生卡紙故障和排除了卡紙故障。下圖的狀態(tài)轉(zhuǎn)換圖描繪了復(fù)印機(jī)的行為。9.答:數(shù)據(jù)字典是對(duì)數(shù)據(jù)的描述,即元數(shù)據(jù),不是數(shù)據(jù)本身。數(shù)據(jù)字典是進(jìn)行詳細(xì)的數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的主要結(jié)果。在設(shè)計(jì)過(guò)程中不斷修改、充實(shí)、完善。它的作用是在軟件分析和設(shè)計(jì)的過(guò)程中提供關(guān)于數(shù)據(jù)的描述信息。數(shù)據(jù)字典在定義數(shù)據(jù)時(shí),采用的是自頂向下的逐層分解方法。當(dāng)分解到不需要進(jìn)一步定義,每個(gè)和工程有關(guān)的人也都清楚其含義的元素時(shí),分解過(guò)程就結(jié)束了。數(shù)據(jù)字典的內(nèi)容包括數(shù)據(jù)項(xiàng)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)和處理過(guò)程。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的最小組成單位,不可再分。數(shù)據(jù)結(jié)構(gòu)則是由若干個(gè)數(shù)據(jù)項(xiàng)按照一定的規(guī)則組合而成。數(shù)據(jù)字典通過(guò)對(duì)數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)的定義,進(jìn)而描述了數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)的邏輯內(nèi)容。10.答:數(shù)據(jù)字典在定義數(shù)據(jù)時(shí),通常使用下面的符號(hào)來(lái)表示不同的關(guān)系和操作。=:等價(jià)于(或定義為),例如a=b+c意味著a的值由b和c的計(jì)算結(jié)果確定。+:和(即順序連接兩個(gè)分量),表示兩個(gè)數(shù)據(jù)項(xiàng)的組合。例如a+b代表數(shù)據(jù)a和b的組合。[,]:或(即從方括號(hào)內(nèi)列出的若干個(gè)分量中選擇一個(gè)),即列在方括號(hào)內(nèi)的任一數(shù)據(jù)項(xiàng)都會(huì)發(fā)生。例如[a,b]表示a發(fā)生或者是b發(fā)生。{}:重復(fù)(即重復(fù)花括號(hào)內(nèi)的分量),表示迭代的數(shù)據(jù)定義。例如{name}5表示name數(shù)據(jù)項(xiàng)重復(fù)5次,(name)*代表了0或多次。():可選(即圓括號(hào)里的分量可有可無(wú))。/*:出現(xiàn)在/*和*/之間的內(nèi)容被視為注釋,用于對(duì)定義進(jìn)行說(shuō)明或補(bǔ)充。第5章結(jié)構(gòu)化設(shè)計(jì)1.答:結(jié)構(gòu)化設(shè)計(jì)技術(shù)的基本要點(diǎn),有如下四點(diǎn):軟件系統(tǒng)由層次化結(jié)構(gòu)的模塊構(gòu)成。模塊是單入口和單出口的。構(gòu)造和聯(lián)結(jié)模塊的基本準(zhǔn)則是模塊獨(dú)立。這意味著模塊之間的耦合度應(yīng)盡可能低,而模塊內(nèi)部的內(nèi)聚性應(yīng)盡可能高。用圖來(lái)描述軟件系統(tǒng)的結(jié)構(gòu),并且使軟件結(jié)構(gòu)與問(wèn)題結(jié)構(gòu)盡量一致。2.答:結(jié)構(gòu)化設(shè)計(jì)方法的實(shí)施要點(diǎn)可總結(jié)如下:(1)深入研究、細(xì)致分析和全面審查數(shù)據(jù)流圖,理解數(shù)據(jù)的流動(dòng)和轉(zhuǎn)換過(guò)程。(2)根據(jù)數(shù)據(jù)流圖的特點(diǎn),判斷問(wèn)題的類型,如變換型或事務(wù)型,并針對(duì)不同類型的問(wèn)題制定相應(yīng)的分析和處理策略。(3)由數(shù)據(jù)流圖推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖,為軟件的整體架構(gòu)提供基礎(chǔ)框架。(4)利用一些啟發(fā)式原則對(duì)初始結(jié)構(gòu)圖進(jìn)行迭代優(yōu)化,直到得到符合設(shè)計(jì)要求的結(jié)構(gòu)圖。(5)根據(jù)分析模型中的實(shí)體關(guān)系圖和數(shù)據(jù)字典進(jìn)行數(shù)據(jù)設(shè)計(jì),包括數(shù)據(jù)庫(kù)設(shè)計(jì)或數(shù)據(jù)文件的設(shè)計(jì)。(6)在上面設(shè)計(jì)的基礎(chǔ)上,結(jié)合分析模型中的加工規(guī)格說(shuō)明和狀態(tài)轉(zhuǎn)換圖進(jìn)行過(guò)程設(shè)計(jì),明確每個(gè)模塊的功能和交互方式。(7)制定詳細(xì)的測(cè)試計(jì)劃,確保設(shè)計(jì)階段的正確性和可行性。雖然需求分析為結(jié)構(gòu)化設(shè)計(jì)提供了關(guān)鍵的輸入信息,但是結(jié)構(gòu)化設(shè)計(jì)并非簡(jiǎn)單的映射過(guò)程。實(shí)際上,結(jié)構(gòu)化設(shè)計(jì)過(guò)程綜合了多方面的因素:從以往類似軟件的開發(fā)經(jīng)驗(yàn)中獲得的直覺和判斷力,指導(dǎo)軟件模型演化的一組原理和啟發(fā)規(guī)則,評(píng)估軟件質(zhì)量的一組標(biāo)準(zhǔn),以及導(dǎo)出最終設(shè)計(jì)結(jié)果的迭代過(guò)程。3.答:模塊獨(dú)立性的重要性主要體現(xiàn)在兩個(gè)方面:一方面,獨(dú)立的模塊有助于簡(jiǎn)化軟件的開發(fā)過(guò)程,使得多人協(xié)作開發(fā)更為高效;另一方面,獨(dú)立的模塊也便于軟件的測(cè)試和維護(hù),因?yàn)橄鄬?duì)來(lái)說(shuō),修改設(shè)計(jì)和程序需要的工作量比較小,降低了錯(cuò)誤傳播的風(fēng)險(xiǎn),并提高了軟件的可維護(hù)性。4.答:抽象與求精是一對(duì)互補(bǔ)的概念,兩者相輔相成,互為補(bǔ)充。抽象使得設(shè)計(jì)者能夠說(shuō)明過(guò)程和數(shù)據(jù),而無(wú)需糾結(jié)于低層次的瑣碎細(xì)節(jié)。事實(shí)上,抽象可被視為一種特殊的逐步求精方法,它通過(guò)忽略不必要的細(xì)節(jié),凸顯關(guān)鍵的細(xì)節(jié),從而推動(dòng)設(shè)計(jì)的深化。而求精則幫助設(shè)計(jì)者在設(shè)計(jì)過(guò)程中揭示出低層細(xì)節(jié)。這兩者共同作用,助力設(shè)計(jì)者在設(shè)計(jì)的演進(jìn)過(guò)程中,逐步構(gòu)建出完整而精細(xì)的設(shè)計(jì)模型。5.答:之所以功能獨(dú)立性對(duì)于任何好的設(shè)計(jì)都是至關(guān)重要的,主要原因體現(xiàn)在以下三個(gè)方面:錯(cuò)誤隔離。功能獨(dú)立性會(huì)減少錯(cuò)誤傳遞。由于功能獨(dú)立的模塊與其他模塊之間的相互作用程度減少,因此一個(gè)模塊中存在的任何錯(cuò)誤都不會(huì)直接影響到其他模塊,從而降低了錯(cuò)誤傳遞的風(fēng)險(xiǎn)。重新使用的范圍。重新使用一個(gè)模塊成為可能,因?yàn)槊總€(gè)模塊都有一些定義明確并且準(zhǔn)確的功能,而且模塊與其他模塊的接口簡(jiǎn)單并且最少。因此,一個(gè)內(nèi)聚性的模塊很容易就能被拿出來(lái),然后重新用在一個(gè)不同的項(xiàng)目上??衫斫庑?。設(shè)計(jì)的復(fù)雜程度會(huì)降低,因?yàn)椴煌哪K之間保持相對(duì)的獨(dú)立性,使得每個(gè)模塊在隔離狀態(tài)下也易于理解。6.答:?jiǎn)l(fā)式是指在解決問(wèn)題時(shí)采用的一種常規(guī)方法或者經(jīng)驗(yàn)法則,通常用于快速做出決策或找到解決方案。這種方法可能不是完全準(zhǔn)確或最優(yōu)的,但可以在有限的時(shí)間內(nèi)得出合理的結(jié)果。啟發(fā)式方法往往基于過(guò)去的經(jīng)驗(yàn)、常識(shí)或者問(wèn)題的特定特征,能夠幫助人們?cè)诿鎸?duì)復(fù)雜情況時(shí)做出相對(duì)有效的決策。下面是一些典型的啟發(fā)式規(guī)則。(1)改進(jìn)軟件結(jié)構(gòu)、提高模塊獨(dú)立性。設(shè)計(jì)出軟件的初步結(jié)構(gòu)以后,應(yīng)該仔細(xì)審查分析這個(gè)結(jié)構(gòu),通過(guò)模塊分解或合并,力求降低耦合、提高內(nèi)聚。例如,當(dāng)發(fā)現(xiàn)多個(gè)模塊共享相同的子功能時(shí),應(yīng)將這些子功能獨(dú)立出來(lái),形成一個(gè)單獨(dú)的模塊,以供這些模塊調(diào)用。(2)模塊規(guī)模應(yīng)該適中。模塊規(guī)模過(guò)大,則可理解程度降低;模塊規(guī)模過(guò)小則開銷超過(guò)有效操作。通過(guò)模塊分解或合并調(diào)整模塊規(guī)模時(shí),不可降低模塊獨(dú)立性。(3)深度、寬度、扇入和扇出都應(yīng)該適中。深度是軟件結(jié)構(gòu)中的控制的層數(shù),表示一個(gè)系統(tǒng)的大小和復(fù)雜程度;寬度是軟件結(jié)構(gòu)中同一個(gè)層次上的模塊總數(shù)的最大值,寬度越大的系統(tǒng)越復(fù)雜;扇入表示一個(gè)模塊被多少個(gè)上級(jí)模塊直接調(diào)用,一般而言,扇入越大說(shuō)明共享該模塊的上級(jí)模塊越多,在保持模塊獨(dú)立性的條件下,扇入越大越好;扇出是一個(gè)模塊直接控制(調(diào)用)的下級(jí)模塊數(shù)目,扇出過(guò)大意味著模塊過(guò)于復(fù)雜,而扇出過(guò)小意味著功能過(guò)于集中。一個(gè)好的系統(tǒng)頂層扇出高,中層扇出少,底層扇入高,系統(tǒng)呈“葫蘆”型的結(jié)構(gòu)特點(diǎn)。(4)模塊的作用域應(yīng)該在控制域之內(nèi)。作用域是受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合??刂朴蚴悄K本身和所有直接或者間接從屬于它的模塊的集合。(5)力爭(zhēng)降低模塊接口的復(fù)雜程度,使得信息傳遞簡(jiǎn)單并且和模塊的功能一致。接口復(fù)雜或與模塊功能不一致,是緊耦合或低內(nèi)聚的征兆,應(yīng)該重新分析這個(gè)模塊的獨(dú)立性。(6)設(shè)計(jì)單入口、單出口的模塊。這條啟發(fā)式規(guī)則旨在避免模塊間出現(xiàn)內(nèi)容耦合,確保模塊間的交互清晰且易于管理。(7)模塊功能應(yīng)具備可預(yù)測(cè)性。模塊在給定相同的輸入數(shù)據(jù)時(shí)應(yīng)能產(chǎn)生相同的輸出,同時(shí)應(yīng)避免使模塊功能過(guò)分局限。而帶有內(nèi)部狀態(tài)且輸出取決于該狀態(tài)的模塊往往是功能不可預(yù)測(cè)的。7.答:典型的數(shù)據(jù)流類型有變換型數(shù)據(jù)流和事務(wù)型數(shù)據(jù)流。由于數(shù)據(jù)流的類型不同,得到的系統(tǒng)結(jié)構(gòu)也會(huì)有所差異。通常情況下,一個(gè)系統(tǒng)中的所有數(shù)據(jù)流都可以被視為變換流,但是,當(dāng)遇到有明顯事務(wù)特性的數(shù)據(jù)流時(shí),采用事務(wù)流設(shè)計(jì)方法會(huì)更為合適。(1)變換型數(shù)據(jù)流當(dāng)信息通過(guò)輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換成內(nèi)部形式,這些信息會(huì)經(jīng)過(guò)變換中心進(jìn)行加工處理。之后它們會(huì)沿輸出通路再次變換為外部形式,最終離開軟件系統(tǒng)。具備上述特征的數(shù)據(jù)流被稱為變換流。變換型數(shù)據(jù)處理問(wèn)題的工作過(guò)程大致分為三個(gè)步驟,即取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù)。因此變換型系統(tǒng)的結(jié)構(gòu)圖通常由輸入、中心變換和輸出3部分組成。(2)事務(wù)型數(shù)據(jù)流事務(wù)型數(shù)據(jù)流通常涉及接收一項(xiàng)事務(wù),根據(jù)事務(wù)處理的特點(diǎn)和性質(zhì),選擇一個(gè)適當(dāng)?shù)奶幚韱卧獊?lái)執(zhí)行,并給出相應(yīng)的結(jié)果。在這個(gè)過(guò)程中,完成選擇分派任務(wù)的部分稱為事務(wù)處理中心或分派部件。原則上所有信息流都可以歸類為變換流,但是如果信息沿輸入通路到達(dá)一個(gè)稱為事務(wù)中心的處理單元,并且該處理單元根據(jù)輸入數(shù)據(jù)的類型在若干個(gè)候選的動(dòng)作序列中選取出一個(gè)來(lái)執(zhí)行,那么這類數(shù)據(jù)流應(yīng)被歸為一類特殊的數(shù)據(jù)流,稱為事務(wù)流。8.答:事務(wù)型映射方法在處理具有特定作業(yè)數(shù)據(jù)流的應(yīng)用中發(fā)揮著重要作用。這種數(shù)據(jù)流能夠觸發(fā)一個(gè)或多個(gè)處理過(guò)程,從而完成特定的作業(yè)功能,我們稱之為事務(wù)。事務(wù)分析同樣始于對(duì)數(shù)據(jù)流圖的深入剖析,采用自頂向下的方式逐步分解,構(gòu)建系統(tǒng)的結(jié)構(gòu)圖。以下是事務(wù)分析方法的主要步驟。(1)識(shí)別事務(wù)源。利用數(shù)據(jù)流圖和數(shù)據(jù)詞典,結(jié)合問(wèn)題定義和需求分析的結(jié)果,找出各種需要處理的事務(wù)。(2)規(guī)定適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu)。在確定了該數(shù)據(jù)流圖具有事務(wù)型特征之后,根據(jù)模塊劃分理論,建立適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu)。這有助于確保系統(tǒng)的邏輯清晰和功能的合理劃分。(3)識(shí)別各種事務(wù)和它們定義的操作。(4)注意利用公用模塊來(lái)提高系統(tǒng)的復(fù)用性和可維護(hù)性。(5)建立事務(wù)處理模塊。對(duì)每一事務(wù)或者聯(lián)系密切的一組事務(wù),建立一個(gè)事務(wù)處理模塊。(6)對(duì)事務(wù)處理模塊規(guī)定其全部的下層操作模塊,這些操作模塊負(fù)責(zé)實(shí)現(xiàn)事務(wù)處理模塊的具體功能。(7)對(duì)操作模塊規(guī)定它們的全部細(xì)節(jié)模塊。這些細(xì)節(jié)模塊是實(shí)現(xiàn)系統(tǒng)功能的最小單元,它們的設(shè)計(jì)和實(shí)現(xiàn)將直接影響系統(tǒng)的性能和穩(wěn)定性。9.答:在設(shè)計(jì)階段,必須根據(jù)需求精心構(gòu)建用戶界面的交互細(xì)節(jié),包括人機(jī)交互所必須的實(shí)際顯示和輸入。人機(jī)交互(用戶)界面作為用戶與系統(tǒng)溝通的主要橋梁,其設(shè)計(jì)至關(guān)重要。為了設(shè)計(jì)出高效且人性化的界面,設(shè)計(jì)者需要深入了解用戶界面應(yīng)具備的特性:可使用性:是用戶界面設(shè)計(jì)最重要的目標(biāo)。界面使用簡(jiǎn)單、風(fēng)格一致、系統(tǒng)響應(yīng)迅速且成本低廉,同時(shí)需具備出色的容錯(cuò)能力等。靈活性:考慮到用戶的不同特點(diǎn)、能力和知識(shí)水平,使界面能夠適應(yīng)不同用戶的需求,同時(shí)確保不同界面形式不影響任務(wù)的完成??煽啃裕菏怯脩艚缑娴闹匾U?,應(yīng)確保用戶能夠正確、可靠地使用系統(tǒng),保證有關(guān)程序和數(shù)據(jù)的安全性。 10.答:文件設(shè)計(jì)的主要工作是根據(jù)使用需求、數(shù)據(jù)處理方式、存儲(chǔ)的信息量、數(shù)據(jù)的動(dòng)態(tài)特性以及可用的設(shè)備條件等因素,來(lái)確定文件類型,選擇文件媒體,確定文件組織方法,設(shè)計(jì)文件記錄格式,并估算文件的容量。以下情形適合選擇文件存儲(chǔ):(1)數(shù)據(jù)量較大的非結(jié)構(gòu)化數(shù)據(jù),如多媒體信息。由于這類數(shù)據(jù)往往龐大而復(fù)雜,采用文件存儲(chǔ)能夠更好地管理和維護(hù),確保其完整性和可用性。(2)數(shù)據(jù)量大,信息松散,如歷史記錄和檔案文件。這些文件往往不需要頻繁查詢或修改,而是需要長(zhǎng)期保存和備份。文件存儲(chǔ)能夠提供足夠的存儲(chǔ)空間,并允許以自然的方式組織和訪問(wèn)這些數(shù)據(jù)。(3)非關(guān)系層次化數(shù)據(jù),如系統(tǒng)配置文件。這類數(shù)據(jù)通常具有特定的層次結(jié)構(gòu)和組織方式,不適合存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中。文件存儲(chǔ)能夠靈活地處理這類數(shù)據(jù),并提供高效的讀寫性能。(4)對(duì)數(shù)據(jù)的存取速度要求極高的情況。雖然關(guān)系型數(shù)據(jù)庫(kù)在某些方面提供了高效的查詢性能,但對(duì)于某些特定應(yīng)用,文件存儲(chǔ)可能通過(guò)優(yōu)化存儲(chǔ)結(jié)構(gòu)和訪問(wèn)方式來(lái)實(shí)現(xiàn)更高的存取速度。(5)臨時(shí)存放的數(shù)據(jù)。這些數(shù)據(jù)可能是短暫的、不需要長(zhǎng)期保存的,或者僅僅是為了某次特定任務(wù)而創(chuàng)建的。文件存儲(chǔ)能夠快速地創(chuàng)建和刪除文件,滿足臨時(shí)數(shù)據(jù)的存儲(chǔ)需求。11.答:如果一個(gè)程序的代碼塊僅通過(guò)順序、選擇和循環(huán)這三種基本控制結(jié)構(gòu)進(jìn)行連接,并且每個(gè)代碼塊只有一個(gè)入口和一個(gè)出口,則稱這個(gè)程序是結(jié)構(gòu)化的。結(jié)構(gòu)化程序設(shè)計(jì)的主要原則如下:(1)使用語(yǔ)言中的順序、選擇和重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯,確保程序結(jié)構(gòu)的清晰和簡(jiǎn)潔。(2)選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口,這有助于減少程序中的跳轉(zhuǎn)和混亂,提高程序的可讀性和可維護(hù)性。(3)程序語(yǔ)句組成易于識(shí)別的塊(Block),每個(gè)塊只有一個(gè)入口和一個(gè)出口。(4)復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進(jìn)行組合嵌套來(lái)實(shí)現(xiàn),而不是依賴復(fù)雜的跳轉(zhuǎn)和條件判斷。(5)當(dāng)語(yǔ)言中缺少某些控制結(jié)構(gòu)時(shí),可以使用一段等價(jià)的程序段進(jìn)行模擬,但在整個(gè)系統(tǒng)中應(yīng)保持這種模擬的一致性,以確保程序的穩(wěn)定性和可維護(hù)性。(6)嚴(yán)格控制GOTO語(yǔ)句,僅在下列情形才可使用:用非結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言去實(shí)現(xiàn)結(jié)構(gòu)化的構(gòu)造。(7)在程序設(shè)計(jì)過(guò)程中,盡量采用自頂向下、逐步細(xì)化的原則,從整體上把握程序的結(jié)構(gòu)和功能,然后逐步細(xì)化每個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)。12.答:PAD圖的優(yōu)點(diǎn)簡(jiǎn)要描述如下。第一,使用PAD符號(hào)所設(shè)計(jì)出來(lái)的程序必然是結(jié)構(gòu)化程序。第二,PAD圖能夠清晰地描繪出程序的結(jié)構(gòu),圖中豎線的總條數(shù)就是程序的層次數(shù),這使得程序員能夠直觀地理解程序的層次關(guān)系和結(jié)構(gòu)。第三,在表現(xiàn)程序邏輯時(shí)易讀、易懂、易記。第四,支持自動(dòng)轉(zhuǎn)換為高級(jí)語(yǔ)言源程序,這極大地提高了編程的效率。第五,既可以表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu)。第六,PAD圖的符號(hào)體系支持自頂向下、逐步求精的方法,這種方法有助于程序員在程序設(shè)計(jì)的過(guò)程中逐步細(xì)化、完善程序的結(jié)構(gòu)和功能。13.答:Jackson圖的優(yōu)點(diǎn)如下所述。(1)便于表示層次結(jié)構(gòu),而且是對(duì)結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具。(2)形象直觀,清晰易懂,可讀性好。(3)由于結(jié)構(gòu)程序設(shè)計(jì)主要依賴于順序、選擇和重復(fù)這三種基本控制結(jié)構(gòu),Jackson圖既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu),這使得它在軟件工程實(shí)踐中具有廣泛的應(yīng)用價(jià)值。Jackson圖的缺點(diǎn)如下所述。(1)Jackson圖在表示選擇或重復(fù)結(jié)構(gòu)時(shí)存在一定的局限性,因?yàn)樗鼰o(wú)法直接在圖上表示選擇條件或循環(huán)結(jié)束條件,影響了圖的表達(dá)能力,也不易直接把圖翻譯成程序代碼。(2)Jackson圖中的框間連線采用斜線設(shè)計(jì),不易在行式打印機(jī)上輸出。14.答:N-S圖的基本控制結(jié)構(gòu)如下圖。為了精確地表達(dá)五種基本控制結(jié)構(gòu),特別規(guī)定了五種圖形構(gòu)件。這些圖形構(gòu)件能夠直觀地展現(xiàn)程序的邏輯流程,有助于程序員更好地理解和實(shí)現(xiàn)復(fù)雜的程序結(jié)構(gòu)。第6章面向?qū)ο蠓治?.答:面向?qū)ο蠓椒▽W(xué)的三個(gè)基本要點(diǎn)是封裝、繼承和多態(tài)。封裝是把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起,使對(duì)象對(duì)內(nèi)部數(shù)據(jù)提供保護(hù),只允許通過(guò)對(duì)象方法進(jìn)行操作,這有助于增強(qiáng)數(shù)據(jù)的安全性和代碼的可維護(hù)性。繼承允許我們根據(jù)一個(gè)已存在的類(父類)來(lái)定義一個(gè)新類(子類),子類繼承了父類的所有屬性和行為,這提高了代碼的復(fù)用性。多態(tài)是指允許一個(gè)對(duì)象接口以多種實(shí)際類型存在,使得在運(yùn)行時(shí)能夠根據(jù)實(shí)際對(duì)象的類型執(zhí)行對(duì)應(yīng)的方法,這增加了代碼的靈活性和可擴(kuò)展性。2.答:面向?qū)ο蠓椒▽W(xué)相較于傳統(tǒng)方法學(xué)有多個(gè)優(yōu)點(diǎn)。首先,它提高了軟件的可重用性,通過(guò)類和對(duì)象的繼承關(guān)系,可以方便地重用已有的代碼。其次,面向?qū)ο蠓椒▽W(xué)更符合人類的思維方式,使得軟件的開發(fā)和維護(hù)更加直觀和容易。此外,面向?qū)ο蠓椒▽W(xué)通過(guò)封裝、繼承和多態(tài)等機(jī)制,提高了軟件的可擴(kuò)展性和靈活性,使得軟件能夠更容易地適應(yīng)需求的變化。最后,面向?qū)ο蠓椒▽W(xué)還提供了更好的安全性和數(shù)據(jù)保護(hù)機(jī)制,通過(guò)封裝隱藏對(duì)象的內(nèi)部狀態(tài)和實(shí)現(xiàn)細(xì)節(jié),防止了外部對(duì)對(duì)象的隨意修改。計(jì)算機(jī)是一種以電子器件為基礎(chǔ)的,不需人的直接干預(yù),能夠?qū)Ω鞣N數(shù)字化信息進(jìn)行快速算術(shù)和邏輯運(yùn)算的工具,是一個(gè)由硬件﹑軟件組成的復(fù)雜的自動(dòng)化設(shè)備。3.答:在面向?qū)ο蠓治鲋?,?duì)象模型、動(dòng)態(tài)模型和功能模型起著不同的作用。對(duì)象模型主要描述系統(tǒng)中的對(duì)象、類、關(guān)聯(lián)、屬性、服務(wù)等,它定義了系統(tǒng)的靜態(tài)結(jié)構(gòu)。動(dòng)態(tài)模型展示了系統(tǒng)隨時(shí)間變化的行為,特別是對(duì)象之間的交互,它有助于理解系統(tǒng)的控制邏輯和時(shí)序關(guān)系。功能模型則明確了系統(tǒng)應(yīng)該提供的功能和服務(wù),以及如何實(shí)現(xiàn)這些功能,它關(guān)注的是系統(tǒng)的輸入輸出和行為效果。這三個(gè)模型相互補(bǔ)充,共同構(gòu)成了系統(tǒng)的完整描述。4.答:在面向?qū)ο蠼V?,類圖的基本符號(hào)主要包括類、接口、關(guān)聯(lián)、泛化(繼承)、實(shí)現(xiàn)等。類用矩形框表示,包含類名、屬性和方法。接口用帶有《interface》關(guān)鍵字的矩形框表示,代表一種行為的抽象規(guī)范。關(guān)聯(lián)用實(shí)線表示,連接兩個(gè)類,表示它們之間的關(guān)系。泛化(繼承)用帶空心三角形的實(shí)線表示,指向父類,表示子類繼承了父類的屬性和方法。實(shí)現(xiàn)用虛線加空心三角形表示,連接接口和實(shí)現(xiàn)該接口的類。5.答:用例圖在面向?qū)ο蠓治鲋衅鹬陵P(guān)重要的作用,它描述了系統(tǒng)與外部實(shí)體(如用戶或其他系統(tǒng))之間的交互行為。用例圖通過(guò)用例(usecase)來(lái)表示系統(tǒng)提供的某個(gè)具體功能或服務(wù),以及這些功能如何與外部實(shí)體進(jìn)行交互。用例圖不僅有助于開發(fā)人員理解系統(tǒng)的功能需求,還能作為與系統(tǒng)用戶溝通的有效工具。例如,在一個(gè)圖書館管理系統(tǒng)中,用例圖可以展示借書、還書、查詢圖書等用例,以及與圖書管理員和讀者等外部實(shí)體的交互過(guò)程。6.答:面向?qū)ο筌浖^(guò)程的需求分析階段主要任務(wù)是明確和理解軟件需要實(shí)現(xiàn)的功能和性能要求,識(shí)別出系統(tǒng)中的主要對(duì)象和類,以及定義類和對(duì)象之間的關(guān)系。此階段還涉及到與用戶和其他利益相關(guān)者的溝通,以確保軟件能夠滿足他們的期望和需求。需求分析階段至關(guān)重要,因?yàn)樗擒浖_發(fā)過(guò)程的基礎(chǔ)。如果需求沒有被正確理解或定義,那么后續(xù)的設(shè)計(jì)、編碼和測(cè)試工作都可能偏離正確的方向,導(dǎo)致項(xiàng)目的失敗或大量的返工。通過(guò)詳細(xì)的需求分析,可以減少開發(fā)過(guò)程中的不確定性和風(fēng)險(xiǎn),確保軟件最終能夠滿足用戶的需求。7.答:在面向?qū)ο笤O(shè)計(jì)中,設(shè)計(jì)模式是在軟件開發(fā)中經(jīng)常遇到的問(wèn)題的最佳解決方案。它們是經(jīng)驗(yàn)豐富的軟件開發(fā)者經(jīng)過(guò)長(zhǎng)期實(shí)踐總結(jié)出來(lái)的,用于解決在設(shè)計(jì)中經(jīng)常遇到的一類問(wèn)題。三種常見的設(shè)計(jì)模式包括:?jiǎn)卫J剑捍_保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。適用于需要頻繁訪問(wèn)某個(gè)共享資源或需要限制某個(gè)類的實(shí)例化次數(shù)的場(chǎng)景,如配置文件的讀取、數(shù)據(jù)庫(kù)連接池等。觀察者模式:定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。當(dāng)主題對(duì)象狀態(tài)發(fā)生變化時(shí),它的所有依賴者(觀察者)都會(huì)自動(dòng)收到通知并更新。適用于如股票行情的實(shí)時(shí)更新、新聞?dòng)嗛喌葓?chǎng)景。工廠模式:定義了一個(gè)創(chuàng)建對(duì)象的接口,但讓實(shí)現(xiàn)類來(lái)決定實(shí)例化哪一個(gè)類。工廠方法使得一個(gè)類的實(shí)例化延遲到其子類中進(jìn)行。適用于需要?jiǎng)?chuàng)建復(fù)雜對(duì)象或者需要靈活更換產(chǎn)品族的場(chǎng)景,如日志記錄器、數(shù)據(jù)庫(kù)訪問(wèn)層等。8.答:“高內(nèi)聚,低耦合”是面向?qū)ο笤O(shè)計(jì)中的重要原則。高內(nèi)聚意味著一個(gè)模塊或類的功能和職責(zé)應(yīng)該高度集中,且僅負(fù)責(zé)完成一項(xiàng)或少數(shù)幾項(xiàng)緊密相關(guān)的工作。這有助于提高代碼的可讀性和可維護(hù)性,因?yàn)楣δ芫o密相關(guān)的代碼被組織在一起。低耦合則要求模塊或類之間的依賴關(guān)系應(yīng)盡可能少,以減少修改一個(gè)模塊時(shí)對(duì)其他模塊的影響。這有助于增強(qiáng)系統(tǒng)的靈活性和可擴(kuò)展性,因?yàn)榈婉詈系哪K更容易進(jìn)行替換、更新或擴(kuò)展。遵循這一原則可以使軟件系統(tǒng)更加健壯、靈活和易于維護(hù)。9.答:在面向?qū)ο笤O(shè)計(jì)中,處理類和對(duì)象之間的關(guān)系以避免過(guò)度耦合是關(guān)鍵。一種常見的方法是使用接口或抽象類來(lái)定義類之間的交互方式,而不是直接依賴具體的類實(shí)現(xiàn)。這樣可以確保當(dāng)某個(gè)類的實(shí)現(xiàn)發(fā)生變化時(shí),只要它仍然遵循相同的接口或抽象類,其他依賴它的類就不需要修改。此外,還可以使用依賴注入、觀察者模式、中介者模式等技術(shù)來(lái)降低類之間的耦合度。這些技術(shù)都有助于減少類之間的直接依賴,增加系統(tǒng)的靈活性和可維護(hù)性。10.答:面向?qū)ο鬁y(cè)試與傳統(tǒng)測(cè)試方法的主要區(qū)別在于測(cè)試對(duì)象的性質(zhì)和測(cè)試策略。傳統(tǒng)測(cè)試方法主要關(guān)注函數(shù)或過(guò)程,而面向?qū)ο鬁y(cè)試則關(guān)注類和對(duì)象的行為及其交互。面向?qū)ο鬁y(cè)試需要考慮類的封裝性、繼承性、多態(tài)性等特性,這增加了測(cè)試的復(fù)雜性。面向?qū)ο鬁y(cè)試的挑戰(zhàn)包括:如何有效地測(cè)試類的封裝性和私有方法、如何處理多態(tài)和動(dòng)態(tài)綁定帶來(lái)的不確定性、如何在繼承關(guān)系中確保父類和子類行為的正確性、以及如何模擬和測(cè)試對(duì)象之間的交互等。為了應(yīng)對(duì)這些挑戰(zhàn),可能需要采用特定的測(cè)試技術(shù),如單元測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試,并結(jié)合使用測(cè)試框架和模擬對(duì)象等工具。11.答:面向?qū)ο蟮姆椒ㄒ匀祟惲?xí)慣的思維方式來(lái)解決問(wèn)題,它用對(duì)象分解取代了傳統(tǒng)的功能分解。在這種方法中,程序被分解為一系列對(duì)象,這些對(duì)象封裝了各自的數(shù)據(jù)和處理這些數(shù)據(jù)的方法。對(duì)象之間通過(guò)發(fā)送消息來(lái)請(qǐng)求服務(wù),而接收消息的對(duì)象則主動(dòng)完成所需功能,提供服務(wù)。整個(gè)程序的功能是通過(guò)所有對(duì)象的協(xié)同工作來(lái)實(shí)現(xiàn)的。從本題的需求來(lái)看,程序中主要涉及兩類實(shí)體:圓和弧。根據(jù)需求描述,可以明確圓的基本屬性包括圓心坐標(biāo)和半徑,而弧的基本屬性則包括圓心坐標(biāo)、半徑、起始角度和結(jié)束角度。然而,要構(gòu)建一個(gè)完整的對(duì)象模型,還需要借助領(lǐng)域知識(shí)和常識(shí)來(lái)補(bǔ)全所有必要的屬性。顯然,圖形既可以在屏幕上顯示,也可以不顯示。因此,無(wú)論是圓還是弧,都應(yīng)該具有一個(gè)表示可見性的屬性。這個(gè)屬性反映了圖形當(dāng)前是否可見的狀態(tài)。通過(guò)分析需求,可以知道圓和弧都應(yīng)該提供在屏幕上繪制自身的服務(wù)。這意味著它們需要使用當(dāng)前的前景顏色來(lái)展示自己的形狀。雖然這個(gè)需求在陳述中很基礎(chǔ),但根據(jù)常識(shí),圖形也應(yīng)該能夠隱藏自己(實(shí)際上是用背景色覆蓋)。既然我們?cè)O(shè)置了可見性屬性來(lái)表示圖形的可見狀態(tài),那么提供相應(yīng)的隱藏服務(wù)也是自然而然的。為了方便使用,通常要求對(duì)象的每個(gè)屬性都是可訪問(wèn)的。但這里的“可訪問(wèn)”并不意味著可以從對(duì)象外部隨意讀寫對(duì)象的屬性,因?yàn)檫@樣做會(huì)違反信息隱藏原理和面向?qū)ο蟮脑O(shè)計(jì)準(zhǔn)則。相反,“可訪問(wèn)”是指提供了讀寫對(duì)象屬性的服務(wù),以確保數(shù)據(jù)的完整性和安全性。綜合上面的分析結(jié)果,可以用圖6-1所示的類圖形象地描繪程序中的兩類對(duì)象。從圖6-1可以看出,圓和弧的許多屬性和服務(wù)都是公共的。如果分別定義圓類和弧類,則這些公共的屬性和服務(wù)需要在每個(gè)類中重復(fù)定義,這樣做勢(shì)必形成許多冗余信息。反之,如果讓圓作為父類,弧作為從圓派生出來(lái)的子類,則在圓類中定義了圓心坐標(biāo)、半徑和可見性等屬性之后,弧類就可以直接繼承這些屬性而無(wú)須再次重復(fù)定義它們,因此,在弧類中僅需定義本類特有的屬性(起始角度和結(jié)束角度)。類似地,在圓類中定義了讀/寫圓心坐標(biāo)、讀/寫半徑和讀/寫可見性等服務(wù)之后,在弧類中只需定義讀/寫起始角度和讀寫結(jié)束角度等弧類特有的服務(wù)。需要注意的是,雖然在圖6-1中圓類和弧類都有名字相同的服務(wù)“顯示”和“隱藏”,但是它們的具體功能是不同的(顯示或隱藏的圖形形狀不同)。因此,在把弧類作為圓類的子類之后,仍然需要在這兩個(gè)類中分別定義“顯示”和“隱藏”服務(wù)。圖6-1圓和弧兩類對(duì)象在開發(fā)該圖形程序時(shí),會(huì)遇到多種圖形,每種圖形都具有“坐標(biāo)”和“可見性”等基本屬性。為了減少冗余信息并提高程序的可擴(kuò)充性,可以將這些基本屬性抽取出來(lái),定義在一個(gè)公共的父類中。進(jìn)一步觀察發(fā)現(xiàn),“坐標(biāo)”和“可見性”分別代表點(diǎn)的位置和狀態(tài),其中坐標(biāo)信息更為基礎(chǔ)。因此,可以首先定義一個(gè)僅包含坐標(biāo)信息的“位置”基類,代表幾何意義上的點(diǎn),然后再?gòu)倪@個(gè)基類派生出屏幕上的“點(diǎn)”類,繼承“位置”類的所有屬性和服務(wù),并添加特有的新內(nèi)容,如可見性和顯示、隱藏等服務(wù)。這樣的設(shè)計(jì)使得程序更加靈活和可擴(kuò)展,能夠適應(yīng)更復(fù)雜的圖形程序開發(fā)需求。圖6-2所示類圖描繪了通過(guò)上述分析、設(shè)計(jì)過(guò)程得出的類等級(jí)。為簡(jiǎn)明起見,圖中沒有列出讀/寫屬性值的常規(guī)服務(wù)。實(shí)際上,位置類提供讀/寫坐標(biāo)服務(wù),點(diǎn)類提供讀/寫可見性服務(wù),圓類提供讀寫半徑服務(wù),弧類提供讀/寫起始角度和讀/寫結(jié)束角度服務(wù)。圖6-2類等級(jí)示意圖12.答:為解決這個(gè)問(wèn)題,需要提出了一個(gè)更加精細(xì)化的面向?qū)ο笤O(shè)計(jì)方案。首先,要認(rèn)識(shí)到圓和字符串是兩種截然不同的實(shí)體,因此不應(yīng)將它們的屬性混雜在同一個(gè)類中。為了保持模塊的獨(dú)立性和清晰性,應(yīng)該采取分離關(guān)注點(diǎn)的方法。由于已經(jīng)建立了一個(gè)關(guān)于圓的基類,該類定義了圓的屬性,并能在屏幕上繪制圓?,F(xiàn)在,需要?jiǎng)?chuàng)建一個(gè)關(guān)于圖形模式下字符串顯示的基礎(chǔ)類。這個(gè)新類的核心功能是,在指定的屏幕坐標(biāo)上,以特定的字體展示一個(gè)給定內(nèi)容的字符串,同時(shí)控制字符串在屏幕上的顯示長(zhǎng)度。在詳細(xì)分析需求后,已經(jīng)確定了“圖形模式字符串”類的關(guān)鍵屬性,包括位置(坐標(biāo))、字符串內(nèi)容、顯示字體以及屏幕占用長(zhǎng)度。由于位置屬性在之前的“位置”類中已經(jīng)定義,因此“圖形模式字符串”類自然地從“位置”類繼承而來(lái)。這個(gè)新類提供的服務(wù)是在屏幕的特定位置和字體下顯示指定的字符串。有了“圓”和“圖形模式字符串”這兩個(gè)基礎(chǔ)性類之后,通過(guò)多重繼承機(jī)制將它們結(jié)合起來(lái),就創(chuàng)建了一個(gè)新的派生類——“圓內(nèi)字符串”。這個(gè)新類不僅繼承了“圓”類在屏幕上繪制圓的能力,還繼承了“圖形模式字符串”類在圖形界面中顯示字符串的功能。因此,“圓內(nèi)字符串”類具備了同時(shí)在屏幕上顯示圓及其內(nèi)部字符串的綜合能力。綜上所述,我們構(gòu)建了一個(gè)清晰的類層次結(jié)構(gòu):從基礎(chǔ)的“位置”類分別派生出“點(diǎn)”類和“圖形模式字符串”類,進(jìn)而由“點(diǎn)”類衍生出“圓”類。最終,通過(guò)“圓”類和“圖形模式字符串”類的共同繼承,得到了功能全面的“圓內(nèi)字符串”類。13.答:從對(duì)這個(gè)訂貨系統(tǒng)的需求可以知道,倉(cāng)庫(kù)管理員通過(guò)放在倉(cāng)庫(kù)中的終端把零件入庫(kù)/出庫(kù)事務(wù)報(bào)告給訂貨系統(tǒng),系統(tǒng)接收到事務(wù)信息之后應(yīng)該處理事務(wù);采購(gòu)員需要使用訂貨系統(tǒng)提供的產(chǎn)生報(bào)表功能,以獲取訂貨報(bào)表。綜上所述,可以畫出圖6-3所示的用例圖。圖6-3訂貨系統(tǒng)用例圖

第7章面向?qū)ο笤O(shè)計(jì)1.答:面向?qū)ο笤O(shè)計(jì)的核心準(zhǔn)則主要包括開閉原則、里氏替換原則、依賴倒置原則、單一職責(zé)原則、接口隔離原則、迪米特法則以及合成復(fù)用原則。開閉原則要求軟件實(shí)體應(yīng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,以提高系統(tǒng)的可復(fù)用性和可維護(hù)性。里氏替換原則強(qiáng)調(diào)子類必須能夠替換其基類,以保證系統(tǒng)的穩(wěn)定性和擴(kuò)展性。依賴倒置原則倡導(dǎo)高層模塊不依賴于低層模塊,而依賴于抽象,降低類之間的耦合度。單一職責(zé)原則要求一個(gè)類只應(yīng)該有一個(gè)引起變化的原因,即每個(gè)類應(yīng)該只有一個(gè)職責(zé)。接口隔離原則強(qiáng)調(diào)客戶端不應(yīng)該依賴它不需要的接口,即一個(gè)類對(duì)另一個(gè)類的依賴性應(yīng)當(dāng)是最小的。迪米特法則則要求一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象保持最少的了解,以降低系統(tǒng)的復(fù)雜性。當(dāng)面臨功能復(fù)用的需求時(shí),應(yīng)該首先考慮合成復(fù)用原則,也就是應(yīng)優(yōu)先考慮使用關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn)復(fù)用,而非簡(jiǎn)單地通過(guò)繼承來(lái)擴(kuò)展功能。這些原則共同保證了面向?qū)ο笤O(shè)計(jì)的靈活性和可維護(hù)性。2.答:?jiǎn)l(fā)規(guī)則在面向?qū)ο笤O(shè)計(jì)中起著至關(guān)重要的指導(dǎo)作用。它們是基于經(jīng)驗(yàn)的總結(jié),旨在幫助開發(fā)者創(chuàng)建出結(jié)構(gòu)清晰、易于維護(hù)和擴(kuò)展的軟件系統(tǒng)。通過(guò)遵循這些規(guī)則,開發(fā)者可以減少錯(cuò)誤,提高代碼質(zhì)量,并增強(qiáng)系統(tǒng)的可重用性。舉例說(shuō)明幾個(gè)常用的啟發(fā)規(guī)則:首先,“設(shè)計(jì)的清晰性與可理解性”規(guī)則強(qiáng)調(diào)命名一致性、遵循協(xié)議、簡(jiǎn)化消息模式和避免模糊定義,以確保設(shè)計(jì)結(jié)果的清晰易懂。其次,“保持適當(dāng)?shù)囊话?特殊結(jié)構(gòu)深度”規(guī)則建議在設(shè)計(jì)類等級(jí)時(shí)保持適當(dāng)?shù)膶哟螖?shù),以反映領(lǐng)域知識(shí),提高系統(tǒng)的可理解性。再者,“設(shè)計(jì)簡(jiǎn)潔的類”規(guī)則鼓勵(lì)創(chuàng)建小而簡(jiǎn)潔的類,便于開發(fā)和管理。例如,在設(shè)計(jì)一個(gè)電商平臺(tái)時(shí),可以遵循這些規(guī)則,將用戶、商品、訂單等核心實(shí)體設(shè)計(jì)為獨(dú)立的類,每個(gè)類職責(zé)明確,接口簡(jiǎn)潔,從而提高系統(tǒng)的可讀性和可維護(hù)性。3.答:軟件重用帶來(lái)的具體效益主要體現(xiàn)在以下幾個(gè)方面:提高開發(fā)效率:通過(guò)重用已有的軟件組件,開發(fā)人員可以避免從零開始編寫代碼,從而節(jié)省了大量的開發(fā)時(shí)間。例如,在開發(fā)一個(gè)電子商務(wù)網(wǎng)站時(shí),如果可以重用已有的用戶認(rèn)證模塊、購(gòu)物車模塊等,將大大縮短開發(fā)周期。降低成本:軟件重用不僅可以節(jié)省開發(fā)時(shí)間,還能減少測(cè)試、文檔編寫和維護(hù)的工作量,從而降低項(xiàng)目的總成本。此外,通過(guò)重用經(jīng)過(guò)驗(yàn)證的組件,還可以降低軟件出錯(cuò)的風(fēng)險(xiǎn)。增強(qiáng)軟件質(zhì)量:重用的組件通常已經(jīng)過(guò)嚴(yán)格的測(cè)試和驗(yàn)證,因此其質(zhì)量相對(duì)較高。將這些組件集成到新的系統(tǒng)中,有助于提高整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。促進(jìn)標(biāo)準(zhǔn)化和一致性:通過(guò)重用通用的軟件組件,可以確保在不同的系統(tǒng)或項(xiàng)目中保持一致的用戶界面、操作流程和數(shù)據(jù)格式,從而提升用戶體驗(yàn)和系統(tǒng)的易用性。實(shí)際案例:假設(shè)一家軟件開發(fā)公司需要為多個(gè)客戶開發(fā)類似的客戶關(guān)系管理系統(tǒng)(CRM)。通過(guò)重用已有的用戶管理、數(shù)據(jù)報(bào)表、通訊錄等模塊,該公司可以迅速地為每個(gè)客戶定制出符合其需求的CRM系統(tǒng),同時(shí)確保系統(tǒng)的穩(wěn)定性和易用性。這不僅提高了開發(fā)效率,還降低了項(xiàng)目的總成本,并提升了客戶滿意度。4.答:在系統(tǒng)分解過(guò)程中,為確保子系統(tǒng)之間的高內(nèi)聚和低耦合,可以采取以下策略:模塊化設(shè)計(jì):將系統(tǒng)劃分為獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,每個(gè)模塊完成單個(gè)子功能。這有助于保持模塊內(nèi)部的緊密性(高內(nèi)聚)并減少模塊間的依賴(低耦合)。清晰的接口定義:為每個(gè)子系統(tǒng)定義明確的接口,以減少子系統(tǒng)之間的直接依賴。接口應(yīng)該盡量簡(jiǎn)單、清晰,并遵循最小知識(shí)原則,即每個(gè)子系統(tǒng)只應(yīng)該知道它完成任務(wù)所必需的信息。使用設(shè)計(jì)模式:利用設(shè)計(jì)模式(如觀察者模式、中介者模式等)來(lái)降低系統(tǒng)各部分之間的耦合度,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。依賴注入:通過(guò)依賴注入的方式,將依賴關(guān)系從硬編碼中解耦出來(lái),使得系統(tǒng)更加靈活和可配置。分層架構(gòu):采用分層架構(gòu),將系統(tǒng)劃分為不同層次,每層之間通過(guò)明確定義的接口進(jìn)行通信,減少層與層之間的耦合。5.答:在設(shè)計(jì)問(wèn)題域子系統(tǒng)時(shí),識(shí)別關(guān)鍵業(yè)務(wù)實(shí)體是至關(guān)重要的。這通常涉及對(duì)業(yè)務(wù)領(lǐng)域的深入理解和對(duì)核心活動(dòng)的分析。以下是一個(gè)結(jié)合實(shí)例的說(shuō)明:首先,識(shí)別關(guān)鍵業(yè)務(wù)實(shí)體需要對(duì)業(yè)務(wù)領(lǐng)域有深入的了解。以電商平臺(tái)為例,通過(guò)分析其核心業(yè)務(wù)流程,如用戶瀏覽商品、下單、支付、物流等,可以初步確定用戶、商品、訂單、支付和物流等為主要業(yè)務(wù)實(shí)體。其次,進(jìn)一步細(xì)化這些實(shí)體。例如,“用戶”可以細(xì)分為買家和賣家,他們具有不同的屬性和行為;“商品”可以包含多個(gè)屬性,如價(jià)格、庫(kù)存、描述等;“訂單”則涉及訂單狀態(tài)、支付信息、收貨地址等關(guān)鍵數(shù)據(jù)。接著,考慮實(shí)體之間的關(guān)系。在電商平臺(tái)中,用戶和訂單之間存在一對(duì)多的關(guān)系,即一個(gè)用戶可以下多個(gè)訂單;訂單與商品之間存在多對(duì)多的關(guān)系,因?yàn)橐粋€(gè)訂單可以包含多個(gè)商品,一個(gè)商品也可以出現(xiàn)在多個(gè)訂單中。最后,驗(yàn)證和調(diào)整業(yè)務(wù)實(shí)體。通過(guò)與實(shí)際業(yè)務(wù)人員溝通,確保識(shí)別的實(shí)體和關(guān)系符合實(shí)際業(yè)務(wù)需求。如果需要,可以根據(jù)反饋進(jìn)行調(diào)整和優(yōu)化。設(shè)計(jì)問(wèn)題域子系統(tǒng)時(shí),識(shí)別關(guān)鍵業(yè)務(wù)實(shí)體需要深入理解業(yè)務(wù)領(lǐng)域,分析核心業(yè)務(wù)流程,細(xì)化實(shí)體并考慮實(shí)體間的關(guān)系,最后通過(guò)驗(yàn)證和調(diào)整確保實(shí)體的準(zhǔn)確性。在電商平臺(tái)的例子中,關(guān)鍵業(yè)務(wù)實(shí)體包括用戶、商品、訂單等,它們構(gòu)成了系統(tǒng)設(shè)計(jì)的核心部分。6.答:在設(shè)計(jì)人機(jī)交互子系統(tǒng)時(shí),為提高用戶友好性和易用性,可以考慮以下設(shè)計(jì)建議:簡(jiǎn)潔明了的界面設(shè)計(jì):避免界面過(guò)于復(fù)雜和擁擠,保持界面簡(jiǎn)潔明了,讓用戶能夠迅速找到所需功能。直觀的操作流程:設(shè)計(jì)符合用戶直覺和習(xí)慣的操作流程,減少用戶的認(rèn)知負(fù)擔(dān)。提供反饋和提示:在用戶操作過(guò)程中提供及時(shí)的反饋和提示信息,幫助用戶更好地理解和使用系統(tǒng)??稍L問(wèn)性和可用性測(cè)試:進(jìn)行可訪問(wèn)性和可用性測(cè)試,確保系統(tǒng)對(duì)不同用戶群體都是友好和易用的。遵循一致性原則:保持系統(tǒng)內(nèi)部和外部的一致性,使用戶能夠輕松地理解和使用系統(tǒng)。7.答:設(shè)計(jì)任務(wù)管理子系統(tǒng)時(shí),核心功能和性能要求至關(guān)重要。核心功能方面,首先需要考慮的是任務(wù)的調(diào)度與執(zhí)行管理,這涉及到對(duì)任務(wù)的創(chuàng)建、分配、執(zhí)行和終止等全過(guò)程的控制。同時(shí),子系統(tǒng)應(yīng)支持任務(wù)的優(yōu)先級(jí)管理,以確保高優(yōu)先級(jí)的任務(wù)能夠得到及時(shí)的處理。此外,同步與通信機(jī)制也是不可或缺的,它確保任務(wù)之間的協(xié)調(diào)和信息共享,防止數(shù)據(jù)沖突和資源競(jìng)爭(zhēng)。性能要求方面,任務(wù)管理子系統(tǒng)應(yīng)具備高效性和穩(wěn)定性。高效性要求子系統(tǒng)能夠快速地響應(yīng)任務(wù)調(diào)度請(qǐng)求,減少任務(wù)等待時(shí)間,提高系統(tǒng)的吞吐量。穩(wěn)定性則要求子系統(tǒng)在長(zhǎng)時(shí)間運(yùn)行過(guò)程中能夠保持性能穩(wěn)定,不出現(xiàn)因資源耗盡或任務(wù)沖突導(dǎo)致的系統(tǒng)崩潰或性能下降。另外,可擴(kuò)展性和可維護(hù)性也是設(shè)計(jì)任務(wù)管理子系統(tǒng)時(shí)需要考慮的重要因素。隨著系統(tǒng)功能的增加和用戶需求的變化,子系統(tǒng)應(yīng)能夠方便地進(jìn)行擴(kuò)展和修改。同時(shí),為了便于排查問(wèn)題和進(jìn)行系統(tǒng)升級(jí),子系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)應(yīng)具備良好的可維護(hù)性。設(shè)計(jì)任務(wù)管理子系統(tǒng)時(shí),核心功能和性能要求包括任務(wù)的調(diào)度與執(zhí)行管理、優(yōu)先級(jí)管理、同步與通信機(jī)制、高效性、穩(wěn)定性、可擴(kuò)展性和可維護(hù)性。這些要素共同構(gòu)成了任務(wù)管理子系統(tǒng)的設(shè)計(jì)基礎(chǔ),確保系統(tǒng)能夠滿足復(fù)雜軟件環(huán)境下的任務(wù)管理需求。8.答:在設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)時(shí),確保數(shù)據(jù)的完整性和安全性至關(guān)重要。針對(duì)數(shù)據(jù)的完整性,首先,在設(shè)計(jì)數(shù)據(jù)格式時(shí),應(yīng)遵循數(shù)據(jù)庫(kù)規(guī)范化理論,如將數(shù)據(jù)表規(guī)范化到第三范式,以消除數(shù)據(jù)冗余和傳遞依賴,從而減少數(shù)據(jù)插入、更新或刪除時(shí)的異常和錯(cuò)誤,保證數(shù)據(jù)的準(zhǔn)確性和一致性。其次,應(yīng)實(shí)施數(shù)據(jù)完整性約束,如主鍵約束、外鍵約束、非空約束等,以防止無(wú)效數(shù)據(jù)的產(chǎn)生。對(duì)于數(shù)據(jù)的安全性,首先要確保只有授權(quán)用戶才能訪問(wèn)和修改數(shù)據(jù)。這可以通過(guò)實(shí)施嚴(yán)格的用戶認(rèn)證和授權(quán)機(jī)制來(lái)實(shí)現(xiàn),如使用用戶名和密碼進(jìn)行身份驗(yàn)證,并根據(jù)用戶的角色和權(quán)限來(lái)控制其對(duì)數(shù)據(jù)的訪問(wèn)范圍。此外,應(yīng)采用加密技術(shù)對(duì)敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ)和傳輸,以防止數(shù)據(jù)在傳輸過(guò)程中被截獲或篡改。還應(yīng)建立數(shù)據(jù)備份和恢復(fù)機(jī)制,以防止數(shù)據(jù)丟失或損壞。定期備份數(shù)據(jù),并確保備份數(shù)據(jù)的可用性和可恢復(fù)性。同時(shí),要對(duì)數(shù)據(jù)管理子系統(tǒng)進(jìn)行定期的安全審計(jì)和漏洞掃描,及時(shí)發(fā)現(xiàn)和修復(fù)潛在的安全隱患。綜上所述,通過(guò)規(guī)范化數(shù)據(jù)設(shè)計(jì)、實(shí)施數(shù)據(jù)完整性約束、加強(qiáng)用戶認(rèn)證和授權(quán)、加密敏感數(shù)據(jù)以及建立數(shù)據(jù)備份和恢復(fù)機(jī)制等措施,可以有效地確保數(shù)據(jù)管理子系統(tǒng)中數(shù)據(jù)的完整性和安全性。9.答:在設(shè)計(jì)類中的服務(wù)時(shí),為避免方法的過(guò)長(zhǎng)和類的過(guò)大,可以采取以下優(yōu)化方法:?jiǎn)我宦氊?zé)原則:確保每個(gè)類或方法只負(fù)責(zé)一項(xiàng)功能或業(yè)務(wù)邏輯,避免類或方法過(guò)于復(fù)雜和龐大。提取方法:將過(guò)長(zhǎng)的方法拆分成多個(gè)小方法,每個(gè)小方法只完成一個(gè)具體的任務(wù)或邏輯判斷。重構(gòu):定期對(duì)代碼進(jìn)行重構(gòu),優(yōu)化代碼結(jié)構(gòu),提高代碼的可讀性和可維護(hù)性。使用設(shè)計(jì)模式:利用設(shè)計(jì)模式(如工廠模式、策略模式等)來(lái)優(yōu)化類的設(shè)計(jì),降低類的復(fù)雜性。代碼審查:進(jìn)行定期的代碼審查,及時(shí)發(fā)現(xiàn)并改進(jìn)代碼中的問(wèn)題,確保代碼質(zhì)量。10.答:在關(guān)聯(lián)設(shè)計(jì)中有一些常見的優(yōu)化策略,結(jié)合實(shí)際案例說(shuō)明如下:減少不必要的關(guān)聯(lián):避免創(chuàng)建不必要的關(guān)聯(lián)關(guān)系,以減少系統(tǒng)的復(fù)雜性。例如,在一個(gè)電商系統(tǒng)中,用戶類與商品類之間的關(guān)聯(lián)應(yīng)該是必要的,而用戶類與訂單類之間的關(guān)聯(lián)也應(yīng)該是合理的。但是,如果添加了一個(gè)不必要的關(guān)聯(lián),如用戶類與評(píng)論類的直接關(guān)聯(lián),就可能導(dǎo)致系統(tǒng)的復(fù)雜性增加。使用接口和抽象類:通過(guò)接口和抽象類來(lái)定義關(guān)聯(lián)關(guān)系,可以增加系統(tǒng)的靈活性和可擴(kuò)展性。例如,在一個(gè)游戲中,可以定義一個(gè)“角色”接口,并讓不同的角色類實(shí)現(xiàn)這個(gè)接口。這樣,當(dāng)需要添加新的角色時(shí),只需要實(shí)現(xiàn)該接口即可,而不需要修改已有的代碼。依賴注入:通過(guò)依賴注入的方式來(lái)實(shí)現(xiàn)關(guān)聯(lián)關(guān)系,可以降低類之間的耦合度。例如,在一個(gè)銀行系統(tǒng)中,可以通過(guò)依賴注入的方式將賬戶信息與用戶信息進(jìn)行關(guān)聯(lián),而不是直接在用戶類中實(shí)例化賬戶類。使用設(shè)計(jì)模式:利用設(shè)計(jì)模式來(lái)優(yōu)化關(guān)聯(lián)設(shè)計(jì)。例如,使用觀察者模式來(lái)實(shí)現(xiàn)不同類之間的松耦合關(guān)聯(lián);使用策略模式來(lái)定義一系列的算法,并將每一個(gè)算法封裝起來(lái),使它們可以互相替換。實(shí)際案例:在一個(gè)在線書店系統(tǒng)中,用戶和購(gòu)物車之間存在關(guān)聯(lián)關(guān)系。為了避免直接關(guān)聯(lián)導(dǎo)致的緊密耦合,可以引入一個(gè)購(gòu)物車接口,并由具體的購(gòu)物車類實(shí)現(xiàn)該接口。這樣,當(dāng)用戶需要添加商品到購(gòu)物車時(shí),只需要通過(guò)購(gòu)物車接口與購(gòu)物車類進(jìn)行交互,而不需要直接依賴具體的購(gòu)物車實(shí)現(xiàn)類。這種設(shè)計(jì)方式可以降低用戶類與購(gòu)物車類之間的耦合度,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。11.答:在圖書館環(huán)境中,可以輕易地識(shí)別出諸如“書”、“書柜”和“讀者”等常見的實(shí)體。而在辦公室環(huán)境中,可能會(huì)遇到“文件夾”、“信件”和“職員”等實(shí)體。這些特定應(yīng)用領(lǐng)域的實(shí)體,無(wú)論是實(shí)際存在的事物(如書籍)、所扮演的角色(如圖書館的讀者)、組織單位(如計(jì)算機(jī)系)、地點(diǎn)(如辦公室)還是設(shè)備(如打印機(jī)),都是構(gòu)成對(duì)象模型的主要元素。同時(shí),通過(guò)研究現(xiàn)有的分類或組織結(jié)構(gòu),也能發(fā)現(xiàn)更多潛在的對(duì)象。通過(guò)訪談、查閱文檔等方式,可以初步列出這些對(duì)象。一種更為簡(jiǎn)便的識(shí)別對(duì)象的方法是采用詞法分析。只需列出圖書館自動(dòng)化系統(tǒng)需求陳述中的所有名詞,就能得到一份候選對(duì)象的清單,如:軟件、圖書館、系統(tǒng)、工作站、讀者、事務(wù)、書、圖書館館員、客戶、借書卡、條形碼閱讀器、書的代碼、PC、圖書目錄等。然而,這份清單并非完全準(zhǔn)確,需要進(jìn)一步篩選。首先,一些非問(wèn)題域的對(duì)象,如“軟件”——作為即將開發(fā)的產(chǎn)品,并不應(yīng)被納入問(wèn)題域模型中,應(yīng)予以刪除。同樣,像“算法”或“鏈表”這樣的技術(shù)名詞也應(yīng)被剔除。在后續(xù)的詳細(xì)設(shè)計(jì)階段,可能會(huì)根據(jù)需要將其作為解決方案的一部分重新引入。此外,還需要對(duì)一些籠統(tǒng)的名詞進(jìn)行具體化或用更具體的名詞替代。例如,在這份清單中,“系統(tǒng)”就是一個(gè)過(guò)于籠統(tǒng)的詞匯??紤]到工作站和PC都將連接到同一臺(tái)主計(jì)算機(jī)上,可以用“計(jì)算機(jī)”來(lái)替代“系統(tǒng)”。在圖書館自動(dòng)化系統(tǒng)的需求陳述中,“讀者”和“客戶”實(shí)際上是同一個(gè)概念的不同表述,應(yīng)選擇其中一個(gè)更符合語(yǔ)境的詞匯作為對(duì)象名。在圖書館的環(huán)境中,“讀者”更為貼切,因此應(yīng)保留“讀者”作為對(duì)象名。最后,在建立“讀者”和“圖書館館員”的模型時(shí)需要特別謹(jǐn)慎。一個(gè)人可能同時(shí)擔(dān)任這兩個(gè)角色,因此,在模型中是將其作為不同對(duì)象處理,還是作為同一對(duì)象的不同角色處理,這是一個(gè)需要仔細(xì)考慮的問(wèn)題。在目前的階段,應(yīng)該把讀者和館員作為不同的對(duì)象來(lái)處理,但同時(shí)也要記住,隨著模型的細(xì)化,可能會(huì)對(duì)這個(gè)決定進(jìn)行調(diào)整。表7-1列出了對(duì)象之間的關(guān)系。其中一些關(guān)系是直接從需求陳述中摘錄出來(lái)的,另一些關(guān)系是從關(guān)于圖書館的常識(shí)中得出的。表7-1對(duì)象關(guān)系表從需求陳述中得出的關(guān)系從常識(shí)中得出的關(guān)系館員操作工作站工作站有條形碼閱讀器條形碼閱讀器讀入書的代碼條形碼閱讀器讀入借書卡讀者檢索圖書目錄圖書館擁有計(jì)算機(jī)圖書館擁有工作站圖書館擁有PCPC存儲(chǔ)圖書目錄計(jì)算機(jī)與工作站通信圖書館雇用館員讀者是圖書館的會(huì)員讀者有借書卡根據(jù)上述分析得出的對(duì)象及對(duì)象之間的關(guān)系,畫在圖7-1所示的初始類圖中。在這張圖中僅包含了關(guān)系名,當(dāng)模型進(jìn)一步精化時(shí)可以包含諸如重?cái)?shù)和泛化關(guān)系之類的進(jìn)一步描述信息。圖7-1圖書管理系統(tǒng)初始類圖接下來(lái)確定對(duì)象的屬性。屬性描述對(duì)象類的實(shí)例,構(gòu)成對(duì)象的狀態(tài)。通過(guò)尋找能把不同實(shí)例區(qū)分開來(lái)的特性,可以識(shí)別出對(duì)象的屬性。屬性是一個(gè)對(duì)象類的全部實(shí)例的公共性質(zhì)。應(yīng)該識(shí)別出原子屬性而不是復(fù)合屬性。例如,對(duì)于圖書館的“讀者”來(lái)說(shuō),應(yīng)該識(shí)別出屬性“姓名”和“地址”,而不應(yīng)該設(shè)置復(fù)合屬性“姓名與地址”。在分析階段還應(yīng)該盡力防止在屬性集中出現(xiàn)冗余。例如,不應(yīng)該同時(shí)設(shè)置“已借出的書”和“已借出的書數(shù)”這樣兩個(gè)屬性,因?yàn)楹笳呖梢酝ㄟ^(guò)前者計(jì)算出來(lái),僅有前一個(gè)屬性就足夠了。采用在對(duì)象狀態(tài)中保留冗余信息并由該對(duì)象維護(hù)這些信息的方法,總能夠優(yōu)化實(shí)際的實(shí)現(xiàn)結(jié)果。例如,在詳細(xì)設(shè)計(jì)時(shí)可以決定在對(duì)象狀態(tài)中包含已借出的書數(shù),而不是在需要時(shí)通過(guò)計(jì)算得出這個(gè)信息,這樣做可以提高系統(tǒng)運(yùn)行速度。但是,在分析階段通常不需要考慮優(yōu)化問(wèn)題。一個(gè)對(duì)象提供的主要服務(wù)是與它的生命周期相關(guān)的那些服務(wù)。例如,一本書被購(gòu)入,被借出,被歸還零次或多次,最后退出流通;一個(gè)人成為圖書館的會(huì)員,借書和還書,預(yù)約圖書,改變地址,交納罰金等,直至最后終止會(huì)員資格。讀/寫對(duì)象屬性的服務(wù),提供對(duì)象的狀態(tài)信息或改變對(duì)象的狀態(tài)。提供對(duì)象狀態(tài)信息的服務(wù),可能需要引用某些計(jì)算,也可能不需要計(jì)算。在分析階段并不需要考慮實(shí)現(xiàn)服務(wù)的方法。服務(wù)是通過(guò)計(jì)算實(shí)現(xiàn)的還是通過(guò)簡(jiǎn)單的查找過(guò)程實(shí)現(xiàn)的,對(duì)于需要這個(gè)信息的對(duì)象來(lái)說(shuō)是不可見的。通過(guò)研究使用目標(biāo)系統(tǒng)的情景,可以進(jìn)一步確定所需要的服務(wù)。應(yīng)該考慮在系統(tǒng)構(gòu)件之間的典型對(duì)話,既應(yīng)該考慮正常情況下的對(duì)話也應(yīng)該考慮意外情況下的對(duì)話。例如,既應(yīng)該考慮讀者順利地借到一本書的情景,也應(yīng)該考慮讀者借書卡無(wú)效的情景,還應(yīng)該考慮讀者逾期還書應(yīng)該付罰款的情景。圖7-2是正常情況下讀者借一本書的順序圖。從圖中可以看出,UML順序圖與事件跟蹤圖很相像,區(qū)別僅在于在順序圖中用矩形框代表對(duì)象。在圖中所描繪的交互過(guò)程中發(fā)生了一系列事件,這些事件將由涉及的對(duì)象的操作來(lái)處理。圖7-2讀者借書順序圖服務(wù)是連接對(duì)象的一種手段,但要使軟件系統(tǒng)真正展現(xiàn)出面向?qū)ο蟮奶匦?,關(guān)鍵在于“整體-部分”的聚集關(guān)系和“一般-特殊”的分類關(guān)系。某些分類關(guān)系可以從所處理的現(xiàn)實(shí)世界問(wèn)題中已存在的分類模式中導(dǎo)出。通過(guò)深入挖掘?qū)ο箝g的關(guān)系,我們可以進(jìn)一步將對(duì)象組織成層次化的分類系統(tǒng)。例如,可以將“書”這一對(duì)象視為“小說(shuō)”、“詩(shī)集”和“工具書”等更具體對(duì)象的泛化。然而,是否需要將這些更具體的對(duì)象定義為獨(dú)立的類,取決于處理問(wèn)題的具體需求。如果系統(tǒng)無(wú)需區(qū)分小說(shuō)和詩(shī)集,那么將它們定義為不同的對(duì)象類就無(wú)必要。但是,如果小說(shuō)和詩(shī)集可以外借,而工具書不能外借,那么將小說(shuō)和詩(shī)集歸為一類,工具書歸為另一類,就顯得非常有意義了。同樣地,也可以考慮對(duì)象之間的相似性,將它們視為某個(gè)更一般化對(duì)象的特化。例如,如果圖書館系統(tǒng)需要處理“書”和“雜志”這兩種對(duì)象,并且它們具有許多相同的屬性,那么可以引入一個(gè)新的對(duì)象類“出版物”作為這兩者的泛化。將共享的屬性提升到“出版物”類中,然后讓“書”和“雜志”繼承這些屬性。但需要注意的是,泛化出的對(duì)象應(yīng)該對(duì)應(yīng)現(xiàn)實(shí)世界中有意義的實(shí)體。例如,不能僅僅因?yàn)闀臀募穸加小拔恢谩边@一屬性,就輕率地從這兩者泛化出一個(gè)新的對(duì)象類。剛才提到的“出版物”類是一個(gè)抽象類,它沒有具體的實(shí)例。在圖書館系統(tǒng)中,只有從“出版物”類特化出的具體類(如“書”和“雜志”)的實(shí)例存在。在類的層次結(jié)構(gòu)中,“出版物”類的作用是建立其他對(duì)象類之間的關(guān)系,并為它們的用戶提供接口描述。在“出版物”層定義的屬性和服務(wù),構(gòu)成了其所有后代類的公共接口。確定哪些對(duì)象和屬性應(yīng)該放入對(duì)象模型中,與如何在類的層次結(jié)構(gòu)中定義它們密切相關(guān)。例如,如果一個(gè)對(duì)象只有一個(gè)屬性,那么通常最好將這個(gè)屬性作為其他對(duì)象的一個(gè)屬性。此外,一個(gè)類的所有實(shí)例都應(yīng)該具有共同的屬性。如果某些屬性只對(duì)部分實(shí)例有意義,那么實(shí)際上就存在一個(gè)分類結(jié)構(gòu)。例如,如果有些書可以借出圖書館外,而有些書不能借出圖書館外,這就表明存在一個(gè)分類結(jié)構(gòu),其中“書”類有像“小說(shuō)”和“工具書”這樣的特化類。另外值得注意的是,隨著時(shí)間的推移,對(duì)象的屬性集和所提供的服務(wù)可能會(huì)發(fā)生變化,但對(duì)象類的層次結(jié)構(gòu)通常會(huì)保持相對(duì)穩(wěn)定。例如,如果圖書館在運(yùn)行一段時(shí)間后決定增加向讀者提供的服務(wù)(如出借音像制品),那么只需要簡(jiǎn)單地調(diào)整圖書館的屬性集并擴(kuò)展讀者的服務(wù)集即可。第8章統(tǒng)一建模語(yǔ)言1.答:UML的起源可以追溯到Rumbaugh、Booch、Jacobson、Odell和Shlaer等人在軟件工程領(lǐng)域的工作。他們各自開發(fā)了不同的建模方法。但是他們開發(fā)的這些形形色色的符號(hào)曾經(jīng)引起了很多混亂。因此,為了規(guī)范在20世紀(jì)90年代早期大量存在并得到廣泛運(yùn)用的面向?qū)?/p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論