出版時間:2011-12 出版社:人民郵電 作者:里爾 頁數(shù):358 譯者:鮑志云
Tag標(biāo)簽:無
內(nèi)容概要
本書提供了改進(jìn)面向?qū)ο笤O(shè)計的真知灼見。全書共11章,總結(jié)出了60多條面向?qū)ο笤O(shè)計(OOD)的指導(dǎo)原則。這些經(jīng)驗原則涵蓋了從類到對象(主要強(qiáng)調(diào)它們之間的關(guān)系,包括關(guān)聯(lián)、使用、包含、單繼承、多繼承)到面向?qū)ο笪锢碓O(shè)計的重要主題。本書將幫助你理解經(jīng)驗原則和“設(shè)計模式”這一流行概念之間的相互作用。你可以借助經(jīng)驗原則發(fā)現(xiàn)設(shè)計中所存在的某一方面的問題,而設(shè)計模式則提供了解決方案。
本書對各個層次的開發(fā)者都有價值,新手能借助本書走上通向面向?qū)ο缶幊痰目燔嚨?,想提升自己的面向?qū)ο箝_發(fā)水準(zhǔn)的老手則會受益于本書深具洞察力的分析。本書提供了讓你成為更好的軟件開發(fā)者的途徑。
作者簡介
作者:(美國)里爾 (Arthur J.Riel) 譯者:鮑志云
書籍目錄
第1章 面向?qū)ο缶幊痰膭右?br />1.1 革命家、改革家與面向?qū)ο蠓缎?br />1.2 Frederick Brooks觀點:非根本復(fù)雜性與根本復(fù)雜性
1.3 瀑布模型
1.4 迭代模型
1.5 構(gòu)造原型:相同語言與不同語言
1.6 軟件復(fù)用性
1.7 優(yōu)秀設(shè)計者階層
術(shù)語表
第2章 類和對象:面向?qū)ο蠓缎偷慕ú?br />2.1 類和對象導(dǎo)引
2.2 消息和方法
2.3 類耦合與內(nèi)聚
2.4 動態(tài)語義
2.5 抽象類
2.6 角色與類
術(shù)語表
經(jīng)驗原則小結(jié)
第3章 應(yīng)用程序布局:面向動作與面向?qū)ο?br />3.1 應(yīng)用程序的不同布局
3.2 面向動作范型何時適用
3.3 問題:全能類(行為表現(xiàn))
3.4 系統(tǒng)功能不良分布的另一個例子
3.5 問題:全能類(數(shù)據(jù)表現(xiàn))
3.6 問題:泛濫成災(zāi)的類
3.7 代理類的角色
3.8 用途考察:單獨實體和控制類
術(shù)語表
經(jīng)驗原則小結(jié)
第4章 類和對象的關(guān)系
4.1 類和對象關(guān)系導(dǎo)引
4.2 使用關(guān)系
4.3 實現(xiàn)使用關(guān)系的6種不同方法
4.4 使用關(guān)系的經(jīng)驗原則
4.5 精確調(diào)整兩個類之間的協(xié)作量
4.6 包含關(guān)系
4.7 類之間的語義約束
4.8 屬性與被包含的類
4.9 包含關(guān)系的更多經(jīng)驗原則
4.1 0使用和包含的關(guān)系
4.1 1值包含與引用包含
術(shù)語表
經(jīng)驗原則小結(jié)
第5章 繼承關(guān)系
5.1 繼承關(guān)系導(dǎo)引
5.2 在派生類中覆寫基類方法
5.3 在基類中使用保護(hù)區(qū)域
5.4 繼承層次結(jié)構(gòu)的寬度和深度
5.5 C++的劃分:私有、保護(hù)和公有繼承
5.6 一個現(xiàn)實世界中的特化例子
5.7 經(jīng)驗原則:尋求設(shè)計復(fù)雜性和靈活性的平衡
5.8 一個現(xiàn)實世界中的泛化例子
5.9 多態(tài)機(jī)制
5.10把繼承作為復(fù)用機(jī)制的一個問題
5.11用繼承實現(xiàn)中斷驅(qū)動架構(gòu)的方案
5.12繼承層次結(jié)構(gòu)與屬性
5.13混淆:繼承的需求與對象動態(tài)語義
5.14用繼承來隱藏類的實現(xiàn)
5.15把對象誤當(dāng)作繼承類
5.16把需概括對象誤作需在運行時創(chuàng)建類
5.17在派生類中屏蔽基類方法的嘗試
5.18對象可選部分的實現(xiàn)
5.19沒有最優(yōu)解的問題
5.20復(fù)用組件與復(fù)用框架
術(shù)語表
經(jīng)驗原則小結(jié)
第6章 多重繼承
6.1 多重繼承導(dǎo)引
6.2 多重繼承的常見誤用
6.3 多重繼承的正當(dāng)使用
6.4 不支持多重繼承的語言中的非根本復(fù)雜性
6.5 用到多重繼承的框架
6.6 運用多重繼承:設(shè)計mixin
6.7 DAG多重繼承
6.8 可選包含的不良實現(xiàn)造成的不當(dāng)DAG多重繼承
術(shù)語表
經(jīng)驗原則小結(jié)
第7章 關(guān)聯(lián)關(guān)系
7.1 關(guān)聯(lián)導(dǎo)引
7.2 用引用屬性實現(xiàn)關(guān)聯(lián)
7.3 用第三方類實現(xiàn)關(guān)聯(lián)
7.4 在包含關(guān)系和關(guān)聯(lián)關(guān)系間取舍
術(shù)語表
經(jīng)驗原則小結(jié)
第8章 與特定類相關(guān)的數(shù)據(jù)及行為
8.1 類相關(guān)與對象相關(guān)數(shù)據(jù)及行為導(dǎo)引
8.2 用元類來表示類相關(guān)數(shù)據(jù)及行為
8.3 用語言層面關(guān)鍵字來實現(xiàn)類相關(guān)與對象相關(guān)數(shù)據(jù)及行為
8.4 C++中的元類
8.5 有用的抽象類,但不是基類
術(shù)語表
經(jīng)驗原則小結(jié)
第9章 面向?qū)ο笪锢碓O(shè)計
9.1 面向?qū)ο筮壿嬙O(shè)計和物理設(shè)計的角色
9.2 創(chuàng)建面向?qū)ο蟀b器
9.3 面向?qū)ο笙到y(tǒng)中的持久化
9.4 面向?qū)ο髴?yīng)用程序中的內(nèi)存管理問題
9.5 可復(fù)用組件的最小公有接口
9.6 實現(xiàn)安全的淺拷貝
9.7 并行面向?qū)ο缶幊?br />9.8 用非面向?qū)ο笳Z言實現(xiàn)面向?qū)ο笤O(shè)計
術(shù)語表
經(jīng)驗原則小結(jié)
第10章 經(jīng)驗原則和模式的關(guān)系
10.1 經(jīng)驗原則與模式
10.2 設(shè)計變換模型的傳遞性
10.3 設(shè)計變換模式的自反性
10.4 其他設(shè)計變換模式
10.5 未來研究
第11章 在面向?qū)ο笤O(shè)計中使用經(jīng)驗原則
11.1 ATM問題
11.2 選擇方法學(xué)
11.3 產(chǎn)生ATM對象模型的第一次嘗試
11.4 給我們的對象模型增加行為
11.5 非根本復(fù)雜性帶來的顯式情況分析
11.6 在不同地址對象間傳遞消息
11.7 交易處理
11.8 回到ATM的領(lǐng)域
11.9 其他雜類問題
11.10小結(jié)
附錄A 經(jīng)驗原則總結(jié)
附錄B C++中的內(nèi)存泄漏
附錄C C++實例精選
本書中引用到的其他圖書
參考文獻(xiàn)
章節(jié)摘錄
版權(quán)頁:插圖:因為,類的名字不僅意味著一組屬性,還表示實體的行為。這種數(shù)據(jù)和行為的雙向聯(lián)系是面向?qū)ο蠓缎偷幕?。一個對象一定會有如下4個重要方面:1.它自己的身份標(biāo)識(可能只是它在內(nèi)存中的地址);2.它的類的屬性(通常是靜態(tài)的)和這些屬性的值(通常是動態(tài)的);3.它的類的行為(從實現(xiàn)者的角度看);4.它的類的公開接口(從用戶的角度看)。將這一討論置于軟件開發(fā)的語境,類可以被實現(xiàn)為一個結(jié)構(gòu)定義以及一組可以處理這個結(jié)構(gòu)的操作。在過程式語言中,任給一個函數(shù),很容易找出數(shù)據(jù)依賴性。只要檢查函數(shù)實現(xiàn)并看一下所有參數(shù)、返回值以及局部變量聲明的數(shù)據(jù)類型就可以了。但是,如果你想要找出一個數(shù)據(jù)定義的函數(shù)依賴性,那你就不得不檢查全部代碼,尋找依賴于這個數(shù)據(jù)的函數(shù)。而在面向?qū)ο竽P椭?,兩種依賴性(函數(shù)對數(shù)據(jù)的依賴性和數(shù)據(jù)對函數(shù)的依賴性)都現(xiàn)成擺明在那里了。對象是類數(shù)據(jù)類型的變量。它們的內(nèi)部細(xì)節(jié)只對同它們的類關(guān)聯(lián)的那組函數(shù)可見。這種對內(nèi)部細(xì)節(jié)的訪問限制稱作信息隱藏(informationhiding)。在很多面向?qū)ο笳Z言中,這種隱藏不是強(qiáng)制的,這樣我們就有了第一條(也是最重要的一條)經(jīng)驗原則。經(jīng)驗原則2.1 所有數(shù)據(jù)都應(yīng)該隱藏在它所在的類內(nèi)部。違反這條經(jīng)驗原則意味著你不重視可維護(hù)性。面向?qū)ο蠓缎退鶐淼囊嫣帲蟛糠謿w因于在設(shè)計階段和實現(xiàn)階段始終確保信息隱藏。如果你把數(shù)據(jù)設(shè)定為公有,那么就很難判斷系統(tǒng)哪部分的功能依賴于這個數(shù)據(jù)。事實上,這樣一來,數(shù)據(jù)變動與函數(shù)的映射關(guān)系就和面向動作范型一模一樣了。我們不得不檢查所有的函數(shù)以判斷哪些函數(shù)依賴于公有數(shù)據(jù)。有時開發(fā)者會爭辯說,“我需要把這個數(shù)據(jù)設(shè)為公有,因為……”在這種情況下,開發(fā)者應(yīng)該問自己,“我到底要用這個數(shù)據(jù)來做什么?為什么不是類為我提供這個操作?”在所有這類情況下,問題出在類缺少了一個必需的操作。比如,考慮圖2.2 中的File類。開發(fā)者出人意料地認(rèn)為,byteoffset數(shù)據(jù)成員應(yīng)該是公有的,這樣才能允許隨機(jī)I/0訪問。但是,我們實際上需要的是執(zhí)行隨機(jī)訪問任務(wù)的操作。(如果你不是C程序員,那么我在這里補充說明一下:fseek和ftell和標(biāo)準(zhǔn)C庫函數(shù),用于執(zhí)行文件的隨機(jī)I/0訪問。)冒昧地認(rèn)為“我們可以把這個數(shù)據(jù)設(shè)為公有,因為它永遠(yuǎn)也不會改變”的程序員請注意,Murphy關(guān)于編程的一條定理表明,這是第一個需要改變的數(shù)據(jù)。
編輯推薦
《OOD啟思錄》被讀者評價為“面向?qū)ο笤O(shè)計領(lǐng)域中的EffecliveC++”!《OOD啟思錄》能幫助你邁入OoD殿堂:如果你是新手,《OOD啟思錄》將帶你走上面向?qū)ο缶幊痰目燔嚨?。如果你是老手,《OOD啟思錄》深具洞察力的分析將進(jìn)一步提升你的面向?qū)ο箝_發(fā)水準(zhǔn),使你成為更好的軟件開發(fā)者。提供改進(jìn)面向?qū)ο笤O(shè)計的真知灼見!總結(jié)61條富有啟發(fā)意義的專家經(jīng)驗!
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載