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