




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