本書是面向對象分析和設計(OOA/D)的實用指南,并且闡述了迭代開發(fā)相關方面的內容。如果你剛剛接觸OOA/D,你將會面臨如何掌握這個復雜主題的挑戰(zhàn);本書提供了一個良好定義的路標-統(tǒng)一過程,使你能一步一步地實現從需求到編碼的全過程。統(tǒng)一建模語言(UML)已成為建模的標準表示法,所以熟悉UML將使你受益。本書用UML表示法教授了運用OOA/D的技能。設計模式表達了面向對象設計專家用于創(chuàng)建系統(tǒng)的"最佳實踐"的習慣用法和方案。在本書中,你將學習如何應用設計模式,包括流行的GoF模式和GRASP模式。GRASP模式表達了對象設計中職責分配的基本原則。學習和掌握這些模式將加快你掌握分析和設計技能的速度。本書的結構和重點建立在作者多年教授和培訓成千上萬學生掌握OOA/D的經驗之上,它提供了一個精煉的、已證明的和高效率的掌握OOA/D的學習方法,使你在閱讀和學習上的投資得到優(yōu)化。本書詳盡地說明一個案例,以便實際地說明整個OOA/D過程,并深入討論問題的棘手細節(jié);這是一個實際的練習。本書還說明如何將對象設計工件映射成Java代碼。本書適合于熟悉OOA/D但希望學習UML表示法、應用模式的讀者,或者希望加強和提高自己的分析和設計技能的讀者。 第一部分 緒論第1章 面向對象分析和設計1.1 本書的主要內容1.2 最重要的學習目標1.3 什么是分析和設計1.4 什么是面向對象分析和設計1.5 簡短示例1.6 什么是UML1.7 可視建模的優(yōu)點1.8 歷史1.9 參考資料第2章 迭代、進化和敏捷2.1 什么是UP?其他方法能否對其進行補充2.2 什么是迭代和進化式開發(fā)2.3 什么是瀑布生命周期2.4 如何進行迭代和進化式分析和設計2.5 什么是風險驅動和客戶驅動的迭代計劃2.6 什么是敏捷方法及其觀點2.7 什么是敏捷建模2.8 什么是敏捷UP2.9 UP的其他關鍵實踐2.10 什么是UP的階段2.11 什么是UP科目2.12 如何定制過程和UP開發(fā)案例2.13 判斷你是否理解迭代開發(fā)或UP2.14 歷史2.15 參考資料第3章 案例研究3.1 案例研究中涵蓋的內容3.2 案例研究策略:迭代開發(fā)+迭代學習3.3 案例一:NextGen POS系統(tǒng)3.4 案例二:Monopoly游戲系統(tǒng)第二部分 初 始 階 段第4章 初始不是需求階段4.1 什么是初始4.2 初始階段的持續(xù)時間4.3 初始階段會創(chuàng)建的制品4.4 何時知道自己并不了解初始階段4.5 初始階段中有多少UML第5章 進化式需求5.1 定義:需求5.2 進化式需求與瀑布式需求5.3 尋找需求可以采用的方法5.4 需求的類型和種類5.5 UP制品如何組織需求5.6 本書是否包含這些制品的示例5.7 參考資料第6章 用例6.1 示例6.2 定義:參與者、場景和用例6.3 用例和用例模型6.4 動機:為什么使用用例6.5 定義:用例是功能性需求嗎6.6 定義:參與者的三種類型6.7 表示法:用例的三種常用形式6.8 示例:詳述風格的處理銷售6.9 各小節(jié)的含義6.10 表示法:有其他格式嗎?兩欄變體6.11 準則:以無用戶界面約束的本質風格編寫用例6.12 準則:編寫簡潔的用例6.13 準則:編寫黑盒用例6.14 準則:持有參與者和參與者目標的視點6.15 準則:如何發(fā)現用例6.16 準則:什么樣的測試有助于發(fā)現有用的用例6.17 應用UML:用例圖6.18 應用UML:活動圖6.19 動機:用例還有其他益處嗎?語境中的需求6.20 示例:Monopoly游戲6.21 過程:在迭代方法中如何使用用例6.22 歷史6.23 參考資料第7章 其他需求7.1 如何完成這些示例7.2 準則:初始階段是否應該對此徹底地進行分析7.3 準則:這些制品是否應該放在項目Web站點上7.4 NextGen示例:(部分)補充性規(guī)格說明7.5 注解:補充性規(guī)格說明7.6 NextGen示例:(部分)設想7.7 注解:設想7.8 NextGen示例:(部分)詞匯表7.9 注解:詞匯表(數據字典)7.10 NextGen示例:業(yè)務規(guī)則(領域規(guī)則)7.11 注解:領域規(guī)則7.12 過程:迭代方法中的進化式需求7.13 參考資料第三部分 細化迭代1-基礎第8章 迭代1-基礎8.1 迭代1的需求和重點:OOA/D技術的核心8.2 過程:初始和細化8.3 過程:計劃下一個迭代第9章 領域模型9.1 示例9.2 什么是領域模型9.3 動機:為什么要創(chuàng)建領域模型9.4 準則:如何創(chuàng)建領域模型9.5 準則:如何找到概念類9.6 示例:尋找和描繪概念類9.7 準則:敏捷建模-類圖的草呼9.8 準則:敏捷建模-是否要使用工具維護模型9.9 準則:報表對象-模型中是否要包括"票據"9.10 準則:像地圖繪制者一樣思考;使用領域術語9.11 準則:如何對非現實世界建模9.12 準則:屬性與類的常見錯誤9.13 準則:何時使用"描述"類建模9.14 關聯9.15 示例:領域模型中的關聯9.16 屬性9.17 示例:領域模型中的屬性9.18 結論:領域模型是否正確9.19 過程:迭代和進化式領域建模9.20 參考資料第10章 系統(tǒng)順序圖10.1 示例:NextGen SSD10.2 什么是系統(tǒng)順序圖10.3 動機:為什么繪制SSD10.4 應用UML:順序圖10.5 SSD和用例之間的關系10.6 如何為系統(tǒng)事件和操作命名10.7 如何為涉及其他外部系統(tǒng)的SSD建模10.8 SSD的哪些信息要放入詞匯表中10.9 示例:Monopoly SSD10.10 過程:迭代和進化式SSD10.11 歷史和參考資料第11章 操作契約11.1 示例11.2 定義:契約有哪些部分11.3 定義:什么是系統(tǒng)操作11.4 定義:后置條件11.5 示例:enterItem后置條件11.6 準則:是否應該更新領域模型11.7 準則:契約在何時有效11.8 準則:如何創(chuàng)建和編寫契約11.9 示例:NextGen POS契約11.10 示例:Monopoly契約11.11 應用UML:操作、契約和OCL11.12 過程:UP的操作契約11.13 歷史11.14 參考資料第12章 迭代地從需求到設計12.1 以迭代方式做正確的事,正確地做事12.2 盡早引發(fā)變更12.3 完成所有分析和建模工作是否需要幾個星期第13章 邏輯架構和UML包圖13.1 示例13.2 什么是邏輯架構和層13.3 案例研究中應該關注的層13.4 什么是軟件架構13.5 應用UML:包圖13.6 準則:使用層進行設計13.7 準則:模型-視圖分離原則13.8 SSD、系統(tǒng)操作和層之間的聯系13.9 示例:NextGen的邏輯架構和包圖13.10 示例:Monopoly邏輯架構13.11 參考資源第14章 邁向對象設計14.1 敏捷建模和輕量級UML圖形14.2 UML CASE工具14.3 編碼前繪制UML需要花費多少時間14.4 設計對象:什么是靜態(tài)和動態(tài)建模14.5 基于UML表示法技術的對象設計技術的重要性14.6 其他對象設計技術:CRC卡第15章 UML交互圖15.1 順序圖和通信圖15.2 UML建模初學者沒有重視交互圖15.3 常用的UML交互圖表示法15.4 順序圖的基本表示法15.5 通信圖的基本表示法第16章 UML類圖16.1 應用UML:常用類圖表示法16.2 定義:設計類圖16.3 定義:類元16.4 表示UML屬性的方式:屬性文本和關聯線16.5 注解符號:注解、注釋、約束和方法體16.6 操作和方法16.7 關鍵字16.8 構造型、簡檔和標記16.9 UML特性和特性字符串16.10 泛化、抽象類、抽象操作16.11 依賴16.12 接口16.13 組合優(yōu)于聚合16.14 約束16.15 限定關聯16.16 關聯類16.17 單實例類16.18 模板類和接口16.19 用戶自定義的分欄16.20 主動類16.21 交互圖和類圖之間的關系第17章 GRASP:基于職責設計對象17.1 UML與設計原則17.2 對象設計:輸入、活動和輸出的示例17.3 職責和職責驅動設計17.4 GRASP:基本OO設計的系統(tǒng)方法17.5 職責、GRASP和UML圖之間的聯系17.6 什么是模式17.7 現在我們所處的位置17.8 使用GRASP進行對象設計的簡短示例17.9 在對象設計中應用GRASP17.10 創(chuàng)建者17.11 信息專家(或專家)17.12 低耦合17.13 控制器17.14 高內聚17.15 參考資料第18章 使用GRASP的對象設計示例18.1 什么是用例實現18.2 制品注釋18.3 下一步工作18.4 NextGen迭代的用例實現18.5 Monopoly迭代的用例實現18.6 過程:迭代和進化式對象設計18.7 總結第19章 對可見性進行設計19.1 對象之間的可見性19.2 什么是可見性第20章 將設計映射為代碼20.1 編程和迭代、進化式開發(fā)20.2 將設計映射到代碼的20.3 由DCD創(chuàng)建類的定義20.4 從交互圖創(chuàng)建方法20.5 代碼中的集合類20.6 異常和錯誤處理20.7 定義Sale.makeLineItem方法20.8 實現的順序20.9 測試驅動或測試優(yōu)先的開發(fā)20.10 將設計映射為代碼的總結20.11 NextGen POS程序簡介20.12 Monopoly程序簡介第21章 測試驅動開發(fā)和重構21.1 測試驅動開發(fā)21.2 重構21.3 參考資料第四部分 細化迭代2-更多模式第22章 UML工具與視UML為藍圖22.1 前向、逆向和雙向工程22.2 什么是有價值特性的常見報告22.3 對工具有哪些期待22.4 如果繪制了UML草圖,如何在編碼后更新該圖形22.5 參考資料第23章 快速地更新分析23.1 案例研究:NextGen POS23.2 案例研究:Monopoly第24章 迭代2:更多模式24.1 從迭代1到迭代224.2 迭代2的需求和重點:對象設計和模式第25章 GRASP:其他對象職責25.1 多態(tài)25.2 純虛構25.3 間接性25.4 防止變異第26章 應用GoF設計模式26.1 適配器(GoF)26.2 一些GRASP原則是對其他設計模式的歸納26.3 設計中發(fā)現的"分析":領域模型26.4 工廠(Factory)26.5 單實例類(GoF)26.6 具有不同接口的外部服務問題的結論26.7 策略(GoF)26.8 組合(GoF)和其他設計原則26.9 外觀(Facade,GoF)26.10 觀察者/發(fā)布-訂閱/委派事件模型(GoF)26.11 結論26.12 參考資料第五部分 細化迭代3-中級主題第27章 迭代3:中級主題27.1 NextGen POS案例27.2 Monopoly案例第28章 UML活動圖及其建模28.1 示例28.2 如何應用活動圖28.3 其他UML活動圖表示法28.4 準則28.5 示例:NextGen中的活動圖28.6 過程:"統(tǒng)一過程"中的活動圖28.7 背景第29章 UML狀態(tài)機圖和建模29.1 示例29.2 定義:事件、狀態(tài)和轉換29.3 如何應用狀態(tài)圖29.4 更多UML狀態(tài)機圖表示法29.5 示例:使用狀態(tài)機進行UI導航建模29.6 示例:NextGen用例的狀態(tài)機圖29.7 過程:UP中的狀態(tài)機圖29.8 推薦資源第30章 用例關聯30.1 包含關系30.2 術語:具體用例、抽象用例、基礎用例和附加用例30.3 擴展關系30.4 泛化關系30.5 用例圖第31章 更多的SSD和契約第32章 精化領域模型的精化32.1 NextGen領域模型中的新概念32.2 泛化32.3 定義概念超類和子類32.4 何時定義概念子類32.5 何時定義概念超類32.6 NextGen POS案例中的概念類層次結構32.7 抽象概念類32.8 對變化的狀態(tài)建模32.9 軟件中的類層次結構和繼承關系32.10 關聯類32.11 聚合關系和組合關系32.12 時間間隔和產品價格-解決迭代1階段的"錯誤"32.13 關聯角色名稱32.14 作為概念的角色與關聯中的角色32.15 導出元素32.16 受限關聯32.17 自反關聯32.18 使用包來組織領域模型32.19 示例:Monopoly領域模型的精化第33章 架構分析33.1 過程:何時開始架構分析33.2 定義:變化點和進化點33.3 架構分析33.4 架構分析的常用步驟33.5 科學:架構因素的識別和分析33.6 示例:NextGen POS的部分架構因素表33.7 藝術:架構性因素的解決33.8 架構分析主題的總結33.9 過程:UP中的迭代架構33.10 參考資料第34章 邏輯架構精化34.1示例:NextGen的邏輯架構34.2 使用層模式的協作34.3 有關層模式的其他問題34.4 模型-視圖分離和"向上"通信34.5 參考資料第35章 使用GoF模式完成更多對象設計35.1 示例:NextGen POS35.2 本地服務容錯;使用本地緩存提高性能35.3 處理故障35.4 通過代理(PGoF)使用本地服務進行容錯35.5 對非功能性或質量需求的設計35.6 使用適配器訪問外部物理設備35.7 對一組相關的對象使用抽象工廠模式35.8 使用多態(tài)性和"Do It Myself"模式處理支付35.9 示例:Monopoly案例35.10 結論第36章 包的設計36.1 組織包結構的準則36.2 參考資料第37章 UML部署圖和構件圖37.1 部署圖37.2 構件圖第38章 使用模式設計持久性框架38.1 問題:持久性對象32.2 解決方案:持久性框架提供的持久性服務38.3 框架38.4 持久性服務和框架的需求38.5 關鍵思想38.6 模式:將對象表示為表38.7 UML數據建模簡檔38.8 模式:對象標識符38.9 通過外觀訪問持久服務38.10 映射對象:數據庫映射器或數據庫代理模式38.11 使用模板方法模式進行框架設計38.12 使用模板方法模式的具體化38.13 使用MapperFactory配置Mapper38.14 模式:緩存管理38.15 在類中合并和隱藏SQL語句38.16 事務狀態(tài)和狀態(tài)模式38.17 使用命令模式設計事務38.18 使用虛代理實現滯后具體化38.19 如何在表中表示關系38.20 PersistentObject和關注分離38.21 未決問題第39章 架構的文檔化:UML和N+1視圖模型39.1SAD和架構視圖39.2 表示法:SAD的結構39.3 示例:NextGen POS的SAD39.4 示例:Jakarta Struts 的SAD39.5 過程:迭代式架構文檔39.6 參考資料第六部分 其 他 主 題第40章 迭代式開發(fā)和敏捷項目管理的進一步討論40.1 如何計劃一次迭代40.2 適應性計劃與預測性計劃40.3 階段計劃和迭代計劃40.4 如何使用用例和場景來計劃迭代40.5 早期預算的有效性(無效性)40.6 將項目制品組織起來40.7 何時你會發(fā)現自己并沒有理解迭代計劃40.8 參考資料參考文獻