日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《面向对象的思考过程(原书第4版)》一 导读

發(fā)布時間:2023/11/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《面向对象的思考过程(原书第4版)》一 导读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.





本節(jié)書摘來自華章出版社《面向?qū)ο蟮乃伎歼^程(原書第4版)》一書中的第3章,第3.2節(jié),[美] 馬特·魏斯費爾德(Matt Weisfeld) 著黃博文 譯更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計算機”公眾號查看。

前  言
本書內(nèi)容概要
正如書名所述,本書講述了面向?qū)ο笏伎嫉倪^程。選擇一本書的主題和書名是個很重要的決定,但如果主題概念性很強,決定就沒那么容易了。大部分書籍都只涉及了編程及面向?qū)ο笤O(shè)計的某個方面。一些主流的書闡述了諸如面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O(shè)計、面向?qū)ο缶幊?、設(shè)計模式、面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)(XML)、統(tǒng)一建模語言(UML)、面向?qū)ο骔eb開發(fā)、面向?qū)ο笠苿娱_發(fā)、進階面向?qū)ο缶幊陶Z言等主題,當然也包括了其他與面向?qū)ο缶幊滔嚓P(guān)的主題。
然而,許多人仔細研究這些書后,都未曾注意到這些主題都建立在同一個基礎(chǔ)之上,即如何以面向?qū)ο蟮姆绞竭M行思考。從學(xué)生到軟件開發(fā)專業(yè)人員,往往雖然閱讀了這些書,但沒有花費充分的時間和精力來真正理解代碼背后的設(shè)計理念。
我認為僅學(xué)習(xí)一種特定的開發(fā)方法、一種編程語言或者一組設(shè)計工具并不能說明學(xué)會了面向?qū)ο筮@一概念。簡單來說,以面向?qū)ο蠓绞骄幊叹褪且环N思考方式。本書就討論這種面向?qū)ο蟮乃伎歼^程。
把面向?qū)ο蟮乃伎歼^程從語言、開發(fā)實踐以及工具中剝離出來并不是一個簡單的任務(wù)。在學(xué)習(xí)面向?qū)ο筮@一理念時,往往要求先深入學(xué)習(xí)一門編程語言。例如,很多年以前,大量的C語言程序員在沒有直接接觸面向?qū)ο蟾拍钪?#xff0c;就開始通過C++語言來了解面向?qū)ο?。其他軟件專家第一次接觸面向?qū)ο髣t是在演示文稿中使用UML創(chuàng)建對象模型。他們也沒有直接學(xué)習(xí)面向?qū)ο蟮母拍?。即使到現(xiàn)在,互聯(lián)網(wǎng)作為商業(yè)平臺的幾十年后,編程書籍以及專業(yè)的培訓(xùn)材料并沒有先介紹面向?qū)ο筮@一概念。
學(xué)習(xí)面向?qū)ο蟮母拍钆c學(xué)習(xí)使用面向?qū)ο笳Z言進行編程有著巨大差異,理解這點很重要。我在編寫本書第1版前就意識到了這點。當我閱讀Craig Larman的文章《What the UML Is-and Isn’t》時,他指出:
但是,在軟件開發(fā)工程和UML繪圖語言領(lǐng)域,讀寫UML標記的能力有時候好像等同于面向?qū)ο蟮姆治龊驮O(shè)計能力。事實當然并非如此,后者比前者更加重要。因此我推薦先學(xué)習(xí)面向?qū)ο蠓治龊驮O(shè)計的相關(guān)教學(xué)資料,它優(yōu)先于學(xué)習(xí)使用UML標記的相關(guān)工具。
因此,盡管學(xué)習(xí)一門建模語言是非常重要的步驟,但先學(xué)習(xí)面向?qū)ο蟮募寄芨又匾H绻赐耆斫饷嫦驅(qū)ο蟾拍钋熬蛯W(xué)習(xí)UML,這就像還未了解任何與電路相關(guān)的知識就開始學(xué)習(xí)電路圖一樣。
學(xué)習(xí)編程語言也有相同的問題。如前所述,很多C語言程序員還未直接了解任何面向?qū)ο蟮母拍?#xff0c;就想通過使用C++語言來達到面向?qū)ο蟮木辰纭T诿嬖囍薪?jīng)常會出現(xiàn)這樣的情況,很多自詡C++程序員的開發(fā)人員只是會使用C++編譯器的C程序員。甚至現(xiàn)在,諸如C#.NET、VB.NET、Objective-C以及Java等語言已經(jīng)相當普及了,工作面試中的一些關(guān)鍵問題可以迅速暴露出這些程序員缺乏面向?qū)ο蟮乃枷搿?br />Visual Basic的早期版本并不是面向?qū)ο蟮?。C語言也不是面向?qū)ο蟮?。而C++在設(shè)計時就向后兼容C語言。因此,使用C++編譯器編寫只含C語言語法的程序,而放棄使用C++的面向?qū)ο蠊δ苁峭耆赡艿摹bjective-C是標準ANSI C語言的一個擴展。更糟糕的是,程序員可能使用勉強夠用的面向?qū)ο蠊δ馨殉绦驅(qū)懗闪思炔皇敲嫦驅(qū)ο蟮囊膊皇敲嫦蜻^程的四不像產(chǎn)品。
因此,在學(xué)習(xí)使用面向?qū)ο蟮拈_發(fā)環(huán)境之前,先學(xué)習(xí)基本的面向?qū)ο蟾拍钪陵P(guān)重要。與其直接學(xué)習(xí)一門編程語言(比如Objective-C、VB .NET、C++、C# .NET或Java)或建模語言(如UML),還不如把時間花在學(xué)習(xí)面向?qū)ο蟮乃伎歼^程上。
我在使用C語言編程很多年后,于20世紀80年代后期開始參加Smalltalk語言的學(xué)習(xí)課程。當時我所在的公司認為公司的軟件開發(fā)人員應(yīng)該學(xué)習(xí)這個極具前途的技術(shù)。老師授課時說面向?qū)ο蟮姆妒绞侨碌乃季S方式(事實上它從20世紀60年代就已經(jīng)萌芽了)。他接著說,雖然幾乎我們所有人都是很優(yōu)秀的程序員,但還有10%~20%的人從來沒有按照面向?qū)ο蟮姆绞阶鍪?。如果該說法確實正確,那么很可能是因為很多優(yōu)秀的程序員從沒有花時間進行編程范式的轉(zhuǎn)變,沒有深入學(xué)習(xí)面向?qū)ο蟾拍睢?br />第4版中的新增內(nèi)容
正如在前言中經(jīng)常提及的一樣,第1版中我的愿景僅僅圍繞概念本身,而不是具體的新興技術(shù)。盡管我在第2版、第3版以及第4版仍然堅持該目標,但也引入了幾個章節(jié)講述關(guān)于應(yīng)用程序的主題,這些主題與面向?qū)ο蟾拍钇鹾隙群芨?。?~10章涵蓋了基本的面向?qū)ο蟾拍?#xff0c;第11~15章將這些概念應(yīng)用到了一些常用的面向?qū)ο蠹夹g(shù)中。例如,第1~10章提供了面向?qū)ο蟮幕A(chǔ)課程(比如封裝、多態(tài)、繼承等),而第11~15章則介紹了一些實際應(yīng)用。
第4版相對于之前的版本拓展了很多主題。以下列出了改進及更新的主題:
移動設(shè)備開發(fā),包括手機應(yīng)用、移動應(yīng)用以及混合開發(fā)等。
iOS環(huán)境下的Objective-C代碼示例。
使用XML及JSON實現(xiàn)可讀性強的數(shù)據(jù)交換。
使用CSS、XSLT等技術(shù)實現(xiàn)數(shù)據(jù)渲染與轉(zhuǎn)換。
Web服務(wù),包括簡單對象訪問協(xié)議(OAP)、RESTful Web服務(wù)等。
客戶端/服務(wù)器端技術(shù)以及封送對象。
持久化數(shù)據(jù)和序列化對象。
很多章節(jié)都擴充了代碼示例,在Pearson的網(wǎng)站可以在線查看用Java、C# .NET、VB .NET及Objective-C編寫的代碼示例。
本書中的源碼
本書中提到的示例代碼可以在華章網(wǎng)站(www.hzbook.com)下載。

目  錄
譯者序
作者簡介
前言
第1章 面向?qū)ο蟮母拍詈喗?
1.1  基本概念
1.2  對象及遺留系統(tǒng)
1.3  過程式編程與面向?qū)ο缶幊?br />1.4  由面向過程開發(fā)過渡到面向?qū)ο箝_發(fā)
1.4.1 過程式編程
1.4.2 面向?qū)ο缶幊?
1.5  究竟什么是對象
1.5.1 對象數(shù)據(jù)
1.5.2 對象行為
1.6  究竟什么是類
1.6.1 創(chuàng)建對象
1.6.2 屬性
1.6.3 方法
1.6.4 消息
1.7  使用類圖作為可視化工具
1.8  封裝和數(shù)據(jù)隱藏
1.8.1 接口
1.8.2 實現(xiàn)
1.8.3 接口/實現(xiàn)范式的一個真實示例
1.8.4 接口/實現(xiàn)范式的模型
1.9  繼承
1.9.1 超類和子類
1.9.2 抽象
1.9.3 is-a關(guān)系
1.10 多態(tài)
1.11  組合
1.11.1 抽象
1.11.2 has-a關(guān)系
1.12  結(jié)語
1.13  本章中使用的示例代碼
1.13.1 C#.NET版本的TestPerson類
1.13.2 C#.NET版本的TestShape類
第2章  如何以面向?qū)ο蟮姆绞竭M行思考
2.1  清楚接口和實現(xiàn)之間的區(qū)別
2.1.1 接口
2.1.2 實現(xiàn)
2.1.3 一個接口/實現(xiàn)示例
2.2  使用抽象思維設(shè)計接口
2.3  盡可能提供最小化的用戶接口
2.3.1 確定用戶?
2.3.2 對象行為
2.3.3 環(huán)境約束
2.3.4 識別公共接口
2.3.5 識別實現(xiàn)
2.4  結(jié)語
2.5  引用
第3章 高級的面向?qū)ο蟾拍?
3.1  構(gòu)造函數(shù)
3.1.1 什么是構(gòu)造函數(shù)調(diào)用
3.1.2 構(gòu)造函數(shù)中包含什么
3.1.3 默認構(gòu)造函數(shù)
3.1.4 使用多個構(gòu)造函數(shù)
3.1.5 設(shè)計構(gòu)造函數(shù)
3.2  錯誤處理
3.2.1 忽略問題
3.2.2 檢查問題并中止應(yīng)用程序
3.2.3 檢查問題并試圖恢復(fù)
3.2.4 拋出異常
3.3  作用域的重要性
3.3.1 局部屬性?
3.3.2 對象屬性
3.3.3 類屬性
3.4  操作符重載
3.5  多重繼承
3.6  對象操作
3.7  結(jié)語
3.8  引用
3.9  本章中使用的示例代碼
第4章 類的剖析
4.1 類名
4.2 注釋
4.3 屬性
4.4 構(gòu)造函數(shù)
4.5 訪問器
4.6 公共接口方法
4.7 私有實現(xiàn)方法
4.8 結(jié)語
4.9 引用
4.10 本章中使用的示例代碼
第5章 類設(shè)計指導(dǎo)
5.1 對現(xiàn)實世界系統(tǒng)建模
5.2 識別公共接口
5.2.1 最小化公共接口
5.2.2 隱藏實現(xiàn)
5.3 設(shè)計健壯的構(gòu)造函數(shù)(以及析構(gòu)函數(shù))
5.4 在類中設(shè)計錯誤處理
5.4.1 使用注釋給類加上文檔
5.4.2 構(gòu)造可以合作的對象
5.5 設(shè)計時請考慮重用
5.6 設(shè)計時請考慮擴展性
5.6.1 使用描述性的名稱
5.6.2 抽象不可移植的代碼
5.6.3 提供一種方式來復(fù)制和比較對象
5.6.4 保持盡可能小的作用域
5.6.5 類的職責(zé)與自身高度相關(guān)
5.7 設(shè)計時請考慮可維護性
5.7.1 在開發(fā)過程中使用迭代
5.7.2 測試接口
5.8 使用對象持久化
5.9 結(jié)語
5.10 引用
5.11 本章中使用的示例代碼
第6章 使用對象進行設(shè)計
6.1 設(shè)計指導(dǎo)
6.1.1 提供正確的分析
6.1.2 編寫工作陳述文檔
6.1.3 收集需求
6.1.4 開發(fā)用戶接口的原型
6.1.5 識別類
6.1.6 確定每個類的職責(zé)
6.1.7 確定類之間如何協(xié)作
6.1.8 創(chuàng)建類模型來描述系統(tǒng)
6.1.9 建立用戶接口原型
6.2 對象包裝
6.2.1 結(jié)構(gòu)化代碼
6.2.2 包裝結(jié)構(gòu)化代碼
6.2.3 包裝不可移植的代碼
6.2.4 包裝已有類
6.3 結(jié)語
6.4 引用
第7章 精通繼承和組合
7.1 重用對象
7.2 繼承
7.2.1 通用和特例
7.2.2 設(shè)計決策
7.3 組合
7.4 為什么封裝是面向?qū)ο蟮谋举|(zhì)
7.4.1 繼承如何減弱封裝
7.4.2 關(guān)于多態(tài)的一個具體例子
7.4.3 對象職責(zé)
7.4.4 抽象類、虛方法和協(xié)議
7.5 結(jié)語
7.6 引用
7.7 本章中使用的示例代碼
第8章 框架和重用:使用接口和抽象類進行設(shè)計
8.1 代碼:重用還是不重用
8.2 什么是框架
8.3 什么是契約
8.3.1 抽象類
8.3.2 接口
8.3.3 綜合運用
8.3.4 編譯器佐證
8.3.5 創(chuàng)建契約
8.3.6 系統(tǒng)插接點
8.4 一個電子商務(wù)示例
8.4.1 一個電子商務(wù)問題
8.4.2 非重用方式
8.4.3 電子商務(wù)解決方案
8.4.4 UML對象模型
8.5 結(jié)語
8.6 引用
8.7 本章中使用的示例代碼
第9章 創(chuàng)建對象及面向?qū)ο笤O(shè)計
9.1 組合關(guān)系
9.2 分階段構(gòu)建
9.3 組合類型
9.3.1 聚合
9.3.2 聯(lián)合
9.3.3 同時使用聯(lián)合和聚合
9.4 避免依賴
9.5 基數(shù)
9.5.1 多個對象聯(lián)合
9.5.2 可選的聯(lián)合
9.6 一個綜合性示例
9.7 結(jié)語
9.8 引用
第10章 創(chuàng)建對象模型
10.1 什么是UML
10.2 類圖結(jié)構(gòu)
10.3 屬性和方法
10.3.1 屬性
10.3.2 方法
10.4 訪問符號
10.5 繼承
10.6 接口
10.7 組合
10.7.1 聚合
10.7.2 聯(lián)合
10.8 基數(shù)
10.9 結(jié)語
10.10 引用
第11章 對象與可移植數(shù)據(jù):XML和JSON
11.1 可移植數(shù)據(jù)
11.2 XML
11.3 XML與HTML
11.4 XML和面向?qū)ο蟮恼Z言
11.5 在企業(yè)間共享數(shù)據(jù)
11.6 使用DTD驗證文檔
11.7 將DTD集成到XML文檔中
11.8 使用層疊樣式表
11.9 JavaScript對象標記
11.10 結(jié)語
11.11 引用
第12章 持久化對象:序列化、封送及關(guān)系型數(shù)據(jù)庫
12.1 持久化對象基礎(chǔ)
12.2 將對象保存到平面文件中
12.2.1 序列化文件
12.2.2 再次討論實現(xiàn)和接口
12.2.3 為什么不保存方法
12.3 序列化過程中使用XML
12.4 寫入關(guān)系型數(shù)據(jù)庫
12.5 結(jié)語
12.6 引用
12.7 本章中使用的示例代碼
第13章 Web服務(wù)、移動應(yīng)用及混合應(yīng)用中的對象
13.1 分布式計算的演進
13.2 基于對象的腳本語言
13.3 JavaScript驗證示例
13.4 網(wǎng)頁中的對象
13.4.1 JavaScript對象
13.4.2 網(wǎng)頁控制器
13.4.3 聲音播放器
13.4.4 電影播放器
13.4.5 Flash動畫
13.5 分布式對象及企業(yè)
13.5.1 公共對象請求代理體系結(jié)構(gòu)
13.5.2 Web服務(wù)的定義
13.5.3 Web服務(wù)代碼
13.5.4 表征狀態(tài)轉(zhuǎn)移
13.6 結(jié)語
13.7 引用
第14章 對象及客戶端/服務(wù)器端應(yīng)用程序
14.1 客戶端/服務(wù)器端方式
14.2 私有方式
14.2.1 序列化對象代碼
14.2.2 客戶端代碼
14.2.3 服務(wù)器端代碼
14.2.4 運行該私有的客戶端/服務(wù)器端示例
14.3 非私有方式
14.3.1 對象定義代碼
14.3.2 客戶端代碼
14.3.3 服務(wù)器端代碼
14.3.4 運行非私有客戶端/服務(wù)器端示例
14.4 結(jié)語
14.5 引用
14.6 本章中使用的示例代碼
第15章 設(shè)計模式
15.1 為什么使用設(shè)計模式
15.2 Smalltalk的模型/視圖/控制器
15.3 設(shè)計模式類型
15.3.1 創(chuàng)建型模式?
15.3.2 結(jié)構(gòu)型模式
15.3.3 行為型模式
15.4 反模式
15.5 結(jié)語
15.6 引用
15.7 本章中使用的示例代碼?

總結(jié)

以上是生活随笔為你收集整理的《面向对象的思考过程(原书第4版)》一 导读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。