《面向?qū)ο蟪绦蛟O(shè)計》課件第1章 緒論_第1頁
《面向?qū)ο蟪绦蛟O(shè)計》課件第1章 緒論_第2頁
《面向?qū)ο蟪绦蛟O(shè)計》課件第1章 緒論_第3頁
《面向?qū)ο蟪绦蛟O(shè)計》課件第1章 緒論_第4頁
《面向?qū)ο蟪绦蛟O(shè)計》課件第1章 緒論_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

參考書

新標(biāo)準(zhǔn)C++程序設(shè)計郭煒高等教育出版社

THEC++PROGRAMMINGLANGUAGE(SpecialEdition)BjarneStroustrup

高等教育出版社

課時安排授課:32學(xué)時上機(jī):16學(xué)時

教材、參考書與課時安排本門課程的學(xué)習(xí)內(nèi)容第1章緒論(2學(xué)時)第2章C++語言對C語言的擴(kuò)充(4學(xué)時)第3章類和對象(6學(xué)時)第4章友元(2學(xué)時)第5章繼承與派生(6學(xué)時)第6章多態(tài)性和虛函數(shù)(6學(xué)時)第7章C++語言的輸入輸出流庫(2學(xué)時)第8章異常處理(2學(xué)時)

第1章緒論

1.1

面向?qū)ο蠓椒ǖ钠鹪?/p>

1.2

從面向過程轉(zhuǎn)向面向?qū)ο?/p>

1.3

面向?qū)ο蟮幕靖拍?.4

面向?qū)ο笙到y(tǒng)的特性1.5

面向?qū)ο蟪绦蛟O(shè)計舉例機(jī)器語言匯編語言高級語言面向過程面向?qū)ο驝PU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成如:10000000加

10010000減用助記符號描述的指令系統(tǒng)如ADDA,B面向機(jī)器的語言1.1面向?qū)ο蠓椒ǖ钠鹪礄C(jī)器語言匯編語言高級語言面向過程面向?qū)ο蟪绦蛟O(shè)計是數(shù)據(jù)被加工的過程客觀世界可以分類,對象是類的實例對象是數(shù)據(jù)和方法的封裝對象間通過發(fā)送和接受消息發(fā)生聯(lián)系程序設(shè)計關(guān)鍵是定義類,并由類派生對象1.1面向?qū)ο蠓椒ǖ钠鹪?、50年代的程序都是用指令代碼或匯編語言編寫的,60年代高級語言的出現(xiàn)大大簡化了程序設(shè)計,縮短了軟件開發(fā)周期。2、自60年代末到70年代初,出現(xiàn)了大型軟件系統(tǒng),如操作系統(tǒng)、數(shù)據(jù)庫,這給程序設(shè)計帶來了新的問題??煽啃圆?,錯誤多,且不易維護(hù)和修改--軟件危機(jī)。3、為了克服60年代出現(xiàn)的軟件危機(jī),1968年北約組織提出“軟件工程”的概念。對程序設(shè)計語言的認(rèn)識從強(qiáng)調(diào)表達(dá)能力為重點轉(zhuǎn)向以結(jié)構(gòu)化和簡明性為重點,將程序從語句序列轉(zhuǎn)向相互作用的模塊集合。1969年,E.W.Dijkstra首先提出了結(jié)構(gòu)化程序設(shè)計的概念。4、經(jīng)過幾年的探索和實踐,結(jié)構(gòu)化程序設(shè)計的應(yīng)用確實取得了成效,用該方法編寫出來的程序不僅結(jié)構(gòu)良好,且顯著地減少軟件的復(fù)雜性,提高軟件的可靠性、可測試性和可維護(hù)性。5、進(jìn)入80年代,由于一系列高技術(shù)的研究,如計算機(jī)輔助制造CAM和知識工程等領(lǐng)域的研究都迫切要求大型的軟件系統(tǒng)作為支撐。他們所用的數(shù)據(jù)類型也超出了常規(guī)的結(jié)構(gòu)化數(shù)據(jù)類型的范疇,提出對圖像、聲音、規(guī)則等非結(jié)構(gòu)化數(shù)據(jù)的管理。迫切要求軟件模塊具有更強(qiáng)的獨立自治性,以便于大型軟件的管理、維護(hù)和重用。由于結(jié)構(gòu)化語言的數(shù)據(jù)類型較為簡單,所以不能勝任對非結(jié)構(gòu)化數(shù)據(jù)的定義與管理,采用過程調(diào)用機(jī)制使模塊的獨立性較差。6、自80年代以來,出現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計流派,研制出了多種面向?qū)ο蟪绦蛟O(shè)計語言(簡稱為OOPL:ObjectOrientedProgrammingLanguage),如Ada、Smalltalk、C++和當(dāng)前使用在Internet上的平臺無關(guān)語言Java等。7、由于OOPL的對象、類具有高度的抽象性,所以它能很好地表達(dá)任何復(fù)雜的數(shù)據(jù)類型,也允許程序員靈活地定義自己所需要的數(shù)據(jù)類型。類本身具有很完整的封裝性,滿足模塊獨立自治的需求。再加上繼承性和多態(tài)性,增強(qiáng)了模塊的可重用性,提高了軟件的可靠性,縮短了軟件的開發(fā)周期。1.2從面向過程轉(zhuǎn)向面向?qū)ο?/p>

——

建立一個軟件開發(fā)的全新的思維方式數(shù)據(jù)輸入數(shù)據(jù)輸出函數(shù)或過程特點:

數(shù)據(jù)和過程相分離函數(shù)或過程1.因為數(shù)據(jù)與過程分開,因此數(shù)據(jù)很容易在其作用域之外被修改。這表明對數(shù)據(jù)的訪問是不受控制且不可預(yù)知。voidA(Strings);//passbyvalue

voidB(String&s);//passbyreferance

voidC(String*s);//passbypointer2.因為數(shù)據(jù)與過程分開,因此編寫過程時必須要考慮所要處理的數(shù)據(jù)格式。這表明代碼的可重用性不好。abs(i)

//anintexpressioni

fabs(x)//afloating-pointexpressionx3.因為不能設(shè)置數(shù)據(jù)的可訪問權(quán)限,增加了大型程序的復(fù)雜性。因此測試和調(diào)試更加困難。特點:

數(shù)據(jù)和過程相分離?例例1.2從面向過程轉(zhuǎn)向面向?qū)ο?/p>

面向?qū)ο蟪绦蛟O(shè)計將數(shù)據(jù)及其操作放在一起,作為一個相互依存、不可分割的整體—

對象。采用數(shù)據(jù)抽象和數(shù)據(jù)隱藏技術(shù),將對象及其操作抽象成一種新的數(shù)據(jù)類型—

類。

數(shù)據(jù)1

數(shù)據(jù)2

數(shù)據(jù)3

操作1

操作2

操作3

…屬性方法1.3面向?qū)ο蟮幕靖拍?/p>

數(shù)據(jù)1

數(shù)據(jù)2

數(shù)據(jù)3

操作1

操作2

操作3

屬性方法1.類(class)①類實質(zhì)就是一種用戶自定義的數(shù)據(jù)類型。②可以把類想像成一種高級的數(shù)據(jù)類型。structclass1.3面向?qū)ο蟮幕靖拍?.類(class)數(shù)據(jù)成員成員函數(shù)classStack{

private:

structNode { intdata; Node*next; }*top;

public: Stack(){top=NULL;}

boolpush(inti);

boolpop(int&i);};例1.3面向?qū)ο蟮幕靖拍?.對象(object)Inoop,thetermobjecthasaveryspecificmeaning:Itisaself-containedentityencapsulatingdataandoperationsonthedata.1.3面向?qū)ο蟮幕靖拍?.對象(object)①對象是類的一個實例。②對象與類的關(guān)系如同變量與數(shù)據(jù)類型之間的關(guān)系。③對象具有唯一標(biāo)識名,可以區(qū)別于其他對象。④對象具有一個狀態(tài),由其屬性值集合所表征。⑤對象有一組操作方法即服務(wù),每個操作決定對象的一種行為。⑥對象具有模塊獨立性。⑦對象具有動態(tài)連接性。

Stackst1;//定義對象st1Stackst2;//定義對象st2例①對象是類的一個實例。②對象與類的關(guān)系如同數(shù)據(jù)類型與變量之間的關(guān)系。③對象具有唯一標(biāo)識名,可以區(qū)別于其他對象。④對象具有一個狀態(tài),由其屬性值集合所表征。⑤對象有一組操作方法即服務(wù),每個操作決定對象的一種行為。⑥對象具有模塊獨立性。⑦對象具有動態(tài)連接性。1.3面向?qū)ο蟮幕靖拍?.對象(object)

從邏輯上看,一個對象是獨立存在的模塊。模塊內(nèi)部狀態(tài)不因外界的干擾而改變,也不會涉及到其他模塊;模塊間的依賴性極小或幾乎沒有;各模塊可獨立地被系統(tǒng)所組合選用,也可被程序員重用,不必?fù)?dān)心破壞其他模塊。

客觀世界中的對象之間是有聯(lián)系的,在面向?qū)ο蟪绦蛟O(shè)計中,通過消息機(jī)制,把對象之間動態(tài)連接在一起。1.3面向?qū)ο蟮幕靖拍?/p>

3.消息(message)①消息是面向?qū)ο笙到y(tǒng)中實現(xiàn)對象之間的通信機(jī)制,是要求某個對象執(zhí)行其中某個功能操作的規(guī)格說明。②對象所提供的任何行為(功能)都必須通過消息來調(diào)用,對象只有在接收到消息時才被激活。③消息一般由三部分組成:接受消息的對象名、調(diào)用操作名和必要的參數(shù)。st1.push(i);

//向st1發(fā)送消息,調(diào)用其成員函數(shù)push//push操作的功能是將數(shù)據(jù)i壓入棧中

例1.3面向?qū)ο蟮幕靖拍?/p>

3.消息(message)消息具有三個性質(zhì):①同一對象可接收不同形式的多個消息,產(chǎn)生不同的響應(yīng);②相同形式的消息可以送給不同對象,所做出的響應(yīng)可以是截然不同的;③消息的發(fā)送可以不考慮具體的接收者,對象可以響應(yīng)消息,也可以對消息不予理會,對消息的響應(yīng)并不是必須的。st1.push(i);st1.pop(x);circle.draw();square.draw();例1.3面向?qū)ο蟮幕靖拍?/p>

4.方法(method)①方法就是對象所能執(zhí)行的操作,也就是對象中的成員函數(shù)。②方法包括界面和方法體兩部分。方法的界面也稱為接口,它給出了方法的調(diào)用模式;方法體則是實現(xiàn)某種操作的一系列計算步驟,也就是一段程序。

對象提供的任何功能都必須通過消息進(jìn)行調(diào)用,而該消息就是發(fā)送給對象所提供的接口的。1.3面向?qū)ο蟮幕靖拍?/p>

4.方法(method)消息和方法的關(guān)系是:對象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過來,有了接口,對象才能響應(yīng)相應(yīng)的消息。所以消息模式與方法界面(即接口)應(yīng)該是一致的。同時,只要接口保持不變,方法體的改動不會影響方法的調(diào)用。方法的實現(xiàn)細(xì)節(jié)對于用戶來說是不可見的,用戶只需向?qū)ο蟀l(fā)送正確格式的消息即可。1.3面向?qū)ο蟮幕靖拍?/p>

4.方法(method)消息和方法的關(guān)系是:對象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過來,有了接口,對象才能響應(yīng)相應(yīng)的消息。所以消息模式與方法界面(即接口)應(yīng)該是一致的。同時,只要接口保持不變,方法體的改動不會影響方法的調(diào)用。方法的實現(xiàn)細(xì)節(jié)對于用戶來說是不可見的,用戶只需向?qū)ο蟀l(fā)送正確格式的消息即可。①抽象是一種從一般的觀點看待事物的方法,它要求程序員集中于事物的本質(zhì)特征,而不是具體細(xì)節(jié)或具體實現(xiàn)。②將一組對象的共同特征抽象出來,從而形成“類”的概念。類的概念來自人們認(rèn)識自然社會的過程。在這一過程中,人們主要使用兩種方法:歸納法和演繹法。在歸納的過程中,我們從一個個具體的事物中把共同的特征抽取出來,形成一個一般的概念,這就是“歸類”;在演繹的過程中,我們把同類的事物,根據(jù)不同的特征分成不同的小類,這就是“分類”。對于一個具體的類,它有許多具體的個體,我們稱這些個體叫做“對象”。

1.抽象性(abstract)1.4面向?qū)ο笙到y(tǒng)的特性抽象數(shù)據(jù)類型:ADT(AbstractDataType)

1.抽象性(abstract)

當(dāng)一個數(shù)據(jù)類型僅暴露其公有接口,而將其私有實現(xiàn)隱藏起來,我們就稱這個數(shù)據(jù)類型是抽象的。

C++通過對類的支持提供了信息隱藏,而信息隱藏,特別是對低層實現(xiàn)細(xì)節(jié)的隱藏,是構(gòu)造抽象數(shù)據(jù)類型的關(guān)鍵。在抽象數(shù)據(jù)類型中提供某個功能的辦法就是將該功能以類的成員函數(shù)的形式封裝起來。1.4面向?qū)ο笙到y(tǒng)的特性

1.抽象性(abstract)classStack{

private:

structNode { intdata; Node*next; }*top;

public: Stack(){top=NULL;}

boolpush(inti);

boolpop(int&i);};例Stack類的壓入和彈出操作是高層的,因為用戶不需要了解棧的底層實現(xiàn),因此Stack類是一種抽象數(shù)據(jù)類型。使用ADT將提高程序的可靠性和健壯性。C++能夠?qū)崿F(xiàn)ADT,是其支持OOP的有力工具。1.4面向?qū)ο笙到y(tǒng)的特性1.4面向?qū)ο笙到y(tǒng)的特性

2.封裝性(encapsulation)

所謂封裝就是指一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的操作集合組裝在一起,形成一個能動的實體,也就是對象。數(shù)據(jù)封裝就是給數(shù)據(jù)提供了與外界聯(lián)系的標(biāo)準(zhǔn)接口,無論是誰,只有通過這些接口,使用規(guī)范的方式,才能訪問這些數(shù)據(jù)。數(shù)據(jù)封裝是軟件工程發(fā)展的必然產(chǎn)物,使得程序員在設(shè)計程序時可以專注于自己的對象,同時也切斷了不同模塊之間數(shù)據(jù)的非法使用,減少了出錯的可能性。1.4面向?qū)ο笙到y(tǒng)的特性

3.繼承性(inhertance)

從已有的對象類型出發(fā)建立一種新的對象類型,使它繼承原對象的特點和功能。繼承是對許多問題中分層特性的一種自然描述,因而也是類的具體化和被重用的一種手段,它所表達(dá)的就是一種不同類之間的繼承關(guān)系。它使得某類對象可以繼承另外一類對象的特征和能力。繼承所具有的作用有兩個方面:一方面可以減少代碼冗余;另一方面可以通過協(xié)調(diào)性來減少相互之間的接口和界面。1.4面向?qū)ο笙到y(tǒng)的特性

3.繼承性(

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論