圖書館管理面向對象分析與設計_第1頁
圖書館管理面向對象分析與設計_第2頁
圖書館管理面向對象分析與設計_第3頁
圖書館管理面向對象分析與設計_第4頁
圖書館管理面向對象分析與設計_第5頁
已閱讀5頁,還剩160頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件工程

第五章面向對象分析與設計5.1需求獲取5.2面向對象分析5.3面向對象設計5.4系統(tǒng)設計5.5對象設計1軟件工程5.1

需求獲取需求獲取的目標是確定用戶“需要”什么樣的軟件產(chǎn)品,就是說,新的軟件必須能夠做什么。沒有專業(yè)的系統(tǒng)分析人員,用戶很難了解到需要開發(fā)什么相關信息和功能;另一方面,沒有與用戶的交流,系統(tǒng)分析人員也很難弄清客戶真正需要什么。發(fā)現(xiàn)用戶需求的過程稱為需求獲取。一旦提出了最初的需求,進一步推敲、細化和擴充的過程稱為分析。2軟件工程需求獲取的第一步是理解應用領域,即目標軟件的應用環(huán)境。如銀行、電信公司、書店等。一旦系統(tǒng)分析人員對該領域有了充分了解,就可以建立一個業(yè)務模型,描述用戶的業(yè)務過程,確定用戶的初始需求。然后通過迭代,更深入了解應用領域,回過頭來推敲業(yè)務模型。這種迭代過程直到雙方對需求的理解達到共識。需求獲取的結果是導出用戶可理解的系統(tǒng)規(guī)格說明。3軟件工程開發(fā)用戶需求的典型過程1.識別用戶需求2.訪談用戶代表

識別各種需要與要求使用工具幫助表達用戶需求繪制GUI草圖確定硬件環(huán)境3.用標準文檔格式撰寫客戶需求4.核查用戶需求請用戶評審用戶批準后5.構建詳細需求(分析建模)4軟件工程5.1.1

與用戶交互1)需求的來源不同類型應用能從人員處獲取需求的比例:相對低的相對高的從人群獲取需求的大概百分比應用的類型高度受限的不受限制的導彈制導系統(tǒng)航班控制系統(tǒng)公司財務系統(tǒng)增強版制造控制系統(tǒng)公司財務系統(tǒng)Encounter視頻游戲軍事戰(zhàn)略決策支持系統(tǒng)5軟件工程所謂限制,是指受客觀物理規(guī)律的限制。如導彈制導系統(tǒng)更多地受物理運動定律的限制,而非人的決策。視頻游戲的大部分需求依賴人,因為它是一個相像出來的產(chǎn)品。應用受到的限制越少,能從人們那里獲得的需求比例越大。2)識別利益相關者(stakeholder)對項目承擔風險和享有利益的人即為利益相關者。他們是應用的“客戶”。如公司高層、項目經(jīng)理、最終用戶、系統(tǒng)開發(fā)人員等。6軟件工程不同利益相關者之間的利益沖突會導致需求不一致。如果需求沖突不能調和,項目就會陷入困境,最后往往會被取消。即使所有利益相關者的需求一致,也可能由于實現(xiàn)代價高昂,需求不能得到完全滿足。3)了解客戶的需求一般客戶希望得到一個產(chǎn)品,他們需要系統(tǒng)開發(fā)人員幫助,明確自己的需要。例如,有一個客戶愿望框架:“Encounter是一個角色扮演游戲,它能模擬被扮演人物的全部或部分活動,應對人們具有相當吸引力。”7軟件工程完整的客戶要求應當記錄在需求文檔的“概述”部分。但需求中還有一些問題需要由系統(tǒng)分析人員與客戶商量,以明確這些需求。例如游戲是否只允許玩家扮演一個角色還是可以同時控制多個人物?當兩個人相遇時會發(fā)生什么事情?游戲是否可以聯(lián)網(wǎng)對戰(zhàn)等。4)訪談和文檔記錄大部分需求獲取是人與人溝通的活動,這些活動經(jīng)過精心組織,以準確獲得最好的效果。準備和訪談客戶的過程如下:8軟件工程訪談之前列出訪談的“客戶”對象,并劃分客戶優(yōu)先級最有可能決定項目成敗的人安排訪談日程,設定開始和結束時間系統(tǒng)開發(fā)人員至少有兩人參加訪談準備錄音設備訪談中注意傾聽不要處于被動狀態(tài):啟發(fā)和鼓勵理解客戶的需要并探索要求采用用例?或數(shù)據(jù)流圖?狀態(tài)圖?9軟件工程記錄全部訪談內容安排補充會議訪談之后根據(jù)標準模版撰寫軟件需求規(guī)格說明(SRS),打客戶需求草稿通過電子郵件征求客戶意見對于不同類型的應用,用例方法是一種獲取和表達需求的有效方法。某些需求需要通過數(shù)據(jù)流圖或狀態(tài)圖與用戶溝通。10軟件工程5.1.2描述客戶需求需求可以看成是應用與應用的外部代理(如用戶)之間的交互??衫糜美鳛楸磉_工具。用例描述了系統(tǒng)外的參與者(Actor)與應用之間的交互情況。主要注重用戶對系統(tǒng)的看法。描述客戶需求的過程如下:1)標識參與者標識目標系統(tǒng)將支持的不同類型的用戶,可以是人、事件或其他系統(tǒng)。2)標識場景用場景描述目標系統(tǒng)典型功能的活動細節(jié),并與用戶溝通,加深開發(fā)人員對應用領域的理解。11軟件工程3)標識用例當雙方確定了一組場景后,開發(fā)人員從該場景抽象出一組用例,描述所有可能的情況。用力表達了系統(tǒng)的范圍。4)求精用例細化每一個用例。引入帶有出錯處理或帶有異常處理的用例,描述系統(tǒng)的行為,保證需求的描述是完全的。5)標識用例之間的關系描述用例之間的依賴關系,提取相同功能,建立用例模型。6)標識非功能需求包括系統(tǒng)性能上的約束、文檔、使用資源、安全性和質量等需求。12軟件工程需求獲取期間,開發(fā)人員需要訪問一些不同的信息資源:客戶提供的與應用領域相關的文檔和手冊。將被目標系統(tǒng)替代的遺留系統(tǒng)的技術文檔。最終用戶和客戶本人。以“圖書管理系統(tǒng)”為例,首先標識參與者:Librarian圖書管理員:創(chuàng)建、修改、刪除借閱者信息;添加、編輯、刪除館藏圖書信息;添加、編輯、刪除流通圖書信息。Borrower借閱者:借閱、預約、歸還流通圖書,以及取消圖書預約。13軟件工程流通圖書(Book)是指某種館藏圖書(Title)的某一流通中的復本。例如“數(shù)學分析教程第二冊”的5本館藏復本中的第3本。識別用例:BorrowBook:借閱流通圖書ReturnBook:返還流通圖書RecerveTitle:預約某種館藏圖書CancelReservation:取消預約MaintainBorrowerInfo:維護借閱者信息,包括創(chuàng)建、修改、取消借閱者賬戶MaintainTitleInfo:維護館藏圖書信息,包14軟件工程

括添加、修改、刪除館藏圖書信息MaintainBookInfo:維護流通圖書信息,包括添加、修改、刪除流通圖書信息Login:登錄識別參與者與用例之間的關系(場景)Borrower執(zhí)行BorrowBook、ReturnBook、ReserveTitle、CancelReservation等用例。Borrower是通過Librarian完成上述用例的工作。則Borrower與Librarian存在依賴關系。Librarian還與MaintainBorrowerInfo、Main-tainTitleInfo、

MaintainBookInfo交互。15軟件工程Librarian還需要與用例Login交互。畫出用例圖BorrowerLibrarianBorrowBookReturnBookReserveTitleCancelReservation<<uses>>16軟件工程用例BorrowBook的規(guī)格說明1.1前置條件:在此用例開始之前,Librarian必須登錄到系統(tǒng)中。LibrarianLoginMaintainTitleInfoMaintainBookInfoMaintainBorrowerInfo17軟件工程18軟件工程19軟件工程1.2后置條件:如果此用例執(zhí)行成功,在系統(tǒng)中建立并存儲一條借閱記錄,必須時需要刪除預約記錄。如果執(zhí)行不成功,系統(tǒng)狀態(tài)不變。1.3事件流基本流當Borrower借閱館藏圖書,且Librarian選擇“借書”,則此用例啟動。提供館藏圖書和借閱者信息。檢索館藏圖書(E-1)。確定該館藏圖書的物理復本(流通圖書)是否在架(E-2)。20軟件工程檢索借閱者(E-3)。將流通圖書交給借閱者。創(chuàng)建并存儲借閱記錄。刪除預約記錄。候補流E-1:若該種圖書不存在,系統(tǒng)顯示提示信息,用例終止。E-2:若該種圖書都已解出,系統(tǒng)顯示提示信息,用例終止。E-3:系統(tǒng)中不存在該借閱者,系統(tǒng)顯示提示信息,用例終止。21軟件工程5.1.3與用戶溝通的其他工具1)數(shù)據(jù)流圖某些需求可以很自然地表述為處理元素之間的數(shù)據(jù)流。頂層圖即為系統(tǒng)與外部實體的交互。2)狀態(tài)圖有時把應用看作是幾個狀態(tài)下的應用,而在某一確定時刻的應用始終明確地處于某個狀態(tài)中。這種狀態(tài)劃分對理解系統(tǒng)比較有益。狀態(tài)的具體內容到實現(xiàn)階段會有確切的定義。22軟件工程借書過程的數(shù)據(jù)流圖外部實體、數(shù)據(jù)流和數(shù)據(jù)存儲都為候選對象管理員

1借書檢驗2借書登記索書單借書證檢驗錯誤借書信息日歷

借閱記錄

借閱者信息

圖書信息

借書證圖書23軟件工程還書過程的數(shù)據(jù)流圖系統(tǒng)與外部實體、系統(tǒng)與數(shù)據(jù)存儲的交互,構成系統(tǒng)的接口。相應數(shù)據(jù)流構成接口數(shù)據(jù)。借閱者

3還書檢驗4還書登記檢驗錯誤還書信息日歷

借閱記錄

圖書24軟件工程館藏圖書(對象)的狀態(tài)圖借出在架丟失修補報廢出借返還丟失丟失注銷損壞上架25軟件工程圖書管理員借書操作的狀態(tài)圖登記讀者信息登記借書信息findTitle(檢索圖書)login(登錄)findBorrower(查找借閱者)reserve(預約)借書預約圖書手續(xù)完成檢驗圖書borrow(借閱)檢查圖書狀態(tài)取消findBook(檢索復本)setLoan(設借閱狀態(tài))cancel(取消)close(關閉)檢驗讀者借書26軟件工程借閱者圖書館在書架上找書[返還][借閱]排隊等待創(chuàng)建借閱記錄準備下次行動[返還][借閱]書放回書架刪除借書記錄[多個][不多于一個]27軟件工程28軟件工程29軟件工程活動圖(ActivityDiagram)一個活動是一個在狀態(tài)機內部正在進行的非原子(即可中斷的)動作。活動圖是一種特殊的狀態(tài)圖。其中,大多數(shù)的或者全部的狀態(tài)都是動作狀態(tài)或者活動狀態(tài)大多數(shù)的或者全部的遷移都是由于源狀態(tài)中活動的完成而被觸發(fā)的。一個活動圖著重于描述計算過程或工作流的順序的和并發(fā)的執(zhí)行步驟。30軟件工程活動圖的兩種使用方式對工作流建模對操作建模實現(xiàn)與系統(tǒng)進行協(xié)作的參與者所觀察到的活動把活動圖作為流程圖使用,對一個計算的細節(jié)部分建模適用性對工作流的建模對分支、分叉和匯合狀態(tài)的建模內容用于可視化、詳述、構造和文檔化開發(fā)系統(tǒng)所涉及的業(yè)務過程操作的參數(shù)和它的局部對象31軟件工程泳道(swimlanes)活動圖描述發(fā)生了什么,但沒有說明該活動由誰來完成。泳道描述了這種關系。泳道用矩形框表示,屬于某個泳道的活動放在該矩形框內,將對象名放在矩形框的頂部,表示泳道中的活動由該對象負責。兩個泳道中活動的各自由不同的對象負責,活動之間控制權的轉移表明對象之間的協(xié)作關系。所以泳道可以將活動圖的邏輯描述與順序圖、寫作圖的責任描述結合起來。32軟件工程5.1.4草擬用戶界面和其他接口建立初始用戶界面,是原型方法的一種,目的是快速與客戶溝通??蛻敉ǔT诳吹綉玫膱D形用戶界面(GUI)才能相像到這個應用未來的樣子。開發(fā)用戶界面的步驟如下:1)了解客戶深入了解最終用戶的想法。根據(jù)用戶的層次,提供多種用戶界面。知識和經(jīng)驗層次:計算機素養(yǎng)、系統(tǒng)經(jīng)驗、使用類似應用的經(jīng)驗、教育水平、閱讀水平、打字技能等。33軟件工程用戶的生理特征:年齡、性別、左右手習慣、生理障礙等。2)理解業(yè)務功能根據(jù)應用的整體意圖來理解特定用戶界面的目的。功能界面出現(xiàn)的順序通常可以反映用戶處理日常業(yè)務的方式。用戶的任務和工作特征:應用的使用方式、使用頻率、雇員的流動率、任務的重要性、任務的重復性、對培訓的期望、工作類型等。用戶的心理特征:工作態(tài)度、能動性、認知方式等。34軟件工程3)理解優(yōu)秀界面設計的原則目的是加強視覺效果。確保應用的各個界面之間風格的一致性:習慣、步驟、視覺和感覺、位置等。揣測用戶通常開始操作的地點導航系統(tǒng)盡量簡捷使用分組和分層來強調重要性級別4)選擇合適的窗口類型五類窗口:屬性窗口:展示實體的屬性對話窗口:完成特定任務或命令的信息35軟件工程消息窗口:提供信息面板窗口:展示一組控件彈出窗口:突出顯示信息5)制作系統(tǒng)菜單為用戶提供一個穩(wěn)定的、易于理解的使用環(huán)境,可以方便地搜尋需要的選項。提供一個主菜單顯示所有相關選擇(僅局限于此)將菜單結構與應用要完成的任務對應起來盡量減少菜單的級數(shù)36軟件工程6)選擇合適的基于設備的控件提供給用戶,向系統(tǒng)發(fā)送指示的實際手段,包括鼠標、鍵盤、觸摸屏、繪圖板、軌跡球、麥克風等。7)選擇合適的基于界面的控件即出現(xiàn)在屏幕上的符號。用戶通過這些符號向系統(tǒng)提出他的輸入和操作意圖,包括圖標、按鈕、復選框、單選框等。8)組織和安排窗口布局多窗口的排列規(guī)則,如平鋪、層疊等。9)選擇合適的顏色盡量保持簡捷和低調。顏色需要和諧。37軟件工程5.2面向對象分析分析建模的目的是對來自客戶的需求形式化。形式化可以導致新的洞察和發(fā)現(xiàn)需求錯誤。1999年NASA損失了一顆價值數(shù)億美元的氣象衛(wèi)星,據(jù)調查是因為列在度量表中的控制數(shù)據(jù)出了問題。不巧的是這個缺陷在災難發(fā)生幾天之前才剛發(fā)現(xiàn),如果在需求分析階段就被識別出來就可避免損失了。避免需求錯誤或遺漏的第一道防線就是把所有的需求細化,建立分析模型。38軟件工程分析模型由三個獨立的模型構成:由用例和場景表示的功能模型;用類和對象表示的分析對象模型;由狀態(tài)圖和順序圖表示的動態(tài)模型。在需求獲取階段得到的用例模型就是功能模型。據(jù)此可導出分析對象模型和動態(tài)模型。需要注意,這些模型代表的是來自客戶的概念,而非實際軟件類或實際構件。如數(shù)據(jù)庫、子系統(tǒng)、會話管理器、網(wǎng)絡等,不應出現(xiàn)在分析模型中,因為這些概念僅與實現(xiàn)相關。分析中的類可以看作是高層抽象,在后續(xù)階段將使用更多的細節(jié)實現(xiàn)。39軟件工程在分析對象模型中有實體對象、邊界對象和控制對象等三種類型。實體對象表示系統(tǒng)將跟蹤的持久信息;邊界對象表示參與者與系統(tǒng)之間的交互(接口);控制對象負責用例的實現(xiàn)

。可用UML提供的衍型機制,區(qū)分不同類型對象。ControlEntityActorBoundary參與者邊界對象控制對象實體對象圖示40軟件工程具有兩個按鈕的手表的分析類使用實體對象、邊界對象和控制對象等概念對系統(tǒng)建模時,常常需要提供一些簡單的啟發(fā)式規(guī)則來指導開發(fā)人員使用這些概念,可以使用相應的類來跟蹤。<<entity>>Day<<entity>>Month<<entity>>Year<<control>>ChangeDateControl<<boundary>>ButtonBoundary<<boundary>>LCDDisplayBoundary41軟件工程分析建模活動包括以下步驟。標識實體對象自然語言分析法利用Abbott啟發(fā)式準則,將語言成分映射為模型成分。語言成分模型成分示例專有名詞實例人員乙普通名詞類現(xiàn)場工作人員Doing動詞操作創(chuàng)建、提交、選擇Being動詞繼承是…的一種,是…中的一個Having動詞聚合有…,由…組成,包括…情態(tài)動詞約束必須是形容詞屬性事件描述42軟件工程自然語言分析法主要關注用戶術語。限制有識別質量高度依賴人們的書寫風格;可能會出現(xiàn)許多無關詞匯,或同義詞。檢查每一個用例,標識候選對象用例中的連續(xù)名詞(如借閱事件);系統(tǒng)需要跟蹤的現(xiàn)實世界中的實體(如借閱記錄、館藏圖書信息);系統(tǒng)需要跟蹤的現(xiàn)實世界中的活動(如緊急情況操作預案);數(shù)據(jù)源或數(shù)據(jù)潭(如借閱者、管理員)。43軟件工程2) 標識邊界對象在用例圖中,每一個參與者至少要與一個邊界對象交互。邊界對象收集來自參與者的信息,將它們轉換為可用于實體對象和控制對象的表示形式。邊界對象對用戶界面進行粗略的建模,不涉及如菜單項、滾動條等可視方面的細節(jié)。標識邊界對象的啟發(fā)式準則如下:標識用戶所需初始用例的用戶界面控制;標識用戶需要鍵入系統(tǒng)的數(shù)據(jù)表格;標識通知和系統(tǒng)用于響應用戶的消息;44軟件工程當用例中有多個參與者時,根據(jù)構想的用戶界面來標識參與者的行為;不要使用邊界對象對接口的可視方面建模,應使用用戶原型對可視用戶界面建模;使用用戶的術語來描述接口,不要使用來自設計和實現(xiàn)的術語。3) 標識控制對象控制對象負責協(xié)調實體對象和邊界對象??刂茖ο鬀]有在現(xiàn)實世界中具體的對應物,它通常從邊界對象處收集信息,并把這些信息分配給實體對象。45軟件工程圖書管理系統(tǒng)中的對象Borrower:借閱者。他們可以借閱、返還、預約和取消預約。因為名字可能重復,可用借閱證號碼識別。Title:館藏圖書。它表明某一種書,通過館藏號碼識別。Book:流通圖書。它表明某一種書的具體復本,通過館藏號碼識別。Loan:借閱記錄。同一個人關于不同圖書的借閱記錄是不同的。Reservation:預約記錄。46軟件工程圖書管理系統(tǒng)中的邊界對象mainWindow:主窗口。有借書、還書、預約、取消預約、添加書種、修改書種、刪除書種、添加借閱者、修改借閱者、刪除借閱者、添加圖書復本、刪除圖書復本等操作。BorrowerDialog:借閱者對話框。有添加借閱者、修改借閱者、刪除借閱者等操作。FindBwrDialog:彈出對話框。有根據(jù)借閱者ID號碼查找借閱者的操作。TitleDialog:館藏圖書對話框。有添加書種、修改書種、刪除書種等操作。47軟件工程FindTDialog:彈出對話框。根據(jù)圖書的館藏號查找館藏圖書。BorrowDialog:借書對話框。根據(jù)館藏圖書的館藏號和借閱者信息,執(zhí)行借閱動作,創(chuàng)建和保存借閱記錄。ReturnDialog:還書對話框.根據(jù)流通圖書的館藏號和復本號,執(zhí)行還書動作,刪除借閱記錄。ReserveDialog:預約對話框。根據(jù)館藏圖書的館藏號和借閱者信息,執(zhí)行預約、取消預約動作。MessageWindow:顯示提示信息窗口。LoginDialog:輸入用戶名和密碼的窗口。48軟件工程4) 使用順序圖將用例映射為對象順序圖將用例與對象聯(lián)系起來,直觀地描述了用例(場景)行為在其參與對象之間是如何實施的。順序圖對用例中各參與對象之間的交互序列進行建模。每一個消息從一個對象(或參與者)發(fā)送給另一個對象(或參與者)。消息的接受就觸發(fā)了一個操作。通過順序圖,將責任以操作集合的形式分配給每一個對象。如果一個對象參與到多個用例,則其操作應為這些用例共享。49軟件工程畫順序圖的啟發(fā)式準則如下:順序圖第一欄對應激活該用例的參與者;順序圖第二欄是邊界對象;順序圖第三欄是管理用例中其他參與對象的控制對象;通過邊界對象來初始化用例,并創(chuàng)建控制對象;通過控制對象可創(chuàng)建其他邊界對象;實體對象允許邊界對象和控制對象訪問;試題對象不能訪問邊界對象和控制對象;50軟件工程借書用例的順序圖: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軟件工程還書用例的順序圖: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卡片對對象之間的交互建模CRC是類、職責和協(xié)作的縮寫。每一個類可用一張CRC卡片表示。建立CRC卡片有以下幾個步驟:識別類和職責:

首先識別類或對象,然后從客戶需求說明中尋找有關行為的描述,以發(fā)現(xiàn)職責。將職責分配到類:記錄在相應的卡片上。

找尋協(xié)作者:依次檢查每一類承擔的責任,看是否需要其他類的幫助,找尋與每個類協(xié)作的伙伴,并記錄在相應卡片上。53軟件工程54軟件工程55軟件工程

職責顯示歡迎詞密碼驗證器接收磁卡菜單選擇器讓密碼驗證器檢驗啟動菜單選擇器退出磁卡

類名讀卡機協(xié)作職責從賬戶中取出密碼賬戶如無此賬戶返回假值提示客戶輸入密碼讀入密碼比較核實,返回結果

類名密碼驗證器協(xié)作職責檢查賬戶有效性返回密碼檢查取款/存款信息類名賬戶職責顯示菜單存款管理器等待客戶選擇取款管理器調用相應的存款/取款管理器類名菜單選擇器協(xié)作職責詢問取款額賬戶要求驗證賬戶出銀機啟動出銀機發(fā)款類名取款管理器協(xié)作56軟件工程細化:模擬在執(zhí)行每個基本功能時系統(tǒng)內部出現(xiàn)的場景,以此推動細化工作的進行。在模擬一個場景的過程中,每當一個類開始“執(zhí)行”時,它的卡片就被拿出來討論,當“控制”傳送到另一個類時,注意力就從前一張卡片轉移到另一張上去了。不同的場景,包括例外和出錯狀況,都應逐一加以模擬。在這個過程中可以驗證已有的定義,不斷發(fā)現(xiàn)新的類、職責以及伙伴。在模擬不同的場景中會發(fā)現(xiàn)某些職責需要重新加以分配。這些都導致進一步的開發(fā)工作。57軟件工程6) 標識關系(結構)使用類圖,能夠表示對象之間的關系。關聯(lián)表示了兩個或多個類之間的關系。標識關聯(lián)的啟發(fā)式準則如下:檢查指示狀態(tài)的動詞或動詞短語;準確地命名關聯(lián)和角色;盡量使用常用的修飾詞標識出名字空間和關鍵屬性;消除可導出其他關聯(lián)的關聯(lián);在關聯(lián)集合穩(wěn)定之前不必關心重復性;過多的關聯(lián)使得一個模型不可讀;58軟件工程建立系統(tǒng)的包圖(主題)建立包圖是為了降低復雜性,目的是控制可見度及指引讀者的思路。對于面向對象分析模型,主題表示此模型的整體框架。可以是一個層次結構。通過對主題的識別,可以讓人們能夠比較清晰地了解大而復雜的模型。LibraryGUIDataBase59軟件工程

GUI:圖形用戶界面(GraphicalUserInterface,簡稱GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受。60軟件工程UML事物

分組事物package(包)包是把元素組織成組的機制,結構事物、行為事物甚至其他分組事物都可以放進包內。包不象構件(僅在運行時存在),它純粹是概念上的(即它僅在開發(fā)時存在)。用戶接口包業(yè)務對象包應用包61軟件工程建立邊界類的類圖標明類之間的關系,包括關聯(lián)、泛化等。messageWindowloginDialogreturnDialogborrowerDialogreserveDialogmainWindowfindTDialogborrowDialogfindBwrDialogTitleDialog62軟件工程建立實體類的類圖這些類與數(shù)據(jù)庫相關,為了操作方便,以它們?yōu)樽宇?,建立一個持久類(Persistent)作為它們的父類,共享與數(shù)據(jù)庫相關的操作。BookBorrowerReservationTitleLoanPersistent(fromDataBase)110..1*0..*0..*0..*0..*1163軟件工程建立邊界類與實體類之間關系的類圖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軟件工程標識屬性對象所保存的信息稱為它的屬性。類的屬性所描述的是狀態(tài)信息,每個實例的屬性值表達了該實例的狀態(tài)值。標識屬性的啟發(fā)性準則如下:每個對象至少需包含一個屬性;屬性取值必需適合對象類的所有實例;出現(xiàn)在泛化關系中的對象所繼承的屬性必須與泛化關系一致;系統(tǒng)的所有存儲數(shù)據(jù)必須定義為屬性;66軟件工程對象的導出屬性應當略去。例如,“年齡”是由屬性“出生年月”導出,它不能作為基本屬性存在。8)對每一對象的與狀態(tài)有關的行為建模對象收到消息后所能執(zhí)行的操作稱為它可提供的服務。對每個類的增加、修改、刪除、選擇等服務有時是隱含的,在圖中不標出,但實現(xiàn)類和對象時有定義。其它服務則必須顯式地在圖中畫出。首先標識在每個類中封裝的服務;67軟件工程再比較服務與類的屬性,驗證其一致性。所標識的類屬性,它必然關聯(lián)到某個服務,否則該屬性就形同虛設,永遠不可能被訪問;畫出對象之間的消息通信路徑,協(xié)調系統(tǒng)的行為。自底向上方法:找出每一對象在其生存周期中的所有狀態(tài)。每一狀態(tài)的改變都關聯(lián)到對象之間消息的傳遞。從對象著手,逐漸向上分析。自頂向下方法:一個對象必須識別系統(tǒng)中發(fā)生或出現(xiàn)的事件,產(chǎn)生發(fā)送給其他對象68軟件工程

的消息,由那些對象作出響應。所以對象應具有能夠接收、處理、產(chǎn)生每個消息的服務。它是從系統(tǒng)行為著手,然后逐漸分析到對象。使用順序圖或協(xié)作圖,標識和描述對象之間的相互通信,并進行運行走查。10)分析模型評審有關模型正確性的問題:對實體對象的分類,用戶是否能夠理解?抽象類是否對應到用戶層的定義?是否所有的描述均符合用戶的定義?69軟件工程是否所有的實體對象和邊界對象都使用了有實際含義的名詞短語進行了命名?是否所有的用例和控制對象都使用了有意義的動詞短語進行了命名?是否所有的錯誤用例都已經(jīng)描述和處理?有關模型完備性的問題:每一個對象是否有用例用到它?創(chuàng)建、修改或刪除該對象的用例是哪些?每一個屬性的類型是什么?它應進行修飾嗎?每一個關聯(lián)何時被用到?其重復性的選擇原則是什么?該關聯(lián)使用那一種連接?70軟件工程每一個控制對象是否具有必要的關聯(lián),以連接到用例中相關的其他對象?有關模型一致性的問題:是否有多個類或多個用例同名?名字相近的實體(如類、對象、屬性)能夠相互區(qū)別嗎?在同一泛化層次是否存在相似屬性和關聯(lián)的對象?有關模型可實現(xiàn)性的問題:在該系統(tǒng)中性能需求和可靠性需求是否滿足?在選定硬件上運行原型是否可以確定需求?71軟件工程5.3面向對象的設計面向對象設計分兩個階段進行:系統(tǒng)設計和對象設計。系統(tǒng)設計的主要活動是:標識系統(tǒng)目標:標識并區(qū)分各種質量屬性的優(yōu)先實現(xiàn)次序。子系統(tǒng)分解:根據(jù)用例和分析模型,將系統(tǒng)分解為一系列子系統(tǒng)。子系統(tǒng)細化:對各子系統(tǒng)不斷分解求精,直到所有的設計目標都能滿足為止。72軟件工程對象設計主要是追加一些與實現(xiàn)有關的對象,以及對已有對象進行細化。設計原則1:分治軟件系統(tǒng)分解為子系統(tǒng)分布式系統(tǒng)可以分解為客戶機和服務器;系統(tǒng)可以分解為一系列子系統(tǒng);子系統(tǒng)可以分解為一個或多個包;包可以分解為類;創(chuàng)建良好設計的原則73軟件工程類可以分解為方法。設計原則2:盡可能增加內聚不同內聚類型:優(yōu)先級從高到低排序1) 功能內聚:構件只執(zhí)行單一計算并返回結果,沒有副作用。如函數(shù)過程。2) 層內聚:相關服務放在一起,并有嚴格的層次結構,高層服務可訪問低層服務,反之不可。如分層結構。3) 通信內聚:訪問或操作同一數(shù)據(jù)的過程放在一個類中,這些過程可以互相通信。如某個74軟件工程 類設計。順序內聚:存在一系列過程,其中一個過程向另一個過程提供輸入,這些過程放在一起,形成順序內聚。如消息序列。5) 過程內聚:幾個一次調用的過程放在一起,形成過程內聚。如調用結構。時間內聚:程序執(zhí)行過程中同一階段內完成的操作放在一起,達到時間內聚。實用程序內聚:邏輯上不能納入其他內聚類型的相關實用程序放在一起,形成實用程序內聚。如可復用的過程或類。75軟件工程設計原則3:盡可能降低耦合模塊間存在相互依賴關系即為耦合。不同耦合類型從高向低排列有:內容耦合:一個構件修改另一個構件內部的數(shù)據(jù),應始終避免。公共耦合:一組構件使用全局數(shù)據(jù),就產(chǎn)生公共耦合。應通過封裝降低公共耦合??刂岂詈希阂粋€過程通過標志、開關或命令顯式地控制另一個過程的動作,就產(chǎn)生控制耦合。降低的方法是采用多態(tài)操作。76軟件工程標記耦合:在一個操作的參數(shù)表中將類作為參數(shù),就產(chǎn)生標記耦合。可以改用傳遞簡單變量或使用接口做參數(shù)降低耦合。數(shù)據(jù)耦合:在一個操作的參數(shù)表中用簡單變量或簡單的類(如string)作為參數(shù),就產(chǎn)生數(shù)據(jù)耦合。應通過減少參數(shù)個數(shù)降低耦合。例程調用耦合:一個例程(或類操作)調用另一個例程,就產(chǎn)生例程調用耦合。如果出現(xiàn)例程調用序列,降低的方法是編寫一個例程將這個調用序列封裝起來。77軟件工程類型使用耦合:類將實例變量或本地變量聲明為另一個類的實例,就產(chǎn)生類型(嵌套)使用耦合??蓪⒆兞康念愋吐暶鳛榘璨僮鞯淖钔ㄓ玫念惢蚪涌?。包含/引入耦合:一個構件引入(import)一個包時就產(chǎn)生引入耦合,一個構件包含(include)另一個構件時,就產(chǎn)生包含耦合。外部耦合:模塊對外部系統(tǒng),如操作系統(tǒng)、共享庫或硬件有依賴關系時就產(chǎn)生外部耦合??赏ㄟ^信息隱蔽減少這種依賴關系。78軟件工程設計原則4:盡可能提高抽象層次設計應隱藏或推遲考慮細節(jié)以降低復雜性。類是包含過程抽象的數(shù)據(jù)抽象。使用泛化關系(父類)和接口,可進一步提高抽象層次。類中公有操作越少,抽象程度越高。類中所有變量都是私有的,抽象程度達到最高。抽象可確保在設計時不必關心不必要的細節(jié),能把握問題的本質并做出重要的決策。79軟件工程設計原則5:盡可能提高可復用性可以在算法、類、過程、框架和完整應用程序的級別上創(chuàng)建可復用性。復用構件的機制包括過程調用和繼承父類。設計原則6:盡可能復用已有的設計和代碼復用已有的設計是對可復用性設計的補充。通過復用可從以往對可復用構件的投資中獲益。設計原則7:靈活性設計積極預測將來可能在實現(xiàn)和功能上的變化,并80軟件工程

采取相應措施。在設計中引入靈活性的方法有:降低耦合并提高內聚(易于提高替換能力)建立抽象(創(chuàng)建有多態(tài)操作的接口和父類)不要將代碼寫死(消除代碼中的常數(shù))拋出異常(由操作的調用者處理異常)使用并創(chuàng)建可復用的代碼設計原則8:預計過期積極預測將來可能在技術和運行環(huán)境上的變化,并為此采取相應措施。81軟件工程在設計中應遵循的預計過期的規(guī)則有:避免使用早期發(fā)布的技術避免使用針對特定環(huán)境的軟件庫避免使用軟件庫中未編檔的或很少使用的功能避免使用小公司或可能不提供長期支持的公司提供的可復用構件或特殊硬件使用眾多廠商支持的標準語言和技術設計原則9:可移植性設計可移植性設計的主要目標是讓軟件在盡可能多82軟件工程

的平臺上運行。實現(xiàn)可移植性的規(guī)則有:避免使用特定環(huán)境的專有功能使用不依賴特定平臺的程序設計語言小心使用可能依賴某一平臺的類庫了解其他語言可能依賴特殊硬件結構的功能和文本文件的差異設計原則10:可測試性設計設計時采取措施使得測試易于進行。可測試性設計的最重要的方法是保證代碼的所有功能都能脫離圖形用戶界面執(zhí)行。83軟件工程設計原則11:防御性設計為提高可靠性,應確保不引入任何缺陷,能夠處理其他代碼不適當使用構件引起的問題。按契約設計是防御性設計技術,其核心思想:被調用操作為正常執(zhí)行必須滿足的前置條件(precondition):調用操作在調用一個操作時有責任確保該操作的前置條件成立。被調用操作正常執(zhí)行所得到的結果即為后置條件(postcongdition):要求被調用操作在返回前有責任保證這些后置條件成立。84軟件工程被調用操作在執(zhí)行時確保不會被修改的不變量(invariant)。前置條件、后置條件和不變式都是布爾表達式,其計算結果為假,表示有錯誤發(fā)生??梢允褂脭嘌詸C制。在重要構件的邊界(如層)應始終保留嚴格的斷言檢測。85軟件工程系統(tǒng)設計的主要活動是進行子系統(tǒng)分解,并在此基礎上定義子系統(tǒng)/構件之間的接口。為此,首先根據(jù)子系統(tǒng)可提供的服務來定義子系統(tǒng)(以后在對象設計中再根據(jù)子系統(tǒng)能提供的操作來定義子系統(tǒng)的接口),然后對子系統(tǒng)細化,建立層次結構。要求對子系統(tǒng)的分解盡可能做到高內聚、低耦合。5.4.1系統(tǒng)設計的概念5.4系統(tǒng)設計86軟件工程1) 子系統(tǒng)和類在應用領域,為降低其復雜性,用類進行標識。在解答空間,為降低其復雜性,將系統(tǒng)分解為多個子系統(tǒng),這些子系統(tǒng)又由若干表示解答空間的類構成。還可以把子系統(tǒng)分解為更小的子系統(tǒng)。系統(tǒng)部分子系統(tǒng)類**87軟件工程在Java和Module2中顯式地提供了子系統(tǒng)的構造。在Java中采用了“包”,在Modula2中采用了“模塊”。C++沒有顯式地提供子系統(tǒng)的構造,可按問題需要對類分組。2)

服務和子系統(tǒng)接口一個服務是一組有公共目的的相關操作。而子系統(tǒng)的特征是由該子系統(tǒng)提供給其他子系統(tǒng)的服務來刻畫。供其他子系統(tǒng)調用的某個子系統(tǒng)的操作集合就是子系統(tǒng)的接口。子系統(tǒng)的接口包括操作名、操作參數(shù)類型及返回值。88軟件工程系統(tǒng)設計注重每個子系統(tǒng)提供服務的定義,即枚舉所有的操作、操作參數(shù)和行為。當編寫子系統(tǒng)接口的文檔時,不應涉及子系統(tǒng)實現(xiàn)的細節(jié),其目的是減少子系統(tǒng)之間的依賴性,希望一旦需要修改子系統(tǒng)實現(xiàn)時,降低由于子系統(tǒng)變更而造成的影響。3)

子系統(tǒng)分層和劃分子系統(tǒng)分層的目的是建立系統(tǒng)的層次結構。每一層僅依賴于它下一層提供的服務,而對它的上一層可以一無所知。如圖,是一個三層的系統(tǒng)結構。89軟件工程在層次結構中,子系統(tǒng)A、B、E構成了一個稱之為垂直切片的系統(tǒng)分解子集。而D、G則不能。如果每一層只能訪問與其相鄰的下一層,則稱之為封閉體系結構;如果每一層還可訪問E:子系統(tǒng)F:子系統(tǒng)G:子系統(tǒng)B:子系統(tǒng)C:子系統(tǒng)D:子系統(tǒng)A:子系統(tǒng)90軟件工程比其相鄰下一層更低的層次,則稱之為開放體系結構。封閉體系結構的例子就是開放系統(tǒng)互聯(lián)參考模型(OSI模型),它由七層構成。每一層負責執(zhí)行一個已預先定義好的協(xié)議功能。每一層都為其上一層提供服務,使用其低層的服務。數(shù)據(jù)鏈層物理層網(wǎng)絡層傳輸層會話層表示層應用層抽象層次比特流數(shù)據(jù)幀包消息接口連接格式91軟件工程封閉體系結構的子系統(tǒng)之間滿足低耦合,但產(chǎn)生速度和存儲管理的問題,會導致某些非功能屬性難以滿足。開放體系結構的一個例子是Java的Swing用戶接口包。它允許人們繞過高層直接訪問低層接口以克服性能瓶頸。AWTXlibSwingApplication92軟件工程劃分是將系統(tǒng)分解為獨立的子系統(tǒng),每個子系統(tǒng)負責某一類服務。例如,一個車輛管理所的管理信息系統(tǒng)分為車管所組織機構管理、車輛管理、車主管理和法律事件管理等4個子系統(tǒng)。每一個子系統(tǒng)對其他子系統(tǒng)的依賴度很低。分解子系統(tǒng)時,首先進行劃分,將一個系統(tǒng)分成幾個高層的子系統(tǒng),每個子系統(tǒng)負責一種功能,或運行在某特定的硬件節(jié)點上。再將各子系統(tǒng)分層處理,分解成層次更低的小子系統(tǒng)。過度分解會導致子系統(tǒng)之間接口的復雜化。93軟件工程5.4.2系統(tǒng)設計的目標明確設計目標,是系統(tǒng)設計的第一步。有一些設計目標是從用戶那里得到,更多的設計目標是從非功能需求或應用領域中抽取出來。設計目標可以從以下5組設計準則中選擇。其中性能、可靠性和最終用戶準則往往從需求中明確地獲取,也可以從應用領域中獲??;而成本和維護準則由客戶和供應商提出。將設計目標清楚地陳述,可以根據(jù)設計準則,做出重要的設計決策。94軟件工程性能準則設計準則定義響應時間用戶提交請求后多長時間可得到系統(tǒng)的確認吞吐量在一段固定時間內系統(tǒng)能夠處理多少任務內存系統(tǒng)運行需要占用多少內存空間可靠性準則設計準則定義魯棒性面對非法用戶進入后系統(tǒng)的存活能力可靠性明確期待的行為與觀察到行為之間的差別可用性系統(tǒng)能夠用來完成正常任務的時間百分比容錯性在出錯條件下系統(tǒng)的操作能力保密性系統(tǒng)忍受惡意攻擊的能力安全性再出現(xiàn)錯誤時系統(tǒng)避免威脅到人類生命的能力95軟件工程成本準則設計準則定義效用系統(tǒng)支持用戶工作的困難程度易用性用戶使用系統(tǒng)的困難程度最終用戶準則設計準則定義開發(fā)成本開發(fā)系統(tǒng)初始版本的成本部署成本安裝系統(tǒng)并培訓用戶的成本升級成本從原有系統(tǒng)中導出數(shù)據(jù)的成本,此準則導致了向后兼容性需求維護成本需要進行錯誤修復和增強系統(tǒng)的成本管理成本需要對系統(tǒng)進行管理的成本96軟件工程維護準則需求的可追蹤性將代碼映射到特定需求上的困難程度設計準則定義可擴展性向系統(tǒng)中添加功能或新類的困難程度可修改性更改系統(tǒng)功能的困難程度可適應性將系統(tǒng)發(fā)送到不同應用領域的困難程度可移植性將系統(tǒng)移植到不同平臺的困難程度可讀性通過閱讀源代碼來理解系統(tǒng)的困難程度97軟件工程在定義設計目標時,希望開發(fā)一個既安全可靠,又廉價的系統(tǒng)是不現(xiàn)實的,因此開發(fā)人員應當對所有可能的設計目標進行權衡,對必須的設計目標賦予優(yōu)先級別。一旦有了清晰的設計目標,就可以開始系統(tǒng)的初始分解。權衡基本原則空間與速度如果軟件的響應時間或吞吐量不滿足需求,則可以使用更多的存儲空間來加快軟件的執(zhí)行速度。如果軟件太大,則可以犧牲一定的速度對數(shù)據(jù)進行壓縮處理。98軟件工程權衡基本原則交付時間與功能如果開發(fā)進度滯后于計劃,則按時交付的功能可以少于預定交付的功能,或推遲交付所有功能。契約軟件通常更強調功能,而商業(yè)外購軟件則更強調交付日期。交付時間與質量如果測試滯后于計劃,則可以按時交付帶有錯誤的軟件,或推遲交付帶有少量錯誤的軟件。交付時間與人員配置如果開發(fā)進度滯后于計劃,可以在項目中增加資源以提高生產(chǎn)率。在多數(shù)情況下,這種選擇只適用于早期項目。新的人員要經(jīng)過培訓方可使用。這樣中途增加資源通常會降低生產(chǎn)率,還會增加軟件開發(fā)的成本。99軟件工程5.4.3子系統(tǒng)分解軟件體系結構設計的第一步是做子系統(tǒng)分解,從而搭建軟件體系結構的架構。在系統(tǒng)設計中尋找子系統(tǒng),與在分析過程中尋找對象的情況類似。在面向對象分析中介紹的Abbotts啟發(fā)式準則,同樣適合于子系統(tǒng)的識別。初始子系統(tǒng)應該從需求的功能模型(用例模型)中導出。這方面有多種分解方案。例如,Coad&Yourdon基于MVC模型,將系統(tǒng)大致分為問題領域、人機交互、任務管理、數(shù)據(jù)管理等4個子系統(tǒng)。100軟件工程5.4.4問題領域子系統(tǒng)首先復制分析模型為設計模型中的問題領域部分,然后根據(jù)設計目標,對該部分進行修改??蓮陀玫脑O計/編程方面的類

根據(jù)需要,從類庫選擇可復用類、商業(yè)外購構件和遺留構件,把它們增加到問題解決方案中去。標明復用類或構件中不需要的屬性和操作。增加從復用類(構件)到分析類之間的泛化關系,繼承復用類(構件)的屬性和方法。101軟件工程把分析類中因繼承復用類(構件)而成為多余的屬性和操作標出。修改分析類的結構和連接。加入泛化類以建立類間協(xié)議有時某些分析類要求一組類似的服務。此時,以這些分析類作為子類,定義一個父類。該父類定義為所有這些子類共用的一組服務名,作為公共的協(xié)議,用來與數(shù)據(jù)管理或其他外部系統(tǒng)部件通信。這些服務都是虛函數(shù)。在各個子類中定義其實現(xiàn)。對泛化關系進行調整102軟件工程在分析模型中可能包括有多繼承關系,但實現(xiàn)時使用的程序設計語言可能只有單繼承,甚至沒有繼承機制,這樣就需變更問題領域部分中類的層次結構。針對單繼承語言的調整

把子類對象看做是父類對象所扮演的角色,通過關聯(lián)關系把多繼承的層次結構轉換為單繼承的層次結構。把多繼承的層次結構平鋪,成為單繼承的層次結構。在這種情況下,有些屬性或操作在同層的子類中會重復出現(xiàn)。103軟件工程針對無繼承語言的調整當使用無繼承的編程語言時,必須把具有泛化關系的類層次平鋪開,成為一組對象。多繼承關系通過關聯(lián)關系分解多繼承平鋪為單繼承人醫(yī)生教授醫(yī)學教授人角色醫(yī)生教授1*人醫(yī)生教授醫(yī)學教授104軟件工程修改設計以提高性能提高執(zhí)行效率是系統(tǒng)設計的主要目標之一。有時必須改變問題領域的結構以提高效率。如果類之間經(jīng)常需要傳送大量消息,可合并相關的類,使得通信成為對象內的通信,而不是對象之間的通信,或者使用全局數(shù)據(jù)作用域,打破封裝的原則,以減少消息傳遞引起的速度損失。增加某些屬性到原來的類中,或增加低層的類,以保存暫時結果,避免每次都要重復計算造成速度損失。105軟件工程為提高性能,在對分析模型進行大規(guī)模的改動之前,應考慮下面一些問題:不要認為象C++之類的OOPL就一定效率不高。事實表明,非OOPL的緊湊代碼的效率比OOPL的效率高近10倍,但用非OOPL編程會令程序員非常疲勞,容易出錯。提高一個現(xiàn)存系統(tǒng)的工作效率比重新設計一個高效的系統(tǒng)要容易。一開始應當建立一個原始的簡單的設計,實現(xiàn)和調試不會太困難。如果對設計有性能要求,只需加入少量的工作就可以了。106軟件工程通常系統(tǒng)80%的開銷都集中在20%的代碼段上。與其為了盡量處處節(jié)省系統(tǒng)開銷而破壞完善的系統(tǒng)結構,還不如找出系統(tǒng)開銷最集中的地方,只對那部分做優(yōu)化。預測軟件開銷集中在什么地方是困難的。進行優(yōu)化最有效的方法是在系統(tǒng)運行時使用性能監(jiān)測工具對系統(tǒng)進行觀測。一些像繼承、動態(tài)綁定、消息傳遞等處理雖然看起來簡單,但需要大量的系統(tǒng)開銷。在代碼復雜性與運行的低效之間沒有相關性。提高性能最好的方法是采用好的解決方案,而不是拼命地去節(jié)省幾個微秒、幾個字節(jié)。107軟件工程電梯控制系統(tǒng)ECS的問題領域子系統(tǒng)決定使用一個中央控制器(電梯控制器)控制和協(xié)調電梯的所有動作,包括解決電梯每到一個樓層減速問題。增加“電梯監(jiān)視器”,用一個獨立的對象來執(zhí)行監(jiān)測功能(性能、安全性等)。在提交給實現(xiàn)者的規(guī)格說明中,將這個類放在一個與ECS的主處理器分離的處理器上.每個類增加服務SelfTest來增強每個類的性能。在運行時執(zhí)行有必要驗證其功能的操作,并向電梯監(jiān)視器報告。108軟件工程111111*1111111..*1電梯事件電梯調度器電梯控制器電梯監(jiān)視器到達面板目的地面板面板樓層目的地事件召喚事件到達事件召喚面板電梯馬達超載傳感器電梯1..1..*109軟件工程5.4.5人機交互子系統(tǒng)設計一個良好的用戶界面是成功地實現(xiàn)一個軟件系統(tǒng)的關鍵。在開發(fā)分析模型時,有意避開了如窗口、屏幕等依賴于實現(xiàn)的細節(jié),目的是讓系統(tǒng)規(guī)格說明獨立于實現(xiàn)。而人機交互子系統(tǒng)在系統(tǒng)行為和用戶交互的實現(xiàn)之間架起了一座橋梁。例如,可用GUI實現(xiàn)系統(tǒng)的用戶界面。但當用戶提出來改用語音對答式交互時,應當使這種改變盡可能容易。為此,只需將GUI式人機交互子系統(tǒng)替換成語音對答式人機交互子系統(tǒng)即可,系統(tǒng)其它部分都應保持不變。*110軟件工程例如,某雜志發(fā)行系統(tǒng)SBSS的人機接口設計用戶界面SBSS的用戶界面是一個傳統(tǒng)的GUI。其中有許多窗口對象。但在用戶與系統(tǒng)進行交互期間,只能有一個窗口呈現(xiàn)在用戶面前。

通過使用聚合關系,窗口對象可以進一步分解為各種文本域、選擇按鈕、圖符等。如果使用某種GUI構筑軟件包,只需對軟件包輸入合適的參數(shù),該軟件包就能提供所有的文本域、選擇按鈕、圖符等,將這些細節(jié)作為窗口的屬性就可以了。111軟件工程訂閱項目窗口續(xù)訂項目窗口訂閱管理選擇按鈕編輯管理選擇按鈕訂閱管理窗口編輯管理窗口特殊訂單窗口文章窗口作者窗口刊物窗口付款項目窗口SBSS窗口零售價格追蹤基本訂戶追蹤免費贈閱查詢窗口112軟件工程只要描述清楚所需要的窗口,這些窗口的導航細節(jié),詳細的窗口成分,我們就可以用現(xiàn)有的技術和工具來實現(xiàn)它們。其他描述人機交互模型的工具在描述復雜的菜單系統(tǒng)(GUI窗口)的拓撲結構時,常使用狀態(tài)圖或菜單樹。用于SBSS的單層狀態(tài)圖:每一個狀態(tài)是GUI的一個窗口每一個遷移代表了窗口之間的切換與每個遷移相關聯(lián)的是一個條件/動作對條件代表了用戶選擇,它導致遷移的發(fā)生動作代表了遷移發(fā)生時產(chǎn)生的請求113軟件工程SBSS訂閱項目菜單特殊訂單窗口幫助窗口編輯管理窗口訂閱管理窗口ALT+F,X返回起始菜單ALT+S訂閱管理ALT+F,X返回起始菜單ALT+D特殊訂單ALT+H幫助工具ALT+F,X返回起始菜單ALT+F,X

返回起始菜單ALT+S編輯管理114軟件工程菜單樹可以讓用戶直觀地看到如何在界面上巡航。用菜單樹表示人機交互的基本結構,有助于全局用戶界面的可視化。例如,可以了解有多少種不同的方式能夠訪問“地址”的窗口。用戶界面可盡量采用清真 寺式的結構:在界面的上 層,希望扇出大于扇入, 表明用戶可以有多個可供 選擇的選項。在界面的低 層,希望扇入大于扇出, 表明一個單獨的界面可以 被多個雙親使用。115軟件工程SBSS訂閱系統(tǒng)訂閱管理窗口訂閱事務窗口地址窗口事務認定窗口付款事項窗口查詢窗口查詢顯示窗口(a)查詢顯示窗口(b)查詢顯示窗口(c)查詢顯示窗口(d)查詢顯示窗口(e)編輯管理窗口作者編輯/顯示窗口文章編輯/顯示窗口刊物編輯/顯示窗口地址窗口事件掛起窗口開始菜單/幫助窗口特殊訂單窗口地址窗口付款事項窗口菜單樹116軟件工程人機交互子系統(tǒng)的設計過程1) 用戶分類按技能層次分類:外行/初學者/熟練者/專家按組織層次分類:行政人員/管理人員/專業(yè)技術人員/其它辦事員按職能分類:客戶/職員描述人及其任務的腳本

對以上定義的每一類用戶,列出對以下問題做出的考慮:誰、目的、特點、成功的關鍵因素、熟117軟件工程

練程度以及任務腳本。 在OOATOOLTM中有一個例子:誰:分析員目的:要求一個工具來輔助分析工作(擺脫繁重的畫圖和檢查圖的工作)。特點:年齡:42歲;教育水平:大學;限制:不要微型打印,小于9個點的打印太小。成功的關鍵因素:工具應能使分析工作順利進行;工具不應與分析工作沖突;工具應能捕獲假設和思想,能適時做出折衷;應能及時給出模型各個部分的文檔。118軟件工程熟練程度:專家。任務腳本:主腳本:識別“核心的”類和對象;識別“核心”結構;在發(fā)現(xiàn)了新的屬性或操作時隨時都可以加進模型中去。

檢驗模型:打印模型及其全部文檔。3) 設計命令層119軟件工程研究現(xiàn)行的人機交互活動的內容和準則。這些準則可以是非形式的,如“輸入時眼睛不易疲勞”,也可以是正式規(guī)定的;建立一個初始的命令層。可以有多種形式,如一系列MenuScreens、或一個MenuBar、或一系列Icons.細化命令層??紤]以下幾個問題。排列命令層次。把使用最頻繁的操作放在前面;按照用戶工作步驟排列。通過逐步分解,找到整體-局部模式,以幫助在命令層中對操作分塊。120軟件工程根據(jù)人們短期記憶的“7±2”或“每次記憶3塊/每塊3項”的特點,把菜單深度盡量限制在三層之內。減少操作步驟:把點取、拖動和鍵盤操作減到最少。設計詳細的交互用戶界面設計有若干原則,包括:一致性:采用一致的術語、一致的步驟和一致的活動。操作步驟少:減少敲鍵和鼠標點取的次數(shù),減少完成某件事所需的下拉菜單的距離。121軟件工程不要“啞播放”:每當用戶等待系統(tǒng)完成一個活動時,要給出一些反饋信息。Undo:在操作出現(xiàn)錯誤時,要恢復或部分恢復原來的狀態(tài)。減少人腦的記憶負擔:不應在一個窗口使用在另一個窗口中記憶或寫下的信息;需要人按特定次序記憶的東西應組織得容易記憶。學習的時間和效果:提供聯(lián)機的幫助信息。趣味性:盡量采取圖形界面,符合人類習慣。122軟件工程5) 繼續(xù)做原型開發(fā)用戶界面原型,可對提交的人機交互活動進行體驗、實地操作,并精煉成一致的模式。使用快速原型工具或應用構造器,對各種命令方式,如菜單、彈出、填充以及快捷命令,做出原型讓用戶使用,通過用戶反饋、修改、演示的迭代,使界面越來越有效。設計人機交互類對窗口進一步細化,通常包括:類窗口、條件窗口、檢查窗口、文檔窗口、畫圖窗口、過濾123軟件工程

器窗口、模型控制窗口、運行策略窗口、模板窗口等。設計人機交互類,首先從組織窗口和部件的用戶界面界面的設計開始。每個類包括窗口的菜單條、下拉菜單、彈出菜單的定義。還要定義用于創(chuàng)建菜單、加亮選擇項、調用相應響應的操作。根據(jù)圖形用戶界面進行設計建立圖形窗口,確定字型、坐標系統(tǒng)。建立事件響應機制。124軟件工程設計人機交互子系統(tǒng)的啟發(fā)式準則每一個組織和用戶都有其文化背景。可能不僅僅意味著語言、傳統(tǒng)和習慣。由于所建立的系統(tǒng)面對的是用戶,因此,其界面必須必須與用戶的文化背景相一致。 一種適應用戶文化背景的有效方法是“可視化表示”。目的是讓計算機界面適應用戶。例如有一個客戶開發(fā)了一個財務管理軟件,它以政府規(guī)定的各種計算方法和表格作為其可視化表示。對于這樣的用戶界面,學習和掌握它非常簡單和容易。125軟件工程使用用戶開發(fā)的場景或使用事例來驅動界面。為避免用戶界面太復雜,先觀察用戶是如何完成其工作的。在執(zhí)行一個特定的工作時,用戶界面應能告訴用戶下面將做什么。應當首先定義一個高層的用戶界面和一些詳細的對話框,然后定義人機交互對象,從而完成設計。需要建立原型對所有人機交互界面設計進行嚴格的檢驗。人機交互子系統(tǒng)的設計應從建立分析模型時就開始著手。在開發(fā)系統(tǒng)的人機交互子系統(tǒng)時,應允許用戶對其試用。126軟件工程多數(shù)用戶都不會從頭開始設計人機交互類。事實上,使用各種所謂的可視化開發(fā)環(huán)境,如Delphi,PowerBuilder、VasualBasic、VasualC++、BorlandC++builder等,開發(fā)人員可能連人機交互子系統(tǒng)都不要。直接使用這些工具提供的控件,就可以作出用戶界面。 用戶可以不需要HIC,但不能免去用戶界面的設計。使用菜單樹或狀態(tài),連同某些原型,來說明用戶界面的設計思想。127軟件工程5.4.6任務管理子系統(tǒng)在應用中,每一個對象中的每一個服務最終都要被分配給某一個計算機任務。這樣一些任務可以被看作是一些獨立的可調度的實體。通常任務管理子系統(tǒng)的任務為:將子系統(tǒng)映射到構件和處理器上標識并存儲持久性數(shù)據(jù)提供訪問控制設計全局控制流通常利用UML構件圖和部署圖展示。128軟件工程129軟件工程構件圖(Componentdiagram)構件圖展現(xiàn)了一組構件之間的組織和依賴。構件圖專注于系統(tǒng)的靜態(tài)實現(xiàn)視圖。它與類圖相關,通常把構件映射為一個或多個類、接口或協(xié)作。一個構件可能是:

部署構件:如動態(tài)鏈接庫(DLL)、二進制可執(zhí)行構件、ActiveX控件、JavaBeans等,是形成可執(zhí)行文件的基礎。工作產(chǎn)品構件:如數(shù)據(jù)文件或源代碼。是部署構件的來源。執(zhí)行構件:可運行的構件130軟件工程構件圖的事例CourseCourseOfferingStudentProfessorCourse.dllPeople.dllCourseUserRegister.exeBilling.exeBillingSystem131軟件工程接口(interface)接口是一個類或構件提供給其他類或構件的一組操作。類的變體,其變體關鍵字是<<interface>>。每個接口要指定一個名字,以區(qū)分不同的接口。接口的名字就是類的名字,用字符串表示。構件的接口有兩種類型:導入接口(importinterface):訪問服務的構件使用導入接口;導出接口(exportinterface):由提供操作的構件提供。132軟件工程部署圖(DeploymentDiagram)部署圖展現(xiàn)了在軟件過程中存在的運行處理節(jié)點以及其中的構件的配置。部署圖給出了體系結構的靜態(tài)實施視圖。它描述系統(tǒng)硬件的物理拓撲結構(包括網(wǎng)絡布局和構件在網(wǎng)絡上的位置),以及在此結構上執(zhí)行的軟件(即運行時軟構件在節(jié)點中的分布情況)。它與構件圖相關,通常一個節(jié)點包含一個或多個構件。133軟件工程部署圖的事例RegistrationDatabaseDormLibraryMainBuilding主排課數(shù)據(jù)庫宿舍圖書館注冊134軟件工程(1)將子系統(tǒng)映射到構件和處理器選擇硬件配置和平臺許多系統(tǒng)運行在網(wǎng)絡上。使用多臺計算機,可以滿足高性能計算需求和多個互聯(lián)的分布式用戶需求。確保將子系統(tǒng)分布到多臺計算機上,設計基礎設施來支持子系統(tǒng)之間的通信。選擇硬件配置包括選擇虛擬機,系統(tǒng)將在其上運行。虛擬機包括操作系統(tǒng)和所需軟件構件,如數(shù)據(jù)庫管理系統(tǒng)和通信包。構件提供的功能越多,所需的開發(fā)工作量越少。虛擬機的選擇還受客戶約束和成本限制影響。135軟件工程例如,在車輛路程規(guī)劃系統(tǒng)中,規(guī)劃子系統(tǒng)和路由子系統(tǒng)運行在兩個不同的節(jié)點上。硬件分配的情況如下:將對象和子系統(tǒng)分配到節(jié)點上:OnBoardComputerRoutingsubsystem:WebServerPlanningsubsystem將路由子系統(tǒng)分配到車載計算機上規(guī)劃子系統(tǒng)分配到基于Web的網(wǎng)絡服務器上136軟件工程將對象和功能分配到各個節(jié)點上時,為了在節(jié)點之間傳輸數(shù)據(jù),需對新加入的對象和子系統(tǒng)進行標識。例如,在車輛路程規(guī)劃系統(tǒng)中,路由子系統(tǒng)和規(guī)劃子系統(tǒng)共享了行程類、目的地類、交差口類、路段類和方向類的實例,它們需采用一些通信協(xié)議,可通過無線調制解調器進行通信,可創(chuàng)建一個通信子系統(tǒng)來支持該通信。旅途規(guī)劃的內容分布在路由和規(guī)劃子系統(tǒng)中,在路由子系統(tǒng)中創(chuàng)建路段代理類和行程代理類為規(guī)劃子系統(tǒng)中的路段和行程提供代理服務。137軟件工程當司機需要重新規(guī)劃行程路線時,行程類對象會向通信子系統(tǒng)發(fā)出請求,檢索規(guī)劃子系統(tǒng)中有關路段的信息。最后,通信子系統(tǒng)將一個完整的旅途線路從規(guī)劃子系統(tǒng)轉移到路由子系統(tǒng)中。通信子系統(tǒng)消息連接規(guī)劃子系統(tǒng)規(guī)劃服務行程路口方向目的地行程段路由子系統(tǒng)線路助手位置行程代理路段代理138軟件工程將某一子系統(tǒng)分配到硬件節(jié)點上,意味著能夠將功能和處理能力分配到最需要這些子系統(tǒng)的地方。隨之而來的問題就是子系統(tǒng)中的數(shù)據(jù)存儲、數(shù)據(jù)轉移、數(shù)據(jù)復制和同步數(shù)據(jù)等問題。持久性數(shù)據(jù)的生存周期要長于系統(tǒng)的一次執(zhí)行周期。例如,在圖書管理系統(tǒng)中將借閱者借閱的圖書信息和借閱者信息記入借閱記錄并存儲在數(shù)據(jù)庫相應文件中,該文件以后可以再次打開。數(shù)據(jù)在系統(tǒng)中的存儲位置和存儲方式將會影響到(2)標識并存儲持久性數(shù)據(jù)139軟件工程 系統(tǒng)的分解。特定數(shù)據(jù)庫管理系統(tǒng)的選擇也會影響全局控制策略和并發(fā)管理。例如,在車輛路程規(guī)劃系統(tǒng)中,把當前行程信息存儲在磁盤文件中是最簡單、最有效的。為此,在系統(tǒng)中添加行程文件存儲子系統(tǒng)和映射數(shù)據(jù)庫存儲子系統(tǒng)。前者負責將旅程路線信息存儲到車載計算機的文件中。該文件只支持整個旅程數(shù)據(jù)的快速存儲和載入,以在車輛故障恢復時使用。后者負責將地圖和旅程數(shù)據(jù)存儲到規(guī)劃子系統(tǒng)的數(shù)據(jù)庫中。該子系統(tǒng)支持多個并發(fā)的的司機和規(guī)劃代理。140軟件工程標識持久性對象。候選的持久性數(shù)據(jù)是從分析過程中標識出的實體類對象,以及邊界類對象。通常可以在系統(tǒng)關閉后,檢查所有必須保存的類,以標識出必須長久保存的持久性對象。這里的系統(tǒng)關閉可以是受控關閉,也可以是系統(tǒng)崩潰。行程文件存儲子系統(tǒng)通信子系統(tǒng)映射數(shù)據(jù)庫存儲子系統(tǒng)路由子系統(tǒng)規(guī)劃子系統(tǒng)141軟件工程選擇存儲管理策略。決定如何存儲這些持久性對象的決策常常受到如下非功能屬性的制約:對象能否快速檢索出來是否必須執(zhí)行復雜的查詢來檢索這些對象這些對象是否需要大量的內存和磁盤空間在多用戶系統(tǒng)中,不同參與者對不同的功能和數(shù)據(jù)可有不同的訪問權限。例如,一個普通用戶參與者可能僅能訪問其所創(chuàng)建的數(shù)據(jù),而一個系統(tǒng)管理員參與者對系統(tǒng)數(shù)據(jù)(3)提供訪問控制142軟件工程 和所有用戶數(shù)據(jù)具有無限的訪問權限。在需求獲取和分析建模過程中,將不同用例關聯(lián)到不同的參與者;在系統(tǒng)設計過程中,定義共享對象、參與者通過訪問控制進行訪問的權限、數(shù)據(jù)加密的方式等。例如,在車輛行程規(guī)劃系統(tǒng)中,在同一數(shù)據(jù)庫中存儲地圖信息和行程信息會引發(fā)安全問題,必須確保行程僅被發(fā)送給創(chuàng)建這些行程的司機。為此,可將司機類與行程類關聯(lián)起來。規(guī)劃子系統(tǒng)負責在發(fā)送行程之前對司機進行識別,最后根據(jù)兩子系統(tǒng)之間的通信信息是否加密進行決策。143軟件工程可以用訪問矩陣對類的訪問控制進行建模:矩陣的行列出系統(tǒng)中的參與者矩陣的列列出要進行控制的類矩陣元素列出參與者在類實例上能執(zhí)行的一組操作,也稱為訪問權。訪問矩陣定義了靜態(tài)訪問控制。還可以采用代理模式定義動態(tài)訪問控制。例如,可以為每一個被訪問的類實例創(chuàng)建一個代理對象,由代理對象檢查訪問者的訪問權限。如果訪問者具有相應的訪問權限,則訪問可執(zhí)行,否則,訪問失敗。144軟件工程(4)全局控制流設計典型的控制流機制有三種:過程驅動控制事件驅動控制線程機制一旦選擇了控制流機制,就可以采用一個或多個控制對象來實現(xiàn)它??刂茖ο蟮淖饔檬怯涗浲獠渴录鎯ζ溆嘘P狀態(tài),給出接口上的操作調用、與外部事件相關聯(lián)的實體對象操作調用的正確順序。145軟件工程5.4.7數(shù)據(jù)管理子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)提供了在數(shù)據(jù)管理系統(tǒng)中存儲和檢索對象的基本結構,包括對持久性數(shù)據(jù)的訪問和管理。它分離了數(shù)據(jù)管理機制所關心的事項,包括文件、關系型數(shù)據(jù)庫管理系統(tǒng)或面向對象數(shù)據(jù)庫管理系統(tǒng)等。數(shù)據(jù)管理的方法主要有3種:文件管理、關系數(shù)據(jù)庫管理和面向對象數(shù)據(jù)庫管理。下面給出選擇數(shù)據(jù)管理方法的規(guī)則。146軟件工程類型選擇規(guī)則(1)存在大量的數(shù)據(jù)(如圖像)文件(2)存在臨時數(shù)據(jù)(如內存文件)(3)存在低密度信息(如檔案文件、歷史日志)關系型或(1)存在并發(fā)訪問面向對象(2)訪問比較合適的細節(jié)層數(shù)據(jù)庫(3)對相同數(shù)據(jù)的多重平臺或應用關系型(1)屬性上的復雜查詢數(shù)據(jù)庫(2)存在大數(shù)據(jù)量面向對象(1)為檢索數(shù)據(jù)擴展關聯(lián)的使用數(shù)據(jù)庫(2)中等規(guī)模的數(shù)據(jù)集(3)對象之間的不規(guī)則關聯(lián)147軟件工程文件是一種由操作系統(tǒng)提供的數(shù)據(jù)組織,應用程序以字符流的形式存儲其數(shù)據(jù)。應用程序可定義用什么方式、在什么時間來檢索這些對象。但文件使用時必須考慮很多問題,如并發(fā)訪問和系統(tǒng)崩潰情況下的數(shù)據(jù)丟失問題。關系數(shù)據(jù)庫管理系統(tǒng)可以遵照預先定義好的結構類型進行存儲。它使用若干表格來管理數(shù)據(jù),表中每一列代表一個屬性,每一行代表一個屬性元組值的數(shù)據(jù)元素。這種類型的數(shù)據(jù)庫提供了并發(fā)管理、訪問控制和故障恢復服務,但對非結構化數(shù)據(jù)(如圖像、自然語言文本),速度較慢。148軟件工程面向對象數(shù)據(jù)庫管理系統(tǒng)提

溫馨提示

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

評論

0/150

提交評論