本書系統地講述了面向對象技術的相關內容,包括面向對象的基本概念、面向對象開發的流程、面向對象的各種技巧,以及如何在實際開發項目中應用面向對象技術進行設計和開發。在講述相關知識或技術的時候,除了從“是什么”這個角度進行介紹外,更加著重于從“為什么”和“如何用”這兩個角度進行剖析,力爭讓讀者做到“知其然,并知其所以然”,從而達到在實踐中既能正確又能優秀地應用面向對象的相關技術和技巧。
本書內容涵蓋面向對象技術的方方面面,由淺入深,不同水平的讀者都能從書中獲益。
l 如果你是剛入門的程序員,則書中通俗易懂的概念和方法,完整的面向對象開發流程,能夠幫助你快速掌握面向對象開發的基本技巧,從容不迫地完成開發任務;
l 如果你已經初步掌握了面向對象開發的基本方法和步驟,則書中詳細闡述的面向對象技術的各種技巧,例如SOLID原則、設計模式、UML等,能夠幫助你快速提升自己的設計和開發水平;
l 如果你有了一定經驗,能夠熟練應用各種面向對象技術和技巧,卻沒有深入地探索,則書中對面向對象獨辟蹊徑的解讀,能夠讓你“知其然,并知其所以然”,從而在晉升或者面試的時候游刃有余。
適讀人群 :本書內容涵蓋面向對象技術的方方面面,由淺入深,不同水平的讀者都能從書中獲益。 ?\t如果你是剛入門的程序員,則書中通俗易懂的概念和方法,完整的面向對象開發流程,能夠幫助你快速掌握面向對象開發的基本技巧,從容不迫地完成開發任務; ?\t如果你已經初步掌握了面向對象開發的基本方法和步驟,則書中詳細闡述的面向對象技術的各種技巧,例如SOLID原則、設計模式、UML等,能夠幫助你快速提升自己的設計和開發水平; ?\t如果你有了一定經驗,能夠熟練應用各種面向對象技術和技巧,卻沒有深入地探索,則書中對面向對象獨辟蹊徑的解讀,能夠讓你“知其然,并知其所以然”,從而在晉升或者面試的時候游刃有余。 1)面向對象基礎
通過對面向對象相關的歷史、發展、與面向過程的對比等相關背景知識的介紹,讓讀者對面向對象有一個更完整的認識;并深入的闡述了面向對象的各種概念,讓讀者“知其然并知其所以然”
2)面向對象方法
通過一個實例,完整的介紹面向對象相關技術如何在軟件開發流程中落地,整個面向對象的開發流程一環扣一環,步步為營,讓讀者避免“拍腦袋”、“頭腦風暴”式的開發方式
3)面向對象技巧
對“內聚耦合”、“設計模式”、“設計原則”、“UML”等最常見的面向對象技術進行了深入和別具一格的闡述,讓讀者不但知道“What”(是什么),還能知道“Why”(為什么)和“How”(如何用)
4)面向對象架構實戰
通過在朋友圈增加踩、ZooKeeper的源碼分析兩個實戰案例展示如何在實際開發項目中使用面向對象方法。
前 言
我最早接觸“面向對象”這個詞是在大學的“C++語言”這門選修課上,當時的教材分為兩部分,前面一部分講C語言編程,后面一部分講C++的面向對象特性。當時覺得“面向對象”這個詞很有意思,但對“面向對象”的理解和認識很粗淺,認為面向對象就是寫class。
工作后,我開始真正地在業務開發中應用面向對象技術,最初也只是按照寫class的方式去應用面向對象,但越來越發現不對勁兒,自己的疑惑也越來越多,例如:
l 為什么要這樣寫class,不能那樣寫class,反正最后都能完成功能啊?
l 為什么我說要設計這個class,你說要設計那個class,標準是什么?
l 客戶需求都是由自然語言描述的,根本沒有類和繼承這些面向對象的概念,那這些設計又是如何得出的呢?是拍腦袋還是靠天才的創造,還是有章可循?
l 如何判斷面向對象的設計做得好還是不好?
帶著這些問題,我開始真正地去探索面向對象的世界,于是一頭扎進去,發現了一個精彩且紛繁復雜的世界,各種各樣的技術撲面而來,讓人目不暇接:設計模式、SOLID設計原則、UML、Java、C++……費了九牛二虎之力,好不容易把這些啃完了,我自信滿滿地以為掌握了面向對象的精髓,于是準備到業務開發中大展拳腳,實踐后卻發現自己只是掌握了一大堆的技術名詞,例如“封裝”“繼承”“工廠模式”“開閉原則”,但還是“知其然,不知其所以然”,在實際開發過程中依然不能很好地應用這些技術。
除此之外,不管采用“瀑布流程”,還是“敏捷流程”,軟件開發流程都可以簡單地分為需求分析、系統設計、編碼實現、測試部署這幾個階段。在這些不同的階段,面向對象起什么作用呢?如何在不同的階段應用面向對象技術呢?我曾經帶著這些疑惑去問“大牛”,但沒人能夠清楚地回答;也曾翻閱各種面向對象書籍,但沒有找到確切的答案。
雖然沒有直接找到答案,但在思考和探索的過程中,我學到了更多的知識,掌握了更多的技能,接納了更多的思想。隨著我對面向對象思想和技術的理解逐漸加深,加上我在工作中不斷地實踐,很多問題我自己慢慢地竟然想通了,同時形成了一套完整的面向對象方法論。
在這個過程中,我有很多疑惑,甚至有很多痛苦,投入了大量精力,是對技術的熱愛支撐著我一直探索下去,但我相信大部分程序員沒有這么大的興趣去探索,也沒有那么多的時間可以投入,所以我寫成這本書,讓更多的程序員更好地掌握面向對象思想和技巧,享受程序人生,實現自己的夢想!
李運華
阿里前資深技術專家(P9),15年軟件設計開發經驗,曾就職于華為、UCWEB、阿里巴巴、螞蟻金服,承擔架構設計、架構重構、技術團隊管理、技術培訓等職責;專注于開源技術、系統分析、架構設計,對互聯網技術的特點和發展趨勢有較深入的研究和理解,先后負責過阿里游戲異地多活、飛鴿消息隊列、交易平臺解耦、螞蟻國際澳門錢包等項目,對于高性能、高可用、業務架構、系統解耦等有豐富的經驗,著有《面向對象葵花寶典:思想、技巧與實踐》、《從零開始學架構》2本書籍,極客時間專欄《從0開始學架構》作者。
目 錄
第1部分 面向對象基礎
第1章 面向對象概述
1.1 程序設計思想的發展
1.2 面向對象語言的發展歷史
1.3 面向過程
1.4 面向對象
1.5 為什么要面向對象
1.6 面向對象的應用范圍
1.7 面向對象的迷思
1.7.1 面向對象會導致性能降低?
1.7.2 面向對象語言=面向對象編程?
1.8 小結
第2章 面向對象理論
2.1 類
2.2 對象
2.3 接口
2.4 抽象類
2.5 抽象
2.6 三大核心特征
2.6.1 封裝
2.6.2 繼承
2.6.3 多態
2.7 小結
第2部分 面向對象方法
第3章 面向對象分析和設計全流程概述
第4章 需求模型
4.1 需求詳解
4.2 需求的重要性
4.3 需求分析
4.3.1 需求分析的目的
4.3.2 需求分析的方法
4.4 用例方法
4.4.1 用例的具體寫法
4.4.2 要畫圖嗎
4.5 功能
4.6 用例圖的陷阱
4.7 SSD
4.8 常見問題解答
4.9 小結
第5章 領域模型
5.1 領域建模三字經
5.2 找名詞
5.3 加屬性
5.4 連關系
5.5 常見問題解答
5.6 小結
第6章 設計模型
6.1 設計模型總覽
6.2 類模型
6.2.1 第一步(照貓畫虎):領域類映射
6.2.2 第二步(精雕細琢):應用設計原則和設計模式
6.2.3 第三步(照本宣科):拆分輔助類
6.3 動態模型
6.3.1 模型分類
6.3.2 建模實踐
6.3.3 建模技巧
6.4 小結
第7章 實現模型
7.1 編程語言的差異性
7.2 C++
7.2.1 類
7.2.2 訪問控制
7.2.3 繼承
7.2.4 多態
7.2.5 抽象類
7.2.6 接口
7.3 Java
7.3.1 類
7.3.2 訪問控制
7.3.3 繼承
7.3.4 多態
7.3.5 抽象類
7.3.6 接口
7.4 小結
第3部分 面向對象技巧
第8章 設計原則
8.1 內聚
8.1.1 內聚究竟是什么
8.1.2 內聚的分類
8.2 耦合
8.2.1 耦合究竟是什么
8.2.2 耦合的分類
8.3 高內聚低耦合
8.4 類設計原則
8.4.1 SRP
8.4.2 OCP
8.4.3 LSP
8.4.4 ISP
8.4.5 DIP
8.4.6 如何應用設計原則
8.4.7 NOP
8.5 小結
第9章 設計模式
9.1 設計模式簡介
9.2 設計模式只是一把錘子
9.3 設計模式之道
9.3.1 知易行難―設計模式應用的問題
9.3.2 撥云見日―尋找設計模式之道
9.3.3 庖丁解牛―解析設計模式之道
9.3.4 舉一反三―活學活用設計模式之道
9.4 原則vs模式
9.5 模式詳解
9.5.1 Prototype模式
9.5.2 Decorator模式
9.5.3 Facade模式
9.5.4 Observer模式
9.6 小結
第10章 UML
10.1 UML簡介
10.2 UML只是語言
10.3 UML應用
10.4 需求分析階段
10.4.1 用例圖
10.4.2 用例圖的關系
10.5 設計階段
10.5.1 類圖
10.5.2 類關系圖
10.5.3 動態圖
10.5.4 結構圖
10.6 部署階段
10.7 小結
第4部分 面向對象實戰
第11章 實戰案例:朋友圈“踩”
11.1 需求模型
11.1.1 5W分析
11.1.2 1H分析
11.1.3 8C分析
11.1.4 功能列表
11.2 領域模型
11.2.1 找名詞
11.2.2 加屬性
11.2.3 連關系
11.3 設計模型
11.3.1 系統設計
11.3.2 詳細設計
11.4 代碼模型
11.5 小結
第12章 實戰案例:ZooKeeper源碼分析
12.1 ZooKeeper介紹
12.2 需求模型
12.3 領域模型
12.4 設計模型
12.5 代碼模型
12.6 小結