隨著大數(shù)據(jù)、智能化應(yīng)用不斷深入人們的工作和生活,軟件變得無處不在。為滿足國家一流專業(yè)建設(shè)和應(yīng)用型本科人才培養(yǎng)需要,以從計算到編程為主線編寫了《C/C 程序設(shè)計導(dǎo)論從計算到編程(微課視頻版)》(ISBN: 9787302592020),以從抽象到編程為主線編寫了本書。本書按照面向?qū)ο笏枷虢M織程序設(shè)計的內(nèi)容,內(nèi)容的組織思路和主要范圍如圖0.1所示。
圖0.1本書內(nèi)容的組織思路和主要范圍
編程具有較強的科學(xué)性和系統(tǒng)性。本書針對我國學(xué)生基礎(chǔ)知識好但應(yīng)用知識訓(xùn)練不足的特點,以概念抽象和數(shù)學(xué)抽象為基礎(chǔ),融入計算理論、程序理論和計算機系統(tǒng)等基本原理,強調(diào)抽象思維的培養(yǎng),旨在塑造能夠理解軟件模型和數(shù)學(xué)模型的優(yōu)秀編程人才。
編程具有很強的工程性,涉及分析、設(shè)計、編碼、測試等各個階段的工作。本書按照模型及模型轉(zhuǎn)換的思想將各個階段內(nèi)容整合在一起,先介紹面向?qū)ο蠓治鲈O(shè)計的思想和方法,然后討論編程知識、編程技術(shù)和編程方法,使用圖形語言和計算機語言進行描述,突出編程的思路和方法,避免讀者迷失在編程的細節(jié)中。
編程是一種能力,需要通過大量訓(xùn)練來獲得。本書從實際應(yīng)用和基礎(chǔ)計算兩個層次選擇經(jīng)典案例,針對目前的主流應(yīng)用場景由淺入深地設(shè)計了大量的示例代碼,難易區(qū)分度明顯。本書的示例代碼全部選擇C 語言編寫,大部分示例可改寫為Java等其他語言,可供不同層次讀者學(xué)習(xí)。
本書主要內(nèi)容
本書共有8章,每章先介紹面向?qū)ο蠓治鲈O(shè)計的基本知識和基本原理,再討論相應(yīng)的編程方法和實現(xiàn)技術(shù)。各章之間的關(guān)系如圖0.2所示。
圖0.2各章之間的關(guān)系
第1章類與對象。以認識和理解客觀事物中形成的概念為基礎(chǔ),主要從抽象視角介紹抽象類及對象的基本原理,聲明類和定義對象的編程方法,從計算視角介紹成員函數(shù)調(diào)用的實現(xiàn)原理,創(chuàng)建和刪除對象的實現(xiàn)過程,最后討論程序設(shè)計思想和描述工具。
第2章封裝與職責(zé)。從客觀事物的邊界和作用引入封裝和職責(zé)兩個概念,主要介紹根據(jù)職責(zé)封裝類的基本原理和編程方法,最后介紹自定義日期數(shù)據(jù)類型和管理員工信息兩個應(yīng)用案例。
第3章關(guān)聯(lián)與連接。從客觀事物之間的關(guān)系引入關(guān)聯(lián)及連接的概念,主要介紹使用關(guān)聯(lián)及連接描述客觀事物之間關(guān)系的基本原理,介紹一般關(guān)聯(lián)、組合關(guān)聯(lián)和聚合關(guān)聯(lián)的編程實現(xiàn)技術(shù)和方法,重點介紹使用組合關(guān)聯(lián)描述客觀事物的內(nèi)部結(jié)構(gòu),最后介紹字符串和鏈表兩個應(yīng)用案例。
第4章繼承與多態(tài)。從客觀事物的分類和抽象引入繼承及其相關(guān)概念,主要介紹使用繼承描述事物之間層次關(guān)系的基本原理,以及繼承、多態(tài)、多重繼承的實現(xiàn)技術(shù)和編程方法,最后介紹銀行賬戶案例。
第5章設(shè)計與實現(xiàn)。主要介紹綜合運用編程知識和技術(shù)解決實際問題的步驟和方法。以Josephus游戲為例介紹分析設(shè)計、編碼實現(xiàn)和程序維護階段的主要工作及其基本方法,以矩陣乘法為例介紹根據(jù)數(shù)學(xué)模型編程的技術(shù)和方法,最后介紹異常處理技術(shù)及其編程方法。
第6章運算與重載。以自然數(shù)的基數(shù)理論為基礎(chǔ),主要介紹使用自然數(shù)進行計數(shù)和度量的基本原理,以及抽象和定義運算的方法,重點介紹定義運算的基本思路和重載運算的編程技術(shù),最后介紹貨幣和R進制計算機兩個應(yīng)用案例。
第7章模板與模板庫。主要介紹類模板和模板類的概念,以及使用類模板編程的主要技術(shù)和基本方法。介紹標(biāo)準(zhǔn)模板庫,重點介紹容器類和流類的使用方法,最后介紹持久化對象應(yīng)用案例。
第8章課程成績管理應(yīng)用案例。以課程成績管理為例,主要介紹綜合運用面向?qū)ο蟮闹R、原理和技術(shù)開發(fā)實際應(yīng)用程序的主要步驟和基本方法。本案例可作為編程訓(xùn)練的項目,也可作為后續(xù)學(xué)習(xí)的案例。
本書特色
(1) 抽象思維與計算思維有機融合。將語文、數(shù)學(xué)課程中培養(yǎng)抽象思維、計算思維及其表達方式有機融合起來,用于解決軟件開發(fā)過程中有關(guān)抽象和計算的問題,從而降低學(xué)習(xí)編程的門檻和難度。
(2) 分析設(shè)計與編程實現(xiàn)有機融合。按照模型轉(zhuǎn)換思想,以分析設(shè)計中建立的模型作為編程實現(xiàn)的背景和前提,將編程實現(xiàn)的代碼作為模型轉(zhuǎn)換的結(jié)果,有機融合了分析設(shè)計與編程實現(xiàn)兩個階段的內(nèi)容,更加明確編程的學(xué)習(xí)重點和方向。
(3) 圖形語言與計算機語言有機融合。本書按照元模型表示模型的思想,把UML圖形語言作為描述語義的通用工具,便于讀者能夠直觀地理解代碼和將C 代碼修改為Java、C#等其他計算機語言的代碼,從而適應(yīng)混合式語言編程的要求。
配套資源
為便于教與學(xué),本書配有微課視頻、源代碼、數(shù)據(jù)集、教學(xué)課件、教學(xué)大綱、教學(xué)日歷、習(xí)題答案、期末試卷及參考答案。
(1) 獲取微課視頻方式: 先刮開并用手機版微信App掃描本書封底的文泉云盤防盜碼,授權(quán)后再掃描書中相應(yīng)的視頻二維碼,觀看教學(xué)視頻。
(2) 獲取源代碼、數(shù)據(jù)集方式:先刮開并用手機版微信App掃描本書封底的文泉云盤防盜碼,授權(quán)后再掃描下方二維碼,即可獲取。
源代碼
數(shù)據(jù)集
(3) 其他配套資源可以掃描本書封底的書圈二維碼,關(guān)注后回復(fù)本書書號,即可下載。
讀者對象
本書適合作為全國高等學(xué)校計算機及相關(guān)專業(yè)的教材,也可供有意向?qū)W習(xí)C 語言或從事軟件開發(fā)的讀者自學(xué)使用。
在本書的編寫過程中,作者結(jié)合多年的教學(xué)經(jīng)驗和學(xué)生反饋的學(xué)習(xí)心得,參考了諸多相關(guān)資料,在此表示衷心的感謝。限于個人水平和時間有限,書中難免存在疏漏之處,歡迎讀者批評指正。
作者
2023年5月
第1章類與對象
1.1抽象
1.1.1語文中的抽象
1.1.2數(shù)學(xué)中的抽象
1.2類和對象的概念
1.2.1屬性與屬性值
1.2.2行為與函數(shù)
1.2.3類的結(jié)構(gòu)及其表示方法
1.2.4對象的結(jié)構(gòu)及其表示方法
1.3類的聲明和對象的定義
1.3.1類的聲明
1.3.2定義對象
1.3.3訪問對象的成員變量
1.4成員函數(shù)的定義和調(diào)用
1.4.1定義成員函數(shù)
1.4.2調(diào)用成員函數(shù)
1.4.3成員函數(shù)與普通函數(shù)的區(qū)別
1.4.4成員函數(shù)調(diào)用的內(nèi)部實現(xiàn)
1.5創(chuàng)建和刪除對象
1.5.1構(gòu)造對象
1.5.2全局對象和靜態(tài)對象
1.5.3堆對象和對象數(shù)組
1.5.4語義的實現(xiàn)和優(yōu)化
1.6程序設(shè)計思想和描述工具
1.6.1程序設(shè)計思想的變遷
1.6.2UML圖形語言
1.6.3面向?qū)ο蟪绦蛟O(shè)計語言
小結(jié)
練習(xí)
第2章封裝與職責(zé)
2.1類的封裝
2.1.1事物的邊界
2.1.2封裝的概念
2.1.3接口的聲明
2.1.4接口與實現(xiàn)分離
2.2封裝的作用
2.2.1保護內(nèi)部數(shù)據(jù)
2.2.2屏蔽內(nèi)部計算
2.3對象的職責(zé)
2.3.1管理自己的數(shù)據(jù)
2.3.2完成特定的任務(wù)
2.3.3參與計算的能力
2.3.4與其他對象共存的能力
2.4自定義數(shù)據(jù)類型
2.4.1定義數(shù)據(jù)類型Tdate
2.4.2Tdate的對象作為成員對象
2.5應(yīng)用舉例: 員工信息管理
2.5.1分析設(shè)計
2.5.2編碼實現(xiàn)
小結(jié)
練習(xí)
第3章關(guān)聯(lián)與連接
3.1關(guān)聯(lián)與連接的概念
3.2關(guān)聯(lián)的實現(xiàn)
3.2.1使用指針實現(xiàn)多對一關(guān)聯(lián)
3.2.2使用指針數(shù)組實現(xiàn)多對多關(guān)聯(lián)
3.3組合與聚合關(guān)聯(lián)
3.3.1使用對象實現(xiàn)組合關(guān)聯(lián)
3.3.2使用指針實現(xiàn)組合關(guān)聯(lián)
3.3.3使用代碼實現(xiàn)聚合關(guān)聯(lián)
3.4深入理解類及其對象
3.5字符串
3.5.1數(shù)組中的概念及其關(guān)系
3.5.2字符數(shù)組的語義
3.5.3自定義字符串類myString
3.6應(yīng)用舉例: 鏈表
小結(jié)
練習(xí)
第4章繼承與多態(tài)
4.1分類與抽象
4.2繼承
4.2.1繼承的概念
4.2.2繼承的編程實現(xiàn)
4.2.3描述類之間的層次
4.2.4保護繼承與私有繼承
4.3多態(tài)
4.3.1多態(tài)的概念
4.3.2多態(tài)的編程技術(shù)
4.3.3按照多態(tài)思維編寫代碼
4.4多重繼承
4.4.1多重繼承導(dǎo)致的問題
4.4.2多重繼承的實現(xiàn)原理
4.4.3多重繼承的編程方法
4.5應(yīng)用舉例: 銀行賬戶
4.5.1分析應(yīng)用場景
4.5.2軟件設(shè)計
4.5.3編碼實現(xiàn)
4.5.4從實現(xiàn)角度進一步優(yōu)化
小結(jié)
練習(xí)
第5章設(shè)計與實現(xiàn)
5.1Josephus游戲
5.1.1分析設(shè)計
5.1.2編碼實現(xiàn)
5.1.3程序維護
5.2矩陣計算
5.2.1矩陣和向量的乘法
5.2.2使用友元提高運行速度
5.3異常處理
5.3.1異常分類和錯誤定義
5.3.2識別異常和拋出錯誤
5.3.3捕獲異常并處理錯誤
小結(jié)
練習(xí)
第6章運算與重載
6.1自然數(shù)與度量
6.1.1自然數(shù)的定義
6.1.2對事物計數(shù)
6.1.3度量事物的特征
6.2自然數(shù)的運算及其含義
6.3定義和重載運算
6.4重載常用運算
6.4.1重載賦值運算
6.4.2重載類型轉(zhuǎn)換運算
6.4.3重載增量運算符
6.4.4重載插入和提取運算
6.5應(yīng)用舉例: 貨幣
6.5.1基類Currency
6.5.2派生RMB
6.5.3派生其他貨幣
6.6應(yīng)用舉例: R進制計算機
6.6.1自然數(shù)及運算的編程實現(xiàn)
6.6.2整數(shù)及其運算的編程實現(xiàn)
6.6.3實數(shù)及其運算的編程實現(xiàn)
小結(jié)
練習(xí)
第7章模板與模板庫
7.1類模板
7.1.1類模板的概念
7.1.2類模板的聲明
7.1.3類模板的具體化和實例化
7.1.4類模板的代碼重用
7.1.5類模板的繼承和關(guān)聯(lián)
7.2使用模板編程的方法
7.2.1動態(tài)數(shù)組類模板
7.2.2冒泡排序模板
7.2.3編程中需要注意的問題
7.3標(biāo)準(zhǔn)模板庫
7.3.1容器類
7.3.2流類
7.4應(yīng)用舉例: 持久化對象
7.4.1輸入/輸出對象中的數(shù)據(jù)
7.4.2以文本方式持久化對象
7.4.3以二進制方式持久化對象
小結(jié)
練習(xí)
第8章課程成績管理應(yīng)用案例
8.1場景分析
8.2教師錄入成績的視圖
8.3屬性的抽象和關(guān)聯(lián)的表示
8.4多對一關(guān)聯(lián)的邏輯實現(xiàn)
8.5一對多關(guān)聯(lián)的邏輯實現(xiàn)
8.6錄入成績的實現(xiàn)
8.7學(xué)生查詢成績
8.8進一步努力方向
8.8.1數(shù)據(jù)準(zhǔn)備
8.8.2持久化對象的標(biāo)準(zhǔn)
8.8.3設(shè)計模式和基于框架的開發(fā)
8.8.4代碼自動化
8.8.5分析統(tǒng)計
8.9程序員的成才之路
小結(jié)
練習(xí)
附錄A運算符表
參考文獻