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