《面向對象的思考過程(原書第4版)》一 導讀


7751f80caaf497b0f96e47b837fc11edcd00b31f


本節書摘來自華章出版社《面向對象的思考過程(原書第4版)》一書中的第3章,第3.2節,[美] 馬特·魏斯費爾德(Matt Weisfeld) 著黃博文 譯更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。

前  言
本書內容概要
正如書名所述,本書講述了面向對象思考的過程。選擇一本書的主題和書名是個很重要的決定,但如果主題概念性很強,決定就沒那么容易了。大部分書籍都只涉及了編程及面向對象設計的某個方面。一些主流的書闡述了諸如面向對象分析、面向對象設計、面向對象編程、設計模式、面向對象的數據結構(XML)、統一建模語言(UML)、面向對象Web開發、面向對象移動開發、進階面向對象編程語言等主題,當然也包括了其他與面向對象編程相關的主題。
然而,許多人仔細研究這些書后,都未曾注意到這些主題都建立在同一個基礎之上,即如何以面向對象的方式進行思考。從學生到軟件開發專業人員,往往雖然閱讀了這些書,但沒有花費充分的時間和精力來真正理解代碼背后的設計理念。
我認為僅學習一種特定的開發方法、一種編程語言或者一組設計工具并不能說明學會了面向對象這一概念。簡單來說,以面向對象方式編程就是一種思考方式。本書就討論這種面向對象的思考過程。
把面向對象的思考過程從語言、開發實踐以及工具中剝離出來并不是一個簡單的任務。在學習面向對象這一理念時,往往要求先深入學習一門編程語言。例如,很多年以前,大量的C語言程序員在沒有直接接觸面向對象概念之前,就開始通過C++語言來了解面向對象。其他軟件專家第一次接觸面向對象則是在演示文稿中使用UML創建對象模型。他們也沒有直接學習面向對象的概念。即使到現在,互聯網作為商業平臺的幾十年后,編程書籍以及專業的培訓材料并沒有先介紹面向對象這一概念。
學習面向對象的概念與學習使用面向對象語言進行編程有著巨大差異,理解這點很重要。我在編寫本書第1版前就意識到了這點。當我閱讀Craig Larman的文章《What the UML Is-and Isn’t》時,他指出:
但是,在軟件開發工程和UML繪圖語言領域,讀寫UML標記的能力有時候好像等同于面向對象的分析和設計能力。事實當然并非如此,后者比前者更加重要。因此我推薦先學習面向對象分析和設計的相關教學資料,它優先于學習使用UML標記的相關工具。
因此,盡管學習一門建模語言是非常重要的步驟,但先學習面向對象的技能更加重要。如果未完全理解面向對象概念前就學習UML,這就像還未了解任何與電路相關的知識就開始學習電路圖一樣。
學習編程語言也有相同的問題。如前所述,很多C語言程序員還未直接了解任何面向對象的概念,就想通過使用C++語言來達到面向對象的境界。在面試中經常會出現這樣的情況,很多自詡C++程序員的開發人員只是會使用C++編譯器的C程序員。甚至現在,諸如C#.NET、VB.NET、Objective-C以及Java等語言已經相當普及了,工作面試中的一些關鍵問題可以迅速暴露出這些程序員缺乏面向對象的思想。
Visual Basic的早期版本并不是面向對象的。C語言也不是面向對象的。而C++在設計時就向后兼容C語言。因此,使用C++編譯器編寫只含C語言語法的程序,而放棄使用C++的面向對象功能是完全可能的。Objective-C是標準ANSI C語言的一個擴展。更糟糕的是,程序員可能使用勉強夠用的面向對象功能把程序寫成了既不是面向對象的也不是面向過程的四不像產品。
因此,在學習使用面向對象的開發環境之前,先學習基本的面向對象概念至關重要。與其直接學習一門編程語言(比如Objective-C、VB .NET、C++、C# .NET或Java)或建模語言(如UML),還不如把時間花在學習面向對象的思考過程上。
我在使用C語言編程很多年后,于20世紀80年代后期開始參加Smalltalk語言的學習課程。當時我所在的公司認為公司的軟件開發人員應該學習這個極具前途的技術。老師授課時說面向對象的范式是全新的思維方式(事實上它從20世紀60年代就已經萌芽了)。他接著說,雖然幾乎我們所有人都是很優秀的程序員,但還有10%~20%的人從來沒有按照面向對象的方式做事。如果該說法確實正確,那么很可能是因為很多優秀的程序員從沒有花時間進行編程范式的轉變,沒有深入學習面向對象概念。
第4版中的新增內容
正如在前言中經常提及的一樣,第1版中我的愿景僅僅圍繞概念本身,而不是具體的新興技術。盡管我在第2版、第3版以及第4版仍然堅持該目標,但也引入了幾個章節講述關于應用程序的主題,這些主題與面向對象概念契合度很高。第1~10章涵蓋了基本的面向對象概念,第11~15章將這些概念應用到了一些常用的面向對象技術中。例如,第1~10章提供了面向對象的基礎課程(比如封裝、多態、繼承等),而第11~15章則介紹了一些實際應用。
第4版相對于之前的版本拓展了很多主題。以下列出了改進及更新的主題:
移動設備開發,包括手機應用、移動應用以及混合開發等。
iOS環境下的Objective-C代碼示例。
使用XML及JSON實現可讀性強的數據交換。
使用CSS、XSLT等技術實現數據渲染與轉換。
Web服務,包括簡單對象訪問協議(OAP)、RESTful Web服務等。
客戶端/服務器端技術以及封送對象。
持久化數據和序列化對象。
很多章節都擴充了代碼示例,在Pearson的網站可以在線查看用Java、C# .NET、VB .NET及Objective-C編寫的代碼示例。
本書中的源碼
本書中提到的示例代碼可以在華章網站(www.hzbook.com)下載。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395982.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html文件下的flag,推薦一個SAM文件中flag含義解釋工具

SAM是Sequence Alignment/Map 的縮寫。像bwa等軟件序列比對結果都會輸出這樣的文件。samtools網站上有專門的文檔介紹SAM文件。具體地址:http://samtools.sourceforge.net/SAM1.pdf很多人困惑SAM文件中的第二列FLAG值是什么意思。根據文檔介紹我們可以計算&#xff…

科大訊飛往屆生招聘_我從飛往西雅圖的最后一波設計采訪中學到的東西

科大訊飛往屆生招聘by Tiffany Eaton蒂芙尼伊頓(Tiffany Eaton) 我從飛往西雅圖的最后一波設計采訪中學到的東西 (What I learned from flying to Seattle for Microsoft’s final wave of design interviews) Before I tell you about my onsite interview with Microsoft, I…

{0,1,2.....Fmax} 每個數出現的次數

給定一個非負整數數組&#xff0c;統計里面每一個數的出現次數。我們只統計到數組里最大的數。 假設 Fmax &#xff08;Fmax < 10000&#xff09;是數組里最大的數&#xff0c;那么我們只統計 {0,1,2.....Fmax} 里每個數出現的次數。 輸入第一行n是數組的大小。1 < n <…

mysql死鎖查詢_Mysql 查看死鎖,解除死鎖 方式

解除正在死鎖的狀態有兩種方法&#xff1a;第一種&#xff1a;1.查詢是否鎖表show OPEN TABLES where In_use > 0;2.查詢進程(如果您有SUPER權限&#xff0c;您可以看到所有線程。否則&#xff0c;您只能看到您自己的線程)show processlist3.殺死進程id(就是上面命令的id列)…

TCP/IP WebSocket MQTT

http://www.cnblogs.com/shanyou/p/4085802.html TCP/IP, WebSocket 和 MQTT 轉載于:https://www.cnblogs.com/wujing-hubei/p/5491436.html

《游戲編程模式》一7.8 并發狀態機

本節書摘來異步社區《游戲編程模式》一書中的第7章&#xff0c;第7.8節&#xff0c;作者&#xff1a; 【美】Robert Nystrom &#xff08;尼斯卓姆&#xff09; 譯者&#xff1a; 趙衛兵 , 許新星 , 姜召陽 , 陳侃 , 屈光輝 , 鄭炯彬 責編&#xff1a; 陳冀康&#xff0c;更多章…

洛陽師范學院計算機科學與技術專業怎么樣,2019洛陽師范學院專業排名

洛陽師范學院是一所省屬普通高等本科院校&#xff0c;學校大力實施"人才興校"戰略&#xff0c;形成了一支結構合理、素質優良的師資隊伍。為了讓大家更好的了解這所大學的專業排名&#xff0c;下面是學習啦小編給大家帶來的洛陽師范學院專業排名&#xff0c;供大家參…

MobaXterm 錯行,亂碼

最近使用MobaXterm ssh,發現進入ssh顯示中文沒問題。但如果用VIM編輯文件時如果有中文&#xff0c;修改插入操作有時就會有串行亂碼情況&#xff0c;改vim編碼也不行。都沒有完美解決。最后發現只需要在MobaXterm 的設置中把字體換一個問題就都解決了。 轉載于:https://www.cnb…

一個數據倉庫轉型者眼中的數據挖掘

一個數據倉庫轉型者眼中的數據挖掘 對于大多數非從業者或者初學者來說&#xff0c;數據倉庫&#xff08;Data Warehousing&#xff09;與數據挖掘&#xff08;Data Mining&#xff09;是很容易混淆的兩個概念。有個形象的比喻說&#xff1a;如果把數據倉庫比做一個大型的礦坑&a…

mysql的告警日志_運維日記|MySQL關于aborted告警日志的分析

又是一個季度一次的現場巡檢&#xff0c;期待數據庫能跑的又快又穩&#xff0c;畢竟這是對DBA最大的饋贈了。?結果不遂人意發現在錯誤日志內存在大量的如下報錯&#xff1a;查看當前數據庫的狀態值&#xff1a;查看數據庫關于數據庫會話的關鍵參數&#xff1a;數據庫環境及相關…

2017年Spring發布了30個新的Android庫,值得您關注

by Michal Bialas由Michal Bialas 2017年Spring推出的30個最酷的Android庫 (The 30 Coolest Android Libraries from Spring 2017) These are my 30 favorite new Android libraries that have come out since March 2017. Some of them aren’t production ready yet, but yo…

《異構信息網絡挖掘: 原理和方法(1)》一第2章 基于排名的聚類

本節書摘來自華章出版社《異構信息網絡挖掘&#xff1a; 原理和方法(1)》一書中的第2章&#xff0c;作者&#xff3b;美&#xff3d;孫藝洲&#xff08;Yizhou Sun&#xff09;韓家煒&#xff08;Jiawei Han&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”…

html怎樣將單元格的字豎式,數學豎式計算的標準格式是怎樣的?需要注意哪些問題?...

小學階段數學計算題是重中之重&#xff0c;也是為日后打基礎的時間段&#xff0c;所以在小學的時候&#xff0c;要讓孩子熟練掌握數學計算。數學計算在這段時期一般比較簡單&#xff0c;通常情況下學生可以采用口算、心算的形式&#xff0c;但是有的學生因為這兩個能力不強。于…

Windows類標識符及其妙用

Windows類標識符 百度百科這樣解釋&#xff1a; Windows的類標識符class identifier也稱為CLASSID或CLSID&#xff0c;是與某一個類對象相聯系的唯一標記(UUID)。一個準備創建多個對象的類對象應將其CLSID注冊到系統注冊數據庫的任務表中&#xff0c;以使客戶能夠定位并裝載與該…

mysql用創建的用戶登陸并修改表格_MySQL 基礎學習二:創建一個用戶表,并增刪改查...

MySQL 基礎學習二&#xff1a;創建一個用戶表&#xff0c;并 增刪改查提示:MySQL 命令建議都用大寫&#xff0c;因為小寫運行時&#xff0c;還是翻譯成大寫的。第一步,創建一個用戶表1,打開控制臺,進入數據庫C:\Users\Administrator>MySQL -u root -p2,查看有什么數據庫MySQ…

《軟件工程(第4版?修訂版)》—第1章1.5節 系統的方法

本節書摘來自異步社區《軟件工程&#xff08;第4版?修訂版&#xff09;》一書中的第1章1.5節 系統的方法&#xff0c;作者【美】Shari Lawrence Pfleeger , 【加】Joanne M.Atlee&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 系統的方法軟件工程&am…

2-2 用Python爬取銀河演員網上的演員參演電影的信息進行抓取

腳本中用到的actors_use.csv為之前從豆瓣上抓取的演員列表。 1 galaxyactors.py2 # -*- coding: utf-8 -*-3 #該腳本可以按照文件actors_use.csv中給出的演員的姓名4 #對銀河演員網http://www.8fkd.com/上的演員參演電影的信息進行抓取5 #信息包括演員參演電影和電影日期&#…

在c語言中,以r方式不能打開并不存在的文件,C語言文件選擇題

C語言文件選擇題(答案在最后)1、標準庫函數fgets(s,n,f)的功能是A) 從文件f中讀取長度為n的字符串存入指針s所指的內存B) 從文件f中讀取長度不超過n-1的字符串存入指針s所指的內存C) 從文件f中讀取n個字符串存入指針s所指的內存D) 從文件f中讀取長度為n-1的字符串存入指針s所指…

動腦2017android_您肯定要在2017年初嘗試的25個新Android庫

動腦2017androidby Michal Bialas由Michal Bialas 您肯定要在2017年初試用的25個Android庫 (25 Android libraries you definitely want to try out in early 2017) This is a list of 25 best Android libraries released in January and February 2017. All of these are wo…

linux中安裝多個mysql_liunx系統下安裝多個MySql數據庫并做主從配置

在網上搜索了很多資料&#xff0c;都沒有看到像樣的文檔&#xff0c;思路不是很清晰&#xff0c;對第一次安裝的朋友來說較為困難&#xff0c;經過長時間的安裝嘗試和查詢網上零碎的知識點&#xff0c;終于成功的完成Linux系統下多MySql數據庫安裝和主從配置&#xff0c;現在分…