版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)授課班級:授課班級:主講教師:主講教師:王燕王燕 清華大學(xué)出版清華大學(xué)出版譚浩強(qiáng)主編譚浩強(qiáng)主編 中國鐵道出版社中國鐵道出版社zTHE C+ PROGRAMMING THE C+ PROGRAMMING LANGUAGE(SpecialLANGUAGE(Special Edition) Edition) BjarneBjarne StroustrupStroustrup 高等教育出版社高等教育出版社 第第1 1章章 緒緒 論論 1.1 1.1 面向?qū)ο蠓椒ǖ钠鹪疵嫦驅(qū)ο蠓椒ǖ钠鹪?1.2 1.2 面向?qū)ο笫擒浖椒▽W(xué)的返樸歸真面向?qū)ο笫擒浖椒▽W(xué)的返樸歸真 1.3
2、 1.3 結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì) 1.4 1.4 面向?qū)ο蟮幕靖拍詈兔嫦驅(qū)ο笙到y(tǒng)的特性面向?qū)ο蟮幕靖拍詈兔嫦驅(qū)ο笙到y(tǒng)的特性1.5 1.5 面向?qū)ο蟪绦蛟O(shè)計(jì)語言的四大家族面向?qū)ο蟪绦蛟O(shè)計(jì)語言的四大家族1.6 1.6 面向?qū)ο蟮南到y(tǒng)開發(fā)方法面向?qū)ο蟮南到y(tǒng)開發(fā)方法 1.7 1.7 面向?qū)ο蟪绦蛟O(shè)計(jì)舉例面向?qū)ο蟪绦蛟O(shè)計(jì)舉例 CPU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成如:10000000 加 10010000 減用助記符號(hào)描述的指令系統(tǒng)如 ADD A, B面向機(jī)器的語言程序設(shè)計(jì)是數(shù)據(jù)被加工的過程客觀世界可以分類,對象是類的實(shí)例對象是數(shù)據(jù)和方法的封裝對象間通
3、過發(fā)送和接受消息發(fā)生聯(lián)系程序設(shè)計(jì)關(guān)鍵是定義類,并由類派生對象1.1 1.1 面向?qū)ο蠓椒ǖ钠鹪疵嫦驅(qū)ο蠓椒ǖ钠鹪?軟件設(shè)計(jì)人員的負(fù)擔(dān)越來越重,軟件的實(shí)現(xiàn)越來越軟件設(shè)計(jì)人員的負(fù)擔(dān)越來越重,軟件的實(shí)現(xiàn)越來越龐大,為計(jì)算機(jī)領(lǐng)域自身的發(fā)展提出了新的要求。利龐大,為計(jì)算機(jī)領(lǐng)域自身的發(fā)展提出了新的要求。利用傳統(tǒng)的程序設(shè)計(jì)思想無法滿足這一要求,人們就開用傳統(tǒng)的程序設(shè)計(jì)思想無法滿足這一要求,人們就開始尋求一種更能反映人類解決問題的自然方法,這就始尋求一種更能反映人類解決問題的自然方法,這就是是“面向?qū)ο竺嫦驅(qū)ο蟆奔夹g(shù)。技術(shù)。 5050年代的程序都是用指令代碼或匯編語言編寫的年代的程序都是用指令代碼或匯編語言編
4、寫的 6060年代高級語言的出現(xiàn)大大簡化了程序設(shè)計(jì),縮短了軟年代高級語言的出現(xiàn)大大簡化了程序設(shè)計(jì),縮短了軟件開發(fā)周期自件開發(fā)周期自6060年代末到年代末到7070年代初,出現(xiàn)了大型軟件年代初,出現(xiàn)了大型軟件系統(tǒng),如操作系統(tǒng)、數(shù)據(jù)庫,這給程序設(shè)計(jì)帶來了新系統(tǒng),如操作系統(tǒng)、數(shù)據(jù)庫,這給程序設(shè)計(jì)帶來了新的問題。可靠性差,錯(cuò)誤多,且不易維護(hù)和修改的問題??煽啃圆?,錯(cuò)誤多,且不易維護(hù)和修改-“-“”。1.1 1.1 面向?qū)ο蠓椒ǖ钠鹪疵嫦驅(qū)ο蠓椒ǖ钠鹪?為了克服為了克服60年代出現(xiàn)的軟件危機(jī),年代出現(xiàn)的軟件危機(jī),1968年北約組織提年北約組織提出出“軟件工程軟件工程”的概念。對程序設(shè)計(jì)語言的認(rèn)識(shí)從強(qiáng)調(diào)的
5、概念。對程序設(shè)計(jì)語言的認(rèn)識(shí)從強(qiáng)調(diào)表達(dá)能力為重點(diǎn)轉(zhuǎn)向以結(jié)構(gòu)化和簡明性為重點(diǎn),將程序表達(dá)能力為重點(diǎn)轉(zhuǎn)向以結(jié)構(gòu)化和簡明性為重點(diǎn),將程序從語句序列轉(zhuǎn)向相互作用的模塊集合。從語句序列轉(zhuǎn)向相互作用的模塊集合。1969年,年,E.W.Dijkstra首先提出了結(jié)構(gòu)化程序設(shè)計(jì)的概念,他強(qiáng)首先提出了結(jié)構(gòu)化程序設(shè)計(jì)的概念,他強(qiáng)調(diào)從程序結(jié)構(gòu)和風(fēng)格上來研究程序設(shè)計(jì)。在軟件工程的調(diào)從程序結(jié)構(gòu)和風(fēng)格上來研究程序設(shè)計(jì)。在軟件工程的迫切要求下,迫切要求下,70年代結(jié)構(gòu)化語言獲得蓬勃發(fā)展并得到廣年代結(jié)構(gòu)化語言獲得蓬勃發(fā)展并得到廣泛應(yīng)用。使用結(jié)構(gòu)化程序設(shè)計(jì)方法可顯著地減少軟件的泛應(yīng)用。使用結(jié)構(gòu)化程序設(shè)計(jì)方法可顯著地減少軟件的復(fù)雜
6、性,提高軟件的可靠性、可測試性和可維護(hù)性。經(jīng)復(fù)雜性,提高軟件的可靠性、可測試性和可維護(hù)性。經(jīng)過幾年的探索和實(shí)踐,結(jié)構(gòu)化程序設(shè)計(jì)的應(yīng)用確實(shí)取得過幾年的探索和實(shí)踐,結(jié)構(gòu)化程序設(shè)計(jì)的應(yīng)用確實(shí)取得了成效,用結(jié)構(gòu)化程序設(shè)計(jì)的方法編寫出來的程序不僅了成效,用結(jié)構(gòu)化程序設(shè)計(jì)的方法編寫出來的程序不僅結(jié)構(gòu)良好,易寫易讀,而且易于證明其正確性。結(jié)構(gòu)良好,易寫易讀,而且易于證明其正確性。 進(jìn)入進(jìn)入8080年代,由于一系列高技術(shù)的研究,如第五代年代,由于一系列高技術(shù)的研究,如第五代計(jì)算機(jī)、計(jì)算機(jī)輔助制造計(jì)算機(jī)、計(jì)算機(jī)輔助制造CAMCAM和知識(shí)工程等領(lǐng)域的研究和知識(shí)工程等領(lǐng)域的研究都迫切要求大型的軟件系統(tǒng)作為支撐。他們
7、所用的數(shù)據(jù)都迫切要求大型的軟件系統(tǒng)作為支撐。他們所用的數(shù)據(jù)類型也超出了常規(guī)的結(jié)構(gòu)化數(shù)據(jù)類型的范疇,提出對圖類型也超出了常規(guī)的結(jié)構(gòu)化數(shù)據(jù)類型的范疇,提出對圖像、聲音、規(guī)則等非結(jié)構(gòu)化信息的管理。為了適應(yīng)這些像、聲音、規(guī)則等非結(jié)構(gòu)化信息的管理。為了適應(yīng)這些應(yīng)用領(lǐng)域的需要,迫切要求軟件模塊具有更強(qiáng)的獨(dú)立自應(yīng)用領(lǐng)域的需要,迫切要求軟件模塊具有更強(qiáng)的獨(dú)立自治性,以便于大型軟件的管理、維護(hù)和重用。由于結(jié)構(gòu)治性,以便于大型軟件的管理、維護(hù)和重用。由于結(jié)構(gòu)化語言的數(shù)據(jù)類型較為簡單,所以不能勝任對非結(jié)構(gòu)化化語言的數(shù)據(jù)類型較為簡單,所以不能勝任對非結(jié)構(gòu)化數(shù)據(jù)的定義與管理,采用過程調(diào)用機(jī)制也不夠靈活,獨(dú)數(shù)據(jù)的定義與管
8、理,采用過程調(diào)用機(jī)制也不夠靈活,獨(dú)立性較差。立性較差。為了適應(yīng)高技術(shù)發(fā)展的需要,消除結(jié)構(gòu)化編程語為了適應(yīng)高技術(shù)發(fā)展的需要,消除結(jié)構(gòu)化編程語言的局限,自言的局限,自8080年代以來,出現(xiàn)了面向?qū)ο蟪绦蚰甏詠?,出現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)流派,研制出了多種面向?qū)ο蟪绦蛟O(shè)計(jì)語言設(shè)計(jì)流派,研制出了多種面向?qū)ο蟪绦蛟O(shè)計(jì)語言(簡稱為(簡稱為OOPLOOPL:Object Oriented Programming Object Oriented Programming LanguageLanguage),如),如AdaAda,SmalltalkSmalltalk,C+C+和當(dāng)前使和當(dāng)前使用在用在Internet
9、Internet上的平臺(tái)無關(guān)語言上的平臺(tái)無關(guān)語言JavaJava等。等。 由于由于OOPLOOPL的對象、類具有高度的抽象性,所以它能很的對象、類具有高度的抽象性,所以它能很好地表達(dá)任何復(fù)雜的數(shù)據(jù)類型,也允許程序員靈活地定好地表達(dá)任何復(fù)雜的數(shù)據(jù)類型,也允許程序員靈活地定義自己所需要的數(shù)據(jù)類型。類本身具有很完整的封裝性,義自己所需要的數(shù)據(jù)類型。類本身具有很完整的封裝性,可以使用它作為編程中的模塊單元,滿足模塊獨(dú)立自治可以使用它作為編程中的模塊單元,滿足模塊獨(dú)立自治的需求。再加上繼承性和多態(tài)性,更有助于簡化大型軟的需求。再加上繼承性和多態(tài)性,更有助于簡化大型軟件和大量重復(fù)定義的模塊,增強(qiáng)了模塊的可
10、重用性,提件和大量重復(fù)定義的模塊,增強(qiáng)了模塊的可重用性,提高了軟件的可靠性,縮短了軟件的開發(fā)周期。高了軟件的可靠性,縮短了軟件的開發(fā)周期。1.2 1.2 面向?qū)ο笫擒浖椒▽W(xué)的返樸歸真面向?qū)ο笫擒浖椒▽W(xué)的返樸歸真 客觀世界是由許多具體的事物、抽象的概念、客觀世界是由許多具體的事物、抽象的概念、規(guī)則等組成的,我們將任何感興趣或要加以研規(guī)則等組成的,我們將任何感興趣或要加以研究的事、物、概念統(tǒng)稱為對象究的事、物、概念統(tǒng)稱為對象ObjectObject。每個(gè)對象都有各自的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,每個(gè)對象都有各自的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對象之間通過消息傳遞進(jìn)行相互作用和聯(lián)不同對象之間通過消息傳遞進(jìn)行相
11、互作用和聯(lián)系就構(gòu)成了各種不同的系統(tǒng)。面向?qū)ο蟮姆椒ㄏ稻蜆?gòu)成了各種不同的系統(tǒng)。面向?qū)ο蟮姆椒ㄕ且詫ο笞鳛樽罨驹氐囊环N分析問題和正是以對象作為最基本元素的一種分析問題和解決問題的方法。解決問題的方法。傳統(tǒng)的結(jié)構(gòu)化方法強(qiáng)調(diào)的是功能抽象和模塊化,每傳統(tǒng)的結(jié)構(gòu)化方法強(qiáng)調(diào)的是功能抽象和模塊化,每個(gè)模塊都是一個(gè)過程。結(jié)構(gòu)化方法處理問題是以過程為個(gè)模塊都是一個(gè)過程。結(jié)構(gòu)化方法處理問題是以過程為中心的。面向?qū)ο髲?qiáng)調(diào)的是功能抽象和數(shù)據(jù)抽象,用對中心的。面向?qū)ο髲?qiáng)調(diào)的是功能抽象和數(shù)據(jù)抽象,用對象來描述事物和過程。而對象包含數(shù)據(jù)和對數(shù)據(jù)的操作,象來描述事物和過程。而對象包含數(shù)據(jù)和對數(shù)據(jù)的操作,是對數(shù)據(jù)和功能的抽
12、象和統(tǒng)一。面向?qū)ο蠓椒ㄌ幚韱栴}是對數(shù)據(jù)和功能的抽象和統(tǒng)一。面向?qū)ο蠓椒ㄌ幚韱栴}的過程是對一系列相關(guān)對象的操縱,即發(fā)送消息到目標(biāo)的過程是對一系列相關(guān)對象的操縱,即發(fā)送消息到目標(biāo)對象中,由對象執(zhí)行相應(yīng)的操作。因此面向?qū)ο蠓椒ㄊ菍ο笾?,由對象?zhí)行相應(yīng)的操作。因此面向?qū)ο蠓椒ㄊ且詫ο鬄橹行牡?,這種以對象為中心的方法更自然、更以對象為中心的,這種以對象為中心的方法更自然、更直接地反映現(xiàn)實(shí)世界的問題空間,具有獨(dú)特的抽象性、直接地反映現(xiàn)實(shí)世界的問題空間,具有獨(dú)特的抽象性、封裝性、繼承性和多態(tài)性,能更好地適應(yīng)復(fù)雜大系統(tǒng)不封裝性、繼承性和多態(tài)性,能更好地適應(yīng)復(fù)雜大系統(tǒng)不斷發(fā)展與變化的要求。斷發(fā)展與變化的要求。1
13、.31.3結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì) 1. 1.結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì) 程序程序= =數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+ +算法算法+ +程序設(shè)計(jì)語言程序設(shè)計(jì)語言+ +語言環(huán)境語言環(huán)境 1. 結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法 2.2.面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)程序設(shè)計(jì)的新思維程序設(shè)計(jì)的新思維是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,通過將內(nèi)存分塊,是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,通過將內(nèi)存分塊,每個(gè)模塊(即對象)在功能上相互之間保持相對獨(dú)立。每個(gè)模塊(即對象)在功能上相互之間保持相對獨(dú)立。當(dāng)對象的一個(gè)成員函數(shù)被調(diào)用時(shí),對象執(zhí)行其內(nèi)部的代當(dāng)對象的一個(gè)成員函數(shù)被調(diào)用時(shí),對象執(zhí)行其內(nèi)
14、部的代碼來響應(yīng)這個(gè)調(diào)用,這使對象呈現(xiàn)出一定的行為。行為碼來響應(yīng)這個(gè)調(diào)用,這使對象呈現(xiàn)出一定的行為。行為及其結(jié)果就是該對象的功能。及其結(jié)果就是該對象的功能。是一種認(rèn)識(shí)世界的方法也是一種程序設(shè)計(jì)方是一種認(rèn)識(shí)世界的方法也是一種程序設(shè)計(jì)方法。面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)法。面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)體,也就是對象組成的。每種對象都有自己的內(nèi)部狀態(tài)體,也就是對象組成的。每種對象都有自己的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對象間的相互聯(lián)系和相互作用就構(gòu)成和運(yùn)動(dòng)規(guī)律,不同對象間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),并進(jìn)而構(gòu)成整個(gè)客觀世界。按照這了各種不同的系統(tǒng),并進(jìn)而構(gòu)成整個(gè)客
15、觀世界。按照這樣的思想設(shè)計(jì)程序,就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。樣的思想設(shè)計(jì)程序,就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。“面向面向?qū)ο髮ο蟆辈粌H僅作為一種技術(shù)、更作為一種方法貫穿于軟不僅僅作為一種技術(shù)、更作為一種方法貫穿于軟件設(shè)計(jì)的各個(gè)階段。件設(shè)計(jì)的各個(gè)階段。 是在面向過程的程序設(shè)計(jì)基礎(chǔ)上的是在面向過程的程序設(shè)計(jì)基礎(chǔ)上的質(zhì)的飛躍。面向?qū)ο蠓椒ǖ漠a(chǎn)生,是計(jì)算機(jī)科學(xué)發(fā)展的質(zhì)的飛躍。面向?qū)ο蠓椒ǖ漠a(chǎn)生,是計(jì)算機(jī)科學(xué)發(fā)展的要求。面向?qū)ο蟮募夹g(shù)在系統(tǒng)程序設(shè)計(jì)、數(shù)據(jù)庫及多媒要求。面向?qū)ο蟮募夹g(shù)在系統(tǒng)程序設(shè)計(jì)、數(shù)據(jù)庫及多媒體應(yīng)用等領(lǐng)域都得到廣泛應(yīng)用。體應(yīng)用等領(lǐng)域都得到廣泛應(yīng)用。 2. 面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)OOP1.4
16、 1.4 面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕靖拍?和面向?qū)ο笙到y(tǒng)的特性和面向?qū)ο笙到y(tǒng)的特性1.4.1 1.4.1 面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕靖拍?.1.對象對象(object)(object)(1)(1)具有唯一標(biāo)識(shí)名,可以區(qū)別于其他對象。具有唯一標(biāo)識(shí)名,可以區(qū)別于其他對象。(2)(2)具有一個(gè)狀態(tài),由與其相關(guān)聯(lián)的屬性值集合所表征。具有一個(gè)狀態(tài),由與其相關(guān)聯(lián)的屬性值集合所表征。(3)(3)有一組操作方法即服務(wù),每個(gè)操作決定對象的一種行為。有一組操作方法即服務(wù),每個(gè)操作決定對象的一種行為。(4)(4)一個(gè)對象的成員仍可以是一個(gè)對象。一個(gè)對象的成員仍可以是一個(gè)對象。(5)(5)模塊獨(dú)立性模塊獨(dú)
17、立性。(6)(6)動(dòng)態(tài)連接性動(dòng)態(tài)連接性(7)(7)易維護(hù)性易維護(hù)性 從邏輯上看,一個(gè)對象是獨(dú)立存在的模從邏輯上看,一個(gè)對象是獨(dú)立存在的模塊。模塊內(nèi)部狀態(tài)不因外界的干擾而改塊。模塊內(nèi)部狀態(tài)不因外界的干擾而改變,也不會(huì)涉及到其他模塊;模塊間的變,也不會(huì)涉及到其他模塊;模塊間的依賴性極小或幾乎沒有;各模塊可獨(dú)立依賴性極小或幾乎沒有;各模塊可獨(dú)立地被系統(tǒng)所組合選用,也可被程序員重地被系統(tǒng)所組合選用,也可被程序員重用,不必?fù)?dān)心破壞其他模塊。用,不必?fù)?dān)心破壞其他模塊??陀^世界中的對象之間是有聯(lián)系的,在客觀世界中的對象之間是有聯(lián)系的,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,通過消息機(jī)制,面向?qū)ο蟪绦蛟O(shè)計(jì)中,通過消息機(jī)制,把對
18、象之間動(dòng)態(tài)連接在一起,使整個(gè)機(jī)把對象之間動(dòng)態(tài)連接在一起,使整個(gè)機(jī)體運(yùn)轉(zhuǎn)起來,便稱為對象的連接性。有體運(yùn)轉(zhuǎn)起來,便稱為對象的連接性。有一組操作(服務(wù)),每一個(gè)操作決定對一組操作(服務(wù)),每一個(gè)操作決定對象的一種功能或行為。象的一種功能或行為。 在面向?qū)ο笙到y(tǒng)中,并不是將各個(gè)具體的對象都在面向?qū)ο笙到y(tǒng)中,并不是將各個(gè)具體的對象都進(jìn)行描述,而是忽略其非本質(zhì)的特性,找出其共性,進(jìn)行描述,而是忽略其非本質(zhì)的特性,找出其共性,將對象劃分成不同的類,這一過程為抽象過程。類是將對象劃分成不同的類,這一過程為抽象過程。類是對象的抽象及描述,是具有共同屬性和操作的多個(gè)對對象的抽象及描述,是具有共同屬性和操作的多個(gè)
19、對象的相似特性的統(tǒng)一描述體。在類的描述中,每個(gè)類象的相似特性的統(tǒng)一描述體。在類的描述中,每個(gè)類要有一個(gè)名字標(biāo)識(shí),用以表示一組對象的共同特征。要有一個(gè)名字標(biāo)識(shí),用以表示一組對象的共同特征。類中的每個(gè)對象都是該類的實(shí)例。類提供了完整的解類中的每個(gè)對象都是該類的實(shí)例。類提供了完整的解決特定問題的能力,因?yàn)轭惷枋隽藬?shù)據(jù)結(jié)構(gòu)(對象屬?zèng)Q特定問題的能力,因?yàn)轭惷枋隽藬?shù)據(jù)結(jié)構(gòu)(對象屬性)、算法(服務(wù)、方法)和外部接口(消息協(xié)議),性)、算法(服務(wù)、方法)和外部接口(消息協(xié)議),是一種是一種用戶自定義的數(shù)據(jù)類型用戶自定義的數(shù)據(jù)類型。 3. 消息消息(message) 消息是面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對象間的通信和請求消
20、息是面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對象間的通信和請求任務(wù)的操作,是要求某個(gè)對象執(zhí)行其中某個(gè)功能操作任務(wù)的操作,是要求某個(gè)對象執(zhí)行其中某個(gè)功能操作的規(guī)格說明。發(fā)送消息的對象稱為發(fā)送者,接受消息的規(guī)格說明。發(fā)送消息的對象稱為發(fā)送者,接受消息的對象稱為接收者。對象間的聯(lián)系,只能通過消息來的對象稱為接收者。對象間的聯(lián)系,只能通過消息來進(jìn)行。對象在接收到消息時(shí)才被激活。進(jìn)行。對象在接收到消息時(shí)才被激活。消息具有消息具有三個(gè)性質(zhì)三個(gè)性質(zhì):(1) (1) 同一對象可接收不同形式的多個(gè)消息,產(chǎn)生不同一對象可接收不同形式的多個(gè)消息,產(chǎn)生不同的響應(yīng);同的響應(yīng);(2) (2) 相同形式的消息可以送給不同對象,所做出的相同形式的
21、消息可以送給不同對象,所做出的響應(yīng)可以是截然不同的;響應(yīng)可以是截然不同的;(3) (3) 消息的發(fā)送可以不考慮具體的接收者,對象可消息的發(fā)送可以不考慮具體的接收者,對象可以響應(yīng)消息,也可以對消息不予理會(huì),對消息的響應(yīng)以響應(yīng)消息,也可以對消息不予理會(huì),對消息的響應(yīng)并不是必須的。并不是必須的。 對象之間傳送的消息一般由三部分組成:對象之間傳送的消息一般由三部分組成:接受對象名、調(diào)用操作名和必要的參數(shù)。接受對象名、調(diào)用操作名和必要的參數(shù)。 在面向?qū)ο蟪绦蛟O(shè)計(jì)中,消息分為兩類:在面向?qū)ο蟪绦蛟O(shè)計(jì)中,消息分為兩類:公有消息和私有消息。假設(shè)有一批消息發(fā)向同公有消息和私有消息。假設(shè)有一批消息發(fā)向同一個(gè)對象,
22、其中一部分消息是由其他對象直接一個(gè)對象,其中一部分消息是由其他對象直接向它發(fā)送的,稱為公有(向它發(fā)送的,稱為公有(publicpublic)消息;另一)消息;另一部分消息是它向自己發(fā)送的,稱為私有部分消息是它向自己發(fā)送的,稱為私有(privateprivate)消息。)消息。 在面向?qū)ο蟪绦蛟O(shè)計(jì)中,要求某一對象做某一操在面向?qū)ο蟪绦蛟O(shè)計(jì)中,要求某一對象做某一操作時(shí),就向?qū)ο蟀l(fā)送一個(gè)相應(yīng)的消息,當(dāng)對象接收到作時(shí),就向?qū)ο蟀l(fā)送一個(gè)相應(yīng)的消息,當(dāng)對象接收到發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操作。方法就是對象所能執(zhí)行的操作。作。方法就是對象所能執(zhí)
23、行的操作。方法的界面就是消息的模式,它給出方法的界面就是消息的模式,它給出了方法的調(diào)用協(xié)議;方法體則是實(shí)現(xiàn)某種操作的一系了方法的調(diào)用協(xié)議;方法體則是實(shí)現(xiàn)某種操作的一系列計(jì)算步驟,也就是一段程序。消息和方法的關(guān)系是:列計(jì)算步驟,也就是一段程序。消息和方法的關(guān)系是:對象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過來,對象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過來,有了方法,對象才能響應(yīng)相應(yīng)的消息。所以消息模式有了方法,對象才能響應(yīng)相應(yīng)的消息。所以消息模式與方法界面應(yīng)該是一致的。同時(shí),只要方法界面保持與方法界面應(yīng)該是一致的。同時(shí),只要方法界面保持不變,方法體的改動(dòng)不會(huì)影響方法的調(diào)用。在不變,方法體的改動(dòng)不會(huì)
24、影響方法的調(diào)用。在C+C+語言語言中方法是通過函數(shù)來實(shí)現(xiàn)的,稱為中方法是通過函數(shù)來實(shí)現(xiàn)的,稱為成員函數(shù)。成員函數(shù)。 1.4.2 1.4.2 面向?qū)ο笙到y(tǒng)的特性面向?qū)ο笙到y(tǒng)的特性(1 1) 抽象性抽象性面向?qū)ο蠊膭?lì)程序員以抽象的觀點(diǎn)看待程序,即面向?qū)ο蠊膭?lì)程序員以抽象的觀點(diǎn)看待程序,即程序是由一組對象組成的。我們可以將一組對象的共程序是由一組對象組成的。我們可以將一組對象的共同特征進(jìn)一步抽象出來,從而形成同特征進(jìn)一步抽象出來,從而形成“類類”的概念。抽的概念。抽象是一種從一般的觀點(diǎn)看待事物的方法,它要求程序象是一種從一般的觀點(diǎn)看待事物的方法,它要求程序員集中于事物的本質(zhì)特征,而不是具體細(xì)節(jié)或具體
25、實(shí)員集中于事物的本質(zhì)特征,而不是具體細(xì)節(jié)或具體實(shí)現(xiàn)。類的概念來自人們認(rèn)識(shí)自然、認(rèn)識(shí)社會(huì)的過程。現(xiàn)。類的概念來自人們認(rèn)識(shí)自然、認(rèn)識(shí)社會(huì)的過程。在這一過程中,人們主要使用兩種方法:從特殊到一在這一過程中,人們主要使用兩種方法:從特殊到一般的歸納法和從一般到特殊的演繹法。在歸納的過程般的歸納法和從一般到特殊的演繹法。在歸納的過程中,我們從一個(gè)個(gè)具體的事物中把共同的特征抽取出中,我們從一個(gè)個(gè)具體的事物中把共同的特征抽取出來,形成一個(gè)一般的概念,這就是來,形成一個(gè)一般的概念,這就是“歸類歸類”;在演繹;在演繹的過程中,我們又把同類的事物,根據(jù)不同的特征分的過程中,我們又把同類的事物,根據(jù)不同的特征分成不
26、同的小類,這就是成不同的小類,這就是“分類分類”。對于一個(gè)具體的類,。對于一個(gè)具體的類,它有許多具體的個(gè)體,我們稱這些個(gè)體叫做它有許多具體的個(gè)體,我們稱這些個(gè)體叫做“對象對象”。 所謂數(shù)據(jù)封裝就是指一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的所謂數(shù)據(jù)封裝就是指一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的操作集合組裝在一起,形成一個(gè)能動(dòng)的實(shí)體,也就操作集合組裝在一起,形成一個(gè)能動(dòng)的實(shí)體,也就是對象。數(shù)據(jù)封裝就是給數(shù)據(jù)提供了與外界聯(lián)系的是對象。數(shù)據(jù)封裝就是給數(shù)據(jù)提供了與外界聯(lián)系的標(biāo)準(zhǔn)接口,無論是誰,只有通過這些接口,使用規(guī)標(biāo)準(zhǔn)接口,無論是誰,只有通過這些接口,使用規(guī)范的方式,才能訪問這些數(shù)據(jù)。數(shù)據(jù)封裝是軟件工范的方式,才能訪問這些數(shù)
27、據(jù)。數(shù)據(jù)封裝是軟件工程發(fā)展的必然產(chǎn)物,使得程序員在設(shè)計(jì)程序時(shí)可以程發(fā)展的必然產(chǎn)物,使得程序員在設(shè)計(jì)程序時(shí)可以專注于自己的對象,同時(shí)也切斷了不同模塊之間數(shù)專注于自己的對象,同時(shí)也切斷了不同模塊之間數(shù)據(jù)的非法使用,減少了出錯(cuò)的可能性。據(jù)的非法使用,減少了出錯(cuò)的可能性。 從已有的對象類型出發(fā)建立一種新的對象類型,使它從已有的對象類型出發(fā)建立一種新的對象類型,使它繼承原對象的特點(diǎn)和功能,這種思想是面向?qū)ο笤O(shè)計(jì)繼承原對象的特點(diǎn)和功能,這種思想是面向?qū)ο笤O(shè)計(jì)方法的主要貢獻(xiàn)。繼承是對許多問題中分層特性的一方法的主要貢獻(xiàn)。繼承是對許多問題中分層特性的一種自然描述,因而也是類的具體化和被重新利用的一種自然描述,
28、因而也是類的具體化和被重新利用的一種手段,它所表達(dá)的就是一種對象類之間的相交關(guān)系。種手段,它所表達(dá)的就是一種對象類之間的相交關(guān)系。它使得某類對象可以繼承另外一類對象的特征和能力。它使得某類對象可以繼承另外一類對象的特征和能力。繼承所具有的作用有兩個(gè)方面:一方面可以減少代碼繼承所具有的作用有兩個(gè)方面:一方面可以減少代碼冗余;另一方面可以通過協(xié)調(diào)性來減少相互之間的接冗余;另一方面可以通過協(xié)調(diào)性來減少相互之間的接口和界面??诤徒缑?。 從繼承源上劃分從繼承源上劃分繼承可分為單繼承(單一繼承)和多繼承可分為單繼承(單一繼承)和多繼承(多重繼承)。繼承(多重繼承)。 從繼承內(nèi)容上從繼承內(nèi)容上繼承可分為取代
29、繼承、包含繼承、受限繼承可分為取代繼承、包含繼承、受限繼承、特化繼承。繼承、特化繼承。 (1) (1) 取代繼承取代繼承:例如一個(gè)徒弟從其師傅那里學(xué)到師傅:例如一個(gè)徒弟從其師傅那里學(xué)到師傅的所有技術(shù),則在任何需要師傅的地方都可以由徒弟來的所有技術(shù),則在任何需要師傅的地方都可以由徒弟來代替。代替。 (2) (2) 包含繼承包含繼承:例如交通工具是一類對象,汽車是一:例如交通工具是一類對象,汽車是一種特殊的交通工具。汽車具有了交通工具的所有特征,種特殊的交通工具。汽車具有了交通工具的所有特征,任何一輛汽車都是一種交通工具,這便是包含繼承,即任何一輛汽車都是一種交通工具,這便是包含繼承,即交通工具包
30、含了汽車的所有特征。交通工具包含了汽車的所有特征。 (3) (3) 受限繼承受限繼承:例如鴕鳥是一種特殊的鳥,它不能繼:例如鴕鳥是一種特殊的鳥,它不能繼承鳥會(huì)飛的特征。承鳥會(huì)飛的特征。 (4) (4) 特化繼承特化繼承:例如教師是一類特殊的人,他們比一:例如教師是一類特殊的人,他們比一般人具有更多的特有信息,這就是特化繼承。般人具有更多的特有信息,這就是特化繼承。不同的對象接收到相同的消息時(shí)產(chǎn)生多種完不同的對象接收到相同的消息時(shí)產(chǎn)生多種完全不同的行為的現(xiàn)象稱為多態(tài)性。全不同的行為的現(xiàn)象稱為多態(tài)性。C+C+語言支語言支持兩種多態(tài)性即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多持兩種多態(tài)性即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的
31、多態(tài)性。編譯時(shí)的多態(tài)性通過重載函數(shù)實(shí)現(xiàn),而態(tài)性。編譯時(shí)的多態(tài)性通過重載函數(shù)實(shí)現(xiàn),而運(yùn)行時(shí)的多態(tài)性通過虛函數(shù)實(shí)現(xiàn)。使用多態(tài)性運(yùn)行時(shí)的多態(tài)性通過虛函數(shù)實(shí)現(xiàn)。使用多態(tài)性可以大大提高了我們解決復(fù)雜問題的能力??梢源蟠筇岣吡宋覀兘鉀Q復(fù)雜問題的能力。 (4) C(4) C家族家族 在在1919世紀(jì)世紀(jì)8080年代,年代,C C語言成為一種極其流行、應(yīng)用非常廣語言成為一種極其流行、應(yīng)用非常廣泛的語言。泛的語言。C+C+是在是在C C語言的基礎(chǔ)上進(jìn)行擴(kuò)充,并增加了類似語言的基礎(chǔ)上進(jìn)行擴(kuò)充,并增加了類似SmalltalkSmalltalk語言中相應(yīng)的對象機(jī)制。它將語言中相應(yīng)的對象機(jī)制。它將“類類”看作是用戶定看
32、作是用戶定義類型,使其擴(kuò)充比較自然。義類型,使其擴(kuò)充比較自然。C+C+以其高效的執(zhí)行效率贏得了以其高效的執(zhí)行效率贏得了廣大程序設(shè)計(jì)員的青睞是一種混合型的面向?qū)ο蟪绦蛟O(shè)計(jì)語廣大程序設(shè)計(jì)員的青睞是一種混合型的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,由于它的出現(xiàn),才使面向?qū)ο蟮某绦蛟O(shè)計(jì)語言越來越得言,由于它的出現(xiàn),才使面向?qū)ο蟮某绦蛟O(shè)計(jì)語言越來越得到重視和廣泛的應(yīng)用。到重視和廣泛的應(yīng)用。 面向?qū)ο笳Z言可以分為兩大類,純粹的面向?qū)ο笳Z言和面向?qū)ο笳Z言可以分為兩大類,純粹的面向?qū)ο笳Z言和混合型的面向?qū)ο笳Z言。在純粹的面向?qū)ο笳Z言中,幾乎所混合型的面向?qū)ο笳Z言。在純粹的面向?qū)ο笳Z言中,幾乎所有的語言成分都是有的語言成分都是“對象對象”,這類語言強(qiáng)調(diào)開發(fā)快速原型的,這類語言強(qiáng)調(diào)開發(fā)快速原型的能力;而混合型的面向?qū)ο笳Z言,是在傳統(tǒng)的過程化語言中能力;而混合型的面向?qū)ο笳Z言,是在傳統(tǒng)的過程化語言中加入了各種面向?qū)ο蟮恼Z言機(jī)制,它所強(qiáng)調(diào)的是運(yùn)行效率。加入了各種面向?qū)ο蟮恼Z言機(jī)制,它所強(qiáng)調(diào)的是運(yùn)行效率。真正的面向?qū)ο蟪绦蛟O(shè)計(jì)語言提供了特定的語法成分來保證真正的面向?qū)ο蟪绦蛟O(shè)計(jì)語言提供了特定的語法成分來保證和支持
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度不動(dòng)產(chǎn)登記信息共享與安全保障合同3篇
- 2025年度新型住宅水電費(fèi)分時(shí)計(jì)費(fèi)合同4篇
- 2025年度生態(tài)廁所建設(shè)與資源化利用合同4篇
- 2024版貨車租賃吊車合同3篇
- 2025年度生物制藥研發(fā)成果轉(zhuǎn)化保密合同4篇
- 2025年度智能節(jié)能窗戶系統(tǒng)研發(fā)、安裝與運(yùn)營合同3篇
- 2025年度LED廣告車租賃及智能控制系統(tǒng)集成服務(wù)合同3篇
- 2025賓館一次性餐飲用品采購及庫存管理合同3篇
- 2024版貨物出口運(yùn)輸服務(wù)協(xié)議書
- 2025年度山地旅游項(xiàng)目土石方運(yùn)輸與景觀開發(fā)合同匯編3篇
- 綿陽市高中2022級(2025屆)高三第二次診斷性考試(二診)歷史試卷(含答案)
- 露天礦山課件
- 經(jīng)濟(jì)效益證明(模板)
- 銀行卡凍結(jié)怎么寫申請書
- 果樹蔬菜病害:第一章 蔬菜害蟲
- 借條借款合同帶擔(dān)保人
- 人工地震動(dòng)生成程序
- 創(chuàng)意綜藝風(fēng)脫口秀活動(dòng)策劃PPT模板
- SSB變槳系統(tǒng)的基礎(chǔ)知識(shí)
- 大五人格量表(revised)--計(jì)分及解釋
- CFA考試(LevelⅠ)歷年真題詳解2015LevelⅠMockExamAfternoonSession
評論
0/150
提交評論