C課件第七章面向?qū)ο蟪绦蛟O(shè)計(jì)概述.ppt_第1頁(yè)
C課件第七章面向?qū)ο蟪绦蛟O(shè)計(jì)概述.ppt_第2頁(yè)
C課件第七章面向?qū)ο蟪绦蛟O(shè)計(jì)概述.ppt_第3頁(yè)
C課件第七章面向?qū)ο蟪绦蛟O(shè)計(jì)概述.ppt_第4頁(yè)
C課件第七章面向?qū)ο蟪绦蛟O(shè)計(jì)概述.ppt_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

第七章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述,要點(diǎn): 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想; 對(duì)象、類(lèi)、消息、抽象性、封裝性、繼承性、多態(tài)性的基本概念。,本章內(nèi)容,7.1 面向?qū)ο蟮乃枷?7.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念 7.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的語(yǔ)言,7.1 面向?qū)ο蟮乃枷?7.1.1 結(jié)構(gòu)化程序設(shè)計(jì)回顧 7.1.2 面向?qū)ο蟮乃枷?7.1.3 結(jié)構(gòu)化和面向?qū)ο蟮谋容^,結(jié)構(gòu)化程序設(shè)計(jì)回顧(1),結(jié)構(gòu)化程序設(shè)計(jì)是為了解決早期計(jì)算機(jī)程序的難于閱讀、理解、調(diào)試、維護(hù)和擴(kuò)充,以及開(kāi)發(fā)周期長(zhǎng)、不易控制程序的質(zhì)量等問(wèn)題而提出來(lái)的,它的產(chǎn)生和發(fā)展奠定了軟件工程的基礎(chǔ)。 結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是:自頂向下,逐步求精。將整個(gè)程序結(jié)構(gòu)劃分成若干個(gè)功能相對(duì)獨(dú)立的模塊,模塊之間的聯(lián)系盡可能簡(jiǎn)單;每個(gè)模塊用順序、選擇、循環(huán)三種基本結(jié)構(gòu)來(lái)實(shí)現(xiàn);每個(gè)模塊只有一個(gè)入口和一個(gè)出口。 結(jié)構(gòu)化程序設(shè)計(jì)有很多優(yōu)點(diǎn):各模塊可以分別編程,使程序易于閱讀、理解、調(diào)試和修改;方便新功能模塊的擴(kuò)充;功能獨(dú)立的模塊可以組成子程序庫(kù),有利于實(shí)現(xiàn)軟件復(fù)用等。,結(jié)構(gòu)化程序設(shè)計(jì)回顧(2),結(jié)構(gòu)化程序設(shè)計(jì)方法以解決問(wèn)題的過(guò)程作為出發(fā)點(diǎn),其方法是面向過(guò)程的。它把程序定義為“數(shù)據(jù)結(jié)構(gòu)+算法”,程序中數(shù)據(jù)與處理這些數(shù)據(jù)的算法(過(guò)程)是分離的。這樣,對(duì)不同的數(shù)據(jù)結(jié)構(gòu)作相同的處理,或?qū)ο嗤臄?shù)據(jù)結(jié)構(gòu)作不同的處理,都要使用不同的模塊,從而降低了程序的可維護(hù)性和可復(fù)用性。同時(shí),由于這種分離,導(dǎo)致了數(shù)據(jù)可能被多個(gè)模塊使用和修改,難于保證數(shù)據(jù)的安全性和一致性。因此,對(duì)于小型程序和中等復(fù)雜程度的程序來(lái)說(shuō),它是一種較為有效的技術(shù),但對(duì)于復(fù)雜的、大規(guī)模的軟件的開(kāi)發(fā)來(lái)說(shuō),它就不盡如人意了。 通過(guò)上面的分析可以看出:結(jié)構(gòu)化程序設(shè)計(jì)的核心思想是功能的分解,思想的特點(diǎn)是將數(shù)據(jù)結(jié)構(gòu)與過(guò)程分離,著重點(diǎn)在過(guò)程。用這種方法開(kāi)發(fā)的軟件可維護(hù)性和可復(fù)用性差。,面向?qū)ο蟮乃枷?1),面向?qū)ο蟪绦蛟O(shè)計(jì)是在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上發(fā)展起來(lái)的,它吸取了結(jié)構(gòu)化程序設(shè)計(jì)中最為精華的部分,有人稱(chēng)它是“被結(jié)構(gòu)化了的結(jié)構(gòu)化程序設(shè)計(jì)”。 在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是構(gòu)成軟件系統(tǒng)的基本單元,并從相同類(lèi)型的對(duì)象中抽象出一種新型的數(shù)據(jù)類(lèi)型類(lèi),對(duì)象只是類(lèi)的實(shí)例。類(lèi)的成員中不僅包含有描述類(lèi)對(duì)象屬性的數(shù)據(jù),還包含對(duì)這些數(shù)據(jù)進(jìn)行處理的程序代碼(這些程序代碼被稱(chēng)為對(duì)象的行為或操作)。將對(duì)象的屬性和行為放在一起作為一個(gè)整體的方法稱(chēng)為封裝,它將對(duì)象的大部分行為的實(shí)現(xiàn)隱蔽起來(lái),僅通過(guò)一個(gè)可控的接口與外界交互。 面向?qū)ο蟪绦蛟O(shè)計(jì)提供了類(lèi)的繼承性,可通過(guò)對(duì)一個(gè)被稱(chēng)為基類(lèi)的類(lèi)增添不同的特性來(lái)派生出多種被稱(chēng)為派生類(lèi)的特殊類(lèi),從而使得類(lèi)與類(lèi)之間建立了層次結(jié)構(gòu)關(guān)系,為軟件復(fù)用提供了有效的途徑。,面向?qū)ο蟮乃枷?2),面向?qū)ο蟪绦蛟O(shè)計(jì)支持多態(tài)性。多態(tài)性與繼承性相結(jié)合,使不同結(jié)構(gòu)的對(duì)象以各自不同的方式響應(yīng)同一個(gè)消息。 軟件系統(tǒng)中,對(duì)象與對(duì)象之間存在著一定的聯(lián)系,這種聯(lián)系通過(guò)消息的傳遞來(lái)實(shí)現(xiàn)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,消息表現(xiàn)為一個(gè)對(duì)象對(duì)另一個(gè)對(duì)象的行為的調(diào)用。 通過(guò)上面的分析可以看出:面向?qū)ο蟪绦蛟O(shè)計(jì)的核心思想是數(shù)據(jù)的分解,著重點(diǎn)放在被操作的數(shù)據(jù)上而不是實(shí)現(xiàn)操作的過(guò)程上。它把數(shù)據(jù)及其操作作為一個(gè)整體對(duì)待,數(shù)據(jù)本身不能被外部過(guò)程直接存取。思想的特點(diǎn)是程序一般由類(lèi)的定義和類(lèi)的使用兩部分組成,主程序中定義各個(gè)對(duì)象并規(guī)定它們之間傳遞消息的規(guī)律,程序中的一切操作都通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn),對(duì)象接收到消息后,調(diào)用有關(guān)對(duì)象的行為來(lái)完成相應(yīng)的操作。用這種方法開(kāi)發(fā)的軟件可維護(hù)性和可復(fù)用性高。,結(jié)構(gòu)化 面向?qū)ο?結(jié)構(gòu)化和面向?qū)ο蟮谋容^(1),1、解決了早期計(jì)算機(jī)程序難于閱讀、理解、調(diào)試、維護(hù)和擴(kuò)充、開(kāi)發(fā)周期長(zhǎng)、不易控制程序的質(zhì)量等問(wèn)題。,1、解決了結(jié)構(gòu)化方法中數(shù)據(jù)與算法分離帶來(lái)的可維護(hù)性、可復(fù)用性、數(shù)據(jù)的安全性和一致性差等問(wèn)題。,2、結(jié)構(gòu)化的核心思想是功能的分解,將數(shù)據(jù)結(jié)構(gòu)與過(guò)程分離,設(shè)計(jì)重點(diǎn)放在過(guò)程,2、面向?qū)ο蟮暮诵乃枷胧菙?shù)據(jù)的分解,設(shè)計(jì)重點(diǎn)是數(shù)據(jù)而不是過(guò)程。數(shù)據(jù)及其操作作為一個(gè)整體,數(shù)據(jù)不能被外部過(guò)程直接存取,3、程序由模塊構(gòu)成,每個(gè)模塊用順序、選擇、循環(huán)三種基本結(jié)構(gòu)來(lái)實(shí)現(xiàn);模塊單入口單出口,程序的功能是通過(guò)過(guò)程對(duì)數(shù)據(jù)的直接操作而實(shí)現(xiàn)的,3、程序由類(lèi)的定義和類(lèi)的使用兩部分組成,主程序中定義各個(gè)對(duì)象并規(guī)定它們之間傳遞消息的規(guī)律,程序中的一切操作都通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn),,結(jié)構(gòu)化和面向?qū)ο蟮谋容^(2),面向過(guò)程的方法 即程序=數(shù)據(jù)+操作(對(duì)數(shù)據(jù)和操作不進(jìn)行分類(lèi)),面向?qū)ο蟮姆椒?即程序=對(duì)象+對(duì)象而對(duì)象=數(shù)據(jù)+操作 (對(duì)數(shù)據(jù)和操作進(jìn)行分類(lèi)),程序可以看成是一系列對(duì)數(shù)據(jù)進(jìn)行操作的過(guò)程。目前有兩種組織數(shù)據(jù)和操作的方法:,7.2 面向?qū)ο蟮幕靖拍?7.2.1 對(duì)象和類(lèi) 7.2.2 消息 7.2.3 抽象性 7.2.4 封裝性 7.2.5 繼承性 7.2.6 多態(tài)性,對(duì)象和類(lèi)現(xiàn)實(shí)世界中(1),現(xiàn)實(shí)世界中的對(duì)象是現(xiàn)實(shí)世界中的實(shí)體,每個(gè)對(duì)象都有一個(gè)用于與其他對(duì)象相區(qū)別的名字。 具有某些特征,稱(chēng)它為屬性或狀態(tài)。 有一組操作,每一個(gè)操作決定對(duì)象的一種行為即對(duì)象能干什么。 對(duì)象的狀態(tài)只能被自身的行為所改變。 對(duì)象之間以消息傳遞的方式相互通信。,座位數(shù),剎車(chē),車(chē)輪數(shù),顏色,發(fā)動(dòng)機(jī)缸數(shù),加速,類(lèi)和對(duì)象是抽象和具體的關(guān)系。 具有共同屬性和行為的事物的抽象叫做類(lèi),同類(lèi)中的事物可以具有不同的屬性值。例如,右圖中的車(chē)具有共同的屬性,因此同屬轎車(chē)類(lèi)。 同類(lèi)的具有不同屬性值的事物叫做該類(lèi)的一個(gè)對(duì)象。例如,右圖中每一部轎車(chē),由于其屬性值各不相同,故是轎車(chē)類(lèi)的對(duì)象。,對(duì)象和類(lèi)現(xiàn)實(shí)世界中(2),現(xiàn)實(shí)世界中的類(lèi)是對(duì)一組具有共同屬性和行為的對(duì)象的抽象。,對(duì)象和類(lèi)面向?qū)ο笤O(shè)計(jì)中(1),面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象是由描述其屬性的數(shù)據(jù)和定義在數(shù)據(jù)上的一組操作組成的實(shí)體,是數(shù)據(jù)單元和過(guò)程單元的集合體。,如學(xué)生李東是一個(gè)對(duì)象,他由描述他的特征的數(shù)據(jù)和他能提供的一組操作來(lái)表征: 對(duì)象名:李東 屬性:年齡:20,性別:男,身高:173厘米,體重:71公斤,特長(zhǎng):籃球運(yùn)動(dòng),專(zhuān)業(yè):計(jì)算機(jī)科學(xué)和技術(shù) 操作:回答有關(guān)自己的提問(wèn),計(jì)算機(jī)軟件開(kāi)發(fā)、維護(hù)、組網(wǎng) 這里的屬性說(shuō)明了李東這個(gè)對(duì)象的特征,操作說(shuō)明了李東能做什么。,李東,對(duì)象和類(lèi)面向?qū)ο笤O(shè)計(jì)中(2),面向?qū)ο蟪绦蛟O(shè)計(jì)中的類(lèi)是一組有相同屬性結(jié)構(gòu)和操作行為對(duì)象的抽象。類(lèi)由類(lèi)名區(qū)分,如人、樹(shù)等。,如學(xué)生是對(duì)學(xué)生對(duì)象抽象所形成的類(lèi),它由學(xué)生共同的屬性和操作來(lái)表征: 類(lèi)名:學(xué)生 屬性:年齡,性別,身高,體重,特長(zhǎng),專(zhuān)業(yè)等. 操作:回答有關(guān)針對(duì)個(gè)人的提問(wèn),從事本專(zhuān)業(yè)的簡(jiǎn)單工作 這里的屬性說(shuō)明了學(xué)生共有的特征,但沒(méi)有具體的屬性值,操作說(shuō)明了學(xué)生能做什么。,他們都是學(xué)生,李東是其中之一,對(duì)象和類(lèi)面向?qū)ο笤O(shè)計(jì)中(3),類(lèi)是創(chuàng)建對(duì)象的樣板,它沒(méi)有具體的屬性值和具體的操作,以它為樣板創(chuàng)建的對(duì)象才有具體的值和操作。一個(gè)對(duì)象是類(lèi)的實(shí)例,有了類(lèi)才能創(chuàng)建對(duì)象。,類(lèi)名:學(xué)生 屬性:年齡,性別,身高,體重,特長(zhǎng),專(zhuān)業(yè) 操作:回答提問(wèn),從事本專(zhuān)業(yè)的簡(jiǎn)單工作 當(dāng)把類(lèi)的各屬性賦予實(shí)際李東相關(guān)的值,同時(shí)給這個(gè)具體化了的類(lèi)命名李東后,就用學(xué)生這個(gè)類(lèi)創(chuàng)建了一個(gè)對(duì)象李東。,年齡20,性別 男,身高173厘米,體重71公斤,特長(zhǎng)籃球運(yùn)動(dòng),專(zhuān)業(yè)計(jì)算機(jī)科學(xué)和技術(shù),現(xiàn)在就不能代表在座的所有學(xué)生了,故取名李東,對(duì)象和類(lèi)面向?qū)ο笤O(shè)計(jì)中(4),特別要指出的是,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類(lèi)只出現(xiàn)在源程序代碼中,不會(huì)出現(xiàn)在正在內(nèi)存運(yùn)行的程序中,換句話說(shuō),類(lèi)只是在編譯時(shí)存在,為對(duì)象的創(chuàng)建提供樣板。對(duì)象作為類(lèi)的實(shí)例出現(xiàn)在內(nèi)存運(yùn)行的程序中,占有內(nèi)存空間,對(duì)象是運(yùn)行時(shí)存在的實(shí)體。所以類(lèi)實(shí)際上是一個(gè)新的數(shù)據(jù)類(lèi)型,要使用它時(shí),要在源程序中說(shuō)明,而說(shuō)明部分的代碼是不在內(nèi)存中運(yùn)行的。在內(nèi)存中運(yùn)行的是類(lèi)的對(duì)象,對(duì)象在內(nèi)存中分配空間并完成計(jì)算任務(wù),對(duì)象通過(guò)類(lèi)來(lái)定義。所以,必須嚴(yán)格區(qū)分說(shuō)明和定義兩個(gè)概念。在C+中,把描述類(lèi)的屬性的數(shù)據(jù)稱(chēng)為數(shù)據(jù)成員,把描述行為的操作稱(chēng)為成員函數(shù)。,對(duì)象和類(lèi)對(duì)象的狀態(tài),對(duì)象能夠獨(dú)立存在于現(xiàn)實(shí)世界中的原因,是每個(gè)對(duì)象都有各自的特征,這些特征就是對(duì)象的狀態(tài)。對(duì)象的狀態(tài)用屬性的值來(lái)表征,是所有靜態(tài)屬性和這些屬性的動(dòng)態(tài)值的總和。 面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)象的狀態(tài)可以是初等的數(shù)據(jù)類(lèi)型,如整型、實(shí)型、字符型等,也可以是用戶自定義的數(shù)據(jù)類(lèi)型,如結(jié)構(gòu)性、枚舉型等,還可以是對(duì)象,如人的狀態(tài)除姓名等外,可能有家庭成員,而家庭成員是一個(gè)對(duì)象。,對(duì)象和類(lèi)類(lèi)的確定和劃分,確定和劃分類(lèi)的重要性: 面向?qū)ο蠹夹g(shù)是將系統(tǒng)分解成若干對(duì)象,對(duì)象之間的相互作用構(gòu)成了整個(gè)系統(tǒng)。設(shè)計(jì)類(lèi)而不是對(duì)象可以避免重復(fù)編碼,類(lèi)只需編碼一次,就可以創(chuàng)建所有的對(duì)象。 確定和劃分類(lèi)的一般原則 :尋求系統(tǒng)中各事物的共性,將具有共性的那些事物劃分成一個(gè)類(lèi)。 同一系統(tǒng),達(dá)到的目標(biāo)不同,確定和劃分的類(lèi)也不相同。 確定一個(gè)事物是否是一個(gè)類(lèi)的步驟是: 先判斷該事物是否有一個(gè)以上的實(shí)例對(duì)象,有則可能是一個(gè)類(lèi)。再判斷該事物的對(duì)象是否有絕對(duì)的不同點(diǎn),沒(méi)有就可確定它是一個(gè)類(lèi)。 設(shè)計(jì)類(lèi)時(shí)應(yīng)有明確的標(biāo)準(zhǔn),設(shè)計(jì)的類(lèi)應(yīng)該是容易理解和使用的。,一個(gè)學(xué)校系統(tǒng),目標(biāo)是教學(xué)管理,劃分的類(lèi)可能是教師、學(xué)生、教材、課程、教室等。目標(biāo)是后勤管理,劃分的類(lèi)了能是宿舍、食堂、后勤工作人員、教室等。,不能指望一次性正確地確定和劃分類(lèi),需要不斷地對(duì)實(shí)際問(wèn)題進(jìn)行分析和整理,反復(fù)修改才能得出正確的結(jié)果。,消息(1),一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求稱(chēng)為消息,它是一個(gè)對(duì)象要求另一個(gè)對(duì)象執(zhí)行某個(gè)操作的規(guī)格說(shuō)明,通過(guò)消息傳遞才能完成對(duì)象之間的相互請(qǐng)求和協(xié)作。通常把發(fā)送消息的對(duì)象稱(chēng)為消息的發(fā)送者或請(qǐng)求者,而把接收消息的對(duì)象稱(chēng)為消息的接受者或目標(biāo)對(duì)象。接受者只有在接收到消息時(shí),才能被激活,之后才能根據(jù)消息的要求調(diào)用某個(gè)方法完成相應(yīng)的操作。所以,消息傳遞的實(shí)質(zhì)是方法的調(diào)用。 對(duì)象間傳遞的消息一般由三部分組成:接收對(duì)象名、調(diào)用的操作名和一個(gè)或多個(gè)參數(shù)。一個(gè)對(duì)象所能接受的消息及其所帶的參數(shù),就構(gòu)成了該對(duì)象的外部接口。,學(xué)生請(qǐng)求教師輔導(dǎo),學(xué)生向教師發(fā)出消息,教師接收到這個(gè)請(qǐng)求或消息后,才決定做什么輔導(dǎo)并執(zhí)行輔導(dǎo)。,消息(2),消息的性質(zhì) 同一對(duì)象可以對(duì)不同形式的多個(gè)消息作出不同的響應(yīng)。 相同形式的消息可以傳遞給不同的對(duì)象,作出的響應(yīng)可以是不同的。 消息的發(fā)送者可以不考慮具體的接受者,接受者可以響應(yīng),也可以不響應(yīng)。 消息分為公有消息和私有消息兩類(lèi) 公有消息是由其他對(duì)象發(fā)送來(lái)的消息 私有消息是自己向自己發(fā)送的消息。 公有消息和私有消息的區(qū)分與消息傳遞要調(diào)用的方法有關(guān),如果被調(diào)用的方法在對(duì)象類(lèi)中使用public說(shuō)明的,則為公有消息,如果使用private說(shuō)明的,則為私有消息,私有消息只能發(fā)送調(diào)用屬于自己的方法。 類(lèi)提供了完整地解決特定問(wèn)題的能力,它描述了數(shù)據(jù)結(jié)構(gòu)(對(duì)象屬性)、算法(方法)和外部接口(消息)。對(duì)象通過(guò)外部接口接受它能識(shí)別的消息,按照自己的方式來(lái)解釋這個(gè)消息并調(diào)用某個(gè)方法來(lái)完成對(duì)數(shù)據(jù)的處理,從而解決特定問(wèn)題。,抽象性,面向?qū)ο蟪绦蛟O(shè)計(jì)中的抽象是對(duì)一類(lèi)對(duì)象進(jìn)行分析和認(rèn)識(shí),經(jīng)過(guò)概括,抽出一類(lèi)對(duì)象的公共性質(zhì),并加以描述的過(guò)程。 對(duì)一個(gè)事物的抽象一般包括兩個(gè)方面:數(shù)據(jù)抽象和行為抽象。 數(shù)據(jù)抽象是對(duì)對(duì)象的屬性和狀態(tài)的描述,使對(duì)象之間互區(qū)別的特征量的描述。 行為抽象是對(duì)數(shù)據(jù)需要進(jìn)行的處理的描述,它描述了一類(lèi)對(duì)象的共同行為特征,使一類(lèi)對(duì)象具有共同的功能,因此,又稱(chēng)行為抽象為代碼抽象。 類(lèi)的數(shù)據(jù)成員的實(shí)質(zhì)就是解決問(wèn)題所需要的數(shù)據(jù),它是數(shù)據(jù)抽象的結(jié)果;而成員函數(shù)的實(shí)質(zhì)是完成對(duì)類(lèi)中的這些數(shù)據(jù)進(jìn)行加工處理的代碼,它是類(lèi)的行為,用行為抽象來(lái)描述。因此,抽象性是面向?qū)ο蟮暮诵摹?設(shè)計(jì)繪制圓的程序:通過(guò)分析可知,圓是這個(gè)問(wèn)題中唯一的事物。對(duì)于具體的圓,有大有小,位置也不同,但用圓心的橫、縱坐標(biāo)和圓的半徑就可以描述一個(gè)確定的圓,這就是對(duì)圓這個(gè)事物的數(shù)據(jù)抽象。由于抽象后沒(méi)有具體的數(shù)據(jù),它不能是一個(gè)具體的圓,只能代表一類(lèi)事物圓類(lèi)。要能畫(huà)出圓,該程序還應(yīng)有設(shè)置圓心位置、半徑大小、繪制圓形的功能,這就是對(duì)圓這個(gè)事物的行為抽象。,封裝性,封裝就是把相關(guān)的數(shù)據(jù)和代碼結(jié)合成一個(gè)有機(jī)的整體,形成數(shù)據(jù)和操作代碼的封裝體,對(duì)外只提供一個(gè)可以控制的接口,將內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)對(duì)外隱蔽,達(dá)到對(duì)數(shù)據(jù)訪問(wèn)權(quán)的合理控制。封裝使程序中各部分之間的相互聯(lián)系達(dá)到最小,提高了程序的安全性,簡(jiǎn)化了程序代碼的編寫(xiě)工作,是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要原則。 面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝是通過(guò)對(duì)象來(lái)實(shí)現(xiàn)的。對(duì)象中的不僅包含了數(shù)據(jù)成員,也包含了對(duì)這些數(shù)據(jù)進(jìn)行處理的操作代碼。成員可以根據(jù)需要定義為公有的或私有的,私有成員在對(duì)象中被隱蔽起來(lái),對(duì)外拒絕訪問(wèn);公有成員提供了對(duì)象與外界的接口,外界只能通過(guò)這個(gè)接口與對(duì)象發(fā)生聯(lián)系。對(duì)象有效地實(shí)現(xiàn)了封裝的兩個(gè)目標(biāo):對(duì)數(shù)據(jù)和行為的結(jié)合及信息隱蔽。 抽象和封裝是互補(bǔ)的。一個(gè)好的抽象有利于封裝,封裝的實(shí)體則幫助維護(hù)抽象的完整性。抽象先于封裝。,繼承性概念(1),繼承表達(dá)的是類(lèi)之間的關(guān)系,使一類(lèi)對(duì)象可以繼承另一類(lèi)對(duì)象的屬性(數(shù)據(jù))和行為(操作),從而,提供了通過(guò)現(xiàn)有的類(lèi)創(chuàng)建新類(lèi)的方法,也提高了軟件復(fù)用的程度。 繼承關(guān)系的特征 類(lèi)間具有共享特征,包括數(shù)據(jù)和代碼的共享。 類(lèi)間具有差別或新增部分,包括非共享的數(shù)據(jù)和代碼。 類(lèi)間具有層次關(guān)系。 基類(lèi)、派生類(lèi)和類(lèi)的層次 兩個(gè)類(lèi)A和B,若類(lèi)B繼承自類(lèi)A,則稱(chēng)類(lèi)B是由類(lèi)A派生出來(lái)的,類(lèi)B的對(duì)象就具有了類(lèi)A的一切特征,包括數(shù)據(jù)和操作,此時(shí)稱(chēng)類(lèi)A為基類(lèi)(也稱(chēng)父類(lèi)或超類(lèi)),稱(chēng)類(lèi)B為派生類(lèi)(或子類(lèi))。,繼承性概念(2),若類(lèi)B由類(lèi)A派生而來(lái),而類(lèi)C又由類(lèi)B派生而來(lái),則這三個(gè)類(lèi)就形成了層次結(jié)構(gòu)關(guān)系。此時(shí),稱(chēng)類(lèi)A是類(lèi)B的直接基類(lèi),是類(lèi)C的間接基類(lèi)。類(lèi)C不但繼承了直接基類(lèi)的所有特征,還繼承了他的所有間接基類(lèi)的特征。 類(lèi)的繼承特性,給創(chuàng)建派生類(lèi)提供了一種方法:創(chuàng)建派生類(lèi)時(shí),不必重新描述與基類(lèi)相同的所有特征,只需讓他繼承基類(lèi)的特征,然后描述與基類(lèi)不同的那些特征。也就是說(shuō),派生類(lèi)的特征由繼承來(lái)的和新添加的兩部分組成,繼承允許派生類(lèi)使用基類(lèi)的數(shù)據(jù)和操作,還可以擁有自己的數(shù)據(jù)和操作。 繼承機(jī)制提高了軟件復(fù)用的程度,避免了公用代碼的重復(fù)開(kāi)發(fā),減少了代碼和數(shù)據(jù)的冗余,增強(qiáng)了類(lèi)之間的一致性,減少了模塊間的接口和界面,不僅使軟件的質(zhì)量得到了保證,也大大減輕了開(kāi)發(fā)人員的工作量。,繼承性繼承的分類(lèi),繼承有按繼承源和按繼承內(nèi)容兩種分類(lèi)方法。 從繼承源上分 單繼承:每個(gè)派生類(lèi)只有一個(gè)直接基類(lèi)。如Windows操作系統(tǒng)中窗口之間的繼承關(guān)系就是單繼承。 多繼承:每個(gè)派生類(lèi)有不止一個(gè)直接基類(lèi)。如小孩的玩具車(chē)這個(gè)類(lèi),就同時(shí)繼承了玩具類(lèi)和車(chē)類(lèi)的特征。 從繼承內(nèi)容上分 取代繼承:徒弟繼承了師傅的所有技術(shù),在需要師傅的地方由徒弟代替。 包含繼承:如講桌繼承了桌子的所有特征,但講桌仍然是一張桌子。 受限繼承:如鴕鳥(niǎo)繼承了鳥(niǎo)的一些特征,但不能繼承鳥(niǎo)會(huì)飛的特征。 特化繼承:如獵犬具有一般犬的特征,但它比一般的犬具有更多的狩獵特征。,繼承性繼承與封裝的關(guān)系,繼承機(jī)制并不影響對(duì)象的封裝性。 封裝的單位是對(duì)象,是將屬于某個(gè)類(lèi)的一個(gè)對(duì)象封裝起來(lái),使其操作和數(shù)據(jù)成為一個(gè)整體。如果該對(duì)象所在的類(lèi)是派生類(lèi),這個(gè)派生類(lèi)只要把從基類(lèi)那里繼承來(lái)的數(shù)據(jù)和操作與自己的數(shù)據(jù)和操作一并封裝起來(lái)就行了,對(duì)象依然是一個(gè)封裝好的整體,仍然只能通過(guò)消息傳遞與別的對(duì)象交互,不能直接調(diào)用??梢?jiàn),在引入繼承機(jī)制以后,無(wú)論對(duì)象是基類(lèi)的實(shí)例還是派生的實(shí)例,都是一個(gè)被封裝的實(shí)體,繼承并不影響封裝性。 繼承和封裝都提供了共享代碼的手段,增加了代碼的復(fù)用性。 繼承的代碼共享是靜態(tài)的,當(dāng)派生類(lèi)對(duì)象被激活以后,自動(dòng)共享其基類(lèi)中的代碼,從而實(shí)現(xiàn)基類(lèi)對(duì)象與派生類(lèi)對(duì)象共享一段代碼。而封裝的代碼共享是動(dòng)態(tài)的,當(dāng)在一個(gè)類(lèi)中說(shuō)明了一段代碼,屬于該類(lèi)的多個(gè)實(shí)例在程序運(yùn)行時(shí)共享這段代碼。,多態(tài)性,多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一,是指不同的對(duì)象受到相同的消息時(shí)產(chǎn)生不同的操作行為,或者說(shuō)同一個(gè)消息可以根據(jù)發(fā)送消息的對(duì)象的不同而采用多種不同的操作行為。例如,當(dāng)用鼠標(biāo)單擊不同的對(duì)象時(shí),各對(duì)象就會(huì)根據(jù)自己的理解作出不同的動(dòng)作,產(chǎn)生不同的結(jié)果,這就是多態(tài)性。簡(jiǎn)單地說(shuō),多態(tài)性就是一個(gè)接口,多種方式。 C+語(yǔ)言支持兩種多態(tài)性,即編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)的多態(tài)性是用函數(shù)的重載來(lái)實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是用虛函數(shù)來(lái)實(shí)現(xiàn)的。這些內(nèi)容將在

溫馨提示

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