出版時間:2008-1 出版社:人民郵電出版社 作者:馬丁 頁數(shù):538
Tag標簽:無
前言
要想成為一名優(yōu)秀的軟件開發(fā)人員,需要熟練應用編程語言和開發(fā)工具,更重要的是能夠領悟優(yōu)美代碼背后的原則和前人總結的經(jīng)驗——這正是本書的主題。本書凝聚了世界級軟件開發(fā)大師Robet C.Matin數(shù)十年軟件開發(fā)和培訓經(jīng)驗,Java版曾榮獲計算機圖書最高榮譽——Jolt大獎,是廣受推崇的經(jīng)典著作。自出版以來一直暢銷不衰。 不要被書名誤導了,本書不是那種以開發(fā)過程為主題的敏捷軟件開發(fā)類圖書。在書中,作者延續(xù)了自己一貫的寫作風格,讓你親歷現(xiàn)場,并用幽默親切的語言和插圖,通過一步步展示來自開發(fā)一線的代碼,分析各種設計決策及其得失,以清晰、易于理解的方式講述了真實程序設計中最基本然而也是最難做到正確應用的原則(包括SRP、LSP、OCP、DIP、ISP等類設計原則,以及多個包設計原則)與設計模式(不限于GoF經(jīng)典模式,包括許多作者自己的成果)。 本書不僅是一部深入淺出、生動易懂的面向?qū)ο笤瓌t與設計模式著作,而且還是一部通俗的敏捷方法導引書和快速實用的UML教程。通過本書你會發(fā)現(xiàn),許多以前看起來非??菰镔M解的概念,忽然間都豁然開朗,變得鮮活生動起來。
內(nèi)容概要
本書中,享譽全球的軟件開發(fā)專家和軟件工程大師Robert C. Martin深入而生動地使用真實案例講解了面向?qū)ο蠡驹瓌t、重要的設計模式、UML和敏捷實踐等程序員必備的知識?! ”緯?003年榮獲第13屆Jolt大獎,是C++和Java程序員提高自身水平的絕佳教材,也適于用作高校計算機、軟件工程專業(yè)相關課程的教材或參考書。
作者簡介
Robert C.Martin(“Bob大叔”)世界級的軟件開發(fā)大師,著名軟件咨詢公司Object Mento,公司的創(chuàng)始人和總裁。曾經(jīng)擔任C++Report雜志主編多年,也是設計模式和敏捷開發(fā)運動的主要倡導者之一。
書籍目錄
第一部分 敏捷開發(fā)第1章 敏捷實踐1.1 敏捷聯(lián)盟1.1.1 人和交互重于過程和工具1.1.2 可以工作的軟件重于面面俱到的文檔1.1.3 客戶合作重于合同談判1.1.4 隨時應對變化重于遵循計劃1.2 原則1.3 結論1.4 參考文獻第2章 極限編程概述2.1 極限編程實踐2.1.1 完整團隊2.1.2 用戶故事2.1.3 短交付周期2.1.4 驗收測試2.1.5 結對編程2.1.6 測試驅(qū)動開發(fā)2.1.7 集體所有權2.1.8 持續(xù)集成2.1.9 可持續(xù)的開發(fā)速度2.1.10 開放的工作空間2.1.11 計劃游戲2.1.12 簡單設計2.1.13 重構2.1.14 隱喻2.2 結論2.3 參考文獻第3章 計劃3.1 初始探索3.2 發(fā)布計劃3.3 迭代計劃3.4 定義“完成”3.5 任務計劃3.6 迭代3.7 跟蹤3.8 結論3.9 參考文獻第4章 測試4.1 測試驅(qū)動開發(fā)4.1.1 測試優(yōu)先設計的例子4.1.2 測試促使模塊之間隔離4.1.3 意外獲得的解耦合4.2 驗收測試4.3 意外獲得的構架4.4 結論4.5 參考文獻第5章 重構5.1 素數(shù)產(chǎn)生程序:一個簡單的重構示例5.1.1 單元測試5.1.2 重構5.1.3 最后審視5.2 結論5.3 參考文獻第6章 一次編程實踐6.1 保齡球比賽6.2 結論第二部分 敏捷設計第7章 什么是敏捷設計7.1 設計臭味7.1.1 設計臭味——腐化軟件的氣味7.1.2 僵化性7.1.3 脆弱性7.1.4 頑固性7.1.5 粘滯性7.1.6 不必要的復雜性7.1.7 不必要的重復7.1.8 晦澀性7.2 軟件為何會腐化7.3 Copy程序7.3.1 熟悉的場景7.3.2 Copy程序的敏捷設計7.4 結論7.5 參考文獻第8章 SRP:單一職責原則8.1 定義職責8.2 分離耦合的職責8.3 持久化8.4 結論8.5 參考文獻第9章 OCP:開放-封閉原則9.1 OCP概述9.2 Shape應用程序9.2.1 違反OCP9.2.2 遵循OCP9.2.3 預測變化和“貼切的”結構9.2.4 放置吊鉤9.2.5 使用抽象獲得顯式封閉9.2.6 使用“數(shù)據(jù)驅(qū)動”的方法獲取封閉性9.3 結論9.4 參考文獻第10章 LSP:Liskov替換原則10.1 違反LSP的情形10.1.1 簡單例子10.1.2 更微妙的違反情形10.1.3 實際的例子10.2 用提取公共部分的方法代替繼承10.3 啟發(fā)式規(guī)則和習慣用法10.4 結論10.5 參考文獻第11章 DIP:依賴倒置原則11.1 層次化11.1.1 倒置的接口所有權11.1.2 依賴于抽象11.2 簡單的DIP示例11.3 熔爐示例11.4 結論11.5 參考文獻第12章 ISP:接口隔離原則12.1 接口污染12.2 分離客戶就是分離接口12.3 類接口與對象接口12.3.1 使用委托分離接口12.3.2 使用多重繼承分離接口12.4 ATM用戶界面的例子12.5 結論12.6 參考文獻第13章 C#程序員UML概觀13.1 類圖13.2 對象圖13.3 順序圖13.4 協(xié)作圖13.5 狀態(tài)圖13.6 結論13.7 參考文獻第14章 使用UML14.1 為什么建模14.1.1 為什么構建軟件模型14.1.2 編碼前應該構建面面俱到的設計嗎14.2 有效使用UML14.2.1 與他人交流14.2.2 脈絡圖14.2.3 項目結束文檔14.2.4 要保留的和要丟棄的14.3 迭代式改進14.3.1 行為優(yōu)先14.3.2 檢查結構14.3.3 想象代碼14.3.4 圖的演化14.4 何時以及如何繪制圖示14.4.1 何時要畫圖,何時不要畫圖14.4.2 CASE 工具14.4.3 那么,文檔呢14.5 結論第15章 狀態(tài)圖15.1 基礎知識15.1.1 特定事件15.1.2 超狀態(tài)15.1.3 初始偽狀態(tài)和結束偽狀態(tài)15.2 使用FSM圖示15.3 結論第16章 對象圖16.1 即時快照16.2 主動對象16.3 結論第17章 用例17.1 編寫用例17.1.1 備選流程17.1.2 其他東西呢17.2 用例圖17.3 結論17.4 參考文獻第18章 順序圖18.1 基礎知識18.1.1 對象、生命線、消息及其他18.1.2 創(chuàng)建和析構18.1.3 簡單循環(huán)18.1.4 時機和場合18.2 高級概念18.2.1 循環(huán)和條件18.2.2 耗費時間的消息18.2.3 異步消息18.2.4 多線程18.2.5 主動對象18.2.6 向接口發(fā)送消息18.3 結論第19章 類圖19.1 基礎知識19.1.1 類19.1.2 關聯(lián)19.1.3 繼承19.2 類圖示例19.3 細節(jié)19.3.1 類衍型19.3.2 抽象類19.3.3 屬性19.3.4 聚集19.3.5 組合19.3.6 多重性19.3.7 關聯(lián)衍型19.3.8 內(nèi)嵌類19.3.9 關聯(lián)類19.3.10 關聯(lián)修飾符19.4 結論19.5 參考文獻第20章 咖啡的啟示20.1 Mark IV型專用咖啡機20.1.1 規(guī)格說明書20.1.2 常見的丑陋方案20.1.3 虛構的抽象20.1.4 改進方案20.1.5 實現(xiàn)抽象模型20.1.6 這個設計的好處20.2 面向?qū)ο筮^度設計20.3 參考文獻第三部分 薪水支付案例研究第21章 COMMAND模式和ACTIVE OBJECT模式:多功能與多任務21.1 簡單的Command21.2 事務21.2.1 實體上解耦和時間上解耦21.2.2 時間上解耦21.3 Undo()方法21.4 ACTIVE OBJECT模式21.5 結論21.6 參考文獻第22章 TEMPLATE METHOD模式和STRATEGY模式:繼承和委托22.1 TEMPLATE METHOD模式22.1.1 濫用模式22.1.2 冒泡排序22.2 STRATEGY模式22.3 結論22.4 參考文獻第23章 FACADE模式和MEDIATOR模式23.1 FACADE模式23.2 MEDIATOR模式23.3 結論23.4 參考文獻第24章 SINGLETON模式和MONOSTATE模式24.1 SINGLETON模式24.1.1 SINGLETON模式的好處24.1.2 SINGLETON模式的代價24.1.3 運用SINGLETON模式24.2 MONOSTATE模式24.2.1 MONOSTATE模式的好處24.2.2 MONOSTATE模式的代價24.2.3 運用MONOSTATE模式24.3 結論24.4 參考文獻第25章 NULL OBJECT模式25.1 描述25.2 結論25.3 參考文獻第26章 薪水支付案例研究:第一次迭代開始26.1 初步的規(guī)格說明26.2 基于用例分析26.2.1 增加新雇員26.2.2 刪除雇員26.2.3 登記考勤卡26.2.4 登記銷售憑條26.2.5 登記工會服務費26.2.6 更改雇員明細26.2.7 發(fā)薪日26.3 反思:找出底層的抽象26.3.1 雇員支付類別抽象26.3.2 支付時間表抽象26.3.3 支付方式26.3.4 從屬關系26.4 結論26.5 參考文獻第27章 薪水支付案例研究:實現(xiàn)27.1 事務27.1.1 增加雇員27.1.2 刪除雇員27.1.3 考勤卡、銷售憑條以及服務費用27.1.4 更改雇員屬性27.1.5 犯了什么暈27.1.6 支付雇員薪水27.1.7 支付領月薪的雇員薪水27.1.8 支付鐘點工薪水27.2 主程序27.3 數(shù)據(jù)庫27.4 結論27.5 關于本章27.6 參考文獻第四部分 打包薪水支付系統(tǒng)第28章 包和組件的設計原則28.1 包和組件28.2 組件的內(nèi)聚性原則:粒度28.2.1 重用—發(fā)布等價原則28.2.2 共同重用原則28.2.3 共同封閉原則28.2.4 組件內(nèi)聚性總結28.3 組件的耦合性原則:穩(wěn)定性28.3.1 無環(huán)依賴原則28.3.2 穩(wěn)定依賴原則28.3.3 穩(wěn)定抽象原則28.4 結論第29章 FACTORY模式29.1 依賴問題29.2 靜態(tài)類型與動態(tài)類型29.3 可替換的工廠29.4 對測試支架使用對象工廠29.5 工廠的重要性29.6 結論29.7 參考文獻第30章 薪水支付案例研究:包分析30.1 組件結構和符號30.2 應用CCP30.3 應用REP30.4 耦合和封裝30.5 度量30.6 度量薪水支付應用程序30.6.1 對象工廠30.6.2 重新思考內(nèi)聚的邊界30.7 最終的包結構30.8 結論30.9 參考文獻第31章 COMPOSITE模式31.1 組合命令31.2 多重性還是非多重性31.3 結論第32章 OBSERVER——演化至模式32.1 數(shù)字時鐘32.2 OBSERVER模式32.2.1 模型32.2.2 面向?qū)ο笤O計原則的運用32.3 結論32.4 參考文獻第33章 ABSTRACT SERVER模式、 ADAPTER模式和BRIDGE模式33.1 ABSTRACT SERVER模式33.2 ADAPTER模式33.2.1 類形式的ADAPTER模式33.2.2 調(diào)制解調(diào)器問題、適配器以及LSP33.3 BRIDGE模式33.4 結論33.5 參考文獻第34章 PROXY模式和GATEWAY模式:管理第三方API34.1 PROXY模式34.1.1 實現(xiàn)PROXY模式34.1.2 小結34.2 數(shù)據(jù)庫、中間件以及其他第三方接口34.3 TABLE DATA GATEWAY34.3.1 測試和內(nèi)存TDG34.3.2 測試DbGateWay34.4 可以用于數(shù)據(jù)庫的其他模式34.5 結論34.6 參考文獻第35章 VISITOR模式35.1 VISITOR模式35.2 ACYCLIC VISITOR模式35.3 DECORATOR模式35.4 EXTENSION OBJECT模式35.5 結論35.6 參考文獻第36章 STATE模式36.1 嵌套switch/case語句36.1.1 內(nèi)部作用域的狀態(tài)變量36.1.2 測試動作36.1.3 代價和收益36.2 遷移表36.2.1 使用表解釋36.2.2 代價和收益36.3 STATE模式36.3.1 STATE模式和 STRATEGY模式36.3.2 代價和收益36.4 狀態(tài)機編譯器36.4.1 SMC生成的Turnstile.cs以及其他支持文件36.4.2 代價和收益36.5 狀態(tài)機應用的場合36.5.1 作為GUI中的高層應用策略36.5.2 GUI交互控制器36.5.3 分布式處理36.6 結論36.7 參考文獻第37章 薪水支付案例研究:數(shù)據(jù)庫37.1 構建數(shù)據(jù)庫37.2 一個代碼設計缺陷37.3 增加雇員37.4 事務37.5 加載Employee對象37.6 還有什么工作第38章 薪水支付系統(tǒng)用戶界面:Model-View-Presenter38.1 界面38.2 實現(xiàn)38.3 構建窗口38.4 Payroll窗口38.5 真面目38.6 結論38.7 參考文獻附錄A 雙公司記Rufus公司:“日落”項目Rupert工業(yè)公司:“朝暉”項目附錄B 什么是軟件索引
編輯推薦
軟件開發(fā)的不朽經(jīng)典;生動闡述面向?qū)ο笤瓌t、敏捷實踐、UML和模式;大量C#實戰(zhàn)示例,讓你親歷現(xiàn)場?! 拔易钕矏鄣募夹g作家Robert Martin善于通過實踐展示技術,讓讀者能夠以自己喜歡的方式逐步理解……請把Bob大叔當作你在敏捷世界里的導師。” ——Chris Sells,.NET資深技術專家。微軟“軟件傳奇人物” “本書是對敏捷編程和敏捷原則最全面和最有價值的介紹……絕對是所有.NET程序員必讀之作?!薄 狫esse Liberty,微軟資深技術專家,Programming C#作者 要想成為一名優(yōu)秀的軟件開發(fā)人員,需要熟練應用編程語言和開發(fā)工具,更重要的是能夠領悟優(yōu)美代碼背后的原則和前人總結的經(jīng)驗——這正是本書的主題。本書凝聚了世界級軟件開發(fā)大師Robert C.Martin數(shù)十年軟件開發(fā)和培訓經(jīng)驗。Java版曾榮獲計算機圖書最高榮譽——Jolt大獎。是廣受推崇的經(jīng)典著作,自出版以來一直暢銷不衰。 不要被書名誤導了。本書不是那種以開發(fā)過程為主題的敏捷軟件開發(fā)類圖書。在書中,作者延續(xù)了自己一貫的寫作風格。讓你親歷現(xiàn)場,并用幽默親切的語言和插圖.通過一步步展示來自開發(fā)一線的代碼,分析各種設計決策及其得失,以清晰、易于理解的方式講述了真實程序設計中最基本然而也是最難做到正確應用的原則(包括SRP、LSP、OCP、DIP、ISP等類設計原則,以及多個包設計原則)與設計模式(不限于GoF經(jīng)典模式。包括許多作者自己的成果)?! ”緯粌H是一部深入淺出、生動易懂的面向?qū)ο笤瓌t與設計模式著作。而且還是一部通俗的敏捷方法導引書和快速實用的LJML教程。通過本書你會發(fā)現(xiàn),許多以前看起來非??菰镔M解的概念,忽然間都豁然開朗。變得鮮活生動起來。 C#版與此前的Java版相比,主要的更新包括加強了UML的介紹章節(jié)。使其更加貼近實戰(zhàn);增加了對MVP模式的介紹等。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載