-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

代碼結構

( 簡體 字)
作者:魏家明類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社代碼結構 3dWoo書號: 44917
詢問書籍請說出此書號!

缺書
NT售價: 245

出版日:8/1/2016
頁數:280
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121296031
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

序言
通過編程語言可以設計兩種系統:軟件系統和硬件系統。例如,使用C語言設計操作系統和應用軟件,使用Verilog設計ASIC芯片和FPGA應用。
系統的生命周期包含兩個階段:開發期和運營期。在開發期,公司投入大量的人力和物力用于開發系統,所以總是希望系統能發揮最大的能力;在運營期,為了盡可能地延長系統的運營時間,就需要投入大量的工作進行系統維護。
系統維護一般包括三大類:一是糾正性維護,用來修改系統中存在的錯誤和缺陷;二是適應性維護,為了讓系統適應不斷變化的環境,需要對系統進行修改和擴充;三是完善性維護,為了讓系統提升性能、擴大功能、拓展應用范圍,需要對系統進行擴充和移植。
在這三大類的系統維護工作中,第二類和第三類維護所占的份額最大,約占總維護工作的80%左右。所以,系統的可維護性是首要考慮的問題,系統的運營過程就是維護系統生命價值的過程。根據調查表明,系統維護成本已占到系統生命周期成本的70%以上。這表明系統維護的難度越來越大,已成為目前系統開發所面臨的最大問題。
影響系統維護的方面有很多:系統架構設計不合理、不靈活,難以修改和擴充,編寫代碼時不注意代碼的內在質量,代碼可讀性和可理解性差,缺乏相關的文檔資料,代碼和文檔不相符合,員工頻繁離職導致工作脫節等。
隨著系統開發越來越復雜,就需要采取科學的管理方法和優秀的設計技術,嚴格把控系統設計的質量,使得系統設計按照有條不紊的方式進行,提高代碼編寫的生產率,提高代碼的可靠性、可讀性、可理解性和可維護性,從而降低系統開發和維護的成本。
為了設計易于維護的系統,就要設計出通用、靈活、易于維護的系統架構,系統設計模塊化,模塊高內聚低耦合,遵守編碼風格,優化代碼結構,提高代碼設計的質量,保證代碼的可讀性、可理解性、可測試性、可維護性、可移植性等內在特性,從而降低系統的維護難度,延長系統運營的生命周期。
作者根據上面這些開發和維護的需求,對實際代碼設計進行分析總結,同時閱讀多位編程大師的書籍,查找大量的資料,從而完成了本書的編寫。作者在本書中討論了這些內容:代碼中存在的各種問題,編程時要遵循的原則,編程時要注重格式、注釋和名字,如何讓表達式和控制流簡單易讀,如何消除重復冗余的代碼,如何切分代碼和少寫代碼,C語言的一些要素等。
讀者通過閱讀本書,可以規范代碼設計,提高設計能力,優化代碼結構,提高代碼的可讀性,從而提高代碼的各種特性。
GigaDevice Semiconductor (Beijing) Inc.
北京兆易創新科技股份有限公司
副總經理 曹堪宇博士
2016年5月12日

前言
這是一本向編程大師致敬的書,也是一本對代碼設計思考的書,還是一本對實際代碼設計有幫助的書。
Martin Fowler said:“Any fool can write code that a computer can understand. Good programmers write code that humans can understand。”
有些人花了很大的精力編寫代碼,但只是滿足于代碼能工作就行,從未想過讓代碼有好的結構和可讀性,也就不會花費精力調整代碼,從而導致代碼很糟糕。其實,沒什么比糟糕的代碼更差勁的了,因為糟糕的代碼只會降低代碼的可讀性,只會拖團隊的后腿,只會讓系統的成本增加。
系統的成本在于長期維護的成本,這是因為為了盡量降低維護時出現缺陷和錯誤,就有必要透徹地理解系統在干什么。當系統變得越來越復雜,設計人員就需要花費越來越多的時間來理解系統,但還是可能會有很多的困惑和誤解,而代碼中存在的各種各樣的問題還會加劇設計人員對代碼的困惑和誤解。
代碼設計中存在很多問題,例如命名混亂、名實不副、格式混亂、注釋混亂、重復冗余、臃腫龐大、晦澀難懂、過度耦合、濫用變量、嵌套太深、代碼混雜、太多警告、過度設計、陳舊腐敗等,這些都是在代碼結構設計上出了問題,這些問題就像“死氣沉沉的沼澤”一樣,讓設計人員痛苦不堪,艱難地跋涉。
代碼設計中存在的各種問題,會影響代碼的設計質量,影響代碼的靈活性、可讀性、可理解性、可維護性、可測試性、可移植性、可重用性等,還會影響設計人員的干勁與活力,甚至影響設計人員間的協作精神。
所以代碼設計應該具有良好的代碼結構,具有良好的可讀性和表達力,能夠清晰地表達設計者的意圖,同時也是對工作的負責,對團隊的尊敬。設計人員在理解代碼時花費的時間越少,就越能減少設計缺陷和錯誤,越能減少維護成本,同時設計者本人也會贏得其他人員的尊敬。
本書針對如何優化代碼結構,通過以下5個部分進行討論。
1)編程問題與原則:本部分討論代碼質量、代碼問題、人員問題、編程原則和編程之道,因為只有清楚了存在的問題,掌握了編程原則,才有可能寫出更好的代碼。
2)編程格式與風格:本部分討論格式優美、注釋合理、名字定義等方面,還介紹Emacs的使用,這些方面對設計人員非常重要。
3)讓代碼更容易讀:本部分討論如何讓編寫出的代碼更容易閱讀,包括消除警告、精心用變量、表達式易讀、控制流易讀、設計好函數。
4)如何做代碼重構:本部分討論代碼重構的好處和方法,包括消除重復、代碼切分、少寫代碼、簡化代碼,還討論代碼生成、代碼測試。
5)C語言一些要素:本部分討論C語言的一些要素,討論一些容易混淆和出錯的地方,還討論C語言的一些好用法。
如果你沒有優化代碼結構的意愿,那么說再多也沒用,當你看見自己混亂的代碼時,你也不會感到害臊;當你看見別人優美的代碼時,你也不會有任何感覺。
如果你有優化代碼結構的意愿,就要注重編碼格式、名字定義、代碼易讀、消除冗余、代碼重構等方面的學習,并積極實踐這些方法,從一點一滴做起,最后就會獲得很好的代碼結構。
本書舉例主要以C語言為主,但也會有Verilog和Perl的例子。有些人覺得它們是三種完全不同應用的語言,竟然在一本書里描述,可能覺得不可接受,但是代碼設計都有共性,都需要注意代碼結構,關鍵在于靈活掌握這些設計原則,那么對任何編程語言你都會游刃有余。
衷心地感謝曹堪宇博士,他在百忙之中為本書題寫了序言,他帶領我們做系統設計的時候,我深深地被他的精益求精的精神所打動。
衷心地感謝我的朋友燕雪松、張茜歌等人幫我審稿,幫我在書中找到好多的缺陷和錯誤。
衷心地感謝網上的朋友們,因為我采用了很多的網上資料,感謝你們的無私奉獻。
衷心地感謝電子工業出版社的支持,正是由于策劃編輯牛平月的密切聯系和各位編輯的認真工作,才使得本書得以順利地與讀者見面。
如果您在本書中發現有缺陷或者錯誤的地方,或者您對本書存有模糊或者疑惑的地方,請通過QQ或者郵件與我聯系,我的QQ號碼是943609120,您的任何反饋都是令人歡迎的。我還建立了一個名為“代碼結構”的QQ群,群號碼是482433665,歡迎大家加入,共同探討各種與代碼設計有關的各種問題。


魏家明
2016年6月30日
內容簡介:

本書對如何優化代碼結構做了深入的探討,分為五個部分:編程問題與原則、編程格式與風格、如何讓代碼更容易讀、如何做代碼重構和C語言的一些要素。本書對這些部分做了重點探討:代碼中存在的各種問題,編程時要遵循的原則,編程時要注重格式、注釋和名字,如何讓表達式和控制流簡單易讀,如何消除代碼中的重復冗余,如何切分代碼和少寫代碼等。另外,本書還探討了C語言設計中的一些要素和常見問題。

目錄:

第一部分 編程問題與原則
  
  

第1章 美的設計 2
1.1 美學觀點 2
1.2 代碼可讀 2
1.3 適用范圍 3
第2章 代碼質量 4
2.1 外在特性 4
2.2 內在特性 4
2.3 一個故事 5
2.4 提升質量 5
第3章 代碼問題 7
3.1 最混亂的 7
3.2 命名混亂 8
3.3 名實不副 8
3.4 格式混亂 9
3.5 注釋混亂 9
3.6 重復冗余 9
3.7 臃腫龐大 9
3.8 晦澀難懂 10
3.9 過度耦合 10
3.10 濫用變量 10
3.11 嵌套太深 10
3.12 代碼混雜 10
3.13 不確定性 11
3.14 太多警告 11
3.15 雞同鴨講 11
3.16 過度設計 11
3.17 基礎不好 11
3.18 陳舊腐敗 12
3.19 停滯不前 12
3.20 不可擴充 12
3.21 最后總結 12
第4章 人員問題 13
4.1 思維定勢 13
4.2 思維頑固 14
4.3 小中見大 14
4.4 懶蟲心理 14
4.5 粗枝大葉 15
4.6 巧合編程 15
4.7 應付差事 15
4.8 固步自封 15
4.9 疲憊不堪 15
4.10 環境混亂 16
4.11 管理失職 16
4.12 個人性格 16
第5章 編程原則 17
5.1 高內聚低耦合 17
5.2 設計模式 18
5.3 編碼風格 19
5.4 干干凈凈 19
第6章 編程之道 21
6.1 注重質量 21
6.2 遵守規則 22
6.3 簡潔編程 22
6.4 整潔編程 23
6.5 快樂編程 24
6.6 團隊協作 25
6.7 測試驅動 25
6.8 考慮全局 25
6.9 代碼切分 26
6.10 代碼重構 26
6.11 深入學習 27
6.12 尋求詩意 27
6.13 程序員節 28
  
  
  
第二部分 編程格式與風格
  
  

第7章 使用Emacs 30
7.1 Emacs介紹 30
7.2 Emacs安裝 31
7.3 常用快捷鍵 31
7.4 筆者的“.emacs” 32
7.5 cua-mode 33
7.6 shell buffer 34
第8章 快速排序 35
8.1 算法簡介 35
8.2 C/C++語言 35
8.3 Java 36
8.4 Perl 36
8.5 Verilog 37
第9章 格式優美 39
9.1 合理安排 39
9.2 橫向縮進 40
9.3 縱向對齊 43
9.4 順序書寫 44
9.5 分組成塊 45
9.6 添加空白 46
9.7 書寫語句 47
9.8 書寫表達式 47
9.9 Verilog部分 48
9.10 保持一致 49
9.11 代碼例子 50
第10章 注釋合理 52
10.1 無用的注釋 52
10.2 有用的注釋 58
10.3 如何寫注釋 62
第11章 名字定義 65
11.1 命名方法 65
11.2 命名 67
11.3 命名規則 73
11.4 名字使用 77
11.5 SPEC定義 77
  
  
  
第三部分 讓代碼更容易讀
  
  

第12章 消除警告 84
12.1 不可忽視 84

12.2 警告類型 86
12.3 打開警告 87
第13章 精心用變量 89
13.1 修改變量的名字 89
13.2 進行變量初始化 90
13.3 減少變量的個數 91
13.4 縮小變量作用域 92
13.5 減少變量的操作 95
第14章 表達式易讀 96
14.1 糟糕的表達式 96
14.2 使用中間變量 96
14.3 使用等價邏輯 98
14.4 簡化判斷邏輯 98
14.5 使用宏定義 99
14.6 使用查找表 99
14.7 注意操作符 101
14.8 簡潔的寫法 102
第15章 控制流易讀 104
15.1 組織直線型代碼 104
15.2 判斷中的表達式 105
15.3 判斷中的注意事項 105
15.4 判斷中的參數順序 106
15.5 判斷中的賦值語句 106
15.6 if語句的邏輯順序 107
15.7 使用“?:” 108
15.8 使用switch 108
15.9 使用return 109
15.10 選擇for/while 109
15.11 少用do/while 110
15.12 少用goto 112
15.13 語句對比 113
15.14 減少嵌套 114
15.15 減少代碼 117
第16章 設計好函數 119
16.1 不好的函數 119
16.2 好的函數 119
16.3 小的函數 120
16.4 遞歸調用 121
  
  
  
第四部分 如何做代碼重構
  
  

第17章 代碼重構 124
17.1 為什么重構 124
17.2 重構的好處 124
17.3 重構的難題 125
17.4 實際的例子 125
第18章 消除重復 128
18.1 代碼重復的產生 128
18.2 代碼重復的后果 128
18.3 代碼重復的解決 129
18.4 消除重復的例子 129
第19章 代碼切分 133
19.1 抽取獨立的代碼 133
19.2 設計通用的代碼 135
19.3 簡化已有的接口 137
19.4 一次只做一件事 138
19.5 讓函數功能單一 142
19.6 刪除無用的代碼 144
第20章 少寫代碼 145
20.1 合適就剛剛好 145
20.2 保持代碼簡潔 145
20.3 使用循環解決 146
20.4 熟悉語言特性 147
20.5 熟悉庫函數 147
20.6 熟悉系統工具 149
第21章 簡化代碼 150
21.1 重新設計代碼 150
21.2 尋找更好算法 152
第22章 代碼生成 155

22.1 配置Linux的內核 155
22.2 生成寄存器的代碼 156
22.3 生成Benes的代碼 157
第23章 代碼測試 161
23.1 測試中問題 161
23.2 測試的原則 162
23.3 設計要更好 162
23.4 提高可讀性 162
23.5 測試智能化 164
23.6 定位Bug 167
  
  
  
第五部分 C語言一些要素
  
  

第24章 關鍵字 170
第25章 類型 172
25.1 內部數據類型 172
25.2 新增數據類型 173
25.3 enum 173
25.4 struct 174
25.5 union 175
25.6 typedef 175
25.7 復雜的數據類型 177
25.8 Endian問題 177
第26章 變量 179
26.1 聲明和定義 179
26.2 變量分類 179
26.3 const變量 183
26.4 volatile變量 185
26.5 混合聲明 187
第27章 常量 188
27.1 常量類型 188
27.2 常量定義 189
27.3 常量區分 189
27.4 其他問題 189
第28章 操作 190
28.1 操作符表格 190
28.2 操作符解釋 192
28.3 強制進行類型轉換 199
28.4 運算時的類型轉換 199
28.5 賦值時的類型轉換 203
第29章 數組 206
29.1 數組的說明 206
29.2 初始化 206
29.3 字符串 207
29.4 復合常量賦值 208
29.5 函數中的變長數組 208
29.6 結構中的靈活數組 209
29.7 數組作為函數參數 209
29.8 數組和指針 210
第30章 指針 212
30.1 指針的說明 212
30.2 ?嗦的指針 213
30.3 void * 214
30.4 restrict 215
30.5 多級指針 216
30.6 數組指針和指針數組 217
30.7 函數指針和指針函數 219
30.8 malloc 222
30.9 alloca 223
30.10 指針使用中的問題 223
第31章 語句 225
31.1 if 225
31.2 switch 225
31.3 for和while 226
31.4 do {...} while 226
31.5 break 227
31.6 return 228
31.7 goto 228
31.8 exit() 229

31.9 復合語句 229
30.10 空語句 229
第32章 函數 231
32.1 void 231
32.2 static 231
32.3 inline 231
32.4 函數原型 232
32.5 參數可變 233
32.6 其他討論 234
第33章 庫函數 235
33.1 使用getopt() 235
33.2 使用qsort() 236
33.3 文件模式問題 236
33.4 返回值的問題 238
33.5 控制字符問題 238
33.6 緩沖區問題 239
33.7 可重入問題 240
第34章 預處理 242
34.1 文件包含 242
34.2 宏定義 244
34.3 條件編譯 248
34.4 其他命令 249
34.5 預處理輸出 249
第35章 錯誤處理 250
35.1 錯誤檢查和處理 250
35.2 封裝函數 250
35.3 使用斷言 251
第36章 內存映像 254
36.1 程序編譯后的section 254
36.2 程序運行時的內存空間 255
36.3 簡單的malloc.c 255
第37章 匯編語言 258
37.1 如非必要 258
37.2 熟悉ABI 259
37.3 匯編例子 259
第38章 GCC特色 261
38.1 MinGW 261
38.2 執行過程 262
38.3 內嵌匯編 262
38.4 __attribute__ 264
參考文獻 266
序: