第2章類和對象100_第1頁
第2章類和對象100_第2頁
第2章類和對象100_第3頁
第2章類和對象100_第4頁
第2章類和對象100_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 類和對象 2.1.1什么是面向?qū)ο蟮某绦蛟O(shè)計 面向?qū)ο蟮某绦蛟O(shè)計的思路與人們?nèi)粘I钪刑幚韱栴}的思路是相似的。一個復(fù)雜的事物總是由許多部分組成的。例如,一輛汽車是由發(fā)動機、底盤、車身和車輪等部件組成。 當(dāng)人們生產(chǎn)汽車時,不是先設(shè)計和制造發(fā)動機,再設(shè)計和制造底盤,然后設(shè)計和制造車身和車輪,而是分別設(shè)計和制造發(fā)動機、底盤、車身和車輪,最后把它們組裝起來。這就是面向?qū)ο蟮幕舅悸贰?. 對象 客觀世界中任何一個事物都可以看成一個對象。對象可以是自然物體,也可以是社會中的一種組織結(jié)構(gòu)(班級、系、學(xué)校)甚至一個圖形、一項計劃等都可以看成對象。復(fù)雜的對象由簡單的對象組成,例如火車站對象包含售票處、

2、行李房、候車室和站臺、信號燈、鐵軌和通信設(shè)施等對象。對象是構(gòu)成系統(tǒng)的基本單位。任何一個對象都具有靜任何一個對象都具有靜態(tài)和動態(tài)的特征態(tài)和動態(tài)的特征。班級這個對象具有從屬一個系和專業(yè)、學(xué)生人數(shù)、組建時間等靜態(tài)特征,它還具有出操、學(xué)習(xí)、參加運動會等動態(tài)特征。靜態(tài)特征稱為屬性屬性,動態(tài)特征稱為行為行為,外界給對象發(fā)出的信息一般稱作消息消息。一個對象往往包含一組屬性和一組行為。如電視機包括生產(chǎn)廠家、品牌、屏幕尺寸等是靜態(tài)特征,開機、關(guān)機、選擇頻道、調(diào)節(jié)音量、調(diào)節(jié)彩色等是動態(tài)特征。2. 封裝與信息隱蔽 對一個對象進(jìn)行封裝處理,把它的一部分屬性和功能向外界屏蔽,從外面看不到這些屬性和功能。例如錄像機里有電

3、路板和機械控制部件,由于有機殼的保護(hù),在外面只看到一個黑箱子,在它的表面有若干個按鍵。人們只需知道這些按鍵的功能即可操作錄像機。而不必知道錄象機的工作原理和系統(tǒng)結(jié)構(gòu)。在設(shè)計一個對象時,要周密地考慮如何進(jìn)行封裝,把不必讓外界知道的部分隱蔽起來。也就是說,把對象的內(nèi)部實現(xiàn)和外部行為分隔開來。封裝性是面向?qū)ο蟪绦蛟O(shè)計的一個重要特點,封裝在此有兩個含義:把有關(guān)的數(shù)據(jù)和操作代碼封裝在一個對象中,形成程序中的一個基本單位,各個對象之間相互獨立,互不干擾。把對象中的某些部分對外隱蔽,只留下與外界聯(lián)系的接口接收外界的消息,這種對外界隱蔽的做法稱為信息屏蔽。封裝把對象內(nèi)部實現(xiàn)與外部分隔開,外界不了解對象內(nèi)部的具

4、體細(xì)節(jié),其實外界也不需要了解。外界需要真正了解的是對象的對外接口。C+ 對象中的公有函數(shù)就是對象的對外接口。外界通過調(diào)用公有函數(shù),訪問對象中的數(shù)據(jù)成員,完成指定的操作。3. 抽象抽象是表示同一類事物本質(zhì)的方法,它關(guān)注事物本質(zhì)特征,對象是具體的,例如某學(xué)院2006級計算機軟件專業(yè)的一個學(xué)生是一個對象,可以將一組同類對象的共同特征抽象出來,從而形成類類的概念??梢詫⑶懊嫠岬哪硨W(xué)院2006級計算機軟件專業(yè)的所有學(xué)生可抽象出2006級計算機軟件專業(yè)學(xué)生類。類是類是對象的抽象,而對象是類的具體實例對象的抽象,而對象是類的具體實例。4. 繼承與重用 如果已經(jīng)建立名為A 的類,現(xiàn)要建立一個名為 B 的類,

5、而B 類與A 類的內(nèi)容基本相同,只是在 A 類基礎(chǔ)上增加了一些屬性和行為,這樣只需在 A 類的基礎(chǔ)上添加新內(nèi)容即可,這就是面向?qū)ο蟪绦蛟O(shè)計中的繼承機制。 C+也具有繼承機制,利用這個機制可以在一個已有的類的基礎(chǔ)上建立一個新類,這也是軟件重用思想,不僅可以利用自己過去建立的類,而且還可以利用其他人放在類庫中的類建立類,這就大大縮短了軟件開發(fā)周期。5. 多態(tài)性 多個相似而不完全相同的對象,收到外界給的同一個消息時,它們各自執(zhí)行不同的操作,這種現(xiàn)象叫多態(tài)現(xiàn)象。例如在windows中,用鼠標(biāo)雙擊一個文件對象時,如果它是可執(zhí)行文件則會執(zhí)行文件中的程序,如果它是一個文本文件則會啟動一個編輯器來打開這個文件

6、,這就是面向?qū)ο蟪绦蛟O(shè)計中的多態(tài)性一個實際例子。在C+中所謂多態(tài)性是指:由繼承而產(chǎn)生的新類,它的對象對同一個消息會作出不同的響應(yīng)。2.1.2面向?qū)ο蟪绦蛟O(shè)計的特點 傳統(tǒng)的面向過程程序設(shè)計是圍繞功能進(jìn)行的,用一個函數(shù)實現(xiàn)一個功能,一個函數(shù)可以使用任何一組數(shù)據(jù),一組數(shù)據(jù)可以被多個函數(shù)使用。當(dāng)程序規(guī)模越來越大,數(shù)據(jù)越來越多,操作越來越復(fù)雜,這種方法容易出現(xiàn)錯誤,程序員往往感到難以應(yīng)付。面向?qū)ο蟪绦蛟O(shè)計采用的是另外一種思路。它面對的是一個個對象。實際上每組數(shù)據(jù)都有特定的用途,它是某種操作的對象。也就是說,一組操作調(diào)用一組數(shù)據(jù)。例如三角形的三條邊長 a、b、c 它們只與計算該三角形的面積、三角形的周長等

7、操作有關(guān),與其他操作無關(guān)。我們把這三個數(shù)據(jù)和計算三角形面積、周長等操作的代碼放在一起,封裝成一個對象,與外界相對分隔。這也符合客觀世界的本來面目。面向?qū)ο蟪绦蛟O(shè)計包括兩個方面:設(shè)計所需的各種類,即決定把哪些數(shù)據(jù)和操作封裝在一起??紤]怎樣向?qū)ο蟀l(fā)送消息(調(diào)用對象的成員函數(shù)),實現(xiàn)所需的操作。這時設(shè)計程序象一個總調(diào)度,不斷地向各個對象發(fā)送消息(命令),讓這些對象活動起來(激活這些對象),完成各自的職責(zé)范圍工作,各個對象的操作完成,整體任務(wù)也就完成了。2.1.3 類和對象的作用 類是C+中十分重要的概念,它是實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)。C+ 對C改進(jìn),其中最重要的就是增加了類這樣一種類型。類是所有面

8、向?qū)ο蟮恼Z言的共同特征,所有面向?qū)ο蟮恼Z言都提供了這種類型。一個有一定規(guī)模的C+程序是由許多類構(gòu)成的??梢哉f類是C+的靈魂。C+支持面向過程的程序設(shè)計,也支持基于對象和面向?qū)ο蟮某绦蛟O(shè)計。從本章到第四章介紹基于對象的程序設(shè)計。包括類和對象的概念、類的機制和聲明、對象的定義與使用等。這是面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)?;趯ο缶褪腔陬悾趯ο蟮某绦蚴且灶惡蛯ο鬄榛A(chǔ)的,程序的操作是圍繞對象進(jìn)行的。在此基礎(chǔ)上利用繼承機制和多態(tài)性,就成為面向?qū)ο蟮某绦蛟O(shè)計?;趯ο蟪绦蛟O(shè)計所面臨的是一個個對象。所有的數(shù)據(jù)分別屬于不同的對象。面向過程的程序設(shè)計中數(shù)據(jù)可以是公用的或者說是共享的,是缺乏保護(hù)的。缺乏保護(hù)的數(shù)據(jù)

9、容易導(dǎo)致程序失敗。其實程序中一組數(shù)據(jù)是為一種操作準(zhǔn)備的,也就是說一組數(shù)據(jù)與一種操作對應(yīng)。因此把一組數(shù)據(jù)和相關(guān)的操作放在一起,這就是面向?qū)ο蟪绦蛟O(shè)計中的對象。在面向過程的結(jié)構(gòu)化程序設(shè)計中,人們用下面的公式描述程序:程序=數(shù)據(jù)結(jié)構(gòu)+算法算法和數(shù)據(jù)結(jié)構(gòu)兩者是相互獨立的,是分開設(shè)計的。面向過程的程序設(shè)計是以數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的算法面向過程的程序設(shè)計是以數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的算法設(shè)計設(shè)計。在實踐中人們逐漸認(rèn)識到算法和數(shù)據(jù)結(jié)構(gòu)是互相緊密聯(lián)系不可分的。應(yīng)當(dāng)以一個算法對應(yīng)一組數(shù)據(jù)結(jié)構(gòu),而不宜提倡一個算法對應(yīng)多組數(shù)據(jù)結(jié)構(gòu),以及以一組數(shù)據(jù)結(jié)構(gòu)對應(yīng)多個算法?;趯ο蠛兔嫦?qū)ο蟪绦蛟O(shè)計就是把一個算法和一組數(shù)據(jù)結(jié)構(gòu)封裝在一個對象

10、中,形成了新的觀念:對象=數(shù)據(jù)結(jié)構(gòu)+算法程序=(對象+對象+對象)+消息消息的作用就是對對象進(jìn)行控制。程序設(shè)計的關(guān)鍵是設(shè)計好每個對象,以及確定向這些對象發(fā)出的命令,讓各個對象完成相應(yīng)的任務(wù)。2.1.4 面向?qū)ο蟮能浖_發(fā)1. 面向?qū)ο蠓治?. 面向?qū)ο笤O(shè)計3. 面向?qū)ο缶幊?. 面向?qū)ο鬁y試5. 面向?qū)ο缶S護(hù)1.面向?qū)ο蠓治雒嫦驅(qū)ο蠓治?,要按照面向?qū)ο蟮母拍詈头椒?,在對任?wù)的分析中,從客觀事物和事物之間的關(guān)系歸納出有關(guān)對象(對象的屬性和行為)以及對象之間的聯(lián)系。并將具有相同屬性和行為的對象用一個類來表示。2.面向?qū)ο蟮脑O(shè)計根據(jù)面向?qū)ο蠓治鲭A段形成的需求模型,對每一部分分別進(jìn)行具體的設(shè)計,首先是

11、進(jìn)行類的設(shè)計,類的設(shè)計可能包含多個層次(利用繼承和派生機制)。然后以這些類為基礎(chǔ)提出程序設(shè)計的思路和方法,包括了算法的設(shè)計。在此設(shè)計階段,并不牽涉某一具體的計算機語言。3.面向?qū)ο缶幊谈鶕?jù)面向?qū)ο笤O(shè)計的結(jié)果,用一種計算機語言把它寫成程序。C+DephiVBJava4.面向?qū)ο鬁y試寫完程序交付用戶使用前,必須對程序進(jìn)行嚴(yán)格的調(diào)試,如果發(fā)現(xiàn)錯誤,要及時改正。面向?qū)ο鬁y試,是以類作為測試的基本單元用面向?qū)ο蟮姆椒▽嵤y試。5. 面向?qū)ο缶S護(hù)任何軟件產(chǎn)品在使用過程中,可能用戶需要改進(jìn)軟件的性能,這就需要修改程序。由于采用了面向?qū)ο蟮姆椒?,方便了維護(hù)程序。因為類的封裝性,修改一個類對其他類(非子類)影響

12、很小,極大提高了程序維護(hù)的效率。2.2 類的聲明和對象的定義 在面向?qū)ο蟪绦蛟O(shè)計中,要使用大量的對象,要程序員對問題進(jìn)行分析抽象出類的概念,在設(shè)計程序時首先要聲明類類型,然后再定義類類型變量即對象。2.2.1 類和對象的關(guān)系2.2.2 聲明類類型2.2.3 定義對象的方法2.2.4 類和結(jié)構(gòu)體類型的異同2.2.1類和對象的關(guān)系 2.1節(jié)已經(jīng)說明了什么是對象。C+中對象的類型稱為類(class)。類代表了某一批對象的共性和特征。類是對象的抽象,而類是對象的抽象,而對象是類的具體實例對象是類的具體實例。正如結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的關(guān)系一樣,(先聲明一個結(jié)構(gòu)體類型,然后用它定義結(jié)構(gòu)體變量)在C+ 中

13、也是先聲明一個類類型,然后用它定義同類型的對象。對象是類類型的一個變量。類是抽象的,不占用內(nèi)存空間。對象是具體的,要占用內(nèi)存空間。2.2.2 聲明類類型 類是要用戶自己定義的類型,如果程序里要用類類型,程序員必須自己根據(jù)需要聲明,也可以使用別人已設(shè)計好的類。聲明一個類類型與聲明一個結(jié)構(gòu)體類型相似。struct student int num; char name20; char sex; ;student st1,st2;Class Student int num; string name; char sex; void setdata() cin num; cin name; cin sex

14、; void display() cout numendl; cout nameendl; cout sex num; cin name; cin sex; void display() cout numendl; cout nameendl; cout sex num; cin name; cin sex; void student : display() cout numendl; cout nameendl; cout sex num; cin name; cin sex; void student : display() cout numendl; cout nameendl; cou

15、t sex hour minute sec ; ; 可以用下面的語句計算該類對象占用的字節(jié)數(shù) cout sizeof( Time) endl; 結(jié)果輸出值是12,這是數(shù)據(jù)成員所占的空間尺寸,這就證明一個對象占用的空間其實是它的數(shù)據(jù)成員占據(jù)的內(nèi)存空間。2.4 對象成員的引用 定義了對象后,在程序中可以直接訪問對象中的公有成員,它們可以是數(shù)據(jù)成員,也可以是成員函數(shù)。在程序中訪問對象成員有三種方法。2.4.1 用對象名和成員運算符訪問成員2.4.2 用指向?qū)ο蟮闹羔樤L問成員2.4.3 用對象的引用訪問成員2.4.1通過對象名和成員運算符訪問對象中的成員 格式:對象名.成員名例:st1.display(); / 調(diào)用成員函數(shù)調(diào)用成員函數(shù) display(); / 調(diào)用普通函數(shù)調(diào)用普通函數(shù)注意:只有成員函數(shù)可以訪問類中的所有成注意:只有成員函數(shù)可以訪問類中的所有成員,而在類外只能訪問公有成員。員,而在類外只能訪問公有成員。如果在類外面用下面的語句是錯誤的:st1.num = 101012.4.2通過指向?qū)ο蟮闹羔樤L問對象中的成員 可以通過指針訪問對象中的成員。class Time public: int hour; int minute; ;Time t, *p; p= &

溫馨提示

  • 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

提交評論