本書以從抽象到編程為主線,圖文并茂地介紹了軟件開發(fā)所需的語文知識、數(shù)學(xué)知識、軟件建模知識和計(jì)算機(jī)語言知識。從概念抽象和數(shù)值計(jì)算兩個層次,由淺入深地討論了面向?qū)ο蟪绦蛟O(shè)計(jì)的基本知識、基本原理和基本方法,并使用UML描述軟件模型,使用C 語言編寫示例代碼。全書共8章,內(nèi)容包含類與對象、封裝與職責(zé)、關(guān)聯(lián)與連接、繼承與多態(tài)、設(shè)計(jì)與實(shí)現(xiàn)、運(yùn)算與重載、模板與模板庫、課程成績管理應(yīng)用案例。書中的每個知識點(diǎn)都包括分析思路、設(shè)計(jì)方法、編程技術(shù)、示例代碼和編程要點(diǎn)。 本書適合作為全國高等學(xué)校計(jì)算機(jī)及相關(guān)專業(yè)的教材,也可供有意向?qū)W習(xí)C 語言或從事軟件開發(fā)的讀者自學(xué)使用。
(1) 抽象思維與計(jì)算思維有機(jī)融合。將語文、數(shù)學(xué)課程中培養(yǎng)的抽象思維、計(jì)算思維及其表達(dá)方式有機(jī)融合起來,用于解決軟件開發(fā)過程中有關(guān)抽象和計(jì)算的問題,從而降低學(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)兩個階段的內(nèi)容,更加明確編程的學(xué)習(xí)重點(diǎn)和努力方向。
(3)圖形語言與計(jì)算機(jī)語言有機(jī)融合。本書按照元模型表示模型的思想,將UML圖形語言作為描述語義的通用工具,配有近200張圖,使讀者能夠直觀地理解本書中的C 代碼,也便于讀者將C 代碼修改為Java、C#等其他計(jì)算機(jī)語言的代碼,以適應(yīng)混合式語言編程的現(xiàn)實(shí)要求。
隨著大數(shù)據(jù)、智能化應(yīng)用不斷深入人們的工作和生活,軟件變得無處不在。為滿足國家一流專業(yè)建設(shè)和應(yīng)用型本科人才培養(yǎng)需要,以從計(jì)算到編程為主線編寫了《C/C 程序設(shè)計(jì)導(dǎo)論從計(jì)算到編程(微課視頻版)》(ISBN: 9787302592020),以從抽象到編程為主線編寫了本書。本書按照面向?qū)ο笏枷虢M織程序設(shè)計(jì)的內(nèi)容,內(nèi)容的組織思路和主要范圍如圖0.1所示。
圖0.1本書內(nèi)容的組織思路和主要范圍
編程具有較強(qiáng)的科學(xué)性和系統(tǒng)性。本書針對我國學(xué)生基礎(chǔ)知識好但應(yīng)用知識訓(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ì)、編碼、測試等各個階段的工作。本書按照模型及模型轉(zhuǎn)換的思想將各個階段內(nèi)容整合在一起,先介紹面向?qū)ο蠓治鲈O(shè)計(jì)的思想和方法,然后討論編程知識、編程技術(shù)和編程方法,使用圖形語言和計(jì)算機(jī)語言進(jìn)行描述,突出編程的思路和方法,避免讀者迷失在編程的細(xì)節(jié)中。
編程是一種能力,需要通過大量訓(xùn)練來獲得。本書從實(shí)際應(yīng)用和基礎(chǔ)計(jì)算兩個層次選擇經(jīng)典案例,針對目前的主流應(yīng)用場景由淺入深地設(shè)計(jì)了大量的示例代碼,難易區(qū)分度明顯。本書的示例代碼全部選擇C 語言編寫,大部分示例可改寫為Java等其他語言,可供不同層次讀者學(xué)習(xí)。
本書主要內(nèi)容
本書共有8章,每章先介紹面向?qū)ο蠓治鲈O(shè)計(jì)的基本知識和基本原理,再討論相應(yīng)的編程方法和實(shí)現(xiàn)技術(shù)。各章之間的關(guān)系如圖0.2所示。
圖0.2各章之間的關(guān)系
第1章類與對象。以認(rèn)識和理解客觀事物中形成的概念為基礎(chǔ),主要從抽象視角介紹抽象類及對象的基本原理,聲明類和定義對象的編程方法,從計(jì)算視角介紹成員函數(shù)調(diào)用的實(shí)現(xiàn)原理,創(chuàng)建和刪除對象的實(shí)現(xiàn)過程,最后討論程序設(shè)計(jì)思想和描述工具。
第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)的編程實(shí)現(xiàn)技術(shù)和方法,重點(diǎn)介紹使用組合關(guān)聯(lián)描述客觀事物的內(nèi)部結(jié)構(gòu),最后介紹字符串和鏈表兩個應(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í)際問題的步驟和方法。以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ī)兩個應(yīng)用案例。
第7章模板與模板庫。主要介紹類模板和模板類的概念,以及使用類模板編程的主要技術(shù)和基本方法。介紹標(biāo)準(zhǔn)模板庫,重點(diǎn)介紹容器類和流類的使用方法,最后介紹持久化對象應(yīng)用案例。
第8章課程成績管理應(yīng)用案例。以課程成績管理為例,主要介紹綜合運(yùn)用面向?qū)ο蟮闹R、原理和技術(shù)開發(fā)實(shí)際應(yīng)用程序的主要步驟和基本方法。本案例可作為編程訓(xùn)練的項(xiàng)目,也可作為后續(xù)學(xué)習(xí)的案例。
本書特色
(1) 抽象思維與計(jì)算思維有機(jī)融合。將語文、數(shù)學(xué)課程中培養(yǎng)抽象思維、計(jì)算思維及其表達(dá)方式有機(jī)融合起來,用于解決軟件開發(fā)過程中有關(guān)抽象和計(jì)算的問題,從而降低學(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)兩個階段的內(nèi)容,更加明確編程的學(xué)習(xí)重點(diǎn)和方向。
(3) 圖形語言與計(jì)算機(jī)語言有機(jī)融合。本書按照元模型表示模型的思想,把UML圖形語言作為描述語義的通用工具,便于讀者能夠直觀地理解代碼和將C 代碼修改為Java、C#等其他計(jì)算機(jī)語言的代碼,從而適應(yīng)混合式語言編程的要求。
配套資源
為便于教與學(xué),本書配有微課視頻、源代碼、數(shù)據(jù)集、教學(xué)課件、教學(xué)大綱、教學(xué)日歷、習(xí)題答案、期末試卷及參考答案。
(1) 獲取微課視頻方式: 先刮開并用手機(jī)版微信App掃描本書封底的文泉云盤防盜碼,授權(quán)后再掃描書中相應(yīng)的視頻二維碼,觀看教學(xué)視頻。
(2) 獲取源代碼、數(shù)據(jù)集方式:先刮開并用手機(jī)版微信App掃描本書封底的文泉云盤防盜碼,授權(quán)后再掃描下方二維碼,即可獲取。
源代碼
數(shù)據(jù)集
(3) 其他配套資源可以掃描本書封底的書圈二維碼,關(guān)注后回復(fù)本書書號,即可下載。
讀者對象
本書適合作為全國高等學(xué)校計(jì)算機(jī)及相關(guān)專業(yè)的教材,也可供有意向?qū)W習(xí)C 語言或從事軟件開發(fā)的讀者自學(xué)使用。
在本書的編寫過程中,作者結(jié)合多年的教學(xué)經(jīng)驗(yàn)和學(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)部實(shí)現(xiàn)
1.5創(chuàng)建和刪除對象
1.5.1構(gòu)造對象
1.5.2全局對象和靜態(tài)對象
1.5.3堆對象和對象數(shù)組
1.5.4語義的實(shí)現(xiàn)和優(yōu)化
1.6程序設(shè)計(jì)思想和描述工具
1.6.1程序設(shè)計(jì)思想的變遷
1.6.2UML圖形語言
1.6.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言
小結(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對象的職責(zé)
2.3.1管理自己的數(shù)據(jù)
2.3.2完成特定的任務(wù)
2.3.3參與計(jì)算的能力
2.3.4與其他對象共存的能力
2.4自定義數(shù)據(jù)類型
2.4.1定義數(shù)據(jù)類型Tdate
2.4.2Tdate的對象作為成員對象
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)多對一關(guān)聯(lián)
3.2.2使用指針數(shù)組實(shí)現(xiàn)多對多關(guān)聯(lián)
3.3組合與聚合關(guān)聯(lián)
3.3.1使用對象實(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深入理解類及其對象
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繼承的編程實(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)致的問題
4.4.2多重繼承的實(shí)現(xiàn)原理
4.4.3多重繼承的編程方法
4.5應(yīng)用舉例: 銀行賬戶
4.5.1分析應(yī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異常分類和錯誤定義
5.3.2識別異常和拋出錯誤
5.3.3捕獲異常并處理錯誤
小結(jié)
練習(xí)
第6章運(yùn)算與重載
6.1自然數(shù)與度量
6.1.1自然數(shù)的定義
6.1.2對事物計(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章模板與模板庫
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動態(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以二進(jìn)制方式持久化對象
小結(jié)
練習(xí)
第8章課程成績管理應(yīng)用案例
8.1場景分析
8.2教師錄入成績的視圖
8.3屬性的抽象和關(guān)聯(lián)的表示
8.4多對一關(guān)聯(lián)的邏輯實(shí)現(xiàn)
8.5一對多關(guān)聯(lián)的邏輯實(shí)現(xiàn)
8.6錄入成績的實(shí)現(xiàn)
8.7學(xué)生查詢成績
8.8進(jìn)一步努力方向
8.8.1數(shù)據(jù)準(zhǔn)備
8.8.2持久化對象的標(biāo)準(zhǔn)
8.8.3設(shè)計(jì)模式和基于框架的開發(fā)
8.8.4代碼自動化
8.8.5分析統(tǒng)計(jì)
8.9程序員的成才之路
小結(jié)
練習(xí)
附錄A運(yùn)算符表
參考文獻(xiàn)