面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ),隨著軟件開發(fā)規(guī)模的擴(kuò)大,傳統(tǒng)的面向過程的軟件開發(fā)方法給軟件的復(fù)用、調(diào)試、維護(hù)帶來了很大的困難。為了解決滿足軟件開發(fā)的需求,人們提出了面向?qū)ο蟪绦蛟O(shè)計(jì)(Object Oriented Programming,OOP)的思想。如今面向?qū)ο蟮乃枷胍呀?jīng)深入人心,已經(jīng)應(yīng)用到程序設(shè)計(jì)和軟件開發(fā)、數(shù)據(jù)庫系統(tǒng)、人工智能等很多領(lǐng)域。本章將詳細(xì)介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)概念。,3.1 面向過程與面向?qū)ο?傳統(tǒng)的面向過程技術(shù)

2、是圍繞功能進(jìn)行,普遍采用過程式或函數(shù)式的程序設(shè)計(jì)方法。面向?qū)ο蟪绦蛟O(shè)計(jì)圍繞現(xiàn)實(shí)世界的概念來組織模塊,采用對象來描述問題空間的實(shí)體,用程序代碼模擬現(xiàn)實(shí)世界中真實(shí)或抽象的對象。面向?qū)ο蟪绦蛟O(shè)計(jì)把一個(gè)復(fù)雜的問題分解成多個(gè)能夠獨(dú)立的功能對象,然后把這些對象組合起來去完成復(fù)雜問題,每一個(gè)對象有可以有許多更小的對象組成。,3.1.1 面向過程的問題,面向過程編程的主要思想是以事件為中心,分析解決問題需要的步驟,然后按照這些步驟來編寫函數(shù),使用的時(shí)

3、候依次調(diào)用這些函數(shù),來完成所有功能。在面向過程開發(fā)過程中主要存在以下問題。軟件重用性差:通過面向過程編程技術(shù)開發(fā)出的程序,主要以函數(shù)為模塊來實(shí)現(xiàn)功能,數(shù)據(jù)和對數(shù)據(jù)的操作耦合性太高,想利用已有的程序代碼開發(fā)新的程序時(shí),只能通過簡單的復(fù)制,然后作大量的修改,這種復(fù)用程序代碼的效率非常低。軟件可維護(hù)性差:軟件程序越復(fù)雜,里面的函數(shù)模塊越多,多個(gè)函數(shù)之間的關(guān)系就越復(fù)雜,維護(hù)起來就越困難。開發(fā)出的軟件很難滿足用戶不斷增長的需求:當(dāng)客戶提出新

4、的需求時(shí),需要修改原有軟件的函數(shù)模塊,需要進(jìn)行大量的調(diào)試,使其滿足用戶的需求,并且還不會(huì)影響其他程序模塊,軟件的升級(jí)和維護(hù)非常困難。,3.1.2 面向?qū)ο蟮奶匦?面向?qū)ο缶幊痰闹饕枷胧且允挛餅橹行?,它把具體的事物抽象成“對象”的概念,圍繞對象進(jìn)行程序的開發(fā)。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法有三大特性:封裝、繼承、多態(tài)。下面將對這三個(gè)特性做詳細(xì)介紹。1.封裝2.繼承3.多態(tài),3.2 C++類的基本概念,傳統(tǒng)的面向過程技術(shù)是圍繞功能進(jìn)行,

5、普遍采用過程式或函數(shù)式的程序設(shè)計(jì)方法。面向?qū)ο蟪绦蛟O(shè)計(jì)圍繞現(xiàn)實(shí)世界的概念來組織模塊,采用對象來描述問題空間的實(shí)體,用程序代碼模擬現(xiàn)實(shí)世界中真實(shí)或抽象的對象。面向?qū)ο蟪绦蛟O(shè)計(jì)把一個(gè)復(fù)雜的問題分解成多個(gè)能夠獨(dú)立的功能對象(類),然后把這些對象(類)組合起來去完成復(fù)雜問題 ,每一個(gè)對象可以由許多更小的對象組成。,3.2.1 結(jié)構(gòu)體與類,在C語言,結(jié)構(gòu)體就是一個(gè)可以包含其他類型數(shù)據(jù)的一種自定義數(shù)據(jù)類型。C語言中的結(jié)構(gòu)體只能自定義數(shù)據(jù)類型,不允

6、許有函數(shù)。而在C++中對結(jié)構(gòu)體進(jìn)行了擴(kuò)展,它可以有成員變量,可以有成員函數(shù),可以從別的類繼承,也可以被別的類繼承,可以有虛函數(shù)。,3.2.2 類與對象,在面向?qū)ο蟮母拍钪?,有兩個(gè)最基本的概念:類和對象。對象是組成程序的構(gòu)件,所有的數(shù)據(jù)分別屬于不同的對象。具有相同或相似性質(zhì)的對象的抽象就是類。簡而言之,類是對象的抽象,對象是類的具體化。1.對象2.類,3.2.3 類的聲明、定義和實(shí)現(xiàn),類是面向?qū)ο缶幊痰幕A(chǔ),它是用戶自定義的數(shù)據(jù)類

7、型。在C++中,類像結(jié)構(gòu)體一樣也定義了數(shù)據(jù)類型和數(shù)據(jù)行為。,,3.2.4 成員變量,在上面,定義了4個(gè)成員變量,如下所示。private: char EmployeeID[20]; char EmployeeName[50]; char sex;double totalsalary;,3.2.5 成員函數(shù),成員函數(shù)是函數(shù)的一種,它抽象了一類對象的行為。它的用法和作用與一般函數(shù)基本一樣,唯一的差別就是它是

8、一個(gè)類的成員,可以把訪問限制定義為私有、公有或受保護(hù)的。一般地將成員函數(shù)的訪問限制定義為共有,因?yàn)樗鼈兪且粋€(gè)類對外部程序提供的公共接口;也可將成員函數(shù)定義為私有,表示是類內(nèi)部函數(shù),只能被本類中其他函數(shù)成員調(diào)用,而不能被類外調(diào)用 .,3.2.6 靜態(tài)成員,在傳統(tǒng)的面向過程程序設(shè)計(jì)時(shí),有時(shí)需要在局部范圍共享某一個(gè)數(shù)據(jù),這就需要設(shè)立全局變量,而在面向?qū)ο蟮拈_發(fā)中程序由對象構(gòu)成,C++為開發(fā)者提供了靜態(tài)成員來實(shí)現(xiàn)在類范圍內(nèi)數(shù)據(jù)的共享。本節(jié)就是

9、講述靜態(tài)成員的基礎(chǔ)概述及其應(yīng)用。C++中,可以用關(guān)鍵字static聲明靜態(tài)成員變量或靜態(tài)成員函數(shù)。1.靜態(tài)成員變量2.靜態(tài)成員變量的初始化3.靜態(tài)成員函數(shù),3.2.7 this指針,在面向?qū)ο蟮木幊讨?,可以將類理解為一種數(shù)據(jù)類型,像int、char、float等類型一樣。不同的是,類是用戶自己定義的一種復(fù)雜數(shù)據(jù)類型,用這個(gè)數(shù)據(jù)類型就可以聲明一個(gè)變量,例如Employee e1、Book b1。那么這個(gè)變量的this就是這個(gè)變量的

10、指針,例如變量e1的this就是指向e1的指針,this的類型是Employee *,對其引用*this就應(yīng)該是變量e1。,3.3 構(gòu)造函數(shù),構(gòu)造函數(shù)是一種特殊的方法,主要用來在創(chuàng)建對象時(shí)初始化對象。本節(jié)將對構(gòu)造函數(shù)的概念做詳細(xì)介紹。,3.3.1 使用構(gòu)造函數(shù)的原因,前面提到,在類體中不允許對所定義的成員變量進(jìn)行初始化,那怎么辦?C++中提供了一個(gè)好的辦法:在類中用一個(gè)構(gòu)造函數(shù)來初始化需要的成員變量。在C++中,構(gòu)造函數(shù)是一個(gè)在構(gòu)

11、建對象的時(shí)候自動(dòng)調(diào)用的特殊的成員函數(shù)。使用構(gòu)造函數(shù)的目的就是對對象進(jìn)行初始化的工作,從而使對象被使用之前可以處于一種合理的狀態(tài)。,3.3.2 構(gòu)造函數(shù)的使用,構(gòu)造函數(shù)的一般格式如下圖。,,3.3.3 重載構(gòu)造函數(shù),構(gòu)造函數(shù)可以重載,即可以定義多個(gè)參數(shù)個(gè)數(shù)不同的函數(shù)。以下面的例子說明構(gòu)造函數(shù)是如何重載的。重載構(gòu)造構(gòu)造函數(shù)的使用示例。,,3.3.4 析構(gòu)函數(shù),在構(gòu)造函數(shù)中可以始化對象的某些成員變量,系統(tǒng)為其分配了資源,當(dāng)這個(gè)對象生存周

12、期結(jié)束時(shí),就需要回收對象中無用的資源,這就用到了析構(gòu)函數(shù)。析構(gòu)函數(shù)的功能就是回收對象的無用資源。構(gòu)造函數(shù)是被自動(dòng)調(diào)用的。,,3.4 繼承,繼承是面向?qū)ο缶幊痰闹匾卣?,繼承的機(jī)制使得一個(gè)新類可以獲得現(xiàn)有類的屬性和方法,這就使得在軟件的實(shí)際開發(fā)過程中代碼的復(fù)用率得到提高,軟件開發(fā)人員可以根據(jù)需求對現(xiàn)有類進(jìn)行修改,最大限度地重復(fù)現(xiàn)有的軟件。,3.4.1 繼承的概念,在日常的生活中,關(guān)于繼承的概念并不陌生,例如子女繼承了父母的部分特征、新

13、產(chǎn)品擁有以前產(chǎn)品的優(yōu)點(diǎn),也就是某個(gè)具體的人或事物從另一個(gè)人或事物中派生出的一些屬性。同理,在C++語言中,一個(gè)類可以從一個(gè)類中繼承它的屬性和方法。從一個(gè)現(xiàn)有類派生出另一個(gè)新類的機(jī)制叫做繼承。,3.4.2 繼承的工作機(jī)制,在C++語言中,繼承機(jī)制使一個(gè)新類可以擁有來自被繼承類的成員變量和成員函數(shù),而這一過程是通過派生完成的。一個(gè)類可以派生出另一個(gè)類,則派生出新類的類稱為基類,被派生的類稱為派生類?;惡团缮惖年P(guān)系可以描述為:基類是所有

14、派生類的抽象,而派生類就是基類的具體化。例如定義了兩個(gè)類A和B,類B是從類A中派生出來的,那么類A就是基類,類B就是派生類。1.單重繼承2.多重繼承,3.4.3 公有繼承,當(dāng)類的繼承方式為公有繼承時(shí),基類的public和protected成員分別成為派生類的public和protected成員,派生類的其他成員可以直接訪問它們,但是派生類外部只能通過派生類的對象訪問繼承來的public對象?;惖膒rivate成員在派生類內(nèi)部和外

15、部都是不可訪問的。公有繼承在實(shí)際應(yīng)用中是最常見的一種繼承方式。,3.4.4 私有繼承,當(dāng)類的繼承方式為私有繼承時(shí),基類的public和protected成員都成為派生類的private成員,派生類的其他成員可以直接訪問它們,但是派生類外部無法通過派生類的對象訪問繼承來的對象?;惖膒rivate成員在派生類內(nèi)部和外部都是不可訪問的。,3.4.5 保護(hù)繼承,保護(hù)繼承:當(dāng)類的繼承方式為保護(hù)繼承時(shí),基類的public和protected成

16、員都成為派生類的protected成員,派生類的其他成員可以直接訪問它們,但是派生類外部無法通過派生類的對象訪問繼承來的對象?;惖膒rivate成員在派生類內(nèi)部和外部都是不可訪問的。,3.4.6 多重繼承,單重繼承機(jī)制可以描述現(xiàn)實(shí)世界中大多數(shù)客觀事物的關(guān)系,在面向?qū)ο缶幊讨?,只從一個(gè)基類中派生新類,但是現(xiàn)實(shí)世界中也存在從多個(gè)基類中派生新類的情況,如圖所示。,,3.5 異常處理,任何一個(gè)應(yīng)用程序都需要反復(fù)的修改、調(diào)試,務(wù)求做的盡善盡

17、美,但在程序在運(yùn)行的過程中不可避免地會(huì)出現(xiàn)一些異常情況,這些異常情況會(huì)影響程序的正常運(yùn)行。為了處理這些異常,開發(fā)出穩(wěn)定、可靠的程序,C++中提供了非常強(qiáng)大的異常處理機(jī)制。,3.5.1 異常的概念,本章節(jié)將介紹異常的基礎(chǔ)知識(shí)。異常就是在程序執(zhí)行過程中出現(xiàn)的錯(cuò)誤,這些錯(cuò)誤有些是可預(yù)見的,有些不可預(yù)見。常見的異常有很多,例如錯(cuò)誤的函數(shù)定義、類定義時(shí)遺忘了“}”后的分號(hào)、數(shù)組下標(biāo)溢出、自定義異常等。,3.5.2 異常處理機(jī)制,在C++語言中

18、,使用異常處理機(jī)制來發(fā)現(xiàn)和處理異常,通常的做法是先拋出異常在,再處理異常,即當(dāng)程序中出現(xiàn)異常時(shí)拋出異常,通知系統(tǒng)發(fā)生異常,然后系統(tǒng)捕捉發(fā)生的異常,并交給異常處理模塊來處理異常。C++語言中的異常處理包括三個(gè)關(guān)鍵步驟:拋出異常、捕獲異常和處理異常。1.拋出異常2.捕獲異常3.處理異常,3.5.3 基本的異常的方法,下面通過一個(gè)例子說明基本的異常處理的方法。,,3.5.4 多個(gè)異常處理方法,在上面的例子中,只有一個(gè)異常發(fā)生的情況,

19、但在實(shí)際程序開發(fā)中,往往存在有多種異常的情況。此時(shí)可以一次使用多條catch語句處理。關(guān)鍵字try關(guān)鍵字可用來圈定只有一種異常的情況,也可以用來圈定存在多種異常的情況。,,3.6 小結(jié),本章主要介紹面向?qū)ο缶幊碳俺绦虍惓L幚淼幕A(chǔ)知識(shí)。面向?qū)ο缶幊叹哂谐橄?、封裝、繼承和多態(tài)四個(gè)主要特征。面向?qū)ο蟪绦蛟O(shè)計(jì)圍繞現(xiàn)實(shí)世界的概念來組織模塊,采用對象來描述問題空間的實(shí)體,用程序代碼模擬現(xiàn)實(shí)世界中真實(shí)或抽象的對象。面向?qū)ο蟪绦蛟O(shè)計(jì)把一個(gè)復(fù)雜的問題

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論