上海交通大學(xué)計(jì)算機(jī)集成技術(shù)開放實(shí)驗(yàn)室_第1頁(yè)
上海交通大學(xué)計(jì)算機(jī)集成技術(shù)開放實(shí)驗(yàn)室_第2頁(yè)
上海交通大學(xué)計(jì)算機(jī)集成技術(shù)開放實(shí)驗(yàn)室_第3頁(yè)
上海交通大學(xué)計(jì)算機(jī)集成技術(shù)開放實(shí)驗(yàn)室_第4頁(yè)
上海交通大學(xué)計(jì)算機(jī)集成技術(shù)開放實(shí)驗(yàn)室_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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)介

1、基于C+的面向?qū)ο缶幊探坛?003年春7/26/20221關(guān)于課程(1)目標(biāo)進(jìn)一步學(xué)會(huì)面向過(guò)程編程理解面向?qū)ο笏枷胍詫?duì)象的方式思考熟悉C+ (P)利用 C+編程7/26/20222在本課程中:C+ 是一個(gè)學(xué)習(xí)面向?qū)ο蟾拍畹墓ぞ哌\(yùn)用面向?qū)ο竽J竭M(jìn)行程序設(shè)計(jì)7/26/20223采用面向?qū)ο蠓椒ǖ男Ч?(OOA/OOD)可維護(hù)性可擴(kuò)展性可靠性7/26/20224如何實(shí)現(xiàn)課程目標(biāo)閱讀和記憶閱讀書籍, 記住語(yǔ)言特點(diǎn)思考以對(duì)象和類的方式思考實(shí)踐多編程7/26/20225參考課本C+程序設(shè)計(jì)教程(錢能),清華大學(xué)出版社C+程序設(shè)計(jì)教程,H.M.Deitel,P.J.Deitel著,機(jī)械工業(yè)出版社 C+大學(xué)教

2、程(第二版),Harveay M. Deitel著,電子工業(yè)出版社 C+ Primer(第三版),Stanley B.lippmanJosee Lajoie著,中國(guó)電力出版社C+編程思想(Thinking in C+),Bruce Eckel著,機(jī)械工業(yè)出版社7/26/202261 從C語(yǔ)言到C+語(yǔ)言C語(yǔ)言以其如下獨(dú)有的特點(diǎn)風(fēng)靡了全世界:(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。C語(yǔ)言只有32個(gè)關(guān)鍵字,程序書寫形式自由。(2)豐富的運(yùn)算符和數(shù)據(jù)類型。(3)可以直接訪問(wèn)內(nèi)存地址,能進(jìn)行位操作,使其能夠勝任開發(fā)操作系統(tǒng)的工作。7/26/20227(4)生成的目標(biāo)代碼質(zhì)量高,程序運(yùn)行效率高。(5)可移植

3、性好。7/26/20228局限性:(1)數(shù)據(jù)類型檢查機(jī)制相對(duì)較弱,這使得程序中的一些錯(cuò)誤不能在編譯階段被發(fā)現(xiàn)。(2)C本身幾乎沒(méi)有支持代碼重用的語(yǔ)言結(jié)構(gòu),因此一個(gè)程序員精心設(shè)計(jì)的程序,很難為其它程序所用。(3)當(dāng)程序的規(guī)模達(dá)到一定程度時(shí),程序員很難控制程序的復(fù)雜性。7/26/20229發(fā)展1980年,貝爾實(shí)驗(yàn)室的Bjarne Stroustrup開始對(duì)C進(jìn)行改進(jìn)和擴(kuò)充。1983年正式命名為C+。在經(jīng)歷了3次C+修訂后,1994年制定了ANSI C+ 標(biāo)準(zhǔn)的草案。以后又經(jīng)過(guò)不斷完善,成為目前的C+。C+仍在不斷發(fā)展中。美國(guó)微軟公司現(xiàn)已推出C#(C Sharp)語(yǔ)言,來(lái)代替C+語(yǔ)言。7/26/20

4、2210編譯器VC+6.0或其它(Turbor C 3.0,Borland C+)7/26/202211有關(guān)面向?qū)ο缶幊痰木W(wǎng)站 objects.html7/26/202212C+的網(wǎng)站/visualc borlandcpp/cpprod.html7/26/202213Object-Oriented 編程簡(jiǎn)介7/26/202214內(nèi)容方法學(xué)編程技術(shù)面向?qū)ο笳Z(yǔ)言7/26/2022151. 方法學(xué)7/26/202216思考問(wèn)題的方法歸納從特殊到一般從不同的 dogs 到詞匯 “dog”Dog7/26/202217思考問(wèn)題的方法演繹從一般到特殊從詞匯“dog”,你可以區(qū)別出一個(gè)動(dòng)物是還是不是一條狗DO

5、G7/26/202218面向?qū)ο笏且环N思考方法世界上的任何東西都是一個(gè)對(duì)象;任何系統(tǒng)都是由對(duì)象構(gòu)成的 (當(dāng)然系統(tǒng)也是一個(gè)對(duì)象);系統(tǒng)的演化和開發(fā)就是通過(guò)系統(tǒng)內(nèi)外的對(duì)象進(jìn)行交互完成的。7/26/202219世界上的任何東西都是一個(gè)對(duì)象花, 樹, 動(dòng)物學(xué)生, 教授桌子, 椅子, 教室, 建筑大學(xué), 城市, 國(guó)家世界, 宇宙學(xué)科,如計(jì)算機(jī),信息系統(tǒng),數(shù)學(xué),歷史 7/26/202220任何系統(tǒng)都是由對(duì)象構(gòu)成的法律系統(tǒng)文化系統(tǒng)教育系統(tǒng)經(jīng)濟(jì)系統(tǒng)信息系統(tǒng)計(jì)算機(jī)系統(tǒng)7/26/202221系統(tǒng)開發(fā)就是定義對(duì)象間的交互浙江林學(xué)院是由下列對(duì)象的交互構(gòu)成的:學(xué)生教授職員浙江省政府中國(guó)政府 .林院內(nèi)部林院外部7/26

6、/202222設(shè)計(jì)方法學(xué)面向?qū)ο笫紫仁且环N設(shè)計(jì)方法學(xué)(OOA/OOD)對(duì)象是程序的構(gòu)成模塊 (接口對(duì)象 (editor, menu, file, etc), 數(shù)據(jù)管理對(duì)象 (db), etc.).對(duì)象代表了在應(yīng)用中對(duì)現(xiàn)實(shí)世界的抽象.7/26/202223設(shè)計(jì)方法學(xué)面向?qū)ο笾С謿w納: 對(duì)象 - 類需要OOA/OOD工具.演繹: 類-對(duì)象編程者需要學(xué)習(xí)有關(guān)類庫(kù)的知識(shí)7/26/202224設(shè)計(jì)方法學(xué)面向?qū)ο笾С諸op-down: 從超類到子類Bottom-up: 從子類到超類7/26/202225面向?qū)ο缶幊痰幕A(chǔ)*對(duì)象*封裝*繼承一般說(shuō)來(lái),對(duì)象是根據(jù)類來(lái)定義的。我們也可以用一個(gè)類來(lái)定義另一個(gè)類。例

7、如,山地車、賽車和雙座自行車都是自行車的一種。用面向?qū)ο蟮男g(shù)語(yǔ)來(lái)說(shuō),它都是自行車類的子類或派生類,而自行車類是它們的超類或父類或基類。它們的關(guān)系如下圖所示: 自行車每一個(gè)子類繼承了超類的數(shù)據(jù)和操作,但是,子類并不是局限于超類的數(shù)據(jù)和操作。例如,雙座自行車有兩個(gè)坐墊,山地車有一個(gè)額外的低速齒輪。繼承的主要益處是可以復(fù)用超類的程序代碼 *多態(tài)賽車三地車雙座自行車7/26/202226面向?qū)ο蟆笆澜缡敲嫦驅(qū)ο蟮摹?Alan Kay said.如果你對(duì)世界了解,那么你就了解了面向?qū)ο?所以,面向?qū)ο笫侨菀椎?7/26/2022272.編程7/26/202228編程就像寫作.如果你能夠描繪一樣?xùn)|西,你就

8、可以寫一個(gè)程序.所以,編程也是容易的.所以,面向?qū)ο蟮木幊痰扔?容易 + 容易, 得到“ too(2) easy”.編程7/26/202229編程但是,實(shí)際上,編程并不那么容易。因?yàn)榫幰粋€(gè)真正的好的程序是不容易的。它需要編程者的智慧,知識(shí)和經(jīng)驗(yàn).就象寫作一樣,要成為一個(gè)好的作家,就需要很多的經(jīng)驗(yàn)和對(duì)這個(gè)世界的大量知識(shí)。學(xué)習(xí)和練習(xí)就必不可少。7/26/202230編程技術(shù)非結(jié)構(gòu)化編程過(guò)程編程模塊化 & 結(jié)構(gòu)化編程抽象數(shù)據(jù)類型面向?qū)ο缶幊?/26/202231非結(jié)構(gòu)化編程我們經(jīng)常將一個(gè)簡(jiǎn)單的程序?qū)懗梢粋€(gè)主程序. 此處,主程序代表了命令和聲明的一個(gè)序列,這個(gè)系列在整個(gè)程序中對(duì)全局?jǐn)?shù)據(jù)進(jìn)行修改. Ma

9、in ProgramData7/26/202232缺點(diǎn)這種技術(shù)只能用于很小的程序中.例如,如果相同的聲明序列在不同的地方要多次出現(xiàn)時(shí),我們就不得不拷貝這些序列。如果其中發(fā)生了一個(gè)錯(cuò)誤,我們就需要對(duì)每一個(gè)拷貝進(jìn)行修改.這就導(dǎo)致了我們將這些序列抽取出來(lái),單獨(dú)命名,并通過(guò)調(diào)用和返回值的方法來(lái)實(shí)現(xiàn)多處復(fù)用的方法。7/26/202233過(guò)程編程 在過(guò)程編程中,你可以將序列歸在一個(gè)地方過(guò)程調(diào)用可以被用于調(diào)用過(guò)程。在調(diào)用完成后,控制流繼續(xù)往下。Main ProgramProcedure7/26/202234過(guò)程通過(guò)參數(shù)和子過(guò)程 (過(guò)程的過(guò)程) , 程序就可以寫得更有結(jié)構(gòu)并且可以減少錯(cuò)誤. 例如,如果過(guò)程是正

10、確的,那么每一次使用它必然可以獲得正確的結(jié)果因而,為了查找錯(cuò)誤,你就可以縮小查找的范圍. 7/26/202235模塊化編程在模塊化編程中,具有公共功能的過(guò)程被集中在不同的模塊中一個(gè)程序就不再是一個(gè)單一整體構(gòu)成的了,它被分解成多個(gè)小的部分,這些小的部分之間通過(guò)調(diào)用相互交互,構(gòu)成了整個(gè)程序. 7/26/202236Main Program(Also a module)DataDataData1Module2 +DataData2Module1 +DataData1Procedure1Procedure2主程序協(xié)調(diào)多個(gè)模塊之間的調(diào)用,并進(jìn)行數(shù)據(jù)的傳送Procedure37/26/202237模塊化編

11、程每一個(gè)模塊都可以有自己的數(shù)據(jù)。這將允許每一個(gè)模塊來(lái)管理內(nèi)部狀態(tài),這些狀態(tài)可以在調(diào)用這些模塊中的過(guò)程時(shí)得到修改. 因此,每一個(gè)模塊都有一個(gè)狀態(tài),每一個(gè)模塊在整個(gè)程序中通常也最多存在一次7/26/202238結(jié)構(gòu)化編程結(jié)構(gòu)化程序中的三種結(jié)構(gòu)順序(s1,s2,sn)分支(if-then-else)循環(huán)Loop(for,do, and while loops)程序中有多少結(jié)構(gòu)?7/26/202239抽象數(shù)據(jù)類型(ADTs)抽象模型抽象數(shù)據(jù)類型屬性7/26/202240抽象-問(wèn)題處理手段為了理解問(wèn)題,需要將不必要的細(xì)節(jié)分離出去: 你將構(gòu)造你自己針對(duì)問(wèn)題的抽象視圖,抽象模型這個(gè)建模過(guò)程稱為抽象 abst

12、raction.7/26/202241問(wèn)題模型抽象7/26/202242模型模型定義了一個(gè)抽象的視圖,該視圖只關(guān)注于與問(wèn)題和求解者相關(guān)的部分。你需要定義下列屬性:影響的數(shù)據(jù);識(shí)別出來(lái)的操作; ADT 就是一種模型.7/26/202243Interface Operations Abstract Data StructureAbstract Data TypeADT7/26/202244定義 (ADT)ADT 有下列一些特性: 1. 它提供了一種類型. 2. 它提供了操作的集合. 該集合被稱為接口. 3. 接口的操作是類型數(shù)據(jù)結(jié)構(gòu)的唯一訪問(wèn)途徑. 4. 原理和前提定義了類型的應(yīng)用領(lǐng)域. 7/26

13、/202245例子: ADT List類型 List. 類型list實(shí)例的接口由接口定義文件定義操作: insert, get, append, delete,search,7/26/202246面向?qū)ο蟮木幊虒?duì)象是由抽象數(shù)據(jù)類型來(lái)的面向?qū)ο缶幊淌菍?duì)象交互的一個(gè)網(wǎng)絡(luò),每一個(gè)對(duì)象保存自己的狀態(tài)程序中的對(duì)象通過(guò)發(fā)送消息進(jìn)行交互7/26/202247Object1Data1+Procedures1DataData1Object3 Data3 + Procedures3Object2Data2 + Procedures2 Object4 Data4 + Procedures47/26/202248面向

14、對(duì)象編程在面向?qū)ο缶幊讨?,我們直接發(fā)送一個(gè)消息,而不是去調(diào)用一個(gè)程序來(lái)實(shí)現(xiàn)一個(gè)功能. 粗略地說(shuō),每一個(gè)對(duì)象實(shí)現(xiàn)了自己的模塊7/26/202249面向?qū)ο缶幊堂恳粋€(gè)對(duì)象負(fù)責(zé)正確地初始化和銷毀自身. 相應(yīng)地,對(duì)對(duì)象而言,我們就不需要顯式地創(chuàng)建和生成過(guò)程7/26/202250模塊信息隱藏?cái)?shù)據(jù)封裝抽象數(shù)據(jù)類型對(duì)象面向?qū)ο蟮难莼?/26/202251記住封裝(Data & Operations)- 信息隱藏的技術(shù)對(duì)象的用戶不能看到對(duì)象的數(shù)據(jù)和操作的細(xì)節(jié).數(shù)據(jù)抽象 - 從對(duì)象中發(fā)現(xiàn)類的過(guò)程抽象數(shù)據(jù)類型- 類7/26/2022523.編碼語(yǔ)言7/26/202253面向?qū)ο笳Z(yǔ)言面向?qū)ο缶幊陶Z(yǔ)言就是能夠很方便地

15、支持面向?qū)ο蟾拍畹恼Z(yǔ)言Smalltalk:1972-1980.C+:1986.Java:1992 (Smalltalk + C+).其它:Effile, Objective-C, Ada, .7/26/202254SmalltalkSmalltalk 是一個(gè)純的面向?qū)ο笳Z(yǔ)言. 多數(shù)人認(rèn)為Smalltalk 程序比 C+ 程序開發(fā)起來(lái)更快.7/26/202255Smalltalk豐富的類庫(kù),通過(guò)繼承實(shí)現(xiàn)重用Smalltalk 擁有動(dòng)態(tài)開發(fā)環(huán)境。它不是編譯的,但是 C+ 是編譯的. 這使得開發(fā)過(guò)程更可變,你可以方便地對(duì)類和各種情形進(jìn)行修改7/26/202256Smalltalk 編程者并不能象在C

16、+中那樣立即掌握o-o概念. 正因?yàn)槿绱?,掌握Smalltalk需要更多地時(shí)間. 但是多數(shù)時(shí)間是花在學(xué)習(xí)面向?qū)ο蠓椒▽W(xué)和技術(shù)上,而不是編程語(yǔ)言上的。實(shí)際上,Smalltalk 比C和C+更為簡(jiǎn)單. 7/26/202257C+C+ 是 C的面向?qū)ο蟀姹? 它與 C是一致的 (它實(shí)際上是C的超集), 所以現(xiàn)存的 C 代碼能夠包含在 C+ 程序中. C+ 程序速度快,效率高. 這些特性已經(jīng)使C成為很流行的語(yǔ)言. 7/26/202258C+它犧牲了一些靈活性以提高效率. C+ 采用編譯時(shí)綁定的方法。這使得程序運(yùn)行時(shí)的效率很高,代碼也較小,但是它影響了重用類的某些能力. 7/26/202259C+C+ 已經(jīng)非常流行,絕大多數(shù)新的 C 編譯器實(shí)際上是 C/C+ 編譯器. 但是,如果想進(jìn)行面向?qū)ο缶幊蹋惚仨氂肅+編程(思考),而不是C. 這些都將對(duì)有經(jīng)驗(yàn)的C編程者帶來(lái)挑戰(zhàn)。他們認(rèn)為他們是在運(yùn)用C+編程,但實(shí)際上只用了很少的面向?qū)ο筇攸c(diǎn)。7/26/202260C+C+ 是一個(gè)優(yōu)秀的語(yǔ)言.利用它, 你可以編出世界上最好的程序!C+ 是一個(gè)差的語(yǔ)言.使用它,你也可能編出世界上最差的程序所以,在學(xué)習(xí)和使用它時(shí),注意它的OO特性和非OO特性。7/26/202261Java它是一個(gè)可移植語(yǔ)言,它可以運(yùn)行在瀏覽器上。因此,它在Internet和Intranet

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論