 |
-- 會員 / 註冊 --
|
|
|
|
易學C# ( 簡體 字) |
作者:馬偉 | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 23721 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:10/1/2009 |
頁數:410 |
光碟數: |
|
站長推薦:  |
印刷: | 語系: ( 簡體 版 ) |
|
【不接受訂購】 | ISBN:9787115211989 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:C#語言是微軟公司近幾年推出的一種新型的完全面向對象的程序設計語言,到目前為止,它已經成為了應用軟件開發的主流語言,尤其是在Web開發方面更是無與倫比。UML則是面向對象軟件的標準化建模語言,無論是企業信息系統、基于Web的分布式系統還是實時系統等都適合于使用UML來進行建模分析。本書正是C#與UML融合的產物,書中不僅向讀者闡述了C#語言的編程基礎知識與高級特性,而且還闡述了如何利用UML圖形來進行面向對象的分析與設計。本書旨在幫助讀者在較短的時間里對C#語言與UML得到全面深刻的理解與認識,從而使讀者將C#與UML融合到一起,為讀者以后的軟件設計生涯打下堅實的基礎。另外,本書還配備了許多經典的習題,這些習題全部是從各大軟件公司的面試題中所提取的。認真地練習這些習題,能夠讓你在以后的職業面試中信心與成功率倍增。 本書文字簡潔生動,并輔之以大量的圖表和代碼示例,對于希望學習C#語言的學員具有自學指導的作用。本書既可作為大專、本科院校相關專業的教材,又可作為軟件開發人員的技術參考手冊。
|
目錄:預備課:學習從這里開始 1 1.軟件=程序+文檔 1 2.程序起什么作用 2 3.為何要面向對象 2 4.什么是UML 3 5..NET與C# 4 談微軟公司的.NET戰略 4 C#的產生與特點 5 C#與.NET的關系 6 6.開啟C#的鑰匙——興趣與正確的學習方法 7 7.習題練習 8
第1部分 C#與UML基礎
第1章 開篇經典——“Hello,World” 11 1.1 Hello,World 11 1.2 程序的結構分析 13 1.2.1 命名空間 13 1.2.2 類和類的方法 13 1.2.3 程序的輸入輸出 14 1.3 程序的執行起點——Main函數 14 1.4 控制臺的輸入和輸出 14 1.4.1 控制臺的輸入:Read和ReadLine 15 1.4.2 控制臺的輸出:Write和WriteLine 15 1.5 程序的注釋 15 1.5.1 模塊(類)注釋規范 16 1.5.2 類屬性注釋規范 16 1.5.3 方法注釋規范 16 1.5.4 代碼間注釋規范 16 1.6 習題練習 17
第2章 數據類型和表達式 18 2.1 數據類型簡介 18 2.2 值類型 19 2.2.1 簡單類型 19 2.2.2 結構類型 22 2.2.3 枚舉類型 23 2.3 引用類型 24 2.4 null和void 24 2.4.1 null 24 2.4.2 void 24 2.5 變量和常量 25 2.5.1 變量 25 2.5.2 常量 29 2.6 運算處理 29 2.6.1 算術運算 30 2.6.2 賦值運算 32 2.6.3 關系運算 32 2.6.4 邏輯運算 33 2.6.5 位運算 33 2.6.6 條件運算 35 2.6.7 其他運算符 36 2.6.8 運算符的優先級別 36 2.7 指針類型 37 2.7.1 指針的定義與聲明 37 2.7.2 指針的內容 37 2.7.3 指針的運算 38 2.7.4 指針的使用 40 2.8 習題練習 41
第3章 數據類型轉換 43 3.1 裝箱和拆箱 43 3.1.1 裝箱(Boxing) 43 3.1.2 拆箱(Unboxing) 44 3.2 隱式數據類型轉換 45 3.2.1 隱式數值類型轉換 45 3.2.2 隱式枚舉類型轉換 46 3.2.3 隱式引用類型轉換 47 3.3 顯式數據類型轉換 48 3.3.1 顯式數值類型轉換 48 3.3.2 顯式枚舉類型轉換 50 3.3.3 顯式引用類型轉換 50 3.4 習題練習 51
第4章 計算控制——結構化程序設計 53 4.1 如果——條件語句 53 4.1.1 如果,那么——if 53 4.1.2 如果,那么;否則——if,else 55 4.1.3 如果中的如果——嵌套if,else 56 4.1.4 如果,那么;否則的另一種表達方式——?: 57 4.1.5 多條件選擇——switch 58 4.2 會轉圈的語句——循環語句 60 4.2.1 for循環 60 4.2.2 while循環 63 4.2.3 do/while循環 65 4.2.4 foreach循環 66 4.3 跳出循環——跳轉語句 67 4.3.1 使用break和continue語句的區別 67 4.3.2 飽受爭議的goto語句 68 4.3.3 return語句的使用 70 4.4 C#預處理器指令 70 4.4.1 使用預處理指令——#define和#undef 70 4.4.2 條件編譯——#if、#elif、#else和#endif 71 4.4.3 警告與錯誤信息——#warning和# error 72 4.4.4 可視編輯器提示——#region和#endregion 72 4.4.5 指定行號——#line 72 4.4.6 關閉警告消息——#pragma 72 4.5 程序員加油站——遞歸法 73 4.5.1 遞歸法概述 73 4.5.2 遞歸的精髓——求解漢諾塔問題 73 4.6 習題練習 75
第5章 字符串、數組與集合 77 5.1 理解字符串 77 5.1.1 字符串類型定義 77 5.1.2 字符串類型應用實例 79 5.1.3 string與String的區別 82 5.2 存儲盒子的“倉庫”——數組 82 5.2.1 數組的定義 82 5.2.2 二維數組 85 5.2.3 多維數組和交錯數組 87 5.3 程序員加油站——數組的應用 88 5.3.1 把數組作為參數傳遞給方法 88 5.3.2 使用數組模擬棧操作 89 5.3.3 數據的排序與冒泡排序算法 91 5.4 一個與數組相似的新類型——集合 92 5.4.1 集合的概述 93 5.4.2 集合類的使用實例 93 5.4.3 集合與數組的區別 97 5.5 習題練習 97
第6章 C#程序員UML建模基礎 100 6.1 為什么要建模 100 6.2 UML概述 101 6.3 用例建模 101 6.3.1 用例圖 101 6.3.2 用例描述 102 6.3.3 用例建模實例 102 6.4 類圖 103 6.4.1 繪制類圖 104 6.4.2 類圖中的各種關系 105 6.5 活動圖 107 6.6 狀態圖 107 6.7 序列圖 108 6.8 習題練習 109
第2部分 C#與面向對象程序設計
第7章 初識面向對象程序設計 113 7.1 萬物皆為對象 113 7.2 初識封裝 114 7.3 類和對象 114 7.3.1 類的聲明 114 7.3.2 類的成員 115 7.3.3 類的成員的可見性 116 7.3.4 對象的創建與使用 117 7.3.5 靜態成員與非靜態成員 118 7.3.6 this關鍵字 118 7.4 對象的創建與銷毀 119 7.4.1 構造函數 120 7.4.2 靜態構造函數 122 7.4.3 析構函數 124 7.5 類的執行工具——方法 124 7.5.1 方法的聲明 125 7.5.2 方法的返回值 125 7.5.3 方法的參數 126 7.5.4 方法的重載 127 7.6 域、屬性和索引指示器 128 7.6.1 域 128 7.6.2 屬性 131 7.6.3 索引指示器 133 7.7 再論封裝 134 7.7.1 用傳統的讀、寫方法封裝 134 7.7.2 用屬性來實現封裝 135 7.8 命名空間 135 7.8.1 命名空間的聲明 136 7.8.2 成員與類型聲明 137 7.8.3 使用指示符 137 7.9 習題練習 140
第8章 復用現有的代碼——繼承與多重繼承 142 8.1 繼承的意義 142 8.1.1 繼承的引入 142 8.1.2 為何要使用繼承 143 8.2 用UML圖描述繼承 144 8.3 父與子——類的繼承 145 8.3.1 基類與派生類 145 8.3.2 繼承中的構造函數 151 8.3.3 訪問和隱藏基類方法 152 8.3.4 虛方法與重寫方法 153 8.3.5 抽象類和抽象方法 154 8.3.6 密封類和密封方法 155 8.4 繼承與訪問修飾符 156 8.4.1 可見性訪問修飾符 156 8.4.2 其他訪問修飾符 157 8.5 雙親與子——多重繼承 157 8.5.1 水陸兩用汽車的類圖設計 157 8.5.2 用接口實現多重繼承 158 8.5.3 用擴展方法實現多重繼承 160 8.6 C#的繼承規則 161 8.7 再論繼承與封裝的關系 161 8.8 程序員加油站——又論冒泡排序算法 162 8.9 習題練習 166
第9章 改寫對象的行為——多態 169 9.1 筆與其派生類的寫方法 169 9.2 多態的類型 170 9.2.1 編譯時的多態性 170 9.2.2 運行時的多態性 170 9.3 多態的實現 172 9.3.1 通過接口實現的多態性 172 9.3.2 通過繼承實現的多態性 174 9.3.3 通過抽象類實現的多態性 174 9.4 程序員加油站——經典的圖形游戲 176 9.4.1 類圖分析 176 9.4.2 代碼實現與分析 177 9.4.3 游戲的客戶端 181 9.5 習題練習 183
第10章 多功能的運算符——運算符重載 184 10.1 引入運算符重載 184 10.2 運算符重載的規則 185 10.3 一元運算符的重載 186 10.4 二元運算符的重載 188 10.5 比較運算符的重載 190 10.6 習題練習 191
第11章 軟件模塊之間的協定——接口 192 11.1 打印機程序的困惑 192 11.2 接口的意義 193 11.2.1 軟件的多層設計思考 193 11.2.2 組件與接口 193 11.2.3 組件化程序設計思考 194 11.3 接口的定義 195 11.4 接口的成員 195 11.5 在UML中對接口的描述 197 11.6 接口的繼承與多重繼承 198 11.7 接口成員訪問 199 11.8 接口的實現 200 11.8.1 在類中實現接口 201 11.8.2 顯式實現接口成員 203 11.8.3 顯式與隱式實現接口成員的區別 205 11.8.4 接口映射 205 11.8.5 接口的重實現 209 11.9 抽象類與接口 210 11.9.1 在抽象類中實現接口 210 11.9.2 抽象與接口的區別 210 11.9.3 抽象與接口的使用 211 11.10 接口作為返回值與參數 211 11.11 程序員加油站——打印機程序的設計 214 11.12 習題練習 216
第12章 面向對象設計原則與UML描述 218 12.1 腐化的軟件設計 218 12.1.1 設計的臭味 218 12.1.2 軟件為何會腐化 220 12.2 簡單就是美——單一職責原則(SRP) 220 12.2.1 從Communication類的設計來看待單一職責原則 221 12.2.2 分離耦合的職責 222 12.3 修改封閉擴展開放——開放—封閉原則(OCP) 222 12.3.1 開封—封閉原則概述 222 12.3.2 銀行儲蓄業務的分析與設計 223 12.4 子類型替換基類型——Liskov替換原則(LSP) 226 12.4.1 Liskov替換原則概述 226 12.4.2 違反Liskov替換原則的場景 226 12.4.3 用提取公共部分的方法來代替繼承 228 12.5 依賴于抽象——依賴倒置原則(DIP) 229 12.5.1 依賴倒置原則概述 229 12.5.2 再論銀行儲蓄業務的設計 230 12.6 分離接口——接口隔離原則(ISP) 232 12.6.1 接口污染 232 12.6.2 分離客戶就是分離接口 234 12.6.3 使用委托分離接口 235 12.6.4 使用多重繼承分離接口 235 12.7 習題練習 236
第3部分 C#語言高級特性
第13章 程序的體檢醫生——異常處理 239 13.1 異常處理概述 239 13.2 C#異常處理類 240 13.3 try、catch和finally 241 13.3.1 try和catch的用法 241 13.3.2 finally的用法 244 13.4 把異常傳給調用者 245 13.4.1 調用者處理 245 13.4.2 拋出異常 245 13.4.3 重發異常 246 13.4.4 添加異常信息 247 13.5 用戶自定義異常 248 13.5.1 定義自己的異常類 248 13.5.2 從自己的代碼中拋出異常 248 13.6 細說異常使用 249 13.6.1 何時考慮拋出異常 249 13.6.2 在異常處理程序中做什么 249 13.6.3 在何處放置異常處理程序 250 13.6.4 異常與返回錯誤代碼的對比 250 13.6.5 永遠不要預測bug造成的后果能夠被異常處理程序所捕獲 250 13.7 習題練習 250
第14章 房屋中介與租房——委托與事件 252 14.1 從房屋中介與租房看待委托與事件 252 14.2 又論“Hello,World” 253 14.3 委托的概述 254 14.3.1 委托的聲明 254 14.3.2 將方法綁定到委托 256 14.4 事件 257 14.4.1 引入事件 258 14.4.2 聲明事件 260 14.4.3 使用事件 260 14.4.4 訪問器形式的事件 261 14.4.5 在接口中聲明事件 263 14.5 多播委托 264 14.6 委托中的協變和逆變 266 14.7 匿名方法 268 14.7.1 什么是匿名方法 268 14.7.2 匿名方法的參數與返回值 268 14.7.3 匿名方法塊規則 269 14.7.4 匿名方法的外部變量 269 14.8 習題練習 272
第15章 程序集與反射 274 15.1 再論“Hello, World” 274 15.1.1 創建“Hello, World”的業務邏輯類庫 274 15.1.2 詳解C#程序集版本控制文件 275 15.1.3 創建“Hello, World”應用層 277 15.2 反射的概述 278 15.2.1 什么是反射 278 15.2.2 反射的作用 279 15.3 反射的實際使用 280 15.3.1 反射AppDomain的程序集 280 15.3.2 利用反射獲取類型信息 281 15.3.3 通過反射創建類型的實例 282 15.3.4 利用反射動態調用類成員 284 15.4 反射的性能 286 15.5 習題練習 286
第16章 序列化與反序列化 287 16.1 序列化的概述 287 16.1.1 從權限系統來看待序列化和反序列化 287 16.1.2 序列化的作用 288 16.1.3 為序列化配置對象 289 16.2 序列化和反序列化方式 290 16.3 使用BinaryFormatter進行序列化 291 16.4 使用SoapFormatter進行序列化 293 16.5 使用XmlSerializer進行序列化 295 16.6 自定義序列化 297 16.6.1 使用ISerializable自定義序列化 298 16.6.2 使用特性自定義序列化 301 16.7 序列化過程中的步驟 302 16.8 序列化準則 303 16.9 習題練習 303
第17章 項目小組和程序員——進程和線程 304 17.1 進程與線程概述 304 17.1.1 從打印工資報表看待進程與線程 304 17.1.2 進程與線程的關系 306 17.2 .NET平臺下與進程進行交互 306 17.2.1 Process類簡介 306 17.2.2 簡單的進程操作實例 307 17.3 初識多線程操作 310 17.3.1 System.Threading概述 310 17.3.2 一個簡單的線程例子 312 17.3.3 ThreadStart的使用 313 17.3.4 線程的并行操作 314 17.3.5 終止線程 316 17.3.6 前臺線程與后臺線程 318 17.3.7 線程的優先級 319 17.4 線程中存在的問題 321 17.4.1 競爭條件 321 17.4.2 鎖定 323 17.5 線程同步 325 17.5.1 沒有同步的情況 325 17.5.2 lock語句 326 17.5.3 Monitor類 328 17.5.4 使用lock與Monitor來解決生產者與消費者的問題 330 17.5.5 Events類 333 17.5.6 互斥對象 336 17.6 多線程的自動管理 336 17.6.1 線程池 337 17.6.2 定時器 340 17.7 習題練習 343
第18章 萬能模板——泛型 345 18.1 泛型的引入 345 18.1.1 為什么要使用泛型 345 18.1.2 創建和使用泛型 347 18.1.3 命名規則 348 18.2 泛型類 348 18.2.1 聲明泛型類 348 18.2.2 類型參數 349 18.2.3 泛型類的繼承 350 18.2.4 泛型類的成員 350 18.2.5 泛型類中的靜態變量 351 18.2.6 泛型類中的靜態構造函數 351 18.2.7 訪問受保護的成員 352 18.2.8 泛型類中的方法重載 352 18.2.9 創建泛型類的注意事項 353 18.3 泛型接口 353 18.3.1 實現接口的惟一性 353 18.3.2 顯式接口成員實現 354 18.4 泛型委托 355 18.5 泛型方法 355 18.5.1 創建和使用泛型方法 355 18.5.2 abstract、virtual和override泛型方法 356 18.5.3 泛型靜態方法 357 18.5.4 類型實參推斷 358 18.6 參數約束 358 18.7 習題練習 360
第19章 C# 3.0語言新特性 364 19.1 隱式類型 364 19.1.1 隱式類型局部變量的聲明與使用 364 19.1.2 隱式類型數組 365 19.1.3 隱式類型局部變量的使用限制 366 19.1.4 隱式類型局部變量的使用注意事項 366 19.2 匿名類型 367 19.2.1 引入匿名類型 367 19.2.2 創建和使用匿名類型 368 19.2.3 匿名類型與隱式類型變量的區別 369 19.3 擴展方法 369 19.3.1 定義擴展方法 369 19.3.2 導入擴展方法 370 19.3.3 調用擴展方法 370 19.3.4 擴展方法使用注意事項 372 19.4 對象和集合初始化器 372 19.4.1 引入對象初始化器 372 19.4.2 在初始化語法中調用自定義構造函數 374 19.4.3 初始化內部類型 375 19.4.4 集合初始化器 376 19.5 Lambda表達式 377 19.5.1 創建Lambda表達式 377 19.5.2 Lambda表達式轉換 378 19.5.3 類型推斷 379 19.5.4 重載抉擇 381 19.5.5 表達式樹 381 19.6 習題練習 382
第4部分 基于UML的面向對象分析與設計過程
第20章 基于UML的面向對象分析與設計過程 384 20.1 細說需求分析 384 20.1.1 需求分析流程 385 20.1.2 基于Web通用框架的需求描述 387 20.2 構造業務用例圖 387 20.2.1 確定系統的參與者 387 20.2.2 確定系統的業務用例 388 20.2.3 繪制業務用例圖 389 20.3 使用活動圖來描述業務用例 389 20.3.1 繪制操作子系統插件菜單的活動圖 389 20.3.2 繪制管理用戶權限的活動圖 390 20.4 構造系統用例圖 390 20.5 用例規約 391 20.5.1 基本流 392 20.5.2 備選流 393 20.5.3 特殊需求 393 20.5.4 前置條件與后置條件 393 20.5.5 描述用例規約實例 393 20.6 繪制業務領域類圖 396 20.7 系統架構設計 397 20.8 數據庫設計 398 20.8.1 數據庫表設計 398 20.8.2 表關系設計 399 20.9 總體類圖設計 400 20.10 模塊詳細設計與編碼 401 20.10.1 數據庫通用操作組件:IBHDataAccess 401 20.10.2 用戶權限管理接口:IBHPowerMangageInterface 402 20.10.3 用戶權限管理業務邏輯操作層:IBHPowerManageClass 404 20.10.4 用戶權限管理頁面表示層:IBHPowerManage 405 20.10.5 Web通用框架:IBHWebFramework 406 20.11 Web通用框架的部署與測試 408 20.12 習題練習 410
|
序: |
|