




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、面向對象分析與設計面向對象分析與設計陳少波編著陳少波編著年秋年秋不謀萬世者,不足以謀一時;不謀萬世者,不足以謀一時;不謀全局者,不足以謀一域。不謀全局者,不足以謀一域。1第第1 1章章 為問題域建概念模型為問題域建概念模型1.1 1.1 從需求出發從需求出發1.2 1.2 建立一個概念模型建立一個概念模型 1.2.1 1.2.1 類及類的表示類及類的表示 1.2.2 1.2.2 發現類發現類 1.2.2.1 1.2.2.1 找到備選類找到備選類 1.2.2.2 1.2.2.2 決定候選類決定候選類 1.2.3 1.2.3 確定類之間的關系確定類之間的關系 1.2.3.1 1.2.3.1 繼承(
2、泛化)繼承(泛化) 1.2.3.2 1.2.3.2 關聯關聯 1.2.3.3 1.2.3.3 聚合與組合聚合與組合 1.2.3.4 1.2.3.4 包包 1.2.3.5 1.2.3.5 確定類之間的關系確定類之間的關系 1.2.41.2.4 確定類的職責及協作者確定類的職責及協作者1.31.3 概念模型的詳細程度及其作用概念模型的詳細程度及其作用 1.3.11.3.1 概念模型的詳細程度概念模型的詳細程度 1.3.21.3.2 概念模型的作用概念模型的作用1.4 1.4 建立概念模型的指導原則建立概念模型的指導原則2第第2 2章章 為問題域建用例模型為問題域建用例模型2.12.1 什么是用例模
3、型什么是用例模型 2.1.1 2.1.1 參與者參與者 2.1.2 2.1.2 用例描述用例描述 2.1.3 2.1.3 用例圖用例圖 2.1.42.1.4 用例之間的關系用例之間的關系2.2 2.2 構建用例模型構建用例模型 2.2.1 2.2.1 確定系統的參與者確定系統的參與者 2.2.2 2.2.2 合并需求獲得用例合并需求獲得用例 2.2.3 2.2.3 細化用例描述細化用例描述2.3 2.3 什么是好用例什么是好用例 2.3.1 2.3.1 用例不是用例不是“功能功能”關于關于“四輪馬車四輪馬車”之一之一 2.3.2 2.3.2 用例可能是用例可能是“功能功能”關于關于“四輪馬車四
4、輪馬車”之二之二 2.3.3 2.3.3 什么時候才算完成任務什么時候才算完成任務2.4 2.4 本章小結本章小結3第第3 3章章 系統健壯性分析系統健壯性分析3.1 3.1 什么是健壯性分析什么是健壯性分析 3.1.1 3.1.1 健壯性分析的作用健壯性分析的作用 3.1.2 3.1.2 健壯性分析的對象健壯性分析的對象3.2 3.2 開始健壯性分析開始健壯性分析 3.2.1 3.2.1 通過事件流尋找邊界對象通過事件流尋找邊界對象 3.2.2 3.2.2 從概念模型及用例描述中尋找實體對象從概念模型及用例描述中尋找實體對象3.3 3.3 完善概念模型完善概念模型4第第4 4章章 構建交互模
5、型構建交互模型4.1 4.1 順序圖順序圖 4.1.1 4.1.1 定義順序圖定義順序圖 4.1.2 4.1.2 順序圖的組成順序圖的組成 4.1.3 4.1.3 創建對象和分支、從屬流創建對象和分支、從屬流 4.1.4 4.1.4 順序圖中的時間順序圖中的時間 4.1.5 4.1.5 順序圖中的迭代順序圖中的迭代 4.1.6 4.1.6 消息中的參數和序號消息中的參數和序號 4.1.7 4.1.7 順序圖片斷順序圖片斷 4.1.8 4.1.8 構建順序圖模型構建順序圖模型4.2 4.2 通信圖通信圖 4.2.1 4.2.1 通信圖的構成通信圖的構成 4.2.2 4.2.2 消息的序列號和控制
6、點消息的序列號和控制點 4.2.3 4.2.3 順序圖與通信圖的轉換及比較順序圖與通信圖的轉換及比較4.3 4.3 構建交互模型構建交互模型 4.3.1 4.3.1 引入實體對象引入實體對象 4.3.2 4.3.2 引入邊界對象和參與者引入邊界對象和參與者 4.3.3 4.3.3 添加對象之間的消息傳遞添加對象之間的消息傳遞 4.3.4 4.3.4 添加各個類的屬性和方法添加各個類的屬性和方法 4.3.5 4.3.5 引入基礎類引入基礎類 4.3.6 4.3.6 系統質量評審及設計優化系統質量評審及設計優化4.4 4.4 本章小結本章小結5第章關于過程的話題第章關于過程的話題5.1 5.1 為
7、什么需要過程為什么需要過程5.2 5.2 主流軟件開發過程簡介主流軟件開發過程簡介 5.2.1 5.2.1 統一軟件開發過程統一軟件開發過程RUPRUP 5.2.2 5.2.2 測試驅動開發測試驅動開發TDDTDD5.2.3 5.2.3 極限編程極限編程XPXP5.2.4 5.2.4 特征驅動開發特征驅動開發FDDFDD 5.3 5.3 理解開發過程理解開發過程 5.3.1 5.3.1 模型的演化過程模型的演化過程 5.3.2 5.3.2 第一次迭代第一次迭代5.3.3 5.3.3 第二次迭代第二次迭代5.3.4 5.3.4 隨后的迭代隨后的迭代5.3.5 5.3.5 最后的迭代最后的迭代5.
8、4 5.4 本章小結本章小結6第章活動圖和狀態圖第章活動圖和狀態圖.1 .1 活動圖活動圖6.1.1 6.1.1 定義活動圖定義活動圖6.1.2 6.1.2 基本活動圖基本活動圖6.1.3 6.1.3 嵌套活動圖嵌套活動圖 6.1.4 6.1.4 帶泳道的活動圖及對象流帶泳道的活動圖及對象流6.1.5 6.1.5 活動圖構建示例活動圖構建示例6.2 6.2 狀態圖狀態圖6.2.1 6.2.1 狀態狀態6.2.2 6.2.2 轉移轉移6.2.3 6.2.3 事件事件6.2.4 6.2.4 狀態、轉移和事件中的相關概念狀態、轉移和事件中的相關概念6.3 6.3 本章小結本章小結7第章構造實現方式第
9、章構造實現方式7.1 7.1 組件圖組件圖7.1.1 7.1.1 什么是組件什么是組件7.1.2 7.1.2 接口和組件間的關系接口和組件間的關系7.1.3 7.1.3 嵌套組件嵌套組件7.1.4 7.1.4 組件圖的作用組件圖的作用7.2 7.2 部署圖部署圖7.2.1 7.2.1 部署圖通用準則部署圖通用準則7.2.2 7.2.2 結點和組件結點和組件7.2.3 7.2.3 依賴和通信關聯依賴和通信關聯7.2.4 7.2.4 實現方式的建模過程實現方式的建模過程7.2.5 7.2.5 部署圖應用部署圖應用7.3 7.3 本章小結本章小結88.1 8.1 面向對象思路小結面向對象思路小結8.
10、1.1 8.1.1 從什么地方開始從什么地方開始8.1.2 8.1.2 分析與設計思路分析與設計思路8.2 8.2 編程簡述編程簡述8.2.1 8.2.1 什么是編程什么是編程8.2.2 8.2.2 編程的例子編程的例子8.3 8.3 測試簡述測試簡述8.3.1 8.3.1 測試面向對象的軟件有何不同測試面向對象的軟件有何不同8.3.2 8.3.2 對面向對象測試的誤解對面向對象測試的誤解8.3.3 8.3.3 測試方法概述測試方法概述8.3.4 8.3.4 單元測試(類測試)單元測試(類測試)8.3.5 8.3.5 集成測試(交互測試)集成測試(交互測試)8.3.6 8.3.6 系統測試系統
11、測試8.4 8.4 數據庫設計簡介數據庫設計簡介8.4.1 8.4.1 結構映射到表結構映射到表8.4.2 8.4.2 把功能映射到把功能映射到SQLSQL命令命令第章總結及其他第章總結及其他9第第1 1章章 為問題域建概念模型為問題域建概念模型1.1 1.1 從需求出發從需求出發1.2 1.2 建立一個概念模型建立一個概念模型 1.2.1 1.2.1 類及類的表示類及類的表示 1.2.2 1.2.2 發現類發現類 1.2.2.1 1.2.2.1 找到備選類找到備選類 1.2.2.2 1.2.2.2 決定候選類決定候選類 1.2.3 1.2.3 確定類之間的關系確定類之間的關系 1.2.3.1
12、 1.2.3.1 繼承(泛化)繼承(泛化) 1.2.3.2 1.2.3.2 關聯關聯 1.2.3.3 1.2.3.3 聚合與組合聚合與組合 1.2.3.4 1.2.3.4 包包 1.2.3.5 1.2.3.5 確定類之間的關系確定類之間的關系 1.2.41.2.4 確定類的職責及協作者確定類的職責及協作者1.31.3 概念模型的詳細程度及其作用概念模型的詳細程度及其作用 1.3.11.3.1 概念模型的詳細程度概念模型的詳細程度 1.3.21.3.2 概念模型的作用概念模型的作用1.4 1.4 建立概念模型的指導原則建立概念模型的指導原則10與結構化方法不同,面向對象方法中分析與設計之間的界限
13、是模糊的,與結構化方法不同,面向對象方法中分析與設計之間的界限是模糊的,分析和設計工作共存于一個連續體上,并且不同的實踐者對于分析和設計工作共存于一個連續體上,并且不同的實踐者對于“分析分析”和和“設計設計”在這個連續體上的活動有不同的分類界限。因此,生硬地定在這個連續體上的活動有不同的分類界限。因此,生硬地定義分析和設計過程各包含哪些步驟沒有什么好處。義分析和設計過程各包含哪些步驟沒有什么好處。更多地面向分析更多地面向設計做什么?需求應用領域調查如何做?邏輯解決方案圖圖1-1 分析和設計活動共存于一個連續體上分析和設計活動共存于一個連續體上既然不同的人和不同的方法對這些術語有不同的解釋,對這
14、些術語的既然不同的人和不同的方法對這些術語有不同的解釋,對這些術語的定義所做的爭論也就沒有什么積極意義。真正重要的是解決如何更好、定義所做的爭論也就沒有什么積極意義。真正重要的是解決如何更好、更快、更經濟地創建和維護軟件這樣一個問題。因此,在本課程中,更快、更經濟地創建和維護軟件這樣一個問題。因此,在本課程中,我們不打算對我們不打算對“分析分析”和和“設計設計”作出明確的區分。作出明確的區分。第第1 1章章 為問題域建概念模型為問題域建概念模型這說明了什么這說明了什么11由于現實世界中各領域對軟件系統的需求日益增長,變化也越來越快,由于現實世界中各領域對軟件系統的需求日益增長,變化也越來越快,
15、軟件開發技術的發展方向已從軟件開發技術的發展方向已從“提升被開發系統的執行效率提升被開發系統的執行效率”轉變成轉變成為為“提高開發效率提高開發效率”。面向對象技術降低了解決方案域(計算機)與。面向對象技術降低了解決方案域(計算機)與問題域之間的差別,提供了良好的復用機制,能夠更加有效地提高軟問題域之間的差別,提供了良好的復用機制,能夠更加有效地提高軟件開發效率,完全適應了軟件開發技術的發展方向。件開發效率,完全適應了軟件開發技術的發展方向。在本課程中,我們將通過一個簡單的個人圖書管理系統(根據需要,在本課程中,我們將通過一個簡單的個人圖書管理系統(根據需要,有時會插入一些實際的圖書館中圖書管理
16、系統以及其他應用系統的例有時會插入一些實際的圖書館中圖書管理系統以及其他應用系統的例子),讓大家體驗一下正確的面向對象分析和設計過程,從而幫助大子),讓大家體驗一下正確的面向對象分析和設計過程,從而幫助大家更好地駕駛面向對象技術,增強自已的家更好地駕駛面向對象技術,增強自已的“內功內功”。為了使大家把精力集中于面向對象的應用,本課程不涉及項目計劃、管為了使大家把精力集中于面向對象的應用,本課程不涉及項目計劃、管理等內容。另外,關于軟件需求、分析、設計等術語,我們在理等內容。另外,關于軟件需求、分析、設計等術語,我們在軟件工軟件工程程中已經詳細介紹了,在此也不再論述,只是請你記住:中已經詳細介紹
17、了,在此也不再論述,只是請你記住:“需求調研需求調研是了解問題,分析是定義問題,而設計則是解決問題。是了解問題,分析是定義問題,而設計則是解決問題。”第第1 1章章 為問題域建概念模型為問題域建概念模型121.1 從需求出發從需求出發盡管我們不打算詳細論述軟件需求的概念,但盡管我們不打算詳細論述軟件需求的概念,但一切軟件開發都毫無例一切軟件開發都毫無例外地必須從需求出發外地必須從需求出發。用軟件工程的術語來講,。用軟件工程的術語來講,“弄清楚要做什么弄清楚要做什么”就是我們通常所說的就是我們通常所說的“需求分析需求分析”。軟件項目未來的所有工作都是依。軟件項目未來的所有工作都是依據需求分析的結
18、果來開展的,如果需求分析的結果是錯誤的或不完整據需求分析的結果來開展的,如果需求分析的結果是錯誤的或不完整的,那么,接下來的設計和編碼工作就是建立在錯誤或不完整的基礎的,那么,接下來的設計和編碼工作就是建立在錯誤或不完整的基礎上,其結果也就可想而知了。因此,需求分析是軟件開發過程中最重上,其結果也就可想而知了。因此,需求分析是軟件開發過程中最重要的一個環節。要的一個環節。第第1 1章章 為問題域建概念模型為問題域建概念模型軟件項目的需求分析一般要經歷以下幾個步驟:軟件項目的需求分析一般要經歷以下幾個步驟:(1 1)確定項目的目標和范圍;)確定項目的目標和范圍;(2 2)根據項目的目標和范圍來分
19、析、確認與項目相關的參與者;)根據項目的目標和范圍來分析、確認與項目相關的參與者;(3 3)抽取出所有的非功能需求;)抽取出所有的非功能需求;(4 4)分析所有的功能性需求,一般采用用例建模的方法;)分析所有的功能性需求,一般采用用例建模的方法;(5 5)編寫項目的)編寫項目的需求規格說明書)。需求規格說明書)。13第第1 1章章 為問題域建概念模型為問題域建概念模型本人是一個愛書之人,家里各類書籍已過千冊,而平時又本人是一個愛書之人,家里各類書籍已過千冊,而平時又經常有朋友來借,因此需要一個個人圖書管理系統。該系經常有朋友來借,因此需要一個個人圖書管理系統。該系統應該能夠將書籍的基本信息按計
20、算機類、非計算機類分統應該能夠將書籍的基本信息按計算機類、非計算機類分別建檔,實現按書名、作者、類別、出版社等關鍵字的組別建檔,實現按書名、作者、類別、出版社等關鍵字的組合查詢功能。在使用該系統錄入新書籍時系統會自動按規合查詢功能。在使用該系統錄入新書籍時系統會自動按規則生成書號,可以修改信息,但不能夠刪除記錄。該系統則生成書號,可以修改信息,但不能夠刪除記錄。該系統還應該能夠對書籍的外借情況進行記錄,可對外借情況列還應該能夠對書籍的外借情況進行記錄,可對外借情況列表打印。另外,還希望對書籍的購買金額、冊數按特殊時表打印。另外,還希望對書籍的購買金額、冊數按特殊時段進行統計。段進行統計。一般情
21、況下,用戶僅僅能夠或者只會對其所需要的軟件提出一些要求,一般情況下,用戶僅僅能夠或者只會對其所需要的軟件提出一些要求,而且這些要求通常都是比較模糊的。即使是我們自已,在開始的時候而且這些要求通常都是比較模糊的。即使是我們自已,在開始的時候也很難提出一個非常完整的需求。以下是一個初步的需求描述:也很難提出一個非常完整的需求。以下是一個初步的需求描述:14第第1 1章章 為問題域建概念模型為問題域建概念模型建立概念模型的目的是幫助開發團隊理解問題域的各種概念、各種名詞、建立概念模型的目的是幫助開發團隊理解問題域的各種概念、各種名詞、以及它們之間的各種關系。而建立用例模型的目的是幫助開發團隊理解以及
22、它們之間的各種關系。而建立用例模型的目的是幫助開發團隊理解用戶對系統的各種功能需求。這兩方面的工作,是分析工作的主要內容,用戶對系統的各種功能需求。這兩方面的工作,是分析工作的主要內容,其結果就是得到明確的問題定義。也就是知道系統該做什么、不該做什其結果就是得到明確的問題定義。也就是知道系統該做什么、不該做什么,以及要達到的目標。么,以及要達到的目標。以上的需求描述當然不夠清晰、不夠嚴謹,但從這樣的描述中,我們可以上的需求描述當然不夠清晰、不夠嚴謹,但從這樣的描述中,我們可以對待開發軟件系統有一個初步的認識。這段描述是我們進一步工作的以對待開發軟件系統有一個初步的認識。這段描述是我們進一步工作
23、的出發點,通過一系列的分析活動,也通過與用戶的進一步溝通,使我們出發點,通過一系列的分析活動,也通過與用戶的進一步溝通,使我們對用戶的需求慢慢清晰起來,對需要解決的問題逐漸明確起來。具體來對用戶的需求慢慢清晰起來,對需要解決的問題逐漸明確起來。具體來說,在分析階段通常包含兩個方面的工作:說,在分析階段通常包含兩個方面的工作:建立一個以類圖表示的反映建立一個以類圖表示的反映問題域靜態關系的概念模型;建立一個以用例模型表示的反映系統行為問題域靜態關系的概念模型;建立一個以用例模型表示的反映系統行為的動態模型。的動態模型。151.2 建立一個概念模型建立一個概念模型所謂所謂“問題域問題域”是指一個包
24、含現實世界事物與概念的領域,這些事物和是指一個包含現實世界事物與概念的領域,這些事物和概念與所要開發的應用系統有關。概念與所要開發的應用系統有關。在對問題域的分析和調查過程中,所謂在對問題域的分析和調查過程中,所謂面向對象面向對象這個概念的精髓是將問這個概念的精髓是將問題分解成多個單獨的概念或者對象題分解成多個單獨的概念或者對象即分解成我們能夠覺察、能夠理解、即分解成我們能夠覺察、能夠理解、容易表達的事物。容易表達的事物。概念模型概念模型(conceptual model)是問題域中概念的描)是問題域中概念的描述,通常用一組靜態結構圖來表達。概念模型可以展示出:一組概念;述,通常用一組靜態結構
25、圖來表達。概念模型可以展示出:一組概念;概念之間的關聯;概念的屬性。概念之間的關聯;概念的屬性。表達概念模型的是類圖。表達概念模型的是類圖。類圖是描述類、接口以及它們之間關系的圖,類圖是描述類、接口以及它們之間關系的圖,它顯示了系統中各個類的靜態結構,是一種靜態模型它顯示了系統中各個類的靜態結構,是一種靜態模型。類圖根據系統中。類圖根據系統中的類以及各個類的關系描述系統的靜態視圖。的類以及各個類的關系描述系統的靜態視圖。類圖是面向對象系統建模中最常用和最基本的圖之一,其他許多圖,如類圖是面向對象系統建模中最常用和最基本的圖之一,其他許多圖,如狀態圖、順序圖、通信圖、配置圖等都是在類圖的基礎上進
26、一步描述了狀態圖、順序圖、通信圖、配置圖等都是在類圖的基礎上進一步描述了系統其他方面的特性。系統其他方面的特性。第第1 1章章 為問題域建概念模型為問題域建概念模型161.2.1 類及類的表示類及類的表示類是構成類圖的基礎,也是面向對象系統組織結構的核心。要使用類類是構成類圖的基礎,也是面向對象系統組織結構的核心。要使用類圖,需要了解類和對象之間的區別。圖,需要了解類和對象之間的區別。類是對資源的定義,它所包含的類是對資源的定義,它所包含的信息主要用來描述某種類型實體的特征以及對該類型實體的使用方法。信息主要用來描述某種類型實體的特征以及對該類型實體的使用方法。對象是具體的實體,它遵守類制定的
27、規則。對象是具體的實體,它遵守類制定的規則。從軟件的角度看,程序通從軟件的角度看,程序通常包含的是類的集合以及類所定義的行為,而實際創建信息和管理信常包含的是類的集合以及類所定義的行為,而實際創建信息和管理信息的是遵守類的規則的對象。息的是遵守類的規則的對象。類定義了一組具有狀態和行為的對象,這些對象具有相同的屬性、操類定義了一組具有狀態和行為的對象,這些對象具有相同的屬性、操作、關系和語義。其中,屬性和關聯用來描述狀態。屬性通常用沒有作、關系和語義。其中,屬性和關聯用來描述狀態。屬性通常用沒有身份的數據值表示,如數字和字符串。關聯則用有身份的對象之間的身份的數據值表示,如數字和字符串。關聯則
28、用有身份的對象之間的關系來表示。行為由操作來描述,方法是操作的實現。關系來表示。行為由操作來描述,方法是操作的實現。為了支持對身份、屬性和操作的定義,為了支持對身份、屬性和操作的定義,UML規范采用一個具有規范采用一個具有3個預定個預定義分欄的圖標表示類,分欄中包含的信息有:名稱、屬性和操作,它們義分欄的圖標表示類,分欄中包含的信息有:名稱、屬性和操作,它們對應著類的基本元素,如圖對應著類的基本元素,如圖1.2所示。所示。第第1 1章章 為問題域建概念模型為問題域建概念模型17圖圖1.2 類的類的3種預定義的分欄種預定義的分欄1) 1) 名稱名稱類名采用黑體字書寫在名稱分欄的中部。給類命名時最
29、好能夠反映類所類名采用黑體字書寫在名稱分欄的中部。給類命名時最好能夠反映類所代表的問題域中的概念,并且要清楚準確,不能含糊不清;類名通常表代表的問題域中的概念,并且要清楚準確,不能含糊不清;類名通常表示為一個名詞。示為一個名詞。2)2)屬性屬性類的屬性,也稱為特性,描述了類在軟件系統中代表的事物(即對象)類的屬性,也稱為特性,描述了類在軟件系統中代表的事物(即對象)所具備的特性,這些特性是該類中所有對象所共有的。對象可能有很多所具備的特性,這些特性是該類中所有對象所共有的。對象可能有很多屬性,在系統建模時,只抽取那些對系統有用的特征作為類的屬性,通屬性,在系統建模時,只抽取那些對系統有用的特征
30、作為類的屬性,通過這些屬性可以識別該類的對象。例如,可以將學號、姓名、性別、出過這些屬性可以識別該類的對象。例如,可以將學號、姓名、性別、出生年月、專業、班級等作為類生年月、專業、班級等作為類StudentStudent的屬性。的屬性。第第1 1章章 為問題域建概念模型為問題域建概念模型名稱名稱屬性屬性操作操作183) 3) 操作操作屬性僅僅描述了要處理的數據,而操作則描述了處理數據的具體方法。屬性僅僅描述了要處理的數據,而操作則描述了處理數據的具體方法。類的操作是對其所屬對象的行為的抽象,相對于一個服務的實現,且該類的操作是對其所屬對象的行為的抽象,相對于一個服務的實現,且該服務可以由類的任
31、何對象請求以影響其行為。屬性是描述對象特征的值,服務可以由類的任何對象請求以影響其行為。屬性是描述對象特征的值,操作用于操縱屬性或執行其他動作。操作可以看作是類的接口,通過該操作用于操縱屬性或執行其他動作。操作可以看作是類的接口,通過該接口可以實現內、外信息的交互,操作的具體實現稱為接口可以實現內、外信息的交互,操作的具體實現稱為方法方法。某類的操。某類的操作只能作用于該類的對象。作只能作用于該類的對象。第第1 1章章 為問題域建概念模型為問題域建概念模型對象通過相互發送消息來協作。一個消息調用一個類操作。這個操作通對象通過相互發送消息來協作。一個消息調用一個類操作。這個操作通過存取它自己對象
32、中的屬性值為調用對象的請求提供服務。一個可能的過存取它自己對象中的屬性值為調用對象的請求提供服務。一個可能的情景是,這個操作必須對外面的對象是可見的(消息必須看得見操作),情景是,這個操作必須對外面的對象是可見的(消息必須看得見操作),這樣的操作被稱為具有這樣的操作被稱為具有公共可見性公共可見性。在面向對象系統中,大多數的操作都是公有的,而大多數屬性都是私有在面向對象系統中,大多數的操作都是公有的,而大多數屬性都是私有的,屬性值對其他的類是隱藏的。一個類的對象只能請求另一個類在公的,屬性值對其他的類是隱藏的。一個類的對象只能請求另一個類在公共界面上發布的服務(操作),它們不允許直接操作其他對象
33、的屬性。共界面上發布的服務(操作),它們不允許直接操作其他對象的屬性。我們說,操作封裝了屬性。然而必須注意,我們說,操作封裝了屬性。然而必須注意,封裝只作用到類封裝只作用到類。一個對象。一個對象不能對相同類的對象隱藏(封裝)任何東西。通常的可見性符號為:不能對相同類的對象隱藏(封裝)任何東西。通常的可見性符號為:+ +:指公共可見性;:指公共可見性;- -:指私有可見性;:指私有可見性;# #:指受保護的可見性。分別對應:指受保護的可見性。分別對應于于C+C+中的中的publicpublic、privateprivate和和protectedprotected。19第第1 1章章 為問題域建概
34、念模型為問題域建概念模型1.2.2 1.2.2 發現類發現類如前所述,類代表一組相似對象的集合,而對象可以是任何適用于系統如前所述,類代表一組相似對象的集合,而對象可以是任何適用于系統的人、地點、物品、事件、概念、屏幕演示或報表。例如,雖然的人、地點、物品、事件、概念、屏幕演示或報表。例如,雖然“zhang chengzhang cheng”、“jiang junjiang jun”、“li haixiali haixia”都是學生,我們要建立都是學生,我們要建立的是叫做的是叫做“StudentStudent”類的模型,而不是對每一個單個的學生建模。發現類的模型,而不是對每一個單個的學生建模。
35、發現類,從本質上來講是一項分析工作,因為它為應用程序確定構件。發現類,從本質上來講是一項分析工作,因為它為應用程序確定構件。發現類的方法有很多種,下面作一些簡單介紹,最后再說明我們所采用的方類的方法有很多種,下面作一些簡單介紹,最后再說明我們所采用的方法。法。操作可見性與屬性可見性沒什么不同。操作可見性定義該操作在不同于操作可見性與屬性可見性沒什么不同。操作可見性定義該操作在不同于該類的其他類的對象中是否可見。如果是可見的,則該操作的可見性為該類的其他類的對象中是否可見。如果是可見的,則該操作的可見性為公有的,否則是私有的。公有的,否則是私有的。操作可見性需要與操作范圍區別開來。操作可以在一個
36、實例對象中被調操作可見性需要與操作范圍區別開來。操作可以在一個實例對象中被調用,或者還可以在一個類對象中被調用。對前一種情況,操作被說成是用,或者還可以在一個類對象中被調用。對前一種情況,操作被說成是具有具有實例范圍實例范圍,而后一種情況則具有,而后一種情況則具有類范圍類范圍。例如,尋找雇員的年齡的。例如,尋找雇員的年齡的操作具有實例范圍,但計算雇員的平均年齡的操作就具有類范圍。操作具有實例范圍,但計算雇員的平均年齡的操作就具有類范圍。201)1)參與者是潛在的類參與者是潛在的類。參與者表示與系統進行交互的任何人或物,其詳。參與者表示與系統進行交互的任何人或物,其詳細概念我們將在后面的用例建模
37、中論述。參與者有兩種情況,一種是在細概念我們將在后面的用例建模中論述。參與者有兩種情況,一種是在現實世界中的參與者,另一種是存儲在你的系統中的參與者。例如,在現實世界中的參與者,另一種是存儲在你的系統中的參與者。例如,在現實世界中有作為大學學生的人,同時,在你的系統中存在業務對象,現實世界中有作為大學學生的人,同時,在你的系統中存在業務對象,代表那些現實世界中的人。代表那些現實世界中的人。 2)2)確定客戶確定客戶。大學中有學生,銀行有顧客,網絡操作系統有用戶,航班。大學中有學生,銀行有顧客,網絡操作系統有用戶,航班有乘客。學生、顧客、用戶和乘客都是客戶的例子。有乘客。學生、顧客、用戶和乘客都
38、是客戶的例子。 3)3) 跟蹤資金流跟蹤資金流。問問你自已,資金是從哪里來的(通常是從客戶那里。問問你自已,資金是從哪里來的(通常是從客戶那里來的),它是怎么掙到的(通過賣產品或服務),還有它被花在哪里來的),它是怎么掙到的(通過賣產品或服務),還有它被花在哪里了。通過對資金進行跟蹤,你能夠為系統確定很多核心類(客戶、出了。通過對資金進行跟蹤,你能夠為系統確定很多核心類(客戶、出售的產品或服務,以及組成那些用于出售的產品售的產品或服務,以及組成那些用于出售的產品/服務的要素)。服務的要素)。4)4) 概念是潛在的類概念是潛在的類。你所面對的應用領域的業務人員經常會使用他們習。你所面對的應用領域
39、的業務人員經常會使用他們習以為常的術語。術語經常是領域模型的候選類。例如,在一所大學中經以為常的術語。術語經常是領域模型的候選類。例如,在一所大學中經常會使用的業務術語有:專業、課程、教室、教學樓和課本,這些概念常會使用的業務術語有:專業、課程、教室、教學樓和課本,這些概念中的每一個都是你的系統中潛在的類。中的每一個都是你的系統中潛在的類。第第1 1章章 為問題域建概念模型為問題域建概念模型215) 5) 事件是潛在的類事件是潛在的類。關鍵事件發生在大部分問題領域中。例如,在大。關鍵事件發生在大部分問題領域中。例如,在大學中,重要的事件包括畢業和開學。每一個事件都是系統中潛在的類,學中,重要的
40、事件包括畢業和開學。每一個事件都是系統中潛在的類,因為它們會有其職責(例如因為它們會有其職責(例如“畢業畢業”要維護一個畢業學生列表,要知道要維護一個畢業學生列表,要知道其日期和地點等等)。其日期和地點等等)。6) 6) 主要用戶界面元素是潛在的類主要用戶界面元素是潛在的類。現實世界中的參與者通過這些類與。現實世界中的參與者通過這些類與你的系統一起工作。從學術上講,這樣做不夠純粹。然而,這很實用,你的系統一起工作。從學術上講,這樣做不夠純粹。然而,這很實用,因為現實世界參與者會與這些類進行協作。因為現實世界參與者會與這些類進行協作。7) 7) 立即找出三到五個主類立即找出三到五個主類。這些類是
41、系統的核心,而且如果你不能描述。這些類是系統的核心,而且如果你不能描述這些類的話,就不可能理解業務。例如,這些類的話,就不可能理解業務。例如,“乘客乘客”、“飛機飛機”、“機組機組人員人員”和和“機場機場”對于航班訂票系統應該是主類。對于航班訂票系統應該是主類。“學生學生”、“教授教授”、“課程課程”和和“教室教室”對于大學信息系統應該是主類。對于大學信息系統應該是主類。我們考察以上這些發現類的方法,其共同特點是我們考察以上這些發現類的方法,其共同特點是潛在的類潛在的類基本上都與基本上都與名名詞詞有關。確實,在實際工作中,發現類應用最廣泛的就是有關。確實,在實際工作中,發現類應用最廣泛的就是“
42、名詞動詞名詞動詞法法”。所謂。所謂名詞動詞法名詞動詞法,其主要規則是從名詞與名詞短語中提取對象與,其主要規則是從名詞與名詞短語中提取對象與屬性;從動詞與動詞短語中提取操作與關聯;而所有格短語通常表明名屬性;從動詞與動詞短語中提取操作與關聯;而所有格短語通常表明名詞應該是屬性而不是對象。下面,我們就采用該方法開始問題域建模的詞應該是屬性而不是對象。下面,我們就采用該方法開始問題域建模的第一步。第一步。第第1 1章章 為問題域建概念模型為問題域建概念模型潛在的類有什么共同的特點潛在的類有什么共同的特點221.2.2.1 1.2.2.1 找到備選類找到備選類首先,我們可以逐字逐句地閱讀上面那段需求描
43、述,并將其中的所有首先,我們可以逐字逐句地閱讀上面那段需求描述,并將其中的所有名詞及名詞短語列出來,我們可以得到如下的備選類列表:名詞及名詞短語列出來,我們可以得到如下的備選類列表:本人本人 人人 家里家里 書籍書籍 朋友朋友 個人圖書管理系統個人圖書管理系統 基本信息(書籍的)基本信息(書籍的) 計算機類計算機類 非計算機類非計算機類 書名書名 作者作者 類類別別 出版社出版社 關鍵字關鍵字 功能功能 新書籍新書籍 系統系統 規則規則 書號書號 信信息息 記錄記錄 外借情況外借情況 外借情況列表外借情況列表 購買金額購買金額 冊數冊數 特定時特定時段段 圖圖1.3 列出所有的名詞及名詞短語列
44、出所有的名詞及名詞短語1.2.2.2 1.2.2.2 決定候選類決定候選類很顯然,并不是每一個備選類都是合適的候選類,有些名詞對于要開發很顯然,并不是每一個備選類都是合適的候選類,有些名詞對于要開發的系統來說無關緊要,甚至是系統之外的;而有些名詞描述的概念太小,的系統來說無關緊要,甚至是系統之外的;而有些名詞描述的概念太小,可能是某個候選類的屬性。因此,我們需要對備選類進行一番篩選,將可能是某個候選類的屬性。因此,我們需要對備選類進行一番篩選,將不合適的備選類刪去。不合適的備選類刪去。第第1 1章章 為問題域建概念模型為問題域建概念模型23“本人本人”、“人人”、“家里家里”很明顯是系統外的概
45、念,沒有必要建模。很明顯是系統外的概念,沒有必要建模。而而“個人圖書管理系統個人圖書管理系統”、“系統系統”指的就是將要開發的系統,即系指的就是將要開發的系統,即系統本身,也沒有必要對其建模。統本身,也沒有必要對其建模。“書籍書籍”是一個很重要的類,而是一個很重要的類,而“書名書名”、“作者作者”、“類別類別”、“出版社出版社”、“書號書號”是用來描述書籍的基本信息,因此應該作為是用來描述書籍的基本信息,因此應該作為“書籍書籍”類的屬性處理,類的屬性處理,“規則規則”則是指書號的生成規則,而書號是則是指書號的生成規則,而書號是書籍的一個屬性,因此,書籍的一個屬性,因此,“規則規則”可以作為編寫
46、可以作為編寫“書籍書籍”類構造函數類構造函數的指南。的指南。“基本信息基本信息”是書名、作者、類別等描述書籍的基本信息統稱,是書名、作者、類別等描述書籍的基本信息統稱,“關關鍵字鍵字”則是代表書名、作者、出版社則是代表書名、作者、出版社其中之一,因此無需對其建模。其中之一,因此無需對其建模。“功能功能”、“新書籍新書籍”、“信息信息”、“記錄記錄”都是在描述需求時使用都是在描述需求時使用到的一些相關術語,并不是問題域的本質,因此不在考慮的范圍。到的一些相關術語,并不是問題域的本質,因此不在考慮的范圍。“計算機類計算機類”、“非計算機類非計算機類”是該系統中圖書的兩大分類,應該對是該系統中圖書的
47、兩大分類,應該對其建模,并改名為其建模,并改名為“計算機類書籍計算機類書籍”和和“非計算機類書籍非計算機類書籍”,以減少,以減少歧義。歧義。第第1 1章章 為問題域建概念模型為問題域建概念模型24“外借情況外借情況”則是用來表示一次借閱行為,應該成為一個候選類,多則是用來表示一次借閱行為,應該成為一個候選類,多個外借情況將組成個外借情況將組成“外借情況列表外借情況列表”,而外借情況中一個很重要的角色,而外借情況中一個很重要的角色是是“朋友朋友” 借閱主體。雖然本系統中并不需要建立借閱主體。雖然本系統中并不需要建立“朋友朋友”的資料的資料庫,但考慮到可能需要列出某個朋友的借閱情況,因此還是將其列
48、為候庫,但考慮到可能需要列出某個朋友的借閱情況,因此還是將其列為候選類。為了更好地表述,將選類。為了更好地表述,將“外借情況外借情況”改名為改名為“借閱記錄借閱記錄”,而將,而將“外借情況列表外借情況列表”改名為改名為“借閱情況列表借閱情況列表”。“購買金額購買金額”、“冊數冊數”都是統計的結果,即都是一個數字,故不必都是統計的結果,即都是一個數字,故不必建模,而建模,而“特定時段特定時段”是統計的范圍,也不必建模;但要進行統計,是統計的范圍,也不必建模;但要進行統計,必須有一個執行統計的主體,這讓我們發現了一個在需求描述中隱藏必須有一個執行統計的主體,這讓我們發現了一個在需求描述中隱藏的關鍵
49、類,即書籍列表。的關鍵類,即書籍列表。通過以上的分析,我們得到了一個候選類列表:通過以上的分析,我們得到了一個候選類列表:書籍書籍 計算機類書籍計算機類書籍 非計算機類書籍非計算機類書籍借閱記錄借閱記錄 借閱記錄列表借閱記錄列表 書籍列表書籍列表圖圖1.4 候選類列表候選類列表第第1 1章章 為問題域建概念模型為問題域建概念模型25至此,我們已經完成了概念建模的第一步工作。在實際工作中,這一至此,我們已經完成了概念建模的第一步工作。在實際工作中,這一步不要花費太多的時間,即按前面提及的第步不要花費太多的時間,即按前面提及的第7種發現類的方法,快速地種發現類的方法,快速地找出系統中的幾個主類,以
50、便于我們對問題域有一個概要的了解。找出系統中的幾個主類,以便于我們對問題域有一個概要的了解。1.2.3.1 1.2.3.1 繼承(泛化)繼承(泛化)不同類之間經常會存在相似性,兩個以上的類也會經常共享相同的屬不同類之間經常會存在相似性,兩個以上的類也會經常共享相同的屬性和性和/或相同的方法。因為我們并不想重復編寫代碼,那我們就要利用或相同的方法。因為我們并不想重復編寫代碼,那我們就要利用這種相似機制。繼承就是這種機制。這種相似機制。繼承就是這種機制。1.2.3 1.2.3 確定類之間的關系確定類之間的關系在對以上候選類建立關系之前,我們先簡單地介紹與此相關的一些概念。在對以上候選類建立關系之前
51、,我們先簡單地介紹與此相關的一些概念。第第1 1章章 為問題域建概念模型為問題域建概念模型繼承是指子類可以擁有父類的全部屬性和操作。繼承是面向對象方法繼承是指子類可以擁有父類的全部屬性和操作。繼承是面向對象方法的一個重要概念,是面向對象技術提高軟件開發效率的一個重要原因。的一個重要概念,是面向對象技術提高軟件開發效率的一個重要原因。在構建系統模型時,可以根據所涉及到的事物的共性抽象出一些基本在構建系統模型時,可以根據所涉及到的事物的共性抽象出一些基本類,并在此基礎上根據事物的個性抽象出新的類(即子類)。子類既類,并在此基礎上根據事物的個性抽象出新的類(即子類)。子類既具有父類的全部屬性和操作,
52、又具有自己獨特的屬性和操作。父類與具有父類的全部屬性和操作,又具有自己獨特的屬性和操作。父類與子類的關系為一般與特殊的關系。子類的關系為一般與特殊的關系。26第第1 1章章 為問題域建概念模型為問題域建概念模型繼承繼承(inheritanceinheritance)表示兩個類之間是)表示兩個類之間是“is ais a”、“is likeis like”或或“is is kind ofkind of(是(是的一種)的一種)”的關系。的關系。子類子類(subclasssubclass):如果類):如果類B B繼承自類繼承自類A A,我們說,我們說B B是是A A的子類。的子類。父類父類(super
53、classsuperclass):如果類):如果類B B繼承自類繼承自類A A,我們說,我們說A A是是B B的父類。的父類。繼承機制具有特殊的意義。由于子類可以自動擁有父類的全部操作和繼承機制具有特殊的意義。由于子類可以自動擁有父類的全部操作和屬性,當我們在定義子類時,就不必重復定義那些在父類中已經定義屬性,當我們在定義子類時,就不必重復定義那些在父類中已經定義過的屬性和操作,只需要聲明該類是某個父類的子類,從而可以將精過的屬性和操作,只需要聲明該類是某個父類的子類,從而可以將精力集中在定義子類所特有的屬性和操作上。這非常有利于提高軟件的力集中在定義子類所特有的屬性和操作上。這非常有利于提高
54、軟件的可復用性。可復用性。繼承具有傳遞性。如果類繼承具有傳遞性。如果類B B繼承自類繼承自類A A,而類,而類C C又繼承了類又繼承了類B B,則類,則類C C可以可以繼承類繼承類A A和類和類B B的全部屬性和操作。即類的全部屬性和操作。即類C C的對象除了具有該類新增的所的對象除了具有該類新增的所有特性之外,還具有全部父類的所有特性。有特性之外,還具有全部父類的所有特性。如果限定每個子類只能繼承單獨一個父類的屬性和操作,則稱這種繼如果限定每個子類只能繼承單獨一個父類的屬性和操作,則稱這種繼承為單繼承;如果一個子類可以同時繼承多個父類的屬性和操作,這承為單繼承;如果一個子類可以同時繼承多個父
55、類的屬性和操作,這種繼承稱為多重繼承。種繼承稱為多重繼承。27類類A(父類)(父類)類類B(子類)(子類)圖圖1.5 UML1.5 UML中繼承的建模符號中繼承的建模符號繼承通過利用類間的相似性來復用已有的工作繼承通過利用類間的相似性來復用已有的工作例如,學生都有姓名、住址、電話號碼和私車。同時,教授也同樣擁例如,學生都有姓名、住址、電話號碼和私車。同時,教授也同樣擁有這些東西。毫無疑問,我們可以開發有關學生和教授的類,讓它們有這些東西。毫無疑問,我們可以開發有關學生和教授的類,讓它們一起運行。實際上,僅需要先開發一起運行。實際上,僅需要先開發“StudentStudent”類,一旦它可以運行
56、了,類,一旦它可以運行了,制作一份拷貝,就叫制作一份拷貝,就叫“ProfessorProfessor”,并進行一些適當的修改。這樣做,并進行一些適當的修改。這樣做很容易,但并不完美。如果很容易,但并不完美。如果“StudentStudent”源碼出現錯誤將會怎樣?我們源碼出現錯誤將會怎樣?我們需要在兩個地方改正錯誤。如果處理姓名的方法發生了變化(你把長需要在兩個地方改正錯誤。如果處理姓名的方法發生了變化(你把長度從度從3030變成了變成了4040)又會怎樣?同樣要在兩個地方作出改動。這真是讓)又會怎樣?同樣要在兩個地方作出改動。這真是讓人覺得毫無興趣的工作。如果僅有一份代碼拷貝用于開發和維護,
57、這人覺得毫無興趣的工作。如果僅有一份代碼拷貝用于開發和維護,這樣難道不更好嗎?樣難道不更好嗎?第第1 1章章 為問題域建概念模型為問題域建概念模型28這就是繼承。使用繼承,就可以定義一個類來封裝學生和教授間的相這就是繼承。使用繼承,就可以定義一個類來封裝學生和教授間的相似性。新的類將有屬性似性。新的類將有屬性“namename”、“addressaddress”、“phoneNumberphoneNumber”以及方以及方法法“driveVehicledriveVehicle”。因為需要命名類,所以就要問問自己,數據和功。因為需要命名類,所以就要問問自己,數據和功能是什么?對于這個類,合適的類
58、名應該是能是什么?對于這個類,合適的類名應該是“PersonPerson”。一旦定義了一旦定義了“PersonPerson”類,就可以從它繼承出類,就可以從它繼承出“StudentStudent”和和“ProfessorProfessor”。可以說,。可以說,“PersonPerson”是是“StudentStudent”和和“ProfessorProfessor”的父的父類。任何父類知道和完成的事情,子類也知道。實際上,僅需要寫兩類。任何父類知道和完成的事情,子類也知道。實際上,僅需要寫兩行代碼:一行表示行代碼:一行表示“StudentStudent”是是“PersonPerson”的子類,
59、另一行表示的子類,另一行表示“ProfessorProfessor”是是“PersonPerson”的子類。因為的子類。因為“PersonPerson”有姓名、住址和電有姓名、住址和電話號碼,話號碼,“StudentStudent”和和“ProfessorProfessor”也有這些屬性。因為也有這些屬性。因為“PersonPerson”是是會開車的,這樣會開車的,這樣“StudentStudent”和和“ProfessorProfessor”也應該可以開車。也應該可以開車。PersonStudentProfessor圖圖1.6 1.6 對對“StudentStudent”和和“Profess
60、orProfessor”類從類從“PersonPerson”繼承這個概念進行繼承這個概念進行建模建模第第1 1章章 為問題域建概念模型為問題域建概念模型29繼承技巧和技術繼承技巧和技術下面的技巧和技術有助于有效地應用繼承:下面的技巧和技術有助于有效地應用繼承:1.1.尋找相似之處尋找相似之處。無論何時只要有兩個以上的類有相似之處。無論何時只要有兩個以上的類有相似之處相似的相似的屬性或者是相似的方法,都會存在使用繼承的可能性。屬性或者是相似的方法,都會存在使用繼承的可能性。2.2.尋找已有的類尋找已有的類。當確定一個新的類時,可能已經有了一個與其相似。當確定一個新的類時,可能已經有了一個與其相似
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 離婚財產分割協議:共同財產評估與分配方案
- 生態環保型廠房車間租賃服務協議
- 采購談判與跟單培訓及效果監測合同
- 環保項目現場管理規則與格式條款合同詳解
- 環保項目典當質押貸款服務合同示例
- 文化創意園場合作經營與創新合作協議
- 綠色環保型廠房商鋪租賃服務協議
- 生態車庫建設與運營管理合同樣本
- 新能源汽車抵押貸款操作細則合同
- 車輛股份及商標權聯合轉讓合同
- 2025屆上海市(春秋考)高考英語考綱詞匯對照表清單
- 《外匯交易基礎知識培訓》詳解課件
- 汽油化學品安全技術說明書MSDS
- 輸變電專業知識培訓課件
- 新高考數學題型全歸納之排列組合專題18環排問題含答案及解析
- 清算開始日清產核資報告
- 進修匯報高壓氧艙治療
- 學校教學設備設施安全管理制度(3篇)
- 森林消防專業實習總結范文
- 軟件正版化培訓
- 《電力電子技術(第二版) 》 課件 項目五 交流調壓電路-調試電風扇無級調速器
評論
0/150
提交評論