第1章 面向對象思想
1. 1 為什么OOP這么流行
1. 2 語言和思維
1. 2. 1 愛斯基摩人和雪
1. 2. 2 關于計算機語言的一個例子
1. 2. 3 丘奇猜想和沃夫假說
1. 3 一個新的范例
1. 4 一種觀察世界的方式
1. 4. 1 代理和團體
1. 4. 2 消息和方法
1. 4. 3 責任
1. 4. 4 類和實例
1. 4. 5 類的層次--繼承
1. 4. 6 方法綁定與改寫
1. 4. 7 面向對象概念總結
1. 5 模擬計算
1. 5. 1 隱喻的力量
1. 5. 2 避免無限回歸
1. 6 一段簡史
小結
進一步閱讀材料
自學提問
練習
第2章 抽象
2. 1 抽象層次
2. 2 抽象的其他形式
2. 2. 1 部分分化
2. 2. 2 封裝和互換性
2. 2. 3 接口和實現
2. 2. 4 服務視角
2. 2. 5 復合法
2. 2. 6 特化分層
2. 2. 7 模式
2. 3 抽象機制的發(fā)展簡史
2. 3. 1 匯編語言
2. 3. 2 過程
2. 3. 3 模塊
2. 3. 4 抽象數據類型
2. 3. 5 以服務為中心的觀點
2. 3. 6 消息. 繼承和多態(tài)
小結
進一步閱讀材料
自學提問
練習
第3章 面向對象設計
3. 1 責任意味著無干擾
3. 2 小項目編程與大項目編程
3. 3 為什么從行為開始
3. 4 一個RDD實例
3. 4. 1 交互式智能廚房助手
3. 4. 2 通過場景工作
3. 4. 3 組件的標識
3. 5 CRC卡--記錄責任
3. 5. 1 給組件一個物理表示
3. 5. 2 "什么/誰"循環(huán)
3. 5. 3 文檔
3. 6 組件和行為
3. 6. 1 延遲決定
3. 6. 2 為變化做準備
3. 6. 3 繼續(xù)場景
3. 6. 4 交互圖表
3. 7 軟件組件
3. 7. 1 行為和狀態(tài)
3. 7. 2 實例和類
3. 7. 3 耦合性和內聚性
3. 7. 4 接口和實現--Parnas原則
3. 8 形式化接口
3. 9 設計表現
3. 10 實現組件
3. 11 組件集成
3. 12 維護和升級
小結
進一步閱讀材料
自學提問
練習
第4章 類和方法
4. 1 封裝
4. 2 類定義
4. 2. 1 C++. Java和C#語言
4. 2. 2 Apple Object Pascal和Delphi Pascal語言
4. 2. 3 Smalltalk語言
4. 2. 4 其他語言
4. 3 方法
4. 3. 1 類中方法的聲明次序
4. 3. 2 常量或不可變數據字段
4. 3. 3 定義和實現的分離
4. 4 關于類主題的變化
4. 4. 1 Oberon語言中不屬于類的方法
4. 4. 2 接口
4. 4. 3 屬性
4. 4. 4 向前定義
4. 4. 5 內部類(或嵌套類)
4. 4. 6 類的數據字段
4. 4. 7 作為對象的類
小結
進一步閱讀材料
自學提問
練習
第5章 消息. 實例和初始化
5. 1 消息傳遞語法
5. 2 靜態(tài)類型語言和動態(tài)類型語言
5. 3 從方法內部存取接收器
5. 4 對象的創(chuàng)建
5. 5 指針和內存分配
5. 6 構造函數
5. 6. 1 正統(tǒng)規(guī)范的類形式
5. 6. 2 常數值
5. 7 析構函數和終止器
5. 8 Smalltalk語言中的元類
小結
進一步閱讀材料
自學提問
練習
第6章 案例研究:八皇后問題
6. 1 八皇后問題
6. 2 使用生成器
6. 2. 1 初始化
6. 2. 2 找到解決方案
6. 2. 3 前進到下一位置
6. 3 用幾種語言實現八皇后問題
6. 3. 1 用Object Pascal語言實現八皇后問題
6. 3. 2 用C++語言實現八皇后問題
6. 3. 3 用Java語言實現八皇后問題
6. 3. 4 用Obieetive-C語言實現八皇后問題
6. 3. 5 用Smalltalk語言實現八皇后問題
6. 3. 6 用Ruby語言實現八皇后問題
小結
進一步閱讀材料
自學提問
練習
第7章 案例研究:臺球游戲
7. 1 臺球元素
7. 2 圖形對象
7. 2. 1 桌壁圖形對象
7. 2. 2 洞口圖形對象
7. 2. 3 球圖形對象
7. 3 主程序
7. 4 使用繼承
小結
進一步閱讀材料
自學提問
練習
第8章 繼承與替換
8. 1 關于繼承的直觀描述
8. 1. 1 "是一個"檢驗
8. 1. 2 使用繼承的原因
8. 2 不同語言中的繼承
8. 3 子類. 子類型和替換
8. 4 改寫和虛擬方法
8. 5 接口和抽象類
8. 6 繼承的形式
8. 6. 1 特化子類化(子類型化)
8. 6. 2 規(guī)范子類化
8. 6. 3 構造子類化
8. 6. 4 泛化子類化
8. 6. 5 擴展子類化
8. 6. 6 限制子類化
8. 6. 7 變體子類化
8. 6. 8 結合子類化
8. 6. 9 各種繼承形式小結
8. 7 關于繼承的變體
8. 7. 1 Java語言中的匿名類
8. 7. 2 繼承和構造函數
8. 7. 3 虛擬析構函數
8. 8 繼承的優(yōu)點
8. 8. 1 軟件可復用性
8. 8. 2 代碼共享
8. 8. 3 接口的一致性
8. 8. 4 軟件組件
8. 8. 5 快速原型法
8. 8. 6 多態(tài)和框架
8. 8. 7 信息隱藏
8. 9 繼承的代價
8. 9. 1 程序執(zhí)行速度
8. 9. 2 程序大小
8. 9. 3 消息傳遞的開銷
8. 9. 4 程序復雜性
小結
進一步閱讀材料
自學提問
練習
第9章 案例研究:紙牌游戲
9. 1 PlayingCard類
9. 2 數據類和視圖類
9. 3 游戲
9. 4 牌堆--使用繼承
9. 4. 1 缺省牌堆
9. 4. 2 花色堆
9. 4. 3 待用堆
9. 4. 4 丟棄堆
9. 4. 5 桌面堆
9. 5 多種形式的游戲
9. 6 圖形用戶界面
小結
進一步閱讀材料
自學提問
練習
第10章 子類和子類型
10. 1 可替換性
10. 2 子類型
10. 3 可替換性悖論
10. 4 構造子類化
10. 5 動態(tài)類型語言
10. 6 前置條件和后置條件
10. 7 改進語義
小結
進一步閱讀材料
自學提問
練習
第11章 靜態(tài)行為和動態(tài)行為
11. 1 靜態(tài)類型化和動態(tài)類型化
11. 2 靜態(tài)類和動態(tài)類
11. 2. 1 運行時類型決定
11. 2. 2 向下造型(反多態(tài))
11. 2. 3 非語言支持的運行時測試
11. 2. 4 檢驗是否理解消息
11. 3 靜態(tài)方法綁定和動態(tài)方法綁定
小結
進一步閱讀材料
自學提問
練習
第12章 替換的本質
12. 1 內存布局
12. 1. 1 最小靜態(tài)空間分配
12. 1. 2 最大靜態(tài)空間分配
12. 1. 3 動態(tài)內存分配
12. 2 賦值
12. 3 復制和克隆
12. 3. 1 Smalltalk語言和Objective-C語言中的復制
12. 3. 2 C++語言中的拷貝構造函數
12. 3. 3 Java語言中的克隆
12. 4 相同
12. 4. 1 相同和同一
12. 4. 2 相同檢驗的悖論
小結
進一步閱讀材料
自學提問
練習
第13章 多重繼承,
13. 1 分類化繼承
13. 2 多重繼承帶來的問題
13. 2. 1 名稱歧義
13. 2. 2 對替換的影響
13. 2. 3 Eiffel語言中的重定義
13. 2. 4 CLOS語言的類排序解決方案
13. 3 接口的多重繼承
13. 4 繼承于公共祖先
13. 5 內部類
小結
進一步閱讀材料
自學提問
練習
第14章 多態(tài)及軟件復用
14. 1 編程語言中的多態(tài)
14. 2 軟件復用機制
14. 2. 1 使用組合
14. 2. 2 使用繼承
14. 2. 3 組合和繼承的比較
14. 3 效率和多態(tài)
14. 4 軟件復用的普及會成為現實嗎
小結
進一步閱讀材料
自學提問
練習
第15章 重載
15. 1 類型簽名和范疇
15. 2 基于范疇的重載
15. 3 基于類型簽名的重載
15. 4 重定義
15. 5 多價
15. 6 多方法
小結
進一步閱讀材料
自學提問
練習
第16章 改寫
16. 1 標識改寫
16. 2 代替與改進
16. 2. 1 Smalltalk語言中的代替
16. 2. 2 Beta語言中的改進
16. 2. 3 改進與子類/子類型之間的差異
16. 2. 4 CADS語言中的封裝
16. 3 延遲方法
16. 4 改寫與遮蔽
16. 5 協(xié)方差與反協(xié)方差
16. 6 改寫的變體
16. 6. 1 Java語言中的final方法
16. 6. 2 C#語言中的版本化
小結
進一步閱讀材料
自學提問
練習
第17章 多態(tài)變量
17. 1 簡單多態(tài)變量
17. 2 接收器變量
17. 2. 1 多態(tài)變量在框架中的作用
17. 2. 2 Smalltalk語言中的端點比較
17. 2. 3 self和super
17. 3 向下造型
17. 4 純多態(tài)
小結
進一步閱讀材料
自學提問
練習
第18章 泛型
18. 1 模板函數
18. 2 模板類
18. 3 模板參數中的繼承
18. 4 案例研究:結合分離的類
小結
進一步閱讀材料
自學提問
練習
第19章 容器類
19. 1 動態(tài)類型語言中的容器
19. 2 靜態(tài)類型語言中的容器
19. 2. 1 類型化和復用之間的關系
19. 2. 2 替換和向下造型
19. 2. 3 使用替換和改寫
19. 2. 4 參數化類
19. 3 限制元素類型
19. 4 元素遍歷
19. 4. 1 迭代器循環(huán)
19. 4. 2 訪問器方法
小結
進一步閱讀材料
自學提問
練習
第20章 案例研究:標準模板庫
20. 1 迭代器
20. 2 函數對象
20. 3 樣例程序--庫存系統(tǒng)
20. 4 樣例程序--圖表
20. 4. 1 最短路徑算法
20. 4. 2 開發(fā)數據結構
20. 5 詞匯索引
20. 6 OOP的未來
小結
進一步閱讀材料
自學提問
練習
第21章 框架
21. 1 復用和特化
21. 1. 1 高級抽象和低級抽象
21. 1. 2 倒置庫
21. 2 樣例框架
21. 2. 1 Java Applet APl
21. 2. 2 模擬框架
21. 2. 3 事件驅動的模擬框架
小結
進一步閱讀材料
自學提問
練習
第22章 框架實例:AWT和Swing
22. 1 AWT的類繼承層次
22. 2 布局管理器
22. 3 監(jiān)聽器
22. 4 用戶界面組件
22. 5 案例研究:顏色顯示
22. 6 Swing組件庫
22. 6. 1 導入庫
22. 6. 2 不同的組件
22. 6. 3 不同的繪制協(xié)議
22. 6. 4 為窗口增加組件
小結
進一步閱讀材料
自學提問
練習
第23章 對象互連
23. 1 耦合和內聚
23. 1. 1 耦合的種類
23. 1. 2 內聚的種類
23. 1. 3 德墨特爾法則
23. 1. 4 類級別可視性與對象級別可視性
23. 1. 5 活動值
23. 2 子類客戶和用戶客戶
23. 3 存取控制和可視性
23. 3. 1 Smalltalk語言中的可視性
23. 3. 2 ObiectPascal語言中的可視性
23. 3. 3 C++語言中的可視性
23. 3. 4 Java語言中的可視性
23. 3. 5 Obiective-C語言中的可視性
23. 4 有意依賴性
小結
進一步閱讀材料
自學提問
練習
第24章 設計模式
24. 1 控制信息流
24. 2 描述模式
24. 3 迭代器
24. 4 軟件工廠
24. 5 策略
24. 6 單件
24. 7 組合
24. 8 裝飾器
24. 9 雙調度模式
24. 10 享元
24. 11 代理
24. 12 外觀
24. 13 觀察者
小結
進一步閱讀材料
自學提問
練習
第25章 反射和內省
25. 1 理解機制
25. 1. 1 類對象
25. 1. 2 字符串形式的類名稱
25. 1. 3 檢測對象類
25. 1. 4 通過類建立實例
25. 1. 5 檢測對象是否理解消息
25. 1. 6 類行為
25. 2 作為對象的方法
25. 3 修改機制
25. 3. 1 Smalltalk語言中的方法編輯,
25. 3. 2 Java語言中的動態(tài)類加載
25. 4 元類
小結
進一步閱讀材料
自學提問
第26章 分布式對象
26. 1 地址. 端口和套接字
26. 2 一個簡單的客戶朋艮務器程序
26. 3 多客戶端
26. 4 通過網絡傳輸對象
26. 5 更復雜的技術
小結
進一步閱讀材料
自學提問
練習
第27章 實現
27. 1 編譯器和解釋器
27. 2 作為參數的接收器
27. 3 繼承方法
27. 3. 1 多重繼承的問題
27. 3. 2 裁剪問題
27. 4 改寫方法
27. 5 名稱編碼
27. 6 分派表
27. 7 字節(jié)碼解釋器
27. 8 即時編譯
小結
進一步閱讀材料
自學提問
練習
附錄A 八皇后問題的源代碼
附錄B 臺球游戲的源代碼
附錄C 紙牌游戲的源代碼
術語表
參考文獻