華中科技大學(xué)C++課件第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概論_第1頁(yè)
華中科技大學(xué)C++課件第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概論_第2頁(yè)
華中科技大學(xué)C++課件第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概論_第3頁(yè)
華中科技大學(xué)C++課件第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概論_第4頁(yè)
華中科技大學(xué)C++課件第一章面向?qū)ο蟪绦蛟O(shè)計(jì)概論_第5頁(yè)
已閱讀5頁(yè),還剩34頁(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)介

目的:嶄新的二十一世紀(jì),以現(xiàn)代電子信息產(chǎn)業(yè)為龍頭的全球經(jīng)濟(jì)一體化浪潮正席卷世界,這是當(dāng)今人類所面臨的巨大挑戰(zhàn),人們將認(rèn)真面對(duì)挑戰(zhàn)的內(nèi)涵和挑戰(zhàn)所帶來(lái)的機(jī)遇。而以IT(InformationTechnology)技術(shù)為基礎(chǔ)的信息產(chǎn)業(yè)正深入到人類社會(huì)生活的方方面面,無(wú)論是生產(chǎn)制造、商業(yè)、國(guó)防和科技等領(lǐng)域、還是第三產(chǎn)業(yè),計(jì)算機(jī)軟件現(xiàn)已成為擔(dān)當(dāng)重任的核心力量,互聯(lián)網(wǎng)和軟件已成為推動(dòng)新經(jīng)濟(jì)發(fā)展的重要基礎(chǔ)。因此,計(jì)算機(jī)軟件技術(shù)將是各類專業(yè)的大專生、本科生和研究生所必備的基礎(chǔ)知識(shí)。

課程名稱:

C++面向?qū)ο蟪绦蛟O(shè)計(jì)

面向?qū)ο蟪绦蛟O(shè)計(jì)OOP(Object-OrientedProgramming)是計(jì)算機(jī)軟件開(kāi)發(fā)方法的一場(chǎng)革命,目前廣為流行的C++是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的第一個(gè)大眾化版本,是當(dāng)前學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的首選語(yǔ)言。本課程以最新ANSI(AmericanNationalStandardsInstitute)C++作為準(zhǔn)則,以美國(guó)Microsoft公司開(kāi)發(fā)的VisualC++6.0為語(yǔ)言藍(lán)本,系統(tǒng)介紹C++的主要語(yǔ)言特征,并用以講述面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù),使學(xué)生具有閱讀和編寫C++程序的能力。為進(jìn)一步學(xué)習(xí)完全面向?qū)ο蟆⒚嫦蛴?jì)算機(jī)網(wǎng)絡(luò)的Java語(yǔ)言打下牢固的基礎(chǔ)。

講課學(xué)時(shí):32學(xué)時(shí),2個(gè)學(xué)分教材:《面向?qū)ο蟪绦蛟O(shè)計(jì)》 劉正林編《C++習(xí)題解答與上機(jī)指導(dǎo)》 劉正林、周純杰、劉燁編著

華中科技大學(xué)出版社讀者服務(wù)部和教材出版科有售

第九章面向?qū)ο蟪绦蛟O(shè)計(jì)概論

1.1面向?qū)ο蟪绦蛟O(shè)計(jì)OOP(Object-OrientedProgramming)的基本思想和有關(guān)概念:1.面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)概念:

近10年來(lái)興起的面向?qū)ο蟪绦蛟O(shè)計(jì)方法是一種新的軟件開(kāi)發(fā)方法,它是計(jì)算機(jī)軟件開(kāi)發(fā)方法的一場(chǎng)革命。對(duì)于21世紀(jì)的人才,不管從事何種專業(yè),必須具有OOP的基本知識(shí),否則將是不合格人才。近年來(lái),由于高科技的飛速發(fā)展,如智能計(jì)算機(jī)、多媒體技術(shù)、計(jì)算機(jī)集成制造系統(tǒng)CIMS、人工智能等,迫切要求進(jìn)一步改進(jìn)系統(tǒng)的研究方法,特別要求提高計(jì)算機(jī)軟件的開(kāi)發(fā)效率和質(zhì)量。過(guò)去所學(xué)的各種程序設(shè)計(jì)語(yǔ)言(包括C語(yǔ)言)都是面向功能的(FunctionOriented),稱為傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言,使用這類語(yǔ)言來(lái)開(kāi)發(fā)軟件效率很低.首先要求編程者詳細(xì)了解所研究對(duì)象的具體細(xì)節(jié),包括它的功能、外觀、內(nèi)部結(jié)構(gòu)、各種狀態(tài)和基本原理等.然后再考慮在程序中如何用數(shù)據(jù)來(lái)描述它,還要花費(fèi)很大精力研究出一些算法,設(shè)計(jì)出一些函數(shù)來(lái)操作這些數(shù)據(jù),改變它的狀態(tài),并實(shí)現(xiàn)各種功能.這就是面向功能的程序定律: 程序=(算法)+(數(shù)據(jù)結(jié)構(gòu)).所謂“算法”是一個(gè)有限條指令的集合,這些指令確定了解決某一特定類型問(wèn)題的運(yùn)算序列,它是一個(gè)獨(dú)立的整體,數(shù)據(jù)結(jié)構(gòu)(包括數(shù)據(jù)類型和數(shù)據(jù))也是一個(gè)整體。兩者分開(kāi)設(shè)計(jì),以算法(函數(shù)或過(guò)程)為主。

主函數(shù)函數(shù)1函數(shù)3函數(shù)3-1函數(shù)3-2函數(shù)2數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3圖9.1算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系

隨著實(shí)踐經(jīng)驗(yàn)的不斷積累,軟件工程師越來(lái)越注重把數(shù)據(jù)結(jié)構(gòu)與算法看作一個(gè)獨(dú)立功能模塊.程序定律重新認(rèn)識(shí):

程序=(算法+數(shù)據(jù)結(jié)構(gòu)).即算法與數(shù)據(jù)結(jié)構(gòu)是一個(gè)不可分割的整體,因?yàn)?a.算法總是離不開(kāi)數(shù)據(jù)結(jié)構(gòu),算法是用來(lái)訪問(wèn)數(shù)據(jù)結(jié)構(gòu)的,所以算法只能適用于特定的數(shù)據(jù)結(jié)構(gòu)。b.程序設(shè)計(jì)時(shí),最好使算法與數(shù)據(jù)結(jié)構(gòu)構(gòu)成一對(duì)一(1:1)的關(guān)系。c.若數(shù)據(jù)結(jié)構(gòu)改變了,必須重新設(shè)計(jì)算法。

算法2

數(shù)據(jù)結(jié)構(gòu)3

數(shù)據(jù)結(jié)構(gòu)1

數(shù)據(jù)結(jié)構(gòu)2

數(shù)據(jù)結(jié)構(gòu)4

數(shù)據(jù)結(jié)構(gòu)

算法1

算法2

只能與一個(gè)對(duì)應(yīng)

同一種操作的不同算法實(shí)現(xiàn)是多余的圖9.2算法與數(shù)據(jù)結(jié)構(gòu)應(yīng)為1:1關(guān)系

這種程序設(shè)計(jì)方法就類似于在硬件領(lǐng)域里,一個(gè)技術(shù)員安裝一臺(tái)電腦,若想給電腦添加一塊“聲卡”,是用原始的集成電路芯片和材料去制作一塊“聲卡”呢,還是向電腦制造廠商選購(gòu)一塊“聲卡”。前者要求技術(shù)員要掌握“聲卡”的基本原理、功能、內(nèi)部結(jié)構(gòu)、各種狀態(tài)及調(diào)試技能等許多具體細(xì)節(jié),顯然這是一種效率很低的開(kāi)發(fā)方法。軟件開(kāi)發(fā)如果走過(guò)去硬件的這條老路,矛盾更突出。

不僅開(kāi)發(fā)效率難于提高,而且程序代碼的可重用性和軟件的可維護(hù)性很差。特別可維護(hù)性是軟件產(chǎn)品質(zhì)量的重要指標(biāo)之一。因?yàn)檐浖a(chǎn)品不同于硬件產(chǎn)品,硬件產(chǎn)品一旦開(kāi)發(fā)成功就是成熟的產(chǎn)品,而軟件產(chǎn)品總是不斷修改、完善,從不成熟逐步走向成熟,要求“可維護(hù)性好”是必不可少的。傳統(tǒng)的結(jié)構(gòu)化語(yǔ)言,例如C語(yǔ)言是用函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)結(jié)構(gòu)的操作,這就是用函數(shù)實(shí)現(xiàn)算法。如前所述,算法與數(shù)據(jù)結(jié)構(gòu)應(yīng)構(gòu)成一對(duì)一的關(guān)系,特定的函數(shù)往往是操作特定的數(shù)據(jù)結(jié)構(gòu)。若程序在維修時(shí),數(shù)據(jù)結(jié)構(gòu)改變了,必須編寫新的操作函數(shù),這對(duì)程序的修改、完善極為不利。(1)封裝性和數(shù)據(jù)隱藏:我們生活在高科技時(shí)代的社會(huì)里,科技成果是人類共同擁有的財(cái)富。人們是在某一程度的細(xì)節(jié)中生活,為了充分利用現(xiàn)代科技成果,減少必須處理的事情,根據(jù)所要達(dá)到的目的進(jìn)行抽象,即抓住與目的有關(guān)的重要信息,忽略掉某些不重要的細(xì)節(jié)。例如,人類發(fā)明了電話,它已是人們進(jìn)行通信的強(qiáng)有力的工具之一。但人類的絕大多數(shù)只是以“使用它”作為目的,只需知道它的功能和使用方法就可以使用電話,而不必了解電話是如何實(shí)現(xiàn)通話的具體實(shí)現(xiàn)細(xì)節(jié)。因此電話制造廠商將它們放在電話機(jī)殼內(nèi)隱藏起來(lái),封裝成一個(gè)自成一體的電話機(jī),而將一些操作按鍵安裝在機(jī)殼上作為人-機(jī)操作的接口界面。人們只需操作電話機(jī)殼上的操作鍵就可以控制電話機(jī)實(shí)現(xiàn)與外界的通話。又如電腦制造廠商將“聲卡”做成一塊模板自成一體,這種“自成一體性”稱為“封裝性”(Encapsulation)。技術(shù)員關(guān)心的是“聲卡”的功能,即只知道是做什么的,而并不關(guān)心“聲卡”的工作原理和內(nèi)部結(jié)構(gòu),是如何實(shí)現(xiàn)這些功能的,即不知道它是如何做的。無(wú)需知道封裝單元是如何工作的就能使用的思想稱為“數(shù)據(jù)隱藏”。當(dāng)然“數(shù)據(jù)隱藏”也具有保護(hù)的作用,以防止外界的干擾破壞和誤操作,如電話機(jī)殼對(duì)內(nèi)部電路具有保護(hù)作用,但更重要的是隱藏了很多具體實(shí)現(xiàn)細(xì)節(jié)。

(2)對(duì)象(Object):是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心概念?!皩?duì)象”的概念并不神秘,它來(lái)源于生活。在現(xiàn)實(shí)生活中,其實(shí)我們每時(shí)每刻都在和對(duì)象打交道。例如,一本書、一臺(tái)電腦、一部電話機(jī),戴的手表、騎的自行車等,在面向?qū)ο蟪绦騿T的眼中無(wú)一例外都看成“對(duì)象”。如果把問(wèn)題抽象一下,會(huì)發(fā)現(xiàn)現(xiàn)實(shí)生活中的這些對(duì)象具有兩個(gè)共同特點(diǎn),第一,它們都有自己的狀態(tài)。例如,一部電話有機(jī)型、大小、顏色等。第二它們都具有自己的行為。例如,電話有通話、撥打、掛起等行為。

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,抽象是最基本的原則思想之一。什么是抽象呢?抽象是對(duì)現(xiàn)實(shí)世界中的實(shí)體進(jìn)行簡(jiǎn)化的描述,使它模型化,即抓住編程者所關(guān)心的重要信息,而忽略掉一些不重要的細(xì)節(jié)部分,這是克服軟件復(fù)雜性,將現(xiàn)實(shí)世界的模型在計(jì)算機(jī)中自然地表示出來(lái)的最好辦法。因此,人們將對(duì)象的狀態(tài)用數(shù)據(jù)來(lái)表示,稱為對(duì)象的屬性(attribute/Properties),而對(duì)象的行為用對(duì)象中的程序代碼來(lái)實(shí)現(xiàn),稱為對(duì)象的方法(method),并將這數(shù)據(jù)和程序代碼封裝在一個(gè)實(shí)體內(nèi)。例如:

structComplex{

doublereal;(C語(yǔ)言中的結(jié)構(gòu)體)

doubleimag;};

classComplex{程序?qū)嶓wprivate:doublereal,imag;public:voidSet(doubler,doublei){real=r;imag=i;}

...};voidmain(){Complexa,b;//a,b是Complex類的實(shí)例變量,即該類的對(duì)象a.

Set(4.0,6.0);//用成員函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)消息發(fā)送

b.Set(8.0,12.0);//用一條消息可發(fā)向多個(gè)對(duì)象

...}

因此,對(duì)象類是一個(gè)“狀態(tài)”和“操作”的封裝體?!盃顟B(tài)”是由對(duì)象的數(shù)據(jù)結(jié)構(gòu)的內(nèi)容及其值定義的,方法是一系列的實(shí)現(xiàn)步驟,它由若干個(gè)“操作”組成的。例如,一個(gè)人有很多信息,姓名、年齡、身高、體重、文化程度、身份證號(hào)碼等,但最重要的信息是姓名和身份證號(hào)碼。這是人的重要屬性。

2.面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想:面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想是在程序空間內(nèi),對(duì)客觀世界中的實(shí)體,利用數(shù)據(jù)抽象的方法進(jìn)行描述,即將一種數(shù)據(jù)結(jié)構(gòu)和操作該數(shù)據(jù)結(jié)構(gòu)的方法捆在一起,封裝在一個(gè)程序?qū)嶓w內(nèi),從而實(shí)現(xiàn)了“數(shù)據(jù)隱藏”和“封裝性”。即把數(shù)據(jù)結(jié)構(gòu)隱藏在操作的后面,通過(guò)“操作”作為接口界面實(shí)現(xiàn)與外部的交流(消息傳遞)。對(duì)外部來(lái)講,只知道“是做什么的”,而不知道“是如何做的”。

1.2面向?qū)ο蟪绦蛟O(shè)計(jì)的要點(diǎn):面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言應(yīng)支持對(duì)象、類和繼承(Inheritance)等要素,其要點(diǎn)為:1.客觀世界是由各種對(duì)象(Object)組成,任何事物都是對(duì)象,是某個(gè)類(Class)的實(shí)例(instance)。在程序空間內(nèi),類是抽象數(shù)據(jù)類型(ADTAbstractDatatype)的實(shí)現(xiàn)。(1)由于客觀世界是復(fù)雜的,人們?cè)谔幚硭鼈儠r(shí),為了克服復(fù)雜性,常根據(jù)不同的目的將客觀事物加以區(qū)別,按照事物的狀態(tài)和特性(屬性)、行為或用途進(jìn)行分門別類,這就是歸納分類,簡(jiǎn)稱“歸類”。這種歸類的結(jié)果便是逐步抽象的過(guò)程,最終可抽象出具有相同屬性和相同行為的某一類對(duì)象。即找到了這一類對(duì)象的抽象數(shù)據(jù)類型ADT。于是在程序空間內(nèi),就可以編寫一個(gè)類(class)的代碼。例如,對(duì)于各種各樣的飛機(jī),今天看見(jiàn)一架波音747,它是一個(gè)對(duì)象,明天又看到一架圖154,它也是一個(gè)對(duì)象,如此等等。如果將這一類對(duì)象抽取它們的共同特性,便可構(gòu)造一個(gè)類”Airplane”(飛機(jī))。描述飛機(jī)的所有共有特性:凡是飛機(jī)都能在空中飛行,具有改變飛行方向,控制飛行高度和速度的操作。飛機(jī)都具有機(jī)名、機(jī)型、飛行速度、高度、方向等數(shù)據(jù),用來(lái)描述飛機(jī)的結(jié)構(gòu)特性和狀態(tài)等。而每架具體的飛機(jī)自然可作為這種類”Airplane”的一個(gè)實(shí)例。所以該類的抽象數(shù)據(jù)類型ADT為: 飛機(jī)的屬性

飛機(jī)的操作(方法)

機(jī)名

改變飛行高度

機(jī)型

改變飛行方向

飛行高度

改變飛行速度

飛行方向

飛行速度

(2)什么是類:類是面向?qū)ο蟪绦蛟O(shè)計(jì)封裝的基本單元,它被當(dāng)作一個(gè)樣板,用來(lái)生產(chǎn)該類的所有對(duì)象,就象將“類”比如成“餅干模具”,用來(lái)生產(chǎn)“餅干”之類的“對(duì)象”一樣。因此一個(gè)類的所有對(duì)象都具有相同的數(shù)據(jù)結(jié)構(gòu),并且共享實(shí)現(xiàn)操作的程序代碼。這就是說(shuō),在創(chuàng)建一個(gè)新對(duì)象時(shí),該對(duì)象具有“類”定義中所描述的相同數(shù)據(jù)結(jié)構(gòu)和操作它們的方法所對(duì)應(yīng)的程序代碼。而不必對(duì)每個(gè)新創(chuàng)建對(duì)象的操作代碼和數(shù)據(jù)結(jié)構(gòu)重新編寫一次,從而大大減輕了編程者的勞動(dòng)強(qiáng)度。再加上無(wú)數(shù)軟件技術(shù)人員對(duì)OOP語(yǔ)言系統(tǒng)完成了標(biāo)準(zhǔn)類庫(kù)的設(shè)計(jì)工作,形成了“應(yīng)用程序框架”(ApplicationFramework)機(jī)制,為面向?qū)ο髴?yīng)用程序設(shè)計(jì)提供了有力的支持。例如VisualC++已為OOP應(yīng)用程序的編程者提供了MFC(MicrosoftFoundationClass)標(biāo)準(zhǔn)類庫(kù)和ATL(ActiveTemplateLibrary)活動(dòng)模板類庫(kù)作為“應(yīng)用程序框架”。已為編程者預(yù)先定義了許多象窗體、按紐、滾動(dòng)條和對(duì)話框等對(duì)象的標(biāo)準(zhǔn)類。當(dāng)編程者需要這些類的對(duì)象時(shí),例如要?jiǎng)?chuàng)建一個(gè)新的窗體,只需用窗體類創(chuàng)建一個(gè)實(shí)例即可。

既然現(xiàn)實(shí)世界是由各種對(duì)象組成,任何對(duì)象都具有一定的屬性與操作,也就總能用數(shù)據(jù)結(jié)構(gòu)和算法(操作該數(shù)據(jù)結(jié)構(gòu)的方法)兩者合一地加以描述。這樣前述程序定律就變成: 對(duì)象=(算法+數(shù)據(jù)結(jié)構(gòu)) 程序=(對(duì)象1+對(duì)象2+...)即程序就是許多對(duì)象在計(jì)算機(jī)中相繼表現(xiàn)自己,而對(duì)象又是一個(gè)個(gè)程序?qū)嶓w。人們不再靜止地去看待數(shù)據(jù)結(jié)構(gòu)了,而把它看成是一個(gè)程序單位,一個(gè)程序分子或者一個(gè)對(duì)象的象征。它本身又包含有算法和數(shù)據(jù)結(jié)構(gòu),即“對(duì)象”,如圖1.3所示。

數(shù)據(jù)結(jié)構(gòu)

算法+數(shù)據(jù)結(jié)構(gòu)

算法+數(shù)據(jù)結(jié)構(gòu)

算法

對(duì)象

算法+數(shù)據(jù)結(jié)構(gòu)

算法+數(shù)據(jù)結(jié)構(gòu)

算法+數(shù)據(jù)結(jié)構(gòu)

算法+數(shù)據(jù)結(jié)構(gòu)

圖1.3構(gòu)成程序的對(duì)象

2.OOP采用消息(message)傳遞機(jī)制作為對(duì)象之間相互通信和作用的唯一方式。傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法強(qiáng)調(diào)功能抽象和模塊性,正如圖1.4所示,每個(gè)模塊都是一個(gè)過(guò)程,其輸入與輸出對(duì)應(yīng)著處理過(guò)程前、后的數(shù)據(jù)。因此結(jié)構(gòu)化程序設(shè)計(jì)方法將解題過(guò)程看作一系列的處理過(guò)程。由編程者編寫調(diào)用“過(guò)程”的程序,對(duì)于相同的輸入數(shù)據(jù)經(jīng)“過(guò)程”處理后,每次輸出結(jié)果都相同的,編程繁瑣,使用不靈活。數(shù)據(jù)1數(shù)據(jù)2參數(shù)

f2()返回值

過(guò)程2參數(shù)

f1()返回值

數(shù)據(jù)3

數(shù)據(jù)5

過(guò)程1數(shù)據(jù)4

參數(shù)

f3()返回值

過(guò)程3圖1.4傳統(tǒng)的結(jié)構(gòu)化方法

對(duì)象與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法中所說(shuō)的數(shù)據(jù)有本質(zhì)區(qū)別,對(duì)象本身具有很強(qiáng)的獨(dú)立性,它不象結(jié)構(gòu)化程序設(shè)計(jì)方法中的數(shù)據(jù)被動(dòng)地等待對(duì)它執(zhí)行某種操作。而是操作處理的主體,必須發(fā)消息(message)請(qǐng)求對(duì)象執(zhí)行它的某個(gè)(算法)操作,正如圖1.5所示,(算法)操作不是獨(dú)立存在的實(shí)體,而是隸屬于對(duì)象的,是對(duì)象的功能體現(xiàn)。其中MF1(MethodFunction,方法函數(shù)),...,MF4是隸屬于對(duì)象的方法函數(shù)。每當(dāng)需要改變對(duì)象的狀態(tài)時(shí),只能向?qū)ο蟀l(fā)送消息來(lái)處理對(duì)象,消息帶來(lái)了執(zhí)行該操作的詳細(xì)信息。C++是利用成員函數(shù)調(diào)用來(lái)實(shí)現(xiàn)消息發(fā)送。在成員函數(shù)體內(nèi),處理對(duì)象的數(shù)據(jù)改變其狀態(tài),對(duì)象收到消息后,按消息提供的詳細(xì)信息(包括目標(biāo)對(duì)象、所請(qǐng)求的操作方法和參數(shù))激活本對(duì)象內(nèi)相匹配的操作(成員函數(shù)),并執(zhí)行該操作,返回所需要的結(jié)果,以響應(yīng)這條消息。并且,同一條消息可同時(shí)發(fā)至多個(gè)對(duì)象,并允許這些對(duì)象按照自身的狀態(tài)加以響應(yīng)。因此與過(guò)程調(diào)用不同,同樣的輸入數(shù)據(jù),可能因?qū)ο蟮臓顟B(tài)不同而產(chǎn)生不同的輸出結(jié)果。對(duì)人彈琴,對(duì)牛彈琴,情況各異。圖1.5面向?qū)ο蠓椒?/p>

消息2MF1MF1MF4對(duì)象1MF2MF4對(duì)象2MF2MF3MF3消息13.對(duì)象類將按照“父類”(或稱基類),“子類”(或稱派生類)的關(guān)系構(gòu)成一個(gè)層次結(jié)構(gòu)的系統(tǒng)。稱為“類層次結(jié)構(gòu)”。在這種“類層次結(jié)構(gòu)”中,上層對(duì)象類所具有的屬性和方法全部被下層對(duì)象類自動(dòng)繼承。因此,越在上層的類越具有普遍性和共性,越在下層的類越細(xì)化,越具體和專門化。(1)繼承將客觀世界中一般和特殊的關(guān)系模型化成層次結(jié)構(gòu)。...

...

工人學(xué)生教師農(nóng)民小學(xué)生中學(xué)生大學(xué)生研究生助教講師教授圖1.6“人”的類層次結(jié)構(gòu)圖

例如圖1.6所示,小學(xué)生、中學(xué)生、大學(xué)生和研究生可歸納為“學(xué)生”,教授、講師、助教可歸納為“教師”,學(xué)生、工人、教師、農(nóng)民、...又可進(jìn)一步用“人”加以概括,從而形成了類層次結(jié)構(gòu),一個(gè)類的上層可以有父類,下層可以有子類。例如:最上層的對(duì)象類“人”是“學(xué)生”類的基類而“學(xué)生”又派生出“小學(xué)生”、“中學(xué)生”、“大學(xué)生”、“研究生”等派生類。

在一個(gè)“類層次結(jié)構(gòu)”中,每個(gè)類只允許一個(gè)基類時(shí),類的繼承是單繼承,即類的層次結(jié)構(gòu)為樹結(jié)構(gòu)。最上層的“人”為根結(jié)點(diǎn),最下層的“小學(xué)生”、“中學(xué)生”、“大學(xué)生”、...等為葉結(jié)點(diǎn),除根結(jié)點(diǎn)外,每個(gè)類都有它的基類,除了葉結(jié)點(diǎn)外,每個(gè)類都有它的派生類。一個(gè)派生類可以從它的基類那里繼承所有的數(shù)據(jù)和操作,并擴(kuò)充自己的特殊數(shù)據(jù)及其操作?;惓橄蟪龉餐奶卣?,派生類表達(dá)差別。當(dāng)允許一個(gè)類有多個(gè)基類時(shí),類的繼承是多重繼承。圖1.6中“研究生”子類中,既攻讀學(xué)位又從事教師工作時(shí),就出現(xiàn)了既屬于學(xué)生又屬于教師的情況。ANSIC++

支持多重繼承,因此功能更強(qiáng),使用更方便。

人身份證號(hào)碼:字符串(18位)姓名:字符串(20位)學(xué)生學(xué)校名稱:字符串(30位)

學(xué)號(hào):字符串(12位)

研究生

專業(yè):字符串(30位)

入學(xué)年月日:結(jié)構(gòu)類型Date

實(shí)例:研究生王平作為“人”

身份證號(hào)碼:420106740112520

姓名:王平

專業(yè):工業(yè)自動(dòng)化

學(xué)校名稱:中國(guó)華中理工大學(xué)

學(xué)號(hào):59613022

作為“研究生”

入學(xué)年月日:1/9/1999

作為“學(xué)生”

圖1.7類的繼承

(2)通過(guò)繼承增強(qiáng)程序代碼的可重用性(reusable),代碼的重用是利用繼承基類的屬性和方法來(lái)實(shí)現(xiàn)的。例如,由于研究生是學(xué)生的派生類,而學(xué)生又是人的派生類。因此,對(duì)于任一位研究生都應(yīng)具有本類的屬性:“專業(yè)”和“入學(xué)年月日”,還應(yīng)當(dāng)繼承學(xué)生的屬性:“學(xué)校名稱”和“學(xué)號(hào)”,進(jìn)而向上還應(yīng)該繼承人的屬性:“身份證號(hào)碼”和“姓名”。(3)在創(chuàng)建新的派生類時(shí),只要指明新派生類是以哪一個(gè)已存在的類作為基類派生而來(lái),就可自動(dòng)繼承基類的全部屬性和方法。即新派生類只需定義新增加的屬性和方法,不必再重復(fù)定義基類已有的屬性和方法,減少了程序的冗余信息,節(jié)省了存儲(chǔ)空間。如圖1.7所示,在創(chuàng)建新的派生類例如學(xué)生時(shí),只要指明新派生類是以“人”作為基類派生而來(lái),就可自動(dòng)繼承基類“人”的全部屬性和方法。即新派生類“學(xué)生”不必再重寫一遍基類“人”中的“身份證號(hào)碼”和“姓名”的程序代碼,只需寫出新增加的“學(xué)校名稱”和“學(xué)號(hào)”等。同樣只要指明研究生是學(xué)生的派生類,它自動(dòng)繼承了“身份證號(hào)碼”、“姓名”、

“學(xué)校名稱”、“學(xué)號(hào)”等。減少了程序的冗余信息,節(jié)省了存儲(chǔ)空間。

(4)修改和擴(kuò)充程序時(shí)也不必修改原有的程序代碼,只需增加一些新的代碼,因而也無(wú)需知道原有的程序模塊是如何實(shí)現(xiàn)的,從而極大地減少了軟件的維護(hù)工作量,這是實(shí)現(xiàn)軟件重用的重要機(jī)制。

類的層次結(jié)構(gòu)和繼承性使得相似的對(duì)象可以共享程序代碼的數(shù)據(jù),不同對(duì)象的共有特性只需定義一次。從而大大減少了程序中的冗余信息。在創(chuàng)建新的派生類時(shí),只要聲明新的派生類以哪一個(gè)已存在的類作為基類,就可自動(dòng)繼承基類的全部特性,即新派生類不必再重定義基類已有的性質(zhì),減少程序的冗余信息,節(jié)省存儲(chǔ)空間。同時(shí)使得用戶在編寫程序時(shí)不必從零開(kāi)始,可繼承原有程序模塊的功能。修改和擴(kuò)充程序時(shí)也不必修改原有的程序代碼,只需增加一些新的代碼,因而無(wú)須知道原有的程序模塊是怎樣實(shí)現(xiàn)的,從而極大地減少了軟件維護(hù)工作量,這是實(shí)現(xiàn)軟件重用的重要機(jī)制。在軟件開(kāi)發(fā)過(guò)程中,編程人員一次又一次地重復(fù)編制一些基本模式:分類,搜索,讀寫,分配,同步,比較......但這些事情并不是每次都一模一樣的,有非常多的細(xì)節(jié)需要變化,因此軟件工程師大多情況下是這樣做的,時(shí)時(shí)不斷地在同一主題上,精心雕琢著一個(gè)個(gè)新的變種。

4.面向?qū)ο蠛蛙浖癐C"(IntegratedCircuits)a.軟件IC的概念。在軟件工程中要提高軟件的生產(chǎn)率就應(yīng)當(dāng)走類似硬件的道路,應(yīng)該有軟件的“集成電路”(稱軟件IC)。因此,必須尋找一種能夠比較容易地將正確成熟的軟件單元應(yīng)用于新的軟件系統(tǒng)中的技術(shù)。最好有一種集成機(jī)制,將已經(jīng)成熟的軟件單元制成一個(gè)相對(duì)獨(dú)立的實(shí)體,使它們可以不加改動(dòng)或很少改動(dòng)就可以應(yīng)用于新的軟件系統(tǒng)中。只有這樣生產(chǎn)軟件才可望減少重復(fù)勞動(dòng),提高生產(chǎn)率?!败浖蘒C”的概念就是基于這一思想的一種軟件集成機(jī)制?!败浖蘒C"是一種可重用模塊。具有如下特征:(1)模塊性好,獨(dú)立性強(qiáng),可靠性高。一個(gè)“軟件IC"是用于構(gòu)造新軟件系統(tǒng)的基本單位,應(yīng)是可以獨(dú)立存在的實(shí)體,它應(yīng)當(dāng)不受或少受外界的影響,以便自由地為各個(gè)不同的軟件系統(tǒng)所用。(2)封裝功能,連接簡(jiǎn)單,使用方便,作為集成機(jī)制,“軟件IC"必須將集成的功能封裝起來(lái),使用者不必搞清楚它的內(nèi)部細(xì)節(jié),便能方便地連接,安全地用于新的軟件,提高了軟件的生產(chǎn)率。(3)內(nèi)部功能的高效實(shí)現(xiàn)和清晰,簡(jiǎn)明的說(shuō)明。"軟件IC"是可重用的,內(nèi)部代碼實(shí)現(xiàn)的高效與否,直接影響到軟件系統(tǒng)的性能。作為產(chǎn)品交給用戶,它應(yīng)當(dāng)具有類似于硬件集成插件的功能及各項(xiàng)指標(biāo)的說(shuō)明,以便使用戶可以根據(jù)需要選擇合適的“軟件IC”。

在面向?qū)ο笳Z(yǔ)言中,對(duì)象類充當(dāng)了系統(tǒng)構(gòu)造的單元,支持“軟件IC”技術(shù)。這是因?yàn)椋?1)類是一類對(duì)象的統(tǒng)一模板;它具有很強(qiáng)的模塊性。類的功能代碼實(shí)現(xiàn)只通過(guò)外部接口與外界聯(lián)系,具有很強(qiáng)的獨(dú)立性,其可靠性表現(xiàn)在一個(gè)類的出錯(cuò)不會(huì)傳播到其它類中,一個(gè)系統(tǒng)的類如果出錯(cuò)了,可以將其刪除,作為一個(gè)降級(jí)的的系統(tǒng)使用,而不會(huì)使整個(gè)系統(tǒng)癱瘓。(2)類是對(duì)象一級(jí)的抽象,它將一類對(duì)象的數(shù)據(jù)結(jié)構(gòu)的描述和其功能封裝起來(lái),使得外界不必清楚其內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只要從它的說(shuō)明中了解其基本功能,就可以使用它。(3)類之間的連接有繼承性描述和一組外協(xié)消息,因而清晰,明了。

因此,面向?qū)ο蠓椒▽?shí)際上是當(dāng)前軟件開(kāi)發(fā)中最接近問(wèn)題的一種方法。它產(chǎn)生一種與現(xiàn)實(shí)世界具有自然關(guān)系的軟件系統(tǒng),是軟件開(kāi)發(fā)的一場(chǎng)革命。但面向?qū)ο蟮难芯窟€不成熟。我們不能指望在許多領(lǐng)域馬上有類似上述“軟件IC"的產(chǎn)品出售,但在一個(gè)開(kāi)發(fā)小組,或一個(gè)開(kāi)發(fā)項(xiàng)目中自覺(jué)地“按對(duì)象方式思維(thinkinglikeanobject)”,采用面向?qū)ο蟮乃枷腴_(kāi)發(fā)和組織軟件系統(tǒng)是很有必要的。

1.3常用的C++產(chǎn)品

C++這種可靠、理想的語(yǔ)言雖然樸實(shí)無(wú)華,但卻始終是建立快速、可靠windows應(yīng)用程序的捷徑,而且,因?yàn)椴捎眯碌膽?yīng)用程序框架,大大地提高了編程效率,因此它是倍受用戶青睞的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言第一個(gè)大眾化版本。

1.應(yīng)用程序框架:是C++產(chǎn)品所提供的一個(gè)開(kāi)發(fā)工具,有了它可以大大減少編寫代碼的工作量,它為編程者提供了極好的“拿來(lái)即用”的能力,充分體現(xiàn)了OOP的代碼的可重用性。

OOP是軟件開(kāi)發(fā)領(lǐng)域的一次革命,它把事物分解成一個(gè)個(gè)的模塊,就象是一個(gè)個(gè)集成電路塊,每個(gè)模塊完成一定的功能,只要各個(gè)模塊是現(xiàn)成的,象集成電路塊是一塊塊標(biāo)準(zhǔn)的芯片,我們就可以用它組合成一個(gè)新的應(yīng)用軟件,windows系統(tǒng)(windows3.1+DOSV6.22,windows95,WindowsNT)為微機(jī)提供了一個(gè)先進(jìn)的OS,界面漂亮,使用方便,功能強(qiáng)大。但在Windows環(huán)境下編寫應(yīng)用程序的開(kāi)發(fā)方法與DOS的應(yīng)用程序有很大的差別。Windows是采用OOP的程序設(shè)計(jì)方法來(lái)設(shè)計(jì)的。只有采用這種方法設(shè)計(jì)才能和Windows系統(tǒng)保持一致。發(fā)揮Windows的優(yōu)勢(shì),但它的程序設(shè)計(jì)思想在概念和結(jié)構(gòu)上與DOS的應(yīng)用程序有本質(zhì)的區(qū)別,C++的產(chǎn)品理應(yīng)提供一種開(kāi)發(fā)工具,以確保開(kāi)發(fā)的高質(zhì)量和高效率。

BorlandC++采用一種新的應(yīng)用程序機(jī)制,即應(yīng)用程序框架稱為對(duì)象窗口庫(kù)(ObjectWindowsLibrary)簡(jiǎn)稱OWL。它在Windows下以圖形方式運(yùn)行,OWL由于對(duì)應(yīng)用程序代碼隱藏了許多底細(xì),消除了許多Windows應(yīng)用程序開(kāi)發(fā)中的繁瑣工作。從而大大簡(jiǎn)化了Windows應(yīng)用程序的編寫過(guò)程。比如,Windows把窗口作為一標(biāo)準(zhǔn)窗口類,在自行編寫的應(yīng)用程序中自然要借用它來(lái)描述窗口的行為。雖然OWL提供了極其豐富的標(biāo)準(zhǔn)類庫(kù),但它不能把所有的問(wèn)題全部包括在內(nèi),比如在一個(gè)應(yīng)用程序中需要一個(gè)特殊形狀的按鈕,我們就不能直接利用OWL提供的標(biāo)準(zhǔn)類。而需要自行定義一個(gè)按鈕類的派生類,在派生類中把特殊的需要加進(jìn)去,特別在開(kāi)發(fā)復(fù)雜程序的過(guò)程中。其思路必須使用“框架”的概念,利用OWL可以替編程者開(kāi)發(fā)的應(yīng)用程序創(chuàng)建合適的框架,并附有大量的插座,允許插入指明應(yīng)用程序“做什么”的代碼段。如圖所示,已有現(xiàn)存的標(biāo)準(zhǔn)模塊A、B,類似于硬件的標(biāo)準(zhǔn)芯片。OWL應(yīng)用程序框架可提供大量的插座,插座A、B指明模塊A、B“做什么”,正如同硬件一樣構(gòu)成一個(gè)新的應(yīng)用程序。而編程者不能了解模塊A和B,“怎么做”的具體細(xì)節(jié),也不必掌握太多的框架知識(shí),就能象用現(xiàn)成的集成電路標(biāo)準(zhǔn)芯片組合成一個(gè)新的機(jī)器。微軟公司VisualC++提供的應(yīng)用程序框架是微軟基類數(shù)據(jù)庫(kù)MicrosoftFoundationClasses.簡(jiǎn)稱MFC,它已成為所有應(yīng)用程序開(kāi)發(fā)的標(biāo)準(zhǔn)。

SymantecC++通過(guò)設(shè)置編譯器和鏈接

溫馨提示

  • 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)論