![圖書(shū)館管理面向?qū)ο蠓治雠c設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view11/M01/25/24/wKhkGWXid2iAEQa8AAE1fKDeRAA317.jpg)
![圖書(shū)館管理面向?qū)ο蠓治雠c設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view11/M01/25/24/wKhkGWXid2iAEQa8AAE1fKDeRAA3172.jpg)
![圖書(shū)館管理面向?qū)ο蠓治雠c設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view11/M01/25/24/wKhkGWXid2iAEQa8AAE1fKDeRAA3173.jpg)
![圖書(shū)館管理面向?qū)ο蠓治雠c設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view11/M01/25/24/wKhkGWXid2iAEQa8AAE1fKDeRAA3174.jpg)
![圖書(shū)館管理面向?qū)ο蠓治雠c設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view11/M01/25/24/wKhkGWXid2iAEQa8AAE1fKDeRAA3175.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件工程
第五章面向?qū)ο蠓治雠c設(shè)計(jì)5.1需求獲取5.2面向?qū)ο蠓治?.3面向?qū)ο笤O(shè)計(jì)5.4系統(tǒng)設(shè)計(jì)5.5對(duì)象設(shè)計(jì)1軟件工程5.1
需求獲取需求獲取的目標(biāo)是確定用戶“需要”什么樣的軟件產(chǎn)品,就是說(shuō),新的軟件必須能夠做什么。沒(méi)有專業(yè)的系統(tǒng)分析人員,用戶很難了解到需要開(kāi)發(fā)什么相關(guān)信息和功能;另一方面,沒(méi)有與用戶的交流,系統(tǒng)分析人員也很難弄清客戶真正需要什么。發(fā)現(xiàn)用戶需求的過(guò)程稱為需求獲取。一旦提出了最初的需求,進(jìn)一步推敲、細(xì)化和擴(kuò)充的過(guò)程稱為分析。2軟件工程需求獲取的第一步是理解應(yīng)用領(lǐng)域,即目標(biāo)軟件的應(yīng)用環(huán)境。如銀行、電信公司、書(shū)店等。一旦系統(tǒng)分析人員對(duì)該領(lǐng)域有了充分了解,就可以建立一個(gè)業(yè)務(wù)模型,描述用戶的業(yè)務(wù)過(guò)程,確定用戶的初始需求。然后通過(guò)迭代,更深入了解應(yīng)用領(lǐng)域,回過(guò)頭來(lái)推敲業(yè)務(wù)模型。這種迭代過(guò)程直到雙方對(duì)需求的理解達(dá)到共識(shí)。需求獲取的結(jié)果是導(dǎo)出用戶可理解的系統(tǒng)規(guī)格說(shuō)明。3軟件工程開(kāi)發(fā)用戶需求的典型過(guò)程1.識(shí)別用戶需求2.訪談?dòng)脩舸?/p>
識(shí)別各種需要與要求使用工具幫助表達(dá)用戶需求繪制GUI草圖確定硬件環(huán)境3.用標(biāo)準(zhǔn)文檔格式撰寫客戶需求4.核查用戶需求請(qǐng)用戶評(píng)審用戶批準(zhǔn)后5.構(gòu)建詳細(xì)需求(分析建模)4軟件工程5.1.1
與用戶交互1)需求的來(lái)源不同類型應(yīng)用能從人員處獲取需求的比例:相對(duì)低的相對(duì)高的從人群獲取需求的大概百分比應(yīng)用的類型高度受限的不受限制的導(dǎo)彈制導(dǎo)系統(tǒng)航班控制系統(tǒng)公司財(cái)務(wù)系統(tǒng)增強(qiáng)版制造控制系統(tǒng)公司財(cái)務(wù)系統(tǒng)Encounter視頻游戲軍事戰(zhàn)略決策支持系統(tǒng)5軟件工程所謂限制,是指受客觀物理規(guī)律的限制。如導(dǎo)彈制導(dǎo)系統(tǒng)更多地受物理運(yùn)動(dòng)定律的限制,而非人的決策。視頻游戲的大部分需求依賴人,因?yàn)樗且粋€(gè)相像出來(lái)的產(chǎn)品。應(yīng)用受到的限制越少,能從人們那里獲得的需求比例越大。2)識(shí)別利益相關(guān)者(stakeholder)對(duì)項(xiàng)目承擔(dān)風(fēng)險(xiǎn)和享有利益的人即為利益相關(guān)者。他們是應(yīng)用的“客戶”。如公司高層、項(xiàng)目經(jīng)理、最終用戶、系統(tǒng)開(kāi)發(fā)人員等。6軟件工程不同利益相關(guān)者之間的利益沖突會(huì)導(dǎo)致需求不一致。如果需求沖突不能調(diào)和,項(xiàng)目就會(huì)陷入困境,最后往往會(huì)被取消。即使所有利益相關(guān)者的需求一致,也可能由于實(shí)現(xiàn)代價(jià)高昂,需求不能得到完全滿足。3)了解客戶的需求一般客戶希望得到一個(gè)產(chǎn)品,他們需要系統(tǒng)開(kāi)發(fā)人員幫助,明確自己的需要。例如,有一個(gè)客戶愿望框架:“Encounter是一個(gè)角色扮演游戲,它能模擬被扮演人物的全部或部分活動(dòng),應(yīng)對(duì)人們具有相當(dāng)吸引力?!?軟件工程完整的客戶要求應(yīng)當(dāng)記錄在需求文檔的“概述”部分。但需求中還有一些問(wèn)題需要由系統(tǒng)分析人員與客戶商量,以明確這些需求。例如游戲是否只允許玩家扮演一個(gè)角色還是可以同時(shí)控制多個(gè)人物?當(dāng)兩個(gè)人相遇時(shí)會(huì)發(fā)生什么事情?游戲是否可以聯(lián)網(wǎng)對(duì)戰(zhàn)等。4)訪談和文檔記錄大部分需求獲取是人與人溝通的活動(dòng),這些活動(dòng)經(jīng)過(guò)精心組織,以準(zhǔn)確獲得最好的效果。準(zhǔn)備和訪談客戶的過(guò)程如下:8軟件工程訪談之前列出訪談的“客戶”對(duì)象,并劃分客戶優(yōu)先級(jí)最有可能決定項(xiàng)目成敗的人安排訪談日程,設(shè)定開(kāi)始和結(jié)束時(shí)間系統(tǒng)開(kāi)發(fā)人員至少有兩人參加訪談準(zhǔn)備錄音設(shè)備訪談中注意傾聽(tīng)不要處于被動(dòng)狀態(tài):?jiǎn)l(fā)和鼓勵(lì)理解客戶的需要并探索要求采用用例?或數(shù)據(jù)流圖?狀態(tài)圖?9軟件工程記錄全部訪談內(nèi)容安排補(bǔ)充會(huì)議訪談之后根據(jù)標(biāo)準(zhǔn)模版撰寫軟件需求規(guī)格說(shuō)明(SRS),打客戶需求草稿通過(guò)電子郵件征求客戶意見(jiàn)對(duì)于不同類型的應(yīng)用,用例方法是一種獲取和表達(dá)需求的有效方法。某些需求需要通過(guò)數(shù)據(jù)流圖或狀態(tài)圖與用戶溝通。10軟件工程5.1.2描述客戶需求需求可以看成是應(yīng)用與應(yīng)用的外部代理(如用戶)之間的交互。可利用用例作為表達(dá)工具。用例描述了系統(tǒng)外的參與者(Actor)與應(yīng)用之間的交互情況。主要注重用戶對(duì)系統(tǒng)的看法。描述客戶需求的過(guò)程如下:1)標(biāo)識(shí)參與者標(biāo)識(shí)目標(biāo)系統(tǒng)將支持的不同類型的用戶,可以是人、事件或其他系統(tǒng)。2)標(biāo)識(shí)場(chǎng)景用場(chǎng)景描述目標(biāo)系統(tǒng)典型功能的活動(dòng)細(xì)節(jié),并與用戶溝通,加深開(kāi)發(fā)人員對(duì)應(yīng)用領(lǐng)域的理解。11軟件工程3)標(biāo)識(shí)用例當(dāng)雙方確定了一組場(chǎng)景后,開(kāi)發(fā)人員從該場(chǎng)景抽象出一組用例,描述所有可能的情況。用力表達(dá)了系統(tǒng)的范圍。4)求精用例細(xì)化每一個(gè)用例。引入帶有出錯(cuò)處理或帶有異常處理的用例,描述系統(tǒng)的行為,保證需求的描述是完全的。5)標(biāo)識(shí)用例之間的關(guān)系描述用例之間的依賴關(guān)系,提取相同功能,建立用例模型。6)標(biāo)識(shí)非功能需求包括系統(tǒng)性能上的約束、文檔、使用資源、安全性和質(zhì)量等需求。12軟件工程需求獲取期間,開(kāi)發(fā)人員需要訪問(wèn)一些不同的信息資源:客戶提供的與應(yīng)用領(lǐng)域相關(guān)的文檔和手冊(cè)。將被目標(biāo)系統(tǒng)替代的遺留系統(tǒng)的技術(shù)文檔。最終用戶和客戶本人。以“圖書(shū)管理系統(tǒng)”為例,首先標(biāo)識(shí)參與者:Librarian圖書(shū)管理員:創(chuàng)建、修改、刪除借閱者信息;添加、編輯、刪除館藏圖書(shū)信息;添加、編輯、刪除流通圖書(shū)信息。Borrower借閱者:借閱、預(yù)約、歸還流通圖書(shū),以及取消圖書(shū)預(yù)約。13軟件工程流通圖書(shū)(Book)是指某種館藏圖書(shū)(Title)的某一流通中的復(fù)本。例如“數(shù)學(xué)分析教程第二冊(cè)”的5本館藏復(fù)本中的第3本。識(shí)別用例:BorrowBook:借閱流通圖書(shū)ReturnBook:返還流通圖書(shū)RecerveTitle:預(yù)約某種館藏圖書(shū)CancelReservation:取消預(yù)約MaintainBorrowerInfo:維護(hù)借閱者信息,包括創(chuàng)建、修改、取消借閱者賬戶MaintainTitleInfo:維護(hù)館藏圖書(shū)信息,包14軟件工程
括添加、修改、刪除館藏圖書(shū)信息MaintainBookInfo:維護(hù)流通圖書(shū)信息,包括添加、修改、刪除流通圖書(shū)信息Login:登錄識(shí)別參與者與用例之間的關(guān)系(場(chǎng)景)Borrower執(zhí)行BorrowBook、ReturnBook、ReserveTitle、CancelReservation等用例。Borrower是通過(guò)Librarian完成上述用例的工作。則Borrower與Librarian存在依賴關(guān)系。Librarian還與MaintainBorrowerInfo、Main-tainTitleInfo、
MaintainBookInfo交互。15軟件工程Librarian還需要與用例Login交互。畫出用例圖BorrowerLibrarianBorrowBookReturnBookReserveTitleCancelReservation<<uses>>16軟件工程用例BorrowBook的規(guī)格說(shuō)明1.1前置條件:在此用例開(kāi)始之前,Librarian必須登錄到系統(tǒng)中。LibrarianLoginMaintainTitleInfoMaintainBookInfoMaintainBorrowerInfo17軟件工程18軟件工程19軟件工程1.2后置條件:如果此用例執(zhí)行成功,在系統(tǒng)中建立并存儲(chǔ)一條借閱記錄,必須時(shí)需要?jiǎng)h除預(yù)約記錄。如果執(zhí)行不成功,系統(tǒng)狀態(tài)不變。1.3事件流基本流當(dāng)Borrower借閱館藏圖書(shū),且Librarian選擇“借書(shū)”,則此用例啟動(dòng)。提供館藏圖書(shū)和借閱者信息。檢索館藏圖書(shū)(E-1)。確定該館藏圖書(shū)的物理復(fù)本(流通圖書(shū))是否在架(E-2)。20軟件工程檢索借閱者(E-3)。將流通圖書(shū)交給借閱者。創(chuàng)建并存儲(chǔ)借閱記錄。刪除預(yù)約記錄。候補(bǔ)流E-1:若該種圖書(shū)不存在,系統(tǒng)顯示提示信息,用例終止。E-2:若該種圖書(shū)都已解出,系統(tǒng)顯示提示信息,用例終止。E-3:系統(tǒng)中不存在該借閱者,系統(tǒng)顯示提示信息,用例終止。21軟件工程5.1.3與用戶溝通的其他工具1)數(shù)據(jù)流圖某些需求可以很自然地表述為處理元素之間的數(shù)據(jù)流。頂層圖即為系統(tǒng)與外部實(shí)體的交互。2)狀態(tài)圖有時(shí)把應(yīng)用看作是幾個(gè)狀態(tài)下的應(yīng)用,而在某一確定時(shí)刻的應(yīng)用始終明確地處于某個(gè)狀態(tài)中。這種狀態(tài)劃分對(duì)理解系統(tǒng)比較有益。狀態(tài)的具體內(nèi)容到實(shí)現(xiàn)階段會(huì)有確切的定義。22軟件工程借書(shū)過(guò)程的數(shù)據(jù)流圖外部實(shí)體、數(shù)據(jù)流和數(shù)據(jù)存儲(chǔ)都為候選對(duì)象管理員
1借書(shū)檢驗(yàn)2借書(shū)登記索書(shū)單借書(shū)證檢驗(yàn)錯(cuò)誤借書(shū)信息日歷
借閱記錄
借閱者信息
圖書(shū)信息
借書(shū)證圖書(shū)23軟件工程還書(shū)過(guò)程的數(shù)據(jù)流圖系統(tǒng)與外部實(shí)體、系統(tǒng)與數(shù)據(jù)存儲(chǔ)的交互,構(gòu)成系統(tǒng)的接口。相應(yīng)數(shù)據(jù)流構(gòu)成接口數(shù)據(jù)。借閱者
3還書(shū)檢驗(yàn)4還書(shū)登記檢驗(yàn)錯(cuò)誤還書(shū)信息日歷
借閱記錄
圖書(shū)24軟件工程館藏圖書(shū)(對(duì)象)的狀態(tài)圖借出在架丟失修補(bǔ)報(bào)廢出借返還丟失丟失注銷損壞上架25軟件工程圖書(shū)管理員借書(shū)操作的狀態(tài)圖登記讀者信息登記借書(shū)信息findTitle(檢索圖書(shū))login(登錄)findBorrower(查找借閱者)reserve(預(yù)約)借書(shū)預(yù)約圖書(shū)手續(xù)完成檢驗(yàn)圖書(shū)borrow(借閱)檢查圖書(shū)狀態(tài)取消findBook(檢索復(fù)本)setLoan(設(shè)借閱狀態(tài))cancel(取消)close(關(guān)閉)檢驗(yàn)讀者借書(shū)26軟件工程借閱者圖書(shū)館在書(shū)架上找書(shū)[返還][借閱]排隊(duì)等待創(chuàng)建借閱記錄準(zhǔn)備下次行動(dòng)[返還][借閱]書(shū)放回書(shū)架刪除借書(shū)記錄[多個(gè)][不多于一個(gè)]27軟件工程28軟件工程29軟件工程活動(dòng)圖(ActivityDiagram)一個(gè)活動(dòng)是一個(gè)在狀態(tài)機(jī)內(nèi)部正在進(jìn)行的非原子(即可中斷的)動(dòng)作。活動(dòng)圖是一種特殊的狀態(tài)圖。其中,大多數(shù)的或者全部的狀態(tài)都是動(dòng)作狀態(tài)或者活動(dòng)狀態(tài)大多數(shù)的或者全部的遷移都是由于源狀態(tài)中活動(dòng)的完成而被觸發(fā)的。一個(gè)活動(dòng)圖著重于描述計(jì)算過(guò)程或工作流的順序的和并發(fā)的執(zhí)行步驟。30軟件工程活動(dòng)圖的兩種使用方式對(duì)工作流建模對(duì)操作建模實(shí)現(xiàn)與系統(tǒng)進(jìn)行協(xié)作的參與者所觀察到的活動(dòng)把活動(dòng)圖作為流程圖使用,對(duì)一個(gè)計(jì)算的細(xì)節(jié)部分建模適用性對(duì)工作流的建模對(duì)分支、分叉和匯合狀態(tài)的建模內(nèi)容用于可視化、詳述、構(gòu)造和文檔化開(kāi)發(fā)系統(tǒng)所涉及的業(yè)務(wù)過(guò)程操作的參數(shù)和它的局部對(duì)象31軟件工程泳道(swimlanes)活動(dòng)圖描述發(fā)生了什么,但沒(méi)有說(shuō)明該活動(dòng)由誰(shuí)來(lái)完成。泳道描述了這種關(guān)系。泳道用矩形框表示,屬于某個(gè)泳道的活動(dòng)放在該矩形框內(nèi),將對(duì)象名放在矩形框的頂部,表示泳道中的活動(dòng)由該對(duì)象負(fù)責(zé)。兩個(gè)泳道中活動(dòng)的各自由不同的對(duì)象負(fù)責(zé),活動(dòng)之間控制權(quán)的轉(zhuǎn)移表明對(duì)象之間的協(xié)作關(guān)系。所以泳道可以將活動(dòng)圖的邏輯描述與順序圖、寫作圖的責(zé)任描述結(jié)合起來(lái)。32軟件工程5.1.4草擬用戶界面和其他接口建立初始用戶界面,是原型方法的一種,目的是快速與客戶溝通??蛻敉ǔT诳吹綉?yīng)用的圖形用戶界面(GUI)才能相像到這個(gè)應(yīng)用未來(lái)的樣子。開(kāi)發(fā)用戶界面的步驟如下:1)了解客戶深入了解最終用戶的想法。根據(jù)用戶的層次,提供多種用戶界面。知識(shí)和經(jīng)驗(yàn)層次:計(jì)算機(jī)素養(yǎng)、系統(tǒng)經(jīng)驗(yàn)、使用類似應(yīng)用的經(jīng)驗(yàn)、教育水平、閱讀水平、打字技能等。33軟件工程用戶的生理特征:年齡、性別、左右手習(xí)慣、生理障礙等。2)理解業(yè)務(wù)功能根據(jù)應(yīng)用的整體意圖來(lái)理解特定用戶界面的目的。功能界面出現(xiàn)的順序通??梢苑从秤脩籼幚砣粘I(yè)務(wù)的方式。用戶的任務(wù)和工作特征:應(yīng)用的使用方式、使用頻率、雇員的流動(dòng)率、任務(wù)的重要性、任務(wù)的重復(fù)性、對(duì)培訓(xùn)的期望、工作類型等。用戶的心理特征:工作態(tài)度、能動(dòng)性、認(rèn)知方式等。34軟件工程3)理解優(yōu)秀界面設(shè)計(jì)的原則目的是加強(qiáng)視覺(jué)效果。確保應(yīng)用的各個(gè)界面之間風(fēng)格的一致性:習(xí)慣、步驟、視覺(jué)和感覺(jué)、位置等。揣測(cè)用戶通常開(kāi)始操作的地點(diǎn)導(dǎo)航系統(tǒng)盡量簡(jiǎn)捷使用分組和分層來(lái)強(qiáng)調(diào)重要性級(jí)別4)選擇合適的窗口類型五類窗口:屬性窗口:展示實(shí)體的屬性對(duì)話窗口:完成特定任務(wù)或命令的信息35軟件工程消息窗口:提供信息面板窗口:展示一組控件彈出窗口:突出顯示信息5)制作系統(tǒng)菜單為用戶提供一個(gè)穩(wěn)定的、易于理解的使用環(huán)境,可以方便地搜尋需要的選項(xiàng)。提供一個(gè)主菜單顯示所有相關(guān)選擇(僅局限于此)將菜單結(jié)構(gòu)與應(yīng)用要完成的任務(wù)對(duì)應(yīng)起來(lái)盡量減少菜單的級(jí)數(shù)36軟件工程6)選擇合適的基于設(shè)備的控件提供給用戶,向系統(tǒng)發(fā)送指示的實(shí)際手段,包括鼠標(biāo)、鍵盤、觸摸屏、繪圖板、軌跡球、麥克風(fēng)等。7)選擇合適的基于界面的控件即出現(xiàn)在屏幕上的符號(hào)。用戶通過(guò)這些符號(hào)向系統(tǒng)提出他的輸入和操作意圖,包括圖標(biāo)、按鈕、復(fù)選框、單選框等。8)組織和安排窗口布局多窗口的排列規(guī)則,如平鋪、層疊等。9)選擇合適的顏色盡量保持簡(jiǎn)捷和低調(diào)。顏色需要和諧。37軟件工程5.2面向?qū)ο蠓治龇治鼋5哪康氖菍?duì)來(lái)自客戶的需求形式化。形式化可以導(dǎo)致新的洞察和發(fā)現(xiàn)需求錯(cuò)誤。1999年NASA損失了一顆價(jià)值數(shù)億美元的氣象衛(wèi)星,據(jù)調(diào)查是因?yàn)榱性诙攘勘碇械目刂茢?shù)據(jù)出了問(wèn)題。不巧的是這個(gè)缺陷在災(zāi)難發(fā)生幾天之前才剛發(fā)現(xiàn),如果在需求分析階段就被識(shí)別出來(lái)就可避免損失了。避免需求錯(cuò)誤或遺漏的第一道防線就是把所有的需求細(xì)化,建立分析模型。38軟件工程分析模型由三個(gè)獨(dú)立的模型構(gòu)成:由用例和場(chǎng)景表示的功能模型;用類和對(duì)象表示的分析對(duì)象模型;由狀態(tài)圖和順序圖表示的動(dòng)態(tài)模型。在需求獲取階段得到的用例模型就是功能模型。據(jù)此可導(dǎo)出分析對(duì)象模型和動(dòng)態(tài)模型。需要注意,這些模型代表的是來(lái)自客戶的概念,而非實(shí)際軟件類或?qū)嶋H構(gòu)件。如數(shù)據(jù)庫(kù)、子系統(tǒng)、會(huì)話管理器、網(wǎng)絡(luò)等,不應(yīng)出現(xiàn)在分析模型中,因?yàn)檫@些概念僅與實(shí)現(xiàn)相關(guān)。分析中的類可以看作是高層抽象,在后續(xù)階段將使用更多的細(xì)節(jié)實(shí)現(xiàn)。39軟件工程在分析對(duì)象模型中有實(shí)體對(duì)象、邊界對(duì)象和控制對(duì)象等三種類型。實(shí)體對(duì)象表示系統(tǒng)將跟蹤的持久信息;邊界對(duì)象表示參與者與系統(tǒng)之間的交互(接口);控制對(duì)象負(fù)責(zé)用例的實(shí)現(xiàn)
??捎肬ML提供的衍型機(jī)制,區(qū)分不同類型對(duì)象。ControlEntityActorBoundary參與者邊界對(duì)象控制對(duì)象實(shí)體對(duì)象圖示40軟件工程具有兩個(gè)按鈕的手表的分析類使用實(shí)體對(duì)象、邊界對(duì)象和控制對(duì)象等概念對(duì)系統(tǒng)建模時(shí),常常需要提供一些簡(jiǎn)單的啟發(fā)式規(guī)則來(lái)指導(dǎo)開(kāi)發(fā)人員使用這些概念,可以使用相應(yīng)的類來(lái)跟蹤。<<entity>>Day<<entity>>Month<<entity>>Year<<control>>ChangeDateControl<<boundary>>ButtonBoundary<<boundary>>LCDDisplayBoundary41軟件工程分析建?;顒?dòng)包括以下步驟。標(biāo)識(shí)實(shí)體對(duì)象自然語(yǔ)言分析法利用Abbott啟發(fā)式準(zhǔn)則,將語(yǔ)言成分映射為模型成分。語(yǔ)言成分模型成分示例專有名詞實(shí)例人員乙普通名詞類現(xiàn)場(chǎng)工作人員Doing動(dòng)詞操作創(chuàng)建、提交、選擇Being動(dòng)詞繼承是…的一種,是…中的一個(gè)Having動(dòng)詞聚合有…,由…組成,包括…情態(tài)動(dòng)詞約束必須是形容詞屬性事件描述42軟件工程自然語(yǔ)言分析法主要關(guān)注用戶術(shù)語(yǔ)。限制有識(shí)別質(zhì)量高度依賴人們的書(shū)寫風(fēng)格;可能會(huì)出現(xiàn)許多無(wú)關(guān)詞匯,或同義詞。檢查每一個(gè)用例,標(biāo)識(shí)候選對(duì)象用例中的連續(xù)名詞(如借閱事件);系統(tǒng)需要跟蹤的現(xiàn)實(shí)世界中的實(shí)體(如借閱記錄、館藏圖書(shū)信息);系統(tǒng)需要跟蹤的現(xiàn)實(shí)世界中的活動(dòng)(如緊急情況操作預(yù)案);數(shù)據(jù)源或數(shù)據(jù)潭(如借閱者、管理員)。43軟件工程2) 標(biāo)識(shí)邊界對(duì)象在用例圖中,每一個(gè)參與者至少要與一個(gè)邊界對(duì)象交互。邊界對(duì)象收集來(lái)自參與者的信息,將它們轉(zhuǎn)換為可用于實(shí)體對(duì)象和控制對(duì)象的表示形式。邊界對(duì)象對(duì)用戶界面進(jìn)行粗略的建模,不涉及如菜單項(xiàng)、滾動(dòng)條等可視方面的細(xì)節(jié)。標(biāo)識(shí)邊界對(duì)象的啟發(fā)式準(zhǔn)則如下:標(biāo)識(shí)用戶所需初始用例的用戶界面控制;標(biāo)識(shí)用戶需要鍵入系統(tǒng)的數(shù)據(jù)表格;標(biāo)識(shí)通知和系統(tǒng)用于響應(yīng)用戶的消息;44軟件工程當(dāng)用例中有多個(gè)參與者時(shí),根據(jù)構(gòu)想的用戶界面來(lái)標(biāo)識(shí)參與者的行為;不要使用邊界對(duì)象對(duì)接口的可視方面建模,應(yīng)使用用戶原型對(duì)可視用戶界面建模;使用用戶的術(shù)語(yǔ)來(lái)描述接口,不要使用來(lái)自設(shè)計(jì)和實(shí)現(xiàn)的術(shù)語(yǔ)。3) 標(biāo)識(shí)控制對(duì)象控制對(duì)象負(fù)責(zé)協(xié)調(diào)實(shí)體對(duì)象和邊界對(duì)象??刂茖?duì)象沒(méi)有在現(xiàn)實(shí)世界中具體的對(duì)應(yīng)物,它通常從邊界對(duì)象處收集信息,并把這些信息分配給實(shí)體對(duì)象。45軟件工程圖書(shū)管理系統(tǒng)中的對(duì)象Borrower:借閱者。他們可以借閱、返還、預(yù)約和取消預(yù)約。因?yàn)槊挚赡苤貜?fù),可用借閱證號(hào)碼識(shí)別。Title:館藏圖書(shū)。它表明某一種書(shū),通過(guò)館藏號(hào)碼識(shí)別。Book:流通圖書(shū)。它表明某一種書(shū)的具體復(fù)本,通過(guò)館藏號(hào)碼識(shí)別。Loan:借閱記錄。同一個(gè)人關(guān)于不同圖書(shū)的借閱記錄是不同的。Reservation:預(yù)約記錄。46軟件工程圖書(shū)管理系統(tǒng)中的邊界對(duì)象mainWindow:主窗口。有借書(shū)、還書(shū)、預(yù)約、取消預(yù)約、添加書(shū)種、修改書(shū)種、刪除書(shū)種、添加借閱者、修改借閱者、刪除借閱者、添加圖書(shū)復(fù)本、刪除圖書(shū)復(fù)本等操作。BorrowerDialog:借閱者對(duì)話框。有添加借閱者、修改借閱者、刪除借閱者等操作。FindBwrDialog:彈出對(duì)話框。有根據(jù)借閱者ID號(hào)碼查找借閱者的操作。TitleDialog:館藏圖書(shū)對(duì)話框。有添加書(shū)種、修改書(shū)種、刪除書(shū)種等操作。47軟件工程FindTDialog:彈出對(duì)話框。根據(jù)圖書(shū)的館藏號(hào)查找館藏圖書(shū)。BorrowDialog:借書(shū)對(duì)話框。根據(jù)館藏圖書(shū)的館藏號(hào)和借閱者信息,執(zhí)行借閱動(dòng)作,創(chuàng)建和保存借閱記錄。ReturnDialog:還書(shū)對(duì)話框.根據(jù)流通圖書(shū)的館藏號(hào)和復(fù)本號(hào),執(zhí)行還書(shū)動(dòng)作,刪除借閱記錄。ReserveDialog:預(yù)約對(duì)話框。根據(jù)館藏圖書(shū)的館藏號(hào)和借閱者信息,執(zhí)行預(yù)約、取消預(yù)約動(dòng)作。MessageWindow:顯示提示信息窗口。LoginDialog:輸入用戶名和密碼的窗口。48軟件工程4) 使用順序圖將用例映射為對(duì)象順序圖將用例與對(duì)象聯(lián)系起來(lái),直觀地描述了用例(場(chǎng)景)行為在其參與對(duì)象之間是如何實(shí)施的。順序圖對(duì)用例中各參與對(duì)象之間的交互序列進(jìn)行建模。每一個(gè)消息從一個(gè)對(duì)象(或參與者)發(fā)送給另一個(gè)對(duì)象(或參與者)。消息的接受就觸發(fā)了一個(gè)操作。通過(guò)順序圖,將責(zé)任以操作集合的形式分配給每一個(gè)對(duì)象。如果一個(gè)對(duì)象參與到多個(gè)用例,則其操作應(yīng)為這些用例共享。49軟件工程畫順序圖的啟發(fā)式準(zhǔn)則如下:順序圖第一欄對(duì)應(yīng)激活該用例的參與者;順序圖第二欄是邊界對(duì)象;順序圖第三欄是管理用例中其他參與對(duì)象的控制對(duì)象;通過(guò)邊界對(duì)象來(lái)初始化用例,并創(chuàng)建控制對(duì)象;通過(guò)控制對(duì)象可創(chuàng)建其他邊界對(duì)象;實(shí)體對(duì)象允許邊界對(duì)象和控制對(duì)象訪問(wèn);試題對(duì)象不能訪問(wèn)邊界對(duì)象和控制對(duì)象;50軟件工程借書(shū)用例的順序圖:mainWindow:BorrowDialog:Title:Book:Borrower:Loan:Librarian1:borrow()2:createDialog()3:borrow()4:findTitle(string)5:getTitle()6:getAvaliableBook()7:findBorrower(string)8:newLoan(OID,OID,Date)9:store()10:getBorrower(OID)11:update()12:addLoan(OID)13:getObject(OID)14:setLoan(OID)15:update()51軟件工程還書(shū)用例的順序圖:mainWindow:ReturnDialog:Book:Borrower:Loan:Librarian1:return()2:createDialog()3:return()4:findBook(Integer)5:getObject(OID)6:getLoan()7:getBorrower()8:setLoan(null)9:update()10:delLoan(OID)11:update()12:delete()52軟件工程5)使用CRC卡片對(duì)對(duì)象之間的交互建模CRC是類、職責(zé)和協(xié)作的縮寫。每一個(gè)類可用一張CRC卡片表示。建立CRC卡片有以下幾個(gè)步驟:識(shí)別類和職責(zé):
首先識(shí)別類或?qū)ο螅缓髲目蛻粜枨笳f(shuō)明中尋找有關(guān)行為的描述,以發(fā)現(xiàn)職責(zé)。將職責(zé)分配到類:記錄在相應(yīng)的卡片上。
找尋協(xié)作者:依次檢查每一類承擔(dān)的責(zé)任,看是否需要其他類的幫助,找尋與每個(gè)類協(xié)作的伙伴,并記錄在相應(yīng)卡片上。53軟件工程54軟件工程55軟件工程
職責(zé)顯示歡迎詞密碼驗(yàn)證器接收磁卡菜單選擇器讓密碼驗(yàn)證器檢驗(yàn)啟動(dòng)菜單選擇器退出磁卡
類名讀卡機(jī)協(xié)作職責(zé)從賬戶中取出密碼賬戶如無(wú)此賬戶返回假值提示客戶輸入密碼讀入密碼比較核實(shí),返回結(jié)果
類名密碼驗(yàn)證器協(xié)作職責(zé)檢查賬戶有效性返回密碼檢查取款/存款信息類名賬戶職責(zé)顯示菜單存款管理器等待客戶選擇取款管理器調(diào)用相應(yīng)的存款/取款管理器類名菜單選擇器協(xié)作職責(zé)詢問(wèn)取款額賬戶要求驗(yàn)證賬戶出銀機(jī)啟動(dòng)出銀機(jī)發(fā)款類名取款管理器協(xié)作56軟件工程細(xì)化:模擬在執(zhí)行每個(gè)基本功能時(shí)系統(tǒng)內(nèi)部出現(xiàn)的場(chǎng)景,以此推動(dòng)細(xì)化工作的進(jìn)行。在模擬一個(gè)場(chǎng)景的過(guò)程中,每當(dāng)一個(gè)類開(kāi)始“執(zhí)行”時(shí),它的卡片就被拿出來(lái)討論,當(dāng)“控制”傳送到另一個(gè)類時(shí),注意力就從前一張卡片轉(zhuǎn)移到另一張上去了。不同的場(chǎng)景,包括例外和出錯(cuò)狀況,都應(yīng)逐一加以模擬。在這個(gè)過(guò)程中可以驗(yàn)證已有的定義,不斷發(fā)現(xiàn)新的類、職責(zé)以及伙伴。在模擬不同的場(chǎng)景中會(huì)發(fā)現(xiàn)某些職責(zé)需要重新加以分配。這些都導(dǎo)致進(jìn)一步的開(kāi)發(fā)工作。57軟件工程6) 標(biāo)識(shí)關(guān)系(結(jié)構(gòu))使用類圖,能夠表示對(duì)象之間的關(guān)系。關(guān)聯(lián)表示了兩個(gè)或多個(gè)類之間的關(guān)系。標(biāo)識(shí)關(guān)聯(lián)的啟發(fā)式準(zhǔn)則如下:檢查指示狀態(tài)的動(dòng)詞或動(dòng)詞短語(yǔ);準(zhǔn)確地命名關(guān)聯(lián)和角色;盡量使用常用的修飾詞標(biāo)識(shí)出名字空間和關(guān)鍵屬性;消除可導(dǎo)出其他關(guān)聯(lián)的關(guān)聯(lián);在關(guān)聯(lián)集合穩(wěn)定之前不必關(guān)心重復(fù)性;過(guò)多的關(guān)聯(lián)使得一個(gè)模型不可讀;58軟件工程建立系統(tǒng)的包圖(主題)建立包圖是為了降低復(fù)雜性,目的是控制可見(jiàn)度及指引讀者的思路。對(duì)于面向?qū)ο蠓治瞿P?,主題表示此模型的整體框架??梢允且粋€(gè)層次結(jié)構(gòu)。通過(guò)對(duì)主題的識(shí)別,可以讓人們能夠比較清晰地了解大而復(fù)雜的模型。LibraryGUIDataBase59軟件工程
GUI:圖形用戶界面(GraphicalUserInterface,簡(jiǎn)稱GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受。60軟件工程UML事物
—
分組事物package(包)包是把元素組織成組的機(jī)制,結(jié)構(gòu)事物、行為事物甚至其他分組事物都可以放進(jìn)包內(nèi)。包不象構(gòu)件(僅在運(yùn)行時(shí)存在),它純粹是概念上的(即它僅在開(kāi)發(fā)時(shí)存在)。用戶接口包業(yè)務(wù)對(duì)象包應(yīng)用包61軟件工程建立邊界類的類圖標(biāo)明類之間的關(guān)系,包括關(guān)聯(lián)、泛化等。messageWindowloginDialogreturnDialogborrowerDialogreserveDialogmainWindowfindTDialogborrowDialogfindBwrDialogTitleDialog62軟件工程建立實(shí)體類的類圖這些類與數(shù)據(jù)庫(kù)相關(guān),為了操作方便,以它們?yōu)樽宇?,建立一個(gè)持久類(Persistent)作為它們的父類,共享與數(shù)據(jù)庫(kù)相關(guān)的操作。BookBorrowerReservationTitleLoanPersistent(fromDataBase)110..1*0..*0..*0..*0..*1163軟件工程建立邊界類與實(shí)體類之間關(guān)系的類圖Book(fromLibrary)110..1*0..*1Title(fromLibrary)Loan(fromLibrary)Borrower(fromLibrary)Reservation(fromLibrary)BorrowDialog(fromGUI)ReturnDialog(fromGUI)64軟件工程Book(fromLibrary)110..1*0..*1Title(fromLibrary)Loan(fromLibrary)Borrower(fromLibrary)Reservation(fromLibrary)TitleDialog(fromGUI)findTDialog(fromGUI)0..*0..*10..*65軟件工程標(biāo)識(shí)屬性對(duì)象所保存的信息稱為它的屬性。類的屬性所描述的是狀態(tài)信息,每個(gè)實(shí)例的屬性值表達(dá)了該實(shí)例的狀態(tài)值。標(biāo)識(shí)屬性的啟發(fā)性準(zhǔn)則如下:每個(gè)對(duì)象至少需包含一個(gè)屬性;屬性取值必需適合對(duì)象類的所有實(shí)例;出現(xiàn)在泛化關(guān)系中的對(duì)象所繼承的屬性必須與泛化關(guān)系一致;系統(tǒng)的所有存儲(chǔ)數(shù)據(jù)必須定義為屬性;66軟件工程對(duì)象的導(dǎo)出屬性應(yīng)當(dāng)略去。例如,“年齡”是由屬性“出生年月”導(dǎo)出,它不能作為基本屬性存在。8)對(duì)每一對(duì)象的與狀態(tài)有關(guān)的行為建模對(duì)象收到消息后所能執(zhí)行的操作稱為它可提供的服務(wù)。對(duì)每個(gè)類的增加、修改、刪除、選擇等服務(wù)有時(shí)是隱含的,在圖中不標(biāo)出,但實(shí)現(xiàn)類和對(duì)象時(shí)有定義。其它服務(wù)則必須顯式地在圖中畫出。首先標(biāo)識(shí)在每個(gè)類中封裝的服務(wù);67軟件工程再比較服務(wù)與類的屬性,驗(yàn)證其一致性。所標(biāo)識(shí)的類屬性,它必然關(guān)聯(lián)到某個(gè)服務(wù),否則該屬性就形同虛設(shè),永遠(yuǎn)不可能被訪問(wèn);畫出對(duì)象之間的消息通信路徑,協(xié)調(diào)系統(tǒng)的行為。自底向上方法:找出每一對(duì)象在其生存周期中的所有狀態(tài)。每一狀態(tài)的改變都關(guān)聯(lián)到對(duì)象之間消息的傳遞。從對(duì)象著手,逐漸向上分析。自頂向下方法:一個(gè)對(duì)象必須識(shí)別系統(tǒng)中發(fā)生或出現(xiàn)的事件,產(chǎn)生發(fā)送給其他對(duì)象68軟件工程
的消息,由那些對(duì)象作出響應(yīng)。所以對(duì)象應(yīng)具有能夠接收、處理、產(chǎn)生每個(gè)消息的服務(wù)。它是從系統(tǒng)行為著手,然后逐漸分析到對(duì)象。使用順序圖或協(xié)作圖,標(biāo)識(shí)和描述對(duì)象之間的相互通信,并進(jìn)行運(yùn)行走查。10)分析模型評(píng)審有關(guān)模型正確性的問(wèn)題:對(duì)實(shí)體對(duì)象的分類,用戶是否能夠理解?抽象類是否對(duì)應(yīng)到用戶層的定義?是否所有的描述均符合用戶的定義?69軟件工程是否所有的實(shí)體對(duì)象和邊界對(duì)象都使用了有實(shí)際含義的名詞短語(yǔ)進(jìn)行了命名?是否所有的用例和控制對(duì)象都使用了有意義的動(dòng)詞短語(yǔ)進(jìn)行了命名?是否所有的錯(cuò)誤用例都已經(jīng)描述和處理?有關(guān)模型完備性的問(wèn)題:每一個(gè)對(duì)象是否有用例用到它?創(chuàng)建、修改或刪除該對(duì)象的用例是哪些?每一個(gè)屬性的類型是什么?它應(yīng)進(jìn)行修飾嗎?每一個(gè)關(guān)聯(lián)何時(shí)被用到?其重復(fù)性的選擇原則是什么?該關(guān)聯(lián)使用那一種連接?70軟件工程每一個(gè)控制對(duì)象是否具有必要的關(guān)聯(lián),以連接到用例中相關(guān)的其他對(duì)象?有關(guān)模型一致性的問(wèn)題:是否有多個(gè)類或多個(gè)用例同名?名字相近的實(shí)體(如類、對(duì)象、屬性)能夠相互區(qū)別嗎?在同一泛化層次是否存在相似屬性和關(guān)聯(lián)的對(duì)象?有關(guān)模型可實(shí)現(xiàn)性的問(wèn)題:在該系統(tǒng)中性能需求和可靠性需求是否滿足?在選定硬件上運(yùn)行原型是否可以確定需求?71軟件工程5.3面向?qū)ο蟮脑O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)分兩個(gè)階段進(jìn)行:系統(tǒng)設(shè)計(jì)和對(duì)象設(shè)計(jì)。系統(tǒng)設(shè)計(jì)的主要活動(dòng)是:標(biāo)識(shí)系統(tǒng)目標(biāo):標(biāo)識(shí)并區(qū)分各種質(zhì)量屬性的優(yōu)先實(shí)現(xiàn)次序。子系統(tǒng)分解:根據(jù)用例和分析模型,將系統(tǒng)分解為一系列子系統(tǒng)。子系統(tǒng)細(xì)化:對(duì)各子系統(tǒng)不斷分解求精,直到所有的設(shè)計(jì)目標(biāo)都能滿足為止。72軟件工程對(duì)象設(shè)計(jì)主要是追加一些與實(shí)現(xiàn)有關(guān)的對(duì)象,以及對(duì)已有對(duì)象進(jìn)行細(xì)化。設(shè)計(jì)原則1:分治軟件系統(tǒng)分解為子系統(tǒng)分布式系統(tǒng)可以分解為客戶機(jī)和服務(wù)器;系統(tǒng)可以分解為一系列子系統(tǒng);子系統(tǒng)可以分解為一個(gè)或多個(gè)包;包可以分解為類;創(chuàng)建良好設(shè)計(jì)的原則73軟件工程類可以分解為方法。設(shè)計(jì)原則2:盡可能增加內(nèi)聚不同內(nèi)聚類型:優(yōu)先級(jí)從高到低排序1) 功能內(nèi)聚:構(gòu)件只執(zhí)行單一計(jì)算并返回結(jié)果,沒(méi)有副作用。如函數(shù)過(guò)程。2) 層內(nèi)聚:相關(guān)服務(wù)放在一起,并有嚴(yán)格的層次結(jié)構(gòu),高層服務(wù)可訪問(wèn)低層服務(wù),反之不可。如分層結(jié)構(gòu)。3) 通信內(nèi)聚:訪問(wèn)或操作同一數(shù)據(jù)的過(guò)程放在一個(gè)類中,這些過(guò)程可以互相通信。如某個(gè)74軟件工程 類設(shè)計(jì)。順序內(nèi)聚:存在一系列過(guò)程,其中一個(gè)過(guò)程向另一個(gè)過(guò)程提供輸入,這些過(guò)程放在一起,形成順序內(nèi)聚。如消息序列。5) 過(guò)程內(nèi)聚:幾個(gè)一次調(diào)用的過(guò)程放在一起,形成過(guò)程內(nèi)聚。如調(diào)用結(jié)構(gòu)。時(shí)間內(nèi)聚:程序執(zhí)行過(guò)程中同一階段內(nèi)完成的操作放在一起,達(dá)到時(shí)間內(nèi)聚。實(shí)用程序內(nèi)聚:邏輯上不能納入其他內(nèi)聚類型的相關(guān)實(shí)用程序放在一起,形成實(shí)用程序內(nèi)聚。如可復(fù)用的過(guò)程或類。75軟件工程設(shè)計(jì)原則3:盡可能降低耦合模塊間存在相互依賴關(guān)系即為耦合。不同耦合類型從高向低排列有:內(nèi)容耦合:一個(gè)構(gòu)件修改另一個(gè)構(gòu)件內(nèi)部的數(shù)據(jù),應(yīng)始終避免。公共耦合:一組構(gòu)件使用全局?jǐn)?shù)據(jù),就產(chǎn)生公共耦合。應(yīng)通過(guò)封裝降低公共耦合。控制耦合:一個(gè)過(guò)程通過(guò)標(biāo)志、開(kāi)關(guān)或命令顯式地控制另一個(gè)過(guò)程的動(dòng)作,就產(chǎn)生控制耦合。降低的方法是采用多態(tài)操作。76軟件工程標(biāo)記耦合:在一個(gè)操作的參數(shù)表中將類作為參數(shù),就產(chǎn)生標(biāo)記耦合。可以改用傳遞簡(jiǎn)單變量或使用接口做參數(shù)降低耦合。數(shù)據(jù)耦合:在一個(gè)操作的參數(shù)表中用簡(jiǎn)單變量或簡(jiǎn)單的類(如string)作為參數(shù),就產(chǎn)生數(shù)據(jù)耦合。應(yīng)通過(guò)減少參數(shù)個(gè)數(shù)降低耦合。例程調(diào)用耦合:一個(gè)例程(或類操作)調(diào)用另一個(gè)例程,就產(chǎn)生例程調(diào)用耦合。如果出現(xiàn)例程調(diào)用序列,降低的方法是編寫一個(gè)例程將這個(gè)調(diào)用序列封裝起來(lái)。77軟件工程類型使用耦合:類將實(shí)例變量或本地變量聲明為另一個(gè)類的實(shí)例,就產(chǎn)生類型(嵌套)使用耦合??蓪⒆兞康念愋吐暶鳛榘璨僮鞯淖钔ㄓ玫念惢蚪涌?。包含/引入耦合:一個(gè)構(gòu)件引入(import)一個(gè)包時(shí)就產(chǎn)生引入耦合,一個(gè)構(gòu)件包含(include)另一個(gè)構(gòu)件時(shí),就產(chǎn)生包含耦合。外部耦合:模塊對(duì)外部系統(tǒng),如操作系統(tǒng)、共享庫(kù)或硬件有依賴關(guān)系時(shí)就產(chǎn)生外部耦合??赏ㄟ^(guò)信息隱蔽減少這種依賴關(guān)系。78軟件工程設(shè)計(jì)原則4:盡可能提高抽象層次設(shè)計(jì)應(yīng)隱藏或推遲考慮細(xì)節(jié)以降低復(fù)雜性。類是包含過(guò)程抽象的數(shù)據(jù)抽象。使用泛化關(guān)系(父類)和接口,可進(jìn)一步提高抽象層次。類中公有操作越少,抽象程度越高。類中所有變量都是私有的,抽象程度達(dá)到最高。抽象可確保在設(shè)計(jì)時(shí)不必關(guān)心不必要的細(xì)節(jié),能把握問(wèn)題的本質(zhì)并做出重要的決策。79軟件工程設(shè)計(jì)原則5:盡可能提高可復(fù)用性可以在算法、類、過(guò)程、框架和完整應(yīng)用程序的級(jí)別上創(chuàng)建可復(fù)用性。復(fù)用構(gòu)件的機(jī)制包括過(guò)程調(diào)用和繼承父類。設(shè)計(jì)原則6:盡可能復(fù)用已有的設(shè)計(jì)和代碼復(fù)用已有的設(shè)計(jì)是對(duì)可復(fù)用性設(shè)計(jì)的補(bǔ)充。通過(guò)復(fù)用可從以往對(duì)可復(fù)用構(gòu)件的投資中獲益。設(shè)計(jì)原則7:靈活性設(shè)計(jì)積極預(yù)測(cè)將來(lái)可能在實(shí)現(xiàn)和功能上的變化,并80軟件工程
采取相應(yīng)措施。在設(shè)計(jì)中引入靈活性的方法有:降低耦合并提高內(nèi)聚(易于提高替換能力)建立抽象(創(chuàng)建有多態(tài)操作的接口和父類)不要將代碼寫死(消除代碼中的常數(shù))拋出異常(由操作的調(diào)用者處理異常)使用并創(chuàng)建可復(fù)用的代碼設(shè)計(jì)原則8:預(yù)計(jì)過(guò)期積極預(yù)測(cè)將來(lái)可能在技術(shù)和運(yùn)行環(huán)境上的變化,并為此采取相應(yīng)措施。81軟件工程在設(shè)計(jì)中應(yīng)遵循的預(yù)計(jì)過(guò)期的規(guī)則有:避免使用早期發(fā)布的技術(shù)避免使用針對(duì)特定環(huán)境的軟件庫(kù)避免使用軟件庫(kù)中未編檔的或很少使用的功能避免使用小公司或可能不提供長(zhǎng)期支持的公司提供的可復(fù)用構(gòu)件或特殊硬件使用眾多廠商支持的標(biāo)準(zhǔn)語(yǔ)言和技術(shù)設(shè)計(jì)原則9:可移植性設(shè)計(jì)可移植性設(shè)計(jì)的主要目標(biāo)是讓軟件在盡可能多82軟件工程
的平臺(tái)上運(yùn)行。實(shí)現(xiàn)可移植性的規(guī)則有:避免使用特定環(huán)境的專有功能使用不依賴特定平臺(tái)的程序設(shè)計(jì)語(yǔ)言小心使用可能依賴某一平臺(tái)的類庫(kù)了解其他語(yǔ)言可能依賴特殊硬件結(jié)構(gòu)的功能和文本文件的差異設(shè)計(jì)原則10:可測(cè)試性設(shè)計(jì)設(shè)計(jì)時(shí)采取措施使得測(cè)試易于進(jìn)行。可測(cè)試性設(shè)計(jì)的最重要的方法是保證代碼的所有功能都能脫離圖形用戶界面執(zhí)行。83軟件工程設(shè)計(jì)原則11:防御性設(shè)計(jì)為提高可靠性,應(yīng)確保不引入任何缺陷,能夠處理其他代碼不適當(dāng)使用構(gòu)件引起的問(wèn)題。按契約設(shè)計(jì)是防御性設(shè)計(jì)技術(shù),其核心思想:被調(diào)用操作為正常執(zhí)行必須滿足的前置條件(precondition):調(diào)用操作在調(diào)用一個(gè)操作時(shí)有責(zé)任確保該操作的前置條件成立。被調(diào)用操作正常執(zhí)行所得到的結(jié)果即為后置條件(postcongdition):要求被調(diào)用操作在返回前有責(zé)任保證這些后置條件成立。84軟件工程被調(diào)用操作在執(zhí)行時(shí)確保不會(huì)被修改的不變量(invariant)。前置條件、后置條件和不變式都是布爾表達(dá)式,其計(jì)算結(jié)果為假,表示有錯(cuò)誤發(fā)生??梢允褂脭嘌詸C(jī)制。在重要構(gòu)件的邊界(如層)應(yīng)始終保留嚴(yán)格的斷言檢測(cè)。85軟件工程系統(tǒng)設(shè)計(jì)的主要活動(dòng)是進(jìn)行子系統(tǒng)分解,并在此基礎(chǔ)上定義子系統(tǒng)/構(gòu)件之間的接口。為此,首先根據(jù)子系統(tǒng)可提供的服務(wù)來(lái)定義子系統(tǒng)(以后在對(duì)象設(shè)計(jì)中再根據(jù)子系統(tǒng)能提供的操作來(lái)定義子系統(tǒng)的接口),然后對(duì)子系統(tǒng)細(xì)化,建立層次結(jié)構(gòu)。要求對(duì)子系統(tǒng)的分解盡可能做到高內(nèi)聚、低耦合。5.4.1系統(tǒng)設(shè)計(jì)的概念5.4系統(tǒng)設(shè)計(jì)86軟件工程1) 子系統(tǒng)和類在應(yīng)用領(lǐng)域,為降低其復(fù)雜性,用類進(jìn)行標(biāo)識(shí)。在解答空間,為降低其復(fù)雜性,將系統(tǒng)分解為多個(gè)子系統(tǒng),這些子系統(tǒng)又由若干表示解答空間的類構(gòu)成。還可以把子系統(tǒng)分解為更小的子系統(tǒng)。系統(tǒng)部分子系統(tǒng)類**87軟件工程在Java和Module2中顯式地提供了子系統(tǒng)的構(gòu)造。在Java中采用了“包”,在Modula2中采用了“模塊”。C++沒(méi)有顯式地提供子系統(tǒng)的構(gòu)造,可按問(wèn)題需要對(duì)類分組。2)
服務(wù)和子系統(tǒng)接口一個(gè)服務(wù)是一組有公共目的的相關(guān)操作。而子系統(tǒng)的特征是由該子系統(tǒng)提供給其他子系統(tǒng)的服務(wù)來(lái)刻畫。供其他子系統(tǒng)調(diào)用的某個(gè)子系統(tǒng)的操作集合就是子系統(tǒng)的接口。子系統(tǒng)的接口包括操作名、操作參數(shù)類型及返回值。88軟件工程系統(tǒng)設(shè)計(jì)注重每個(gè)子系統(tǒng)提供服務(wù)的定義,即枚舉所有的操作、操作參數(shù)和行為。當(dāng)編寫子系統(tǒng)接口的文檔時(shí),不應(yīng)涉及子系統(tǒng)實(shí)現(xiàn)的細(xì)節(jié),其目的是減少子系統(tǒng)之間的依賴性,希望一旦需要修改子系統(tǒng)實(shí)現(xiàn)時(shí),降低由于子系統(tǒng)變更而造成的影響。3)
子系統(tǒng)分層和劃分子系統(tǒng)分層的目的是建立系統(tǒng)的層次結(jié)構(gòu)。每一層僅依賴于它下一層提供的服務(wù),而對(duì)它的上一層可以一無(wú)所知。如圖,是一個(gè)三層的系統(tǒng)結(jié)構(gòu)。89軟件工程在層次結(jié)構(gòu)中,子系統(tǒng)A、B、E構(gòu)成了一個(gè)稱之為垂直切片的系統(tǒng)分解子集。而D、G則不能。如果每一層只能訪問(wèn)與其相鄰的下一層,則稱之為封閉體系結(jié)構(gòu);如果每一層還可訪問(wèn)E:子系統(tǒng)F:子系統(tǒng)G:子系統(tǒng)B:子系統(tǒng)C:子系統(tǒng)D:子系統(tǒng)A:子系統(tǒng)90軟件工程比其相鄰下一層更低的層次,則稱之為開(kāi)放體系結(jié)構(gòu)。封閉體系結(jié)構(gòu)的例子就是開(kāi)放系統(tǒng)互聯(lián)參考模型(OSI模型),它由七層構(gòu)成。每一層負(fù)責(zé)執(zhí)行一個(gè)已預(yù)先定義好的協(xié)議功能。每一層都為其上一層提供服務(wù),使用其低層的服務(wù)。數(shù)據(jù)鏈層物理層網(wǎng)絡(luò)層傳輸層會(huì)話層表示層應(yīng)用層抽象層次比特流數(shù)據(jù)幀包消息接口連接格式91軟件工程封閉體系結(jié)構(gòu)的子系統(tǒng)之間滿足低耦合,但產(chǎn)生速度和存儲(chǔ)管理的問(wèn)題,會(huì)導(dǎo)致某些非功能屬性難以滿足。開(kāi)放體系結(jié)構(gòu)的一個(gè)例子是Java的Swing用戶接口包。它允許人們繞過(guò)高層直接訪問(wèn)低層接口以克服性能瓶頸。AWTXlibSwingApplication92軟件工程劃分是將系統(tǒng)分解為獨(dú)立的子系統(tǒng),每個(gè)子系統(tǒng)負(fù)責(zé)某一類服務(wù)。例如,一個(gè)車輛管理所的管理信息系統(tǒng)分為車管所組織機(jī)構(gòu)管理、車輛管理、車主管理和法律事件管理等4個(gè)子系統(tǒng)。每一個(gè)子系統(tǒng)對(duì)其他子系統(tǒng)的依賴度很低。分解子系統(tǒng)時(shí),首先進(jìn)行劃分,將一個(gè)系統(tǒng)分成幾個(gè)高層的子系統(tǒng),每個(gè)子系統(tǒng)負(fù)責(zé)一種功能,或運(yùn)行在某特定的硬件節(jié)點(diǎn)上。再將各子系統(tǒng)分層處理,分解成層次更低的小子系統(tǒng)。過(guò)度分解會(huì)導(dǎo)致子系統(tǒng)之間接口的復(fù)雜化。93軟件工程5.4.2系統(tǒng)設(shè)計(jì)的目標(biāo)明確設(shè)計(jì)目標(biāo),是系統(tǒng)設(shè)計(jì)的第一步。有一些設(shè)計(jì)目標(biāo)是從用戶那里得到,更多的設(shè)計(jì)目標(biāo)是從非功能需求或應(yīng)用領(lǐng)域中抽取出來(lái)。設(shè)計(jì)目標(biāo)可以從以下5組設(shè)計(jì)準(zhǔn)則中選擇。其中性能、可靠性和最終用戶準(zhǔn)則往往從需求中明確地獲取,也可以從應(yīng)用領(lǐng)域中獲?。欢杀竞途S護(hù)準(zhǔn)則由客戶和供應(yīng)商提出。將設(shè)計(jì)目標(biāo)清楚地陳述,可以根據(jù)設(shè)計(jì)準(zhǔn)則,做出重要的設(shè)計(jì)決策。94軟件工程性能準(zhǔn)則設(shè)計(jì)準(zhǔn)則定義響應(yīng)時(shí)間用戶提交請(qǐng)求后多長(zhǎng)時(shí)間可得到系統(tǒng)的確認(rèn)吞吐量在一段固定時(shí)間內(nèi)系統(tǒng)能夠處理多少任務(wù)內(nèi)存系統(tǒng)運(yùn)行需要占用多少內(nèi)存空間可靠性準(zhǔn)則設(shè)計(jì)準(zhǔn)則定義魯棒性面對(duì)非法用戶進(jìn)入后系統(tǒng)的存活能力可靠性明確期待的行為與觀察到行為之間的差別可用性系統(tǒng)能夠用來(lái)完成正常任務(wù)的時(shí)間百分比容錯(cuò)性在出錯(cuò)條件下系統(tǒng)的操作能力保密性系統(tǒng)忍受惡意攻擊的能力安全性再出現(xiàn)錯(cuò)誤時(shí)系統(tǒng)避免威脅到人類生命的能力95軟件工程成本準(zhǔn)則設(shè)計(jì)準(zhǔn)則定義效用系統(tǒng)支持用戶工作的困難程度易用性用戶使用系統(tǒng)的困難程度最終用戶準(zhǔn)則設(shè)計(jì)準(zhǔn)則定義開(kāi)發(fā)成本開(kāi)發(fā)系統(tǒng)初始版本的成本部署成本安裝系統(tǒng)并培訓(xùn)用戶的成本升級(jí)成本從原有系統(tǒng)中導(dǎo)出數(shù)據(jù)的成本,此準(zhǔn)則導(dǎo)致了向后兼容性需求維護(hù)成本需要進(jìn)行錯(cuò)誤修復(fù)和增強(qiáng)系統(tǒng)的成本管理成本需要對(duì)系統(tǒng)進(jìn)行管理的成本96軟件工程維護(hù)準(zhǔn)則需求的可追蹤性將代碼映射到特定需求上的困難程度設(shè)計(jì)準(zhǔn)則定義可擴(kuò)展性向系統(tǒng)中添加功能或新類的困難程度可修改性更改系統(tǒng)功能的困難程度可適應(yīng)性將系統(tǒng)發(fā)送到不同應(yīng)用領(lǐng)域的困難程度可移植性將系統(tǒng)移植到不同平臺(tái)的困難程度可讀性通過(guò)閱讀源代碼來(lái)理解系統(tǒng)的困難程度97軟件工程在定義設(shè)計(jì)目標(biāo)時(shí),希望開(kāi)發(fā)一個(gè)既安全可靠,又廉價(jià)的系統(tǒng)是不現(xiàn)實(shí)的,因此開(kāi)發(fā)人員應(yīng)當(dāng)對(duì)所有可能的設(shè)計(jì)目標(biāo)進(jìn)行權(quán)衡,對(duì)必須的設(shè)計(jì)目標(biāo)賦予優(yōu)先級(jí)別。一旦有了清晰的設(shè)計(jì)目標(biāo),就可以開(kāi)始系統(tǒng)的初始分解。權(quán)衡基本原則空間與速度如果軟件的響應(yīng)時(shí)間或吞吐量不滿足需求,則可以使用更多的存儲(chǔ)空間來(lái)加快軟件的執(zhí)行速度。如果軟件太大,則可以犧牲一定的速度對(duì)數(shù)據(jù)進(jìn)行壓縮處理。98軟件工程權(quán)衡基本原則交付時(shí)間與功能如果開(kāi)發(fā)進(jìn)度滯后于計(jì)劃,則按時(shí)交付的功能可以少于預(yù)定交付的功能,或推遲交付所有功能。契約軟件通常更強(qiáng)調(diào)功能,而商業(yè)外購(gòu)軟件則更強(qiáng)調(diào)交付日期。交付時(shí)間與質(zhì)量如果測(cè)試滯后于計(jì)劃,則可以按時(shí)交付帶有錯(cuò)誤的軟件,或推遲交付帶有少量錯(cuò)誤的軟件。交付時(shí)間與人員配置如果開(kāi)發(fā)進(jìn)度滯后于計(jì)劃,可以在項(xiàng)目中增加資源以提高生產(chǎn)率。在多數(shù)情況下,這種選擇只適用于早期項(xiàng)目。新的人員要經(jīng)過(guò)培訓(xùn)方可使用。這樣中途增加資源通常會(huì)降低生產(chǎn)率,還會(huì)增加軟件開(kāi)發(fā)的成本。99軟件工程5.4.3子系統(tǒng)分解軟件體系結(jié)構(gòu)設(shè)計(jì)的第一步是做子系統(tǒng)分解,從而搭建軟件體系結(jié)構(gòu)的架構(gòu)。在系統(tǒng)設(shè)計(jì)中尋找子系統(tǒng),與在分析過(guò)程中尋找對(duì)象的情況類似。在面向?qū)ο蠓治鲋薪榻B的Abbotts啟發(fā)式準(zhǔn)則,同樣適合于子系統(tǒng)的識(shí)別。初始子系統(tǒng)應(yīng)該從需求的功能模型(用例模型)中導(dǎo)出。這方面有多種分解方案。例如,Coad&Yourdon基于MVC模型,將系統(tǒng)大致分為問(wèn)題領(lǐng)域、人機(jī)交互、任務(wù)管理、數(shù)據(jù)管理等4個(gè)子系統(tǒng)。100軟件工程5.4.4問(wèn)題領(lǐng)域子系統(tǒng)首先復(fù)制分析模型為設(shè)計(jì)模型中的問(wèn)題領(lǐng)域部分,然后根據(jù)設(shè)計(jì)目標(biāo),對(duì)該部分進(jìn)行修改??蓮?fù)用的設(shè)計(jì)/編程方面的類
根據(jù)需要,從類庫(kù)選擇可復(fù)用類、商業(yè)外購(gòu)構(gòu)件和遺留構(gòu)件,把它們?cè)黾拥絾?wèn)題解決方案中去。標(biāo)明復(fù)用類或構(gòu)件中不需要的屬性和操作。增加從復(fù)用類(構(gòu)件)到分析類之間的泛化關(guān)系,繼承復(fù)用類(構(gòu)件)的屬性和方法。101軟件工程把分析類中因繼承復(fù)用類(構(gòu)件)而成為多余的屬性和操作標(biāo)出。修改分析類的結(jié)構(gòu)和連接。加入泛化類以建立類間協(xié)議有時(shí)某些分析類要求一組類似的服務(wù)。此時(shí),以這些分析類作為子類,定義一個(gè)父類。該父類定義為所有這些子類共用的一組服務(wù)名,作為公共的協(xié)議,用來(lái)與數(shù)據(jù)管理或其他外部系統(tǒng)部件通信。這些服務(wù)都是虛函數(shù)。在各個(gè)子類中定義其實(shí)現(xiàn)。對(duì)泛化關(guān)系進(jìn)行調(diào)整102軟件工程在分析模型中可能包括有多繼承關(guān)系,但實(shí)現(xiàn)時(shí)使用的程序設(shè)計(jì)語(yǔ)言可能只有單繼承,甚至沒(méi)有繼承機(jī)制,這樣就需變更問(wèn)題領(lǐng)域部分中類的層次結(jié)構(gòu)。針對(duì)單繼承語(yǔ)言的調(diào)整
把子類對(duì)象看做是父類對(duì)象所扮演的角色,通過(guò)關(guān)聯(lián)關(guān)系把多繼承的層次結(jié)構(gòu)轉(zhuǎn)換為單繼承的層次結(jié)構(gòu)。把多繼承的層次結(jié)構(gòu)平鋪,成為單繼承的層次結(jié)構(gòu)。在這種情況下,有些屬性或操作在同層的子類中會(huì)重復(fù)出現(xiàn)。103軟件工程針對(duì)無(wú)繼承語(yǔ)言的調(diào)整當(dāng)使用無(wú)繼承的編程語(yǔ)言時(shí),必須把具有泛化關(guān)系的類層次平鋪開(kāi),成為一組對(duì)象。多繼承關(guān)系通過(guò)關(guān)聯(lián)關(guān)系分解多繼承平鋪為單繼承人醫(yī)生教授醫(yī)學(xué)教授人角色醫(yī)生教授1*人醫(yī)生教授醫(yī)學(xué)教授104軟件工程修改設(shè)計(jì)以提高性能提高執(zhí)行效率是系統(tǒng)設(shè)計(jì)的主要目標(biāo)之一。有時(shí)必須改變問(wèn)題領(lǐng)域的結(jié)構(gòu)以提高效率。如果類之間經(jīng)常需要傳送大量消息,可合并相關(guān)的類,使得通信成為對(duì)象內(nèi)的通信,而不是對(duì)象之間的通信,或者使用全局?jǐn)?shù)據(jù)作用域,打破封裝的原則,以減少消息傳遞引起的速度損失。增加某些屬性到原來(lái)的類中,或增加低層的類,以保存暫時(shí)結(jié)果,避免每次都要重復(fù)計(jì)算造成速度損失。105軟件工程為提高性能,在對(duì)分析模型進(jìn)行大規(guī)模的改動(dòng)之前,應(yīng)考慮下面一些問(wèn)題:不要認(rèn)為象C++之類的OOPL就一定效率不高。事實(shí)表明,非OOPL的緊湊代碼的效率比OOPL的效率高近10倍,但用非OOPL編程會(huì)令程序員非常疲勞,容易出錯(cuò)。提高一個(gè)現(xiàn)存系統(tǒng)的工作效率比重新設(shè)計(jì)一個(gè)高效的系統(tǒng)要容易。一開(kāi)始應(yīng)當(dāng)建立一個(gè)原始的簡(jiǎn)單的設(shè)計(jì),實(shí)現(xiàn)和調(diào)試不會(huì)太困難。如果對(duì)設(shè)計(jì)有性能要求,只需加入少量的工作就可以了。106軟件工程通常系統(tǒng)80%的開(kāi)銷都集中在20%的代碼段上。與其為了盡量處處節(jié)省系統(tǒng)開(kāi)銷而破壞完善的系統(tǒng)結(jié)構(gòu),還不如找出系統(tǒng)開(kāi)銷最集中的地方,只對(duì)那部分做優(yōu)化。預(yù)測(cè)軟件開(kāi)銷集中在什么地方是困難的。進(jìn)行優(yōu)化最有效的方法是在系統(tǒng)運(yùn)行時(shí)使用性能監(jiān)測(cè)工具對(duì)系統(tǒng)進(jìn)行觀測(cè)。一些像繼承、動(dòng)態(tài)綁定、消息傳遞等處理雖然看起來(lái)簡(jiǎn)單,但需要大量的系統(tǒng)開(kāi)銷。在代碼復(fù)雜性與運(yùn)行的低效之間沒(méi)有相關(guān)性。提高性能最好的方法是采用好的解決方案,而不是拼命地去節(jié)省幾個(gè)微秒、幾個(gè)字節(jié)。107軟件工程電梯控制系統(tǒng)ECS的問(wèn)題領(lǐng)域子系統(tǒng)決定使用一個(gè)中央控制器(電梯控制器)控制和協(xié)調(diào)電梯的所有動(dòng)作,包括解決電梯每到一個(gè)樓層減速問(wèn)題。增加“電梯監(jiān)視器”,用一個(gè)獨(dú)立的對(duì)象來(lái)執(zhí)行監(jiān)測(cè)功能(性能、安全性等)。在提交給實(shí)現(xiàn)者的規(guī)格說(shuō)明中,將這個(gè)類放在一個(gè)與ECS的主處理器分離的處理器上.每個(gè)類增加服務(wù)SelfTest來(lái)增強(qiáng)每個(gè)類的性能。在運(yùn)行時(shí)執(zhí)行有必要驗(yàn)證其功能的操作,并向電梯監(jiān)視器報(bào)告。108軟件工程111111*1111111..*1電梯事件電梯調(diào)度器電梯控制器電梯監(jiān)視器到達(dá)面板目的地面板面板樓層目的地事件召喚事件到達(dá)事件召喚面板電梯馬達(dá)超載傳感器電梯1..1..*109軟件工程5.4.5人機(jī)交互子系統(tǒng)設(shè)計(jì)一個(gè)良好的用戶界面是成功地實(shí)現(xiàn)一個(gè)軟件系統(tǒng)的關(guān)鍵。在開(kāi)發(fā)分析模型時(shí),有意避開(kāi)了如窗口、屏幕等依賴于實(shí)現(xiàn)的細(xì)節(jié),目的是讓系統(tǒng)規(guī)格說(shuō)明獨(dú)立于實(shí)現(xiàn)。而人機(jī)交互子系統(tǒng)在系統(tǒng)行為和用戶交互的實(shí)現(xiàn)之間架起了一座橋梁。例如,可用GUI實(shí)現(xiàn)系統(tǒng)的用戶界面。但當(dāng)用戶提出來(lái)改用語(yǔ)音對(duì)答式交互時(shí),應(yīng)當(dāng)使這種改變盡可能容易。為此,只需將GUI式人機(jī)交互子系統(tǒng)替換成語(yǔ)音對(duì)答式人機(jī)交互子系統(tǒng)即可,系統(tǒng)其它部分都應(yīng)保持不變。*110軟件工程例如,某雜志發(fā)行系統(tǒng)SBSS的人機(jī)接口設(shè)計(jì)用戶界面SBSS的用戶界面是一個(gè)傳統(tǒng)的GUI。其中有許多窗口對(duì)象。但在用戶與系統(tǒng)進(jìn)行交互期間,只能有一個(gè)窗口呈現(xiàn)在用戶面前。
通過(guò)使用聚合關(guān)系,窗口對(duì)象可以進(jìn)一步分解為各種文本域、選擇按鈕、圖符等。如果使用某種GUI構(gòu)筑軟件包,只需對(duì)軟件包輸入合適的參數(shù),該軟件包就能提供所有的文本域、選擇按鈕、圖符等,將這些細(xì)節(jié)作為窗口的屬性就可以了。111軟件工程訂閱項(xiàng)目窗口續(xù)訂項(xiàng)目窗口訂閱管理選擇按鈕編輯管理選擇按鈕訂閱管理窗口編輯管理窗口特殊訂單窗口文章窗口作者窗口刊物窗口付款項(xiàng)目窗口SBSS窗口零售價(jià)格追蹤基本訂戶追蹤免費(fèi)贈(zèng)閱查詢窗口112軟件工程只要描述清楚所需要的窗口,這些窗口的導(dǎo)航細(xì)節(jié),詳細(xì)的窗口成分,我們就可以用現(xiàn)有的技術(shù)和工具來(lái)實(shí)現(xiàn)它們。其他描述人機(jī)交互模型的工具在描述復(fù)雜的菜單系統(tǒng)(GUI窗口)的拓?fù)浣Y(jié)構(gòu)時(shí),常使用狀態(tài)圖或菜單樹(shù)。用于SBSS的單層狀態(tài)圖:每一個(gè)狀態(tài)是GUI的一個(gè)窗口每一個(gè)遷移代表了窗口之間的切換與每個(gè)遷移相關(guān)聯(lián)的是一個(gè)條件/動(dòng)作對(duì)條件代表了用戶選擇,它導(dǎo)致遷移的發(fā)生動(dòng)作代表了遷移發(fā)生時(shí)產(chǎn)生的請(qǐng)求113軟件工程SBSS訂閱項(xiàng)目菜單特殊訂單窗口幫助窗口編輯管理窗口訂閱管理窗口ALT+F,X返回起始菜單ALT+S訂閱管理ALT+F,X返回起始菜單ALT+D特殊訂單ALT+H幫助工具ALT+F,X返回起始菜單ALT+F,X
返回起始菜單ALT+S編輯管理114軟件工程菜單樹(shù)可以讓用戶直觀地看到如何在界面上巡航。用菜單樹(shù)表示人機(jī)交互的基本結(jié)構(gòu),有助于全局用戶界面的可視化。例如,可以了解有多少種不同的方式能夠訪問(wèn)“地址”的窗口。用戶界面可盡量采用清真 寺式的結(jié)構(gòu):在界面的上 層,希望扇出大于扇入, 表明用戶可以有多個(gè)可供 選擇的選項(xiàng)。在界面的低 層,希望扇入大于扇出, 表明一個(gè)單獨(dú)的界面可以 被多個(gè)雙親使用。115軟件工程SBSS訂閱系統(tǒng)訂閱管理窗口訂閱事務(wù)窗口地址窗口事務(wù)認(rèn)定窗口付款事項(xiàng)窗口查詢窗口查詢顯示窗口(a)查詢顯示窗口(b)查詢顯示窗口(c)查詢顯示窗口(d)查詢顯示窗口(e)編輯管理窗口作者編輯/顯示窗口文章編輯/顯示窗口刊物編輯/顯示窗口地址窗口事件掛起窗口開(kāi)始菜單/幫助窗口特殊訂單窗口地址窗口付款事項(xiàng)窗口菜單樹(shù)116軟件工程人機(jī)交互子系統(tǒng)的設(shè)計(jì)過(guò)程1) 用戶分類按技能層次分類:外行/初學(xué)者/熟練者/專家按組織層次分類:行政人員/管理人員/專業(yè)技術(shù)人員/其它辦事員按職能分類:客戶/職員描述人及其任務(wù)的腳本
對(duì)以上定義的每一類用戶,列出對(duì)以下問(wèn)題做出的考慮:誰(shuí)、目的、特點(diǎn)、成功的關(guān)鍵因素、熟117軟件工程
練程度以及任務(wù)腳本。 在OOATOOLTM中有一個(gè)例子:誰(shuí):分析員目的:要求一個(gè)工具來(lái)輔助分析工作(擺脫繁重的畫圖和檢查圖的工作)。特點(diǎn):年齡:42歲;教育水平:大學(xué);限制:不要微型打印,小于9個(gè)點(diǎn)的打印太小。成功的關(guān)鍵因素:工具應(yīng)能使分析工作順利進(jìn)行;工具不應(yīng)與分析工作沖突;工具應(yīng)能捕獲假設(shè)和思想,能適時(shí)做出折衷;應(yīng)能及時(shí)給出模型各個(gè)部分的文檔。118軟件工程熟練程度:專家。任務(wù)腳本:主腳本:識(shí)別“核心的”類和對(duì)象;識(shí)別“核心”結(jié)構(gòu);在發(fā)現(xiàn)了新的屬性或操作時(shí)隨時(shí)都可以加進(jìn)模型中去。
檢驗(yàn)?zāi)P停捍蛴∧P图捌淙课臋n。3) 設(shè)計(jì)命令層119軟件工程研究現(xiàn)行的人機(jī)交互活動(dòng)的內(nèi)容和準(zhǔn)則。這些準(zhǔn)則可以是非形式的,如“輸入時(shí)眼睛不易疲勞”,也可以是正式規(guī)定的;建立一個(gè)初始的命令層??梢杂卸喾N形式,如一系列MenuScreens、或一個(gè)MenuBar、或一系列Icons.細(xì)化命令層??紤]以下幾個(gè)問(wèn)題。排列命令層次。把使用最頻繁的操作放在前面;按照用戶工作步驟排列。通過(guò)逐步分解,找到整體-局部模式,以幫助在命令層中對(duì)操作分塊。120軟件工程根據(jù)人們短期記憶的“7±2”或“每次記憶3塊/每塊3項(xiàng)”的特點(diǎn),把菜單深度盡量限制在三層之內(nèi)。減少操作步驟:把點(diǎn)取、拖動(dòng)和鍵盤操作減到最少。設(shè)計(jì)詳細(xì)的交互用戶界面設(shè)計(jì)有若干原則,包括:一致性:采用一致的術(shù)語(yǔ)、一致的步驟和一致的活動(dòng)。操作步驟少:減少敲鍵和鼠標(biāo)點(diǎn)取的次數(shù),減少完成某件事所需的下拉菜單的距離。121軟件工程不要“啞播放”:每當(dāng)用戶等待系統(tǒng)完成一個(gè)活動(dòng)時(shí),要給出一些反饋信息。Undo:在操作出現(xiàn)錯(cuò)誤時(shí),要恢復(fù)或部分恢復(fù)原來(lái)的狀態(tài)。減少人腦的記憶負(fù)擔(dān):不應(yīng)在一個(gè)窗口使用在另一個(gè)窗口中記憶或?qū)懴碌男畔ⅲ恍枰税刺囟ù涡蛴洃浀臇|西應(yīng)組織得容易記憶。學(xué)習(xí)的時(shí)間和效果:提供聯(lián)機(jī)的幫助信息。趣味性:盡量采取圖形界面,符合人類習(xí)慣。122軟件工程5) 繼續(xù)做原型開(kāi)發(fā)用戶界面原型,可對(duì)提交的人機(jī)交互活動(dòng)進(jìn)行體驗(yàn)、實(shí)地操作,并精煉成一致的模式。使用快速原型工具或應(yīng)用構(gòu)造器,對(duì)各種命令方式,如菜單、彈出、填充以及快捷命令,做出原型讓用戶使用,通過(guò)用戶反饋、修改、演示的迭代,使界面越來(lái)越有效。設(shè)計(jì)人機(jī)交互類對(duì)窗口進(jìn)一步細(xì)化,通常包括:類窗口、條件窗口、檢查窗口、文檔窗口、畫圖窗口、過(guò)濾123軟件工程
器窗口、模型控制窗口、運(yùn)行策略窗口、模板窗口等。設(shè)計(jì)人機(jī)交互類,首先從組織窗口和部件的用戶界面界面的設(shè)計(jì)開(kāi)始。每個(gè)類包括窗口的菜單條、下拉菜單、彈出菜單的定義。還要定義用于創(chuàng)建菜單、加亮選擇項(xiàng)、調(diào)用相應(yīng)響應(yīng)的操作。根據(jù)圖形用戶界面進(jìn)行設(shè)計(jì)建立圖形窗口,確定字型、坐標(biāo)系統(tǒng)。建立事件響應(yīng)機(jī)制。124軟件工程設(shè)計(jì)人機(jī)交互子系統(tǒng)的啟發(fā)式準(zhǔn)則每一個(gè)組織和用戶都有其文化背景??赡懿粌H僅意味著語(yǔ)言、傳統(tǒng)和習(xí)慣。由于所建立的系統(tǒng)面對(duì)的是用戶,因此,其界面必須必須與用戶的文化背景相一致。 一種適應(yīng)用戶文化背景的有效方法是“可視化表示”。目的是讓計(jì)算機(jī)界面適應(yīng)用戶。例如有一個(gè)客戶開(kāi)發(fā)了一個(gè)財(cái)務(wù)管理軟件,它以政府規(guī)定的各種計(jì)算方法和表格作為其可視化表示。對(duì)于這樣的用戶界面,學(xué)習(xí)和掌握它非常簡(jiǎn)單和容易。125軟件工程使用用戶開(kāi)發(fā)的場(chǎng)景或使用事例來(lái)驅(qū)動(dòng)界面。為避免用戶界面太復(fù)雜,先觀察用戶是如何完成其工作的。在執(zhí)行一個(gè)特定的工作時(shí),用戶界面應(yīng)能告訴用戶下面將做什么。應(yīng)當(dāng)首先定義一個(gè)高層的用戶界面和一些詳細(xì)的對(duì)話框,然后定義人機(jī)交互對(duì)象,從而完成設(shè)計(jì)。需要建立原型對(duì)所有人機(jī)交互界面設(shè)計(jì)進(jìn)行嚴(yán)格的檢驗(yàn)。人機(jī)交互子系統(tǒng)的設(shè)計(jì)應(yīng)從建立分析模型時(shí)就開(kāi)始著手。在開(kāi)發(fā)系統(tǒng)的人機(jī)交互子系統(tǒng)時(shí),應(yīng)允許用戶對(duì)其試用。126軟件工程多數(shù)用戶都不會(huì)從頭開(kāi)始設(shè)計(jì)人機(jī)交互類。事實(shí)上,使用各種所謂的可視化開(kāi)發(fā)環(huán)境,如Delphi,PowerBuilder、VasualBasic、VasualC++、BorlandC++builder等,開(kāi)發(fā)人員可能連人機(jī)交互子系統(tǒng)都不要。直接使用這些工具提供的控件,就可以作出用戶界面。 用戶可以不需要HIC,但不能免去用戶界面的設(shè)計(jì)。使用菜單樹(shù)或狀態(tài),連同某些原型,來(lái)說(shuō)明用戶界面的設(shè)計(jì)思想。127軟件工程5.4.6任務(wù)管理子系統(tǒng)在應(yīng)用中,每一個(gè)對(duì)象中的每一個(gè)服務(wù)最終都要被分配給某一個(gè)計(jì)算機(jī)任務(wù)。這樣一些任務(wù)可以被看作是一些獨(dú)立的可調(diào)度的實(shí)體。通常任務(wù)管理子系統(tǒng)的任務(wù)為:將子系統(tǒng)映射到構(gòu)件和處理器上標(biāo)識(shí)并存儲(chǔ)持久性數(shù)據(jù)提供訪問(wèn)控制設(shè)計(jì)全局控制流通常利用UML構(gòu)件圖和部署圖展示。128軟件工程129軟件工程構(gòu)件圖(Componentdiagram)構(gòu)件圖展現(xiàn)了一組構(gòu)件之間的組織和依賴。構(gòu)件圖專注于系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖。它與類圖相關(guān),通常把構(gòu)件映射為一個(gè)或多個(gè)類、接口或協(xié)作。一個(gè)構(gòu)件可能是:
部署構(gòu)件:如動(dòng)態(tài)鏈接庫(kù)(DLL)、二進(jìn)制可執(zhí)行構(gòu)件、ActiveX控件、JavaBeans等,是形成可執(zhí)行文件的基礎(chǔ)。工作產(chǎn)品構(gòu)件:如數(shù)據(jù)文件或源代碼。是部署構(gòu)件的來(lái)源。執(zhí)行構(gòu)件:可運(yùn)行的構(gòu)件130軟件工程構(gòu)件圖的事例CourseCourseOfferingStudentProfessorCourse.dllPeople.dllCourseUserRegister.exeBilling.exeBillingSystem131軟件工程接口(interface)接口是一個(gè)類或構(gòu)件提供給其他類或構(gòu)件的一組操作。類的變體,其變體關(guān)鍵字是<<interface>>。每個(gè)接口要指定一個(gè)名字,以區(qū)分不同的接口。接口的名字就是類的名字,用字符串表示。構(gòu)件的接口有兩種類型:導(dǎo)入接口(importinterface):訪問(wèn)服務(wù)的構(gòu)件使用導(dǎo)入接口;導(dǎo)出接口(exportinterface):由提供操作的構(gòu)件提供。132軟件工程部署圖(DeploymentDiagram)部署圖展現(xiàn)了在軟件過(guò)程中存在的運(yùn)行處理節(jié)點(diǎn)以及其中的構(gòu)件的配置。部署圖給出了體系結(jié)構(gòu)的靜態(tài)實(shí)施視圖。它描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)(包括網(wǎng)絡(luò)布局和構(gòu)件在網(wǎng)絡(luò)上的位置),以及在此結(jié)構(gòu)上執(zhí)行的軟件(即運(yùn)行時(shí)軟構(gòu)件在節(jié)點(diǎn)中的分布情況)。它與構(gòu)件圖相關(guān),通常一個(gè)節(jié)點(diǎn)包含一個(gè)或多個(gè)構(gòu)件。133軟件工程部署圖的事例RegistrationDatabaseDormLibraryMainBuilding主排課數(shù)據(jù)庫(kù)宿舍圖書(shū)館注冊(cè)134軟件工程(1)將子系統(tǒng)映射到構(gòu)件和處理器選擇硬件配置和平臺(tái)許多系統(tǒng)運(yùn)行在網(wǎng)絡(luò)上。使用多臺(tái)計(jì)算機(jī),可以滿足高性能計(jì)算需求和多個(gè)互聯(lián)的分布式用戶需求。確保將子系統(tǒng)分布到多臺(tái)計(jì)算機(jī)上,設(shè)計(jì)基礎(chǔ)設(shè)施來(lái)支持子系統(tǒng)之間的通信。選擇硬件配置包括選擇虛擬機(jī),系統(tǒng)將在其上運(yùn)行。虛擬機(jī)包括操作系統(tǒng)和所需軟件構(gòu)件,如數(shù)據(jù)庫(kù)管理系統(tǒng)和通信包。構(gòu)件提供的功能越多,所需的開(kāi)發(fā)工作量越少。虛擬機(jī)的選擇還受客戶約束和成本限制影響。135軟件工程例如,在車輛路程規(guī)劃系統(tǒng)中,規(guī)劃子系統(tǒng)和路由子系統(tǒng)運(yùn)行在兩個(gè)不同的節(jié)點(diǎn)上。硬件分配的情況如下:將對(duì)象和子系統(tǒng)分配到節(jié)點(diǎn)上:OnBoardComputerRoutingsubsystem:WebServerPlanningsubsystem將路由子系統(tǒng)分配到車載計(jì)算機(jī)上規(guī)劃子系統(tǒng)分配到基于Web的網(wǎng)絡(luò)服務(wù)器上136軟件工程將對(duì)象和功能分配到各個(gè)節(jié)點(diǎn)上時(shí),為了在節(jié)點(diǎn)之間傳輸數(shù)據(jù),需對(duì)新加入的對(duì)象和子系統(tǒng)進(jìn)行標(biāo)識(shí)。例如,在車輛路程規(guī)劃系統(tǒng)中,路由子系統(tǒng)和規(guī)劃子系統(tǒng)共享了行程類、目的地類、交差口類、路段類和方向類的實(shí)例,它們需采用一些通信協(xié)議,可通過(guò)無(wú)線調(diào)制解調(diào)器進(jìn)行通信,可創(chuàng)建一個(gè)通信子系統(tǒng)來(lái)支持該通信。旅途規(guī)劃的內(nèi)容分布在路由和規(guī)劃子系統(tǒng)中,在路由子系統(tǒng)中創(chuàng)建路段代理類和行程代理類為規(guī)劃子系統(tǒng)中的路段和行程提供代理服務(wù)。137軟件工程當(dāng)司機(jī)需要重新規(guī)劃行程路線時(shí),行程類對(duì)象會(huì)向通信子系統(tǒng)發(fā)出請(qǐng)求,檢索規(guī)劃子系統(tǒng)中有關(guān)路段的信息。最后,通信子系統(tǒng)將一個(gè)完整的旅途線路從規(guī)劃子系統(tǒng)轉(zhuǎn)移到路由子系統(tǒng)中。通信子系統(tǒng)消息連接規(guī)劃子系統(tǒng)規(guī)劃服務(wù)行程路口方向目的地行程段路由子系統(tǒng)線路助手位置行程代理路段代理138軟件工程將某一子系統(tǒng)分配到硬件節(jié)點(diǎn)上,意味著能夠?qū)⒐δ芎吞幚砟芰Ψ峙涞阶钚枰@些子系統(tǒng)的地方。隨之而來(lái)的問(wèn)題就是子系統(tǒng)中的數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)轉(zhuǎn)移、數(shù)據(jù)復(fù)制和同步數(shù)據(jù)等問(wèn)題。持久性數(shù)據(jù)的生存周期要長(zhǎng)于系統(tǒng)的一次執(zhí)行周期。例如,在圖書(shū)管理系統(tǒng)中將借閱者借閱的圖書(shū)信息和借閱者信息記入借閱記錄并存儲(chǔ)在數(shù)據(jù)庫(kù)相應(yīng)文件中,該文件以后可以再次打開(kāi)。數(shù)據(jù)在系統(tǒng)中的存儲(chǔ)位置和存儲(chǔ)方式將會(huì)影響到(2)標(biāo)識(shí)并存儲(chǔ)持久性數(shù)據(jù)139軟件工程 系統(tǒng)的分解。特定數(shù)據(jù)庫(kù)管理系統(tǒng)的選擇也會(huì)影響全局控制策略和并發(fā)管理。例如,在車輛路程規(guī)劃系統(tǒng)中,把當(dāng)前行程信息存儲(chǔ)在磁盤文件中是最簡(jiǎn)單、最有效的。為此,在系統(tǒng)中添加行程文件存儲(chǔ)子系統(tǒng)和映射數(shù)據(jù)庫(kù)存儲(chǔ)子系統(tǒng)。前者負(fù)責(zé)將旅程路線信息存儲(chǔ)到車載計(jì)算機(jī)的文件中。該文件只支持整個(gè)旅程數(shù)據(jù)的快速存儲(chǔ)和載入,以在車輛故障恢復(fù)時(shí)使用。后者負(fù)責(zé)將地圖和旅程數(shù)據(jù)存儲(chǔ)到規(guī)劃子系統(tǒng)的數(shù)據(jù)庫(kù)中。該子系統(tǒng)支持多個(gè)并發(fā)的的司機(jī)和規(guī)劃代理。140軟件工程標(biāo)識(shí)持久性對(duì)象。候選的持久性數(shù)據(jù)是從分析過(guò)程中標(biāo)識(shí)出的實(shí)體類對(duì)象,以及邊界類對(duì)象。通常可以在系統(tǒng)關(guān)閉后,檢查所有必須保存的類,以標(biāo)識(shí)出必須長(zhǎng)久保存的持久性對(duì)象。這里的系統(tǒng)關(guān)閉可以是受控關(guān)閉,也可以是系統(tǒng)崩潰。行程文件存儲(chǔ)子系統(tǒng)通信子系統(tǒng)映射數(shù)據(jù)庫(kù)存儲(chǔ)子系統(tǒng)路由子系統(tǒng)規(guī)劃子系統(tǒng)141軟件工程選擇存儲(chǔ)管理策略。決定如何存儲(chǔ)這些持久性對(duì)象的決策常常受到如下非功能屬性的制約:對(duì)象能否快速檢索出來(lái)是否必須執(zhí)行復(fù)雜的查詢來(lái)檢索這些對(duì)象這些對(duì)象是否需要大量的內(nèi)存和磁盤空間在多用戶系統(tǒng)中,不同參與者對(duì)不同的功能和數(shù)據(jù)可有不同的訪問(wèn)權(quán)限。例如,一個(gè)普通用戶參與者可能僅能訪問(wèn)其所創(chuàng)建的數(shù)據(jù),而一個(gè)系統(tǒng)管理員參與者對(duì)系統(tǒng)數(shù)據(jù)(3)提供訪問(wèn)控制142軟件工程 和所有用戶數(shù)據(jù)具有無(wú)限的訪問(wèn)權(quán)限。在需求獲取和分析建模過(guò)程中,將不同用例關(guān)聯(lián)到不同的參與者;在系統(tǒng)設(shè)計(jì)過(guò)程中,定義共享對(duì)象、參與者通過(guò)訪問(wèn)控制進(jìn)行訪問(wèn)的權(quán)限、數(shù)據(jù)加密的方式等。例如,在車輛行程規(guī)劃系統(tǒng)中,在同一數(shù)據(jù)庫(kù)中存儲(chǔ)地圖信息和行程信息會(huì)引發(fā)安全問(wèn)題,必須確保行程僅被發(fā)送給創(chuàng)建這些行程的司機(jī)。為此,可將司機(jī)類與行程類關(guān)聯(lián)起來(lái)。規(guī)劃子系統(tǒng)負(fù)責(zé)在發(fā)送行程之前對(duì)司機(jī)進(jìn)行識(shí)別,最后根據(jù)兩子系統(tǒng)之間的通信信息是否加密進(jìn)行決策。143軟件工程可以用訪問(wèn)矩陣對(duì)類的訪問(wèn)控制進(jìn)行建模:矩陣的行列出系統(tǒng)中的參與者矩陣的列列出要進(jìn)行控制的類矩陣元素列出參與者在類實(shí)例上能執(zhí)行的一組操作,也稱為訪問(wèn)權(quán)。訪問(wèn)矩陣定義了靜態(tài)訪問(wèn)控制。還可以采用代理模式定義動(dòng)態(tài)訪問(wèn)控制。例如,可以為每一個(gè)被訪問(wèn)的類實(shí)例創(chuàng)建一個(gè)代理對(duì)象,由代理對(duì)象檢查訪問(wèn)者的訪問(wèn)權(quán)限。如果訪問(wèn)者具有相應(yīng)的訪問(wèn)權(quán)限,則訪問(wèn)可執(zhí)行,否則,訪問(wèn)失敗。144軟件工程(4)全局控制流設(shè)計(jì)典型的控制流機(jī)制有三種:過(guò)程驅(qū)動(dòng)控制事件驅(qū)動(dòng)控制線程機(jī)制一旦選擇了控制流機(jī)制,就可以采用一個(gè)或多個(gè)控制對(duì)象來(lái)實(shí)現(xiàn)它??刂茖?duì)象的作用是記錄外部事件,存儲(chǔ)其有關(guān)狀態(tài),給出接口上的操作調(diào)用、與外部事件相關(guān)聯(lián)的實(shí)體對(duì)象操作調(diào)用的正確順序。145軟件工程5.4.7數(shù)據(jù)管理子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)提供了在數(shù)據(jù)管理系統(tǒng)中存儲(chǔ)和檢索對(duì)象的基本結(jié)構(gòu),包括對(duì)持久性數(shù)據(jù)的訪問(wèn)和管理。它分離了數(shù)據(jù)管理機(jī)制所關(guān)心的事項(xiàng),包括文件、關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)或面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng)等。數(shù)據(jù)管理的方法主要有3種:文件管理、關(guān)系數(shù)據(jù)庫(kù)管理和面向?qū)ο髷?shù)據(jù)庫(kù)管理。下面給出選擇數(shù)據(jù)管理方法的規(guī)則。146軟件工程類型選擇規(guī)則(1)存在大量的數(shù)據(jù)(如圖像)文件(2)存在臨時(shí)數(shù)據(jù)(如內(nèi)存文件)(3)存在低密度信息(如檔案文件、歷史日志)關(guān)系型或(1)存在并發(fā)訪問(wèn)面向?qū)ο?2)訪問(wèn)比較合適的細(xì)節(jié)層數(shù)據(jù)庫(kù)(3)對(duì)相同數(shù)據(jù)的多重平臺(tái)或應(yīng)用關(guān)系型(1)屬性上的復(fù)雜查詢數(shù)據(jù)庫(kù)(2)存在大數(shù)據(jù)量面向?qū)ο?1)為檢索數(shù)據(jù)擴(kuò)展關(guān)聯(lián)的使用數(shù)據(jù)庫(kù)(2)中等規(guī)模的數(shù)據(jù)集(3)對(duì)象之間的不規(guī)則關(guān)聯(lián)147軟件工程文件是一種由操作系統(tǒng)提供的數(shù)據(jù)組織,應(yīng)用程序以字符流的形式存儲(chǔ)其數(shù)據(jù)。應(yīng)用程序可定義用什么方式、在什么時(shí)間來(lái)檢索這些對(duì)象。但文件使用時(shí)必須考慮很多問(wèn)題,如并發(fā)訪問(wèn)和系統(tǒng)崩潰情況下的數(shù)據(jù)丟失問(wèn)題。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)可以遵照預(yù)先定義好的結(jié)構(gòu)類型進(jìn)行存儲(chǔ)。它使用若干表格來(lái)管理數(shù)據(jù),表中每一列代表一個(gè)屬性,每一行代表一個(gè)屬性元組值的數(shù)據(jù)元素。這種類型的數(shù)據(jù)庫(kù)提供了并發(fā)管理、訪問(wèn)控制和故障恢復(fù)服務(wù),但對(duì)非結(jié)構(gòu)化數(shù)據(jù)(如圖像、自然語(yǔ)言文本),速度較慢。148軟件工程面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng)提
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年快中子增殖堆及配套產(chǎn)品項(xiàng)目合作計(jì)劃書(shū)
- 2025年太陽(yáng)能熱發(fā)電系統(tǒng)合作協(xié)議書(shū)
- 2025年分級(jí)設(shè)備地礦勘測(cè)設(shè)備:鉆探機(jī)合作協(xié)議書(shū)
- 可穿戴設(shè)備電池壽命測(cè)試規(guī)程
- 2025年鎂質(zhì)瓷合作協(xié)議書(shū)
- 2025年治療精神障礙藥項(xiàng)目合作計(jì)劃書(shū)
- 阿凡達(dá)觀后感生態(tài)與文明的思考
- 水泥混凝土路面施工合同
- 三字經(jīng)經(jīng)典解讀與傳承
- FDU-PB-22-生命科學(xué)試劑-MCE
- 許慎《說(shuō)文解字》(全文)
- 餐飲服務(wù)食品安全監(jiān)督量化分級(jí)動(dòng)態(tài)等級(jí)評(píng)定檢查表
- 我國(guó)應(yīng)急通信保障能力評(píng)估體系探究(金)
- 井控-井口套管頭裝置⑥課件
- 病原生物與免疫學(xué)(中職)緒論P(yáng)PT課件
- 施工質(zhì)量管理體系與保證措施方案
- 變配電室受電方案
- 新起點(diǎn)小學(xué)英語(yǔ)一年級(jí)上冊(cè)單詞卡片(共23頁(yè))
- 譯林版五下英語(yǔ)1-3單元電子稿
- 墻面鋼筋網(wǎng)砂漿抹灰加固方案(共3頁(yè))
- (完整word版)蘇教版三年級(jí)數(shù)學(xué)下冊(cè)各單元教學(xué)目標(biāo)
評(píng)論
0/150
提交評(píng)論