




已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計,使用教材和參考書目,使用教材:面向?qū)ο蟪绦蛟O(shè)計實用教程, 清華大學(xué)出版社,張海藩,牟永敏,2007.7。 參考書目: 1、面向?qū)ο蟪绦蛟O(shè)計實用教程習(xí)題與上機指導(dǎo),清華大學(xué)出版社,牟永敏,張海藩,2008.2。 2、C+程序設(shè)計教程,清華大學(xué)出版社,錢能,2005.9。 3、C+程序設(shè)計教程實驗指導(dǎo),清華大學(xué)出版社,譚浩強等著,2007.8。 教學(xué)內(nèi)容說明:按照教學(xué)大綱的教學(xué)內(nèi)容編排,增加了基礎(chǔ)知識、上機例題和實用編程技能的教學(xué)內(nèi)容,目標(biāo)是掌握面向?qū)ο蟪绦蛟O(shè)計的基本算發(fā)與編程能力。(學(xué)習(xí)方法介紹),第1章計算機與程序設(shè)計,首先要理解的問題:什么是面向?qū)ο蟪绦蛟O(shè)計? 1、基于過程的程序設(shè)計 我們已經(jīng)學(xué)習(xí)了C語言程序設(shè)計,每一位同學(xué)都會編寫C語言程序了,我們知道C語言程序設(shè)計是一系列操作命令(操作過程、C語句)的有序集合,這種設(shè)計方法,叫做基于過程的程序設(shè)計。 主要特點是: (1) 按照執(zhí)行操作的時間順序、按照操作過程編寫程序。 (2) 所定義的數(shù)據(jù)結(jié)構(gòu)本身不具有行為(函數(shù))特性。 (3) 過程化程序設(shè)計方法主要采用:自頂向下,逐步求精的方法展開。 (4) 過程化程序設(shè)計方法主要體現(xiàn)在功能劃分與過程內(nèi)部的編寫規(guī)則,形成結(jié)構(gòu)化程序設(shè)計方法。,例1:基于過程的程序設(shè)計。,首先,定義一個結(jié)構(gòu)體struct Point。,再定義一個main函數(shù),在其內(nèi)部定義一個該結(jié)構(gòu)體的變量叫pt,并對它進行賦值,最后,將pt這個數(shù)據(jù)成員輸出。,#include struct Point int x; int y; ;,void main() Point pt; pt.x=8; pt.y=8; coutpt.xendlpt.yendl; ,把這段代碼編譯、運行一下,可以看到輸出:x為8,y為8。 可見,C + +與C語言中使用的結(jié)構(gòu)體是完全一樣的。,2、面向?qū)ο蟪绦蛟O(shè)計 隨著程序設(shè)計方法的創(chuàng)新,把C語言中的結(jié)構(gòu)類型(struct)可以看成一種特殊的類型,即:對象類型。 如:點對象類型。 struct Point int x; int y; ; 又如:學(xué)生對象類型。 struct student char name20; /*姓名*/ char sex; /*性別*/ int age; /*年齡*/ float height; /*身高*/ float weight; /*體重*/ char addr50; /*住址*/ ; 這樣,經(jīng)驗豐富的程序員就可以對這個“對象”數(shù)據(jù)進行讀寫、查找等操作了。,#include struct Point int x; int y; void output() coutxendlyendl; ;,在結(jié)構(gòu)體中增加一個函數(shù),叫:output, 由它來代替輸出的功能。,void main() Point pt; pt.x=8; pt.y=8; /coutpt.xendlpt.yendl; pt.output(); ,主程序中就不需要cout函數(shù)輸出了,利用pt的內(nèi)部成員函數(shù)output進行輸出。編譯、運行,結(jié)果是一樣的。,例2:面向?qū)ο蟪绦蛟O(shè)計。,我們知道:在C語言的結(jié)構(gòu)體中是不允許有函數(shù)的。,然而,通過這個例子可以看出:在C+的結(jié)構(gòu)體中是可以包含函數(shù)的。,因此,利用 C+結(jié)構(gòu)體中的內(nèi)部函數(shù)就可以將一些操作封裝到結(jié)構(gòu)體內(nèi)部,在使用時,只需去調(diào)用這個成員函數(shù)就可以了。,這是C+的封裝性。,#include /struct Point class Point public: int x; int y; void output() coutxendlyendl; ; void main() Point pt; pt.x=8; pt.y=8; pt.output(); ,我們把struct注釋起來,,然后,換成一個class,并加上一個public。,再編譯、運行,結(jié)果是一樣的。,例3:面向?qū)ο蟪绦蛟O(shè)計。,可見,結(jié)構(gòu)體(類型)轉(zhuǎn)變成了類(類型)。,也就是說,我們的改動并不大,我們僅僅是將struct換成了class,然后,增加了一個public標(biāo)識符,那么,所有的運行結(jié)果和我們剛才用struct定義是一樣的。,換句話說,在C+中,結(jié)構(gòu)體和類是可以通用的,結(jié)構(gòu)體也是一種特殊的類,他特殊,是因為,他是用struct定義的一種類。,綜上所述,面向?qū)ο蟮某绦蛟O(shè)計:是把一些行為、方法、屬性都歸結(jié)到一個“對象類型”身上,只有有了這個具體的對象后,才會有這個對象的方法(成員、成員函數(shù))產(chǎn)生,那么,我們把這些方法,按照合理性,都歸到不同的“對象類型”上面,這就是面向?qū)ο蟮某绦蛟O(shè)計。 實現(xiàn)方法:采用結(jié)構(gòu)類型(struct)的演化數(shù)據(jù)類型“對象類型(class)”來建立數(shù)據(jù)結(jié)構(gòu),在這個“對象”數(shù)據(jù)類型中增加了“成員函數(shù)”,也就增加了“對象”的行為、方法、屬性。,3、結(jié)構(gòu)體與類的區(qū)別,類的訪問權(quán)限,當(dāng)然,struct和class類還是有區(qū)別的,主要區(qū)別在訪問控制方面,如果我們把class 的public注釋起來,再編譯一下,就可以看到出現(xiàn)一個錯誤:不能訪問私有成員。在類中所聲明的成員變量和函數(shù),默認是私有成員private。只有加上public,變成公有變量,才與結(jié)構(gòu)體的結(jié)果一樣。,可見,在結(jié)構(gòu)體中,所有的成員,缺省情況下都是public的,都可以在外部被訪問。而對于一個類來說,缺省情況下,他的數(shù)據(jù)成員和函數(shù)都是私有的private,不能夠被外部進行訪問的。 這是結(jié)構(gòu)體和類的一個區(qū)別。除此之外,在C+中,結(jié)構(gòu)體和類是可以通用的。,4、什么是類?什么是對象?,抽象性是將有關(guān)事物的共性歸納、集中在一起,表示了同一類事物的本質(zhì)。 C+中的數(shù)據(jù)類型就是對一批具體的數(shù)的抽象。 例如:“整數(shù)類型”是對所有整數(shù)的抽象,具體的整數(shù)就是屬于同一“類”的“對象”。 類是對象的抽象, 對象是類的特例。,上面的例子中引入了類point,我們就要從面向?qū)ο蟮乃枷肴タ紤]問題了。point中定義的pt,就不叫變量了,叫做用point這個類聲明的一個對象,或者叫做實例化了一個對象,那么,什么是類?什么是對象? 類是抽象出一些事物的共有的屬性。 對象是具有類的共有屬性的具體屬性值的一個事物。 有了類和對象的概念,我們就可以從面向過程的語言轉(zhuǎn)化為面向?qū)ο蟮恼Z言。,舉例:設(shè)計一個“開車啟動”的方法,可以把“開車啟動”作為一種參數(shù)傳進來,開這個車,這是面向過程的方法。 用面向?qū)ο蟮姆椒ㄔO(shè)計這個函數(shù):把“開車啟動”設(shè)置成汽車(類)本身的一個方法,而我們?nèi)フ{(diào)用汽車的“開”的方法就可以了。 這樣,我們就把面向過程的方法變成了面向?qū)ο蟮姆椒ā?這就是面向?qū)ο蟮脑O(shè)計思路。,5、面向?qū)ο蟮脑O(shè)計思路,把一些行為都歸結(jié)到一個對象身上,只有有了這個具體的對象后,才會有這個對象的方法產(chǎn)生,那么,我們把這些方法,按照合理性,都歸到不同的事物上面,這就是一個面向?qū)ο蟮某绦蛟O(shè)計。,1.1 計算機的基本結(jié)構(gòu),計算機的基本結(jié)構(gòu)主要是由存儲器、運算器、控制器、輸入設(shè)備和輸出設(shè)備等五個部件組成。 存儲器:是用來存儲數(shù)據(jù),大致分為內(nèi)部存儲器(內(nèi)存)和外部存儲器(硬盤、軟盤等); 運算器:是用來完成各種算術(shù)運算和邏輯運算; 控制器:用來控制計算機的各個部件協(xié)調(diào)工作; 輸入設(shè)備和輸出設(shè)備:是用來為數(shù)據(jù)的輸入和輸出服務(wù)的。,1.1.1 計算機硬件的基本組成,圖1.1 計算機的基本結(jié)構(gòu),第一步:用輸入設(shè)備把事先編制好的解題步驟(即程序)和原始數(shù)據(jù)輸入到存儲器指定編號的 地方(內(nèi)存單元)存放起來。 第二步:命令計算機從第一條指令開始執(zhí)行程序,則計算機在程序控制下自動完成解題的全過程。,1.1.2 計算機的工作過程(以匯編為例),60年代,馮諾依曼提出了程序存儲原理,計算機走向了現(xiàn)代化。 目前,程序設(shè)計語言的發(fā)展已經(jīng)經(jīng)歷了四代,第五代語言尚處于萌芽狀態(tài)。,1.2 程序設(shè)計語言,第一代語言 第一代程序設(shè)計語言是機器語言,它是計算機所特有的,不同計算機有不同的機器語言。 第二代語言 匯編語言,也稱為符號語言。用含義較鮮明的符號,代替機器語言中的二進制編碼,因此看起來較直觀,不易出錯。,第三代語言 稱為算法語言,算法語言的基本組成成分是各語句(如結(jié)構(gòu)化程序設(shè)計),比用機器語言或匯編語言編寫程序更加方便、簡單和直觀。 第四代語言 實質(zhì)上是可以快速開發(fā)應(yīng)用軟件的各種高生產(chǎn)率的軟件工具的統(tǒng)稱。如VC+、Delphi等。 第五代語言 多數(shù)人認為,第五代語言將是智能化的語言。 PROLOG語言可能是第五代語言最著名的雛形。,使用過程性語言編寫的程序,其功能是隱含在程序代碼中的。當(dāng)應(yīng)用系統(tǒng)的功能比較復(fù)雜時,程序元素的相互關(guān)系就十分復(fù)雜。這樣的應(yīng)用系統(tǒng)不易開發(fā),而且很難維護。 為此,人們在開發(fā)軟件的長期實踐過程中,總結(jié)出一些設(shè)計原理并研究出一些系統(tǒng)化的技術(shù)方法,用于面向過程程序設(shè)計,能夠提高開發(fā)效率,增加系統(tǒng)的可理解性和可維護性。,1.3 面向過程程序設(shè)計,模塊是: 數(shù)據(jù)說明、可執(zhí)行的語句等程序元素的集合,它是單獨命名的而且可以通過名字來訪問,所謂模塊化,是把一個程序劃分成若干個模塊,每個模塊完成一個子功能,把這些模塊組裝成一個整體,可以完成指定的功能 ,如:函數(shù)。 請注意:在把程序劃分成模塊的時候,模塊規(guī)模應(yīng)該適當(dāng)。,1.3.1 模塊化,人們在實踐中認識到,在現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。 如:各式各樣的人抽象為人類。抽象是對事物共性的高度概括。當(dāng)我們考慮對任何問題的模塊化解法時,可以提出許多抽象的層次。,1.3.2 抽象,信息隱藏原理指出,在設(shè)計和確定模塊時,應(yīng)該使得一個模塊內(nèi)包含的信息(數(shù)據(jù)和過程)對于不需要這些信息的模塊來說,是不可訪問的(又稱不可見的)。 局部化,是指:把一些關(guān)系密切的程序元素物理地放得彼此靠近,處于同一局部區(qū)城內(nèi)。,1.3.3 信息隱藏和局部化,模塊獨立是指在設(shè)計程序結(jié)構(gòu)時,應(yīng)盡量使得每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關(guān)系盡可能簡單。 耦合是用于衡量不同模塊彼此間互相依賴(連接)的緊密程度。 內(nèi)聚是用于衡量一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度。 高內(nèi)聚和低耦合是進行模塊化設(shè)計的重要標(biāo)準(zhǔn),實踐表明內(nèi)聚更重要。,1.3.4 模塊獨立,結(jié)構(gòu)程序設(shè)計是一種設(shè)計程序的技術(shù), 適應(yīng)于面向過程和面向?qū)ο蟮木幊谭椒ǎ菍崿F(xiàn)模塊的具體技術(shù)。 采用自頂向下逐步求精的設(shè)計方法和單入口單出口的控制結(jié)構(gòu)。,1.3.5 結(jié)構(gòu)程序設(shè)計技術(shù),三種基本的控制結(jié)構(gòu),結(jié)構(gòu)使用結(jié)構(gòu)程序設(shè)計技術(shù)設(shè)計程序的主要好處: 自頂向下逐步求精的方法符合人類解決復(fù)雜問題的普遍規(guī)律,因此可以顯著提高開發(fā)效率; 用先全局后局部、先整體后細節(jié)、先抽象后具體的逐步求精過程開發(fā)出的程序有清晰的層次結(jié)構(gòu),因此容易閱讀和理解; 僅使用單入口單出口的控制結(jié)構(gòu),使得程序的靜態(tài)結(jié)構(gòu)和它的動態(tài)執(zhí)行情況比較一致; 控制結(jié)構(gòu)有確定的邏輯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5歲小孩常見病與護理
- 投行法律培訓(xùn)
- 端午邀約活動課件
- 護理新生培訓(xùn)
- 早產(chǎn)的病因及護理
- 名著導(dǎo)讀艾青詩選
- 礦業(yè)采礦培訓(xùn)課件
- 新時代教育評價改革總體方案
- 腫瘤并發(fā)癥感染
- 銀行風(fēng)險案例培訓(xùn)
- 麥克維爾冷水機組使用說明書
- FIDIC設(shè)計采購施工合同條件銀皮書
- 2022年吉林省中考化學(xué)試卷和答案
- 中央空調(diào)主機采購安裝及售后服務(wù)方案 (投標(biāo)技術(shù)方案)
- 壓床機構(gòu)設(shè)計課程設(shè)計說明書-機械原理課程設(shè)計
- 公司職員員工宿舍安全衛(wèi)生檢查表
- 通用勞動合同
- starion電熱能手術(shù)系統(tǒng)(熱能刀)產(chǎn)品簡介制作課件
- DB6112∕T 0001-2019 西咸新區(qū)中深層無干擾地?zé)峁嵯到y(tǒng)應(yīng)用技術(shù)導(dǎo)則
- 國家開放大學(xué)《生活方式與常見疾病預(yù)防》形考任務(wù)1-4參考答案
- 項目監(jiān)理機構(gòu)人員配置標(biāo)準(zhǔn)試行
評論
0/150
提交評論