




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院1第7章面向?qū)ο蠓椒ǜ耪摫菊聝?nèi)容:7.1面向?qū)ο蠛喗?.2面向?qū)ο蟮南嚓P(guān)概念7.3鏈接與關(guān)聯(lián)7.4構(gòu)造分組2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院2第7章面向?qū)ο蠓椒ǜ耪撁嫦驅(qū)ο蠓椒ǖ幕舅枷胧菑默F(xiàn)實世界中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能地運用人類的自然思維方式。面向?qū)ο箝_發(fā)是現(xiàn)實世界中以抽象為基礎(chǔ)的軟件思維的一種嶄新方式?!伴_發(fā)”的含義延伸至軟件生命周期的前期部分:分析、設(shè)計和實現(xiàn)。本章介紹面向?qū)ο蠓椒ǖ闹饕拍睿▽ο?、類、屬性、方法、封裝等,并將介紹建立的對象之間、類之間以及對象和類之間的聯(lián)系,同時還將介紹概括和分組等相關(guān)知識。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院37.1面向?qū)ο蠛喗椤懊嫦驅(qū)ο蟆笔前岩唤M相互之間沒有聯(lián)系的對象有效地集成在一起,這些對象都是將數(shù)據(jù)結(jié)構(gòu)和行為緊密地結(jié)合在一起的。通常面向?qū)ο蠓椒ㄖ辽侔膫€方面:標(biāo)識、分類、多態(tài)和繼承。通過將抽象、封裝和模塊結(jié)合在一起的方法,從而使面向?qū)ο蟮乃枷胴灤┯谡麄€軟件開發(fā)生命周期中。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院47.1.1什么是面向?qū)ο竺嫦驅(qū)ο蠓椒ǖ幕舅枷胧菑默F(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能地運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題,這些問題所涉及的業(yè)務(wù)范圍稱作該軟件的問題域。面向?qū)ο蠓椒◤?qiáng)調(diào)直接以問題域(客觀世界)中的事物為中心來思考問題、認(rèn)識問題,并根據(jù)這些事物的本質(zhì)特征,把它們抽象地表示為系統(tǒng)中的對象,作為系統(tǒng)的基本構(gòu)成單位。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院5具體地講,面向?qū)ο蠓椒ㄓ幸韵乱恍┲饕攸c:(1)從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對象作為對這些事物的抽象表示,并以此作為系統(tǒng)的基本構(gòu)成單位。(2)事物的靜態(tài)特征(即可能用一些數(shù)據(jù)來表達(dá)的特征)用對象的屬性表示,事物的動態(tài)特征(即事物的行為)用對象的服務(wù)表示。(3)對象的屬性與服務(wù)結(jié)合為一體,成為一個獨立的實體,對外屏蔽其內(nèi)部細(xì)節(jié)(稱作封裝)。(4)對事物進(jìn)行分類。把具有相同屬性和服務(wù)的對象歸為一類,類是這些對象的抽象描述,每個對象是它的類的一個實例。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院6(5)通過在不同程度上運用抽象的原則(較多或較少地忽略事物之間的差異),可以得到較一般的類和較特殊的類。特殊類繼承一般類的屬性與服務(wù),面向?qū)ο蠓椒ㄖС謱@種繼承關(guān)系的描述與實現(xiàn),從而簡化系統(tǒng)的構(gòu)造過程及其文檔。(6)復(fù)雜的對象可以用簡單的對象作為其構(gòu)成部分(稱作聚合)。(7)對象之間通過消息進(jìn)行通信,以實現(xiàn)對象之間的動態(tài)聯(lián)系。(8)通過關(guān)聯(lián)表達(dá)對象之間的靜態(tài)關(guān)系。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院7[定義7-1]:面向?qū)ο蠓椒ㄊ且环N運用對象、類、繼承、封裝、聚合、消息傳送、多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。面向?qū)ο蠓椒ǖ幕靖拍钆c原則、發(fā)展歷史與現(xiàn)狀以及它對改進(jìn)軟件開發(fā)的重要意義等,將在以后各節(jié)中詳細(xì)介紹。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院87.1.2面向?qū)ο蠓椒ǖ臍v史及現(xiàn)狀面向?qū)ο蠓椒ǖ哪承└拍睿梢宰匪莸?0世紀(jì)50年代人工智能的早期研究。但是人們一般把20世紀(jì)60年代由挪威計算中心開發(fā)的Simula-67語言看作面向?qū)ο笳Z言發(fā)展史上的第一個里程碑。但是直到20世紀(jì)80年代后期,SmallTalk的應(yīng)用尚不夠廣泛。20世紀(jì)80年代中期到90年代,是面向?qū)ο笳Z言走向繁榮的階段。從20世紀(jì)80年代后期開始,國際上有一批論述面向?qū)ο蟮姆治雠c設(shè)計(或面向?qū)ο蟮慕Ec設(shè)計)的專著相繼問世。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院97.2面向?qū)ο蟮南嚓P(guān)概念7.2.1對象對象是構(gòu)成世界的一個獨立單位,它具有自己的靜態(tài)特征和動態(tài)特征。靜態(tài)特征即可以用某種數(shù)據(jù)來描述的特征,動態(tài)特征即對象所表現(xiàn)的行為或?qū)ο笏哂械墓δ?。屬性和服?wù),是構(gòu)成對象的兩個主要因素。其中屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項;服務(wù)是用來描述對象動態(tài)特征(行為)的一個操作序列,也可稱為操作或方法。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院10[定義7-2]:對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進(jìn)行操作的一組服務(wù)構(gòu)成。附屬定義:屬性:是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項。服務(wù):是用來描述對象動態(tài)特征(行為)的一個操作序列。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院11特例:(1)有屬性,沒有服務(wù)。例如信息系統(tǒng)中的人員信息、物質(zhì)信息。(2)有服務(wù),沒有屬性。例如操作系統(tǒng)中的屏幕中斷:disable();控制結(jié)束檢查:getclork()。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院12對象有如下一些基本特點:(1)以數(shù)據(jù)為中心。(2)對象是主動的。(3)實現(xiàn)了數(shù)據(jù)封裝。(4)本質(zhì)上具有并行性。(5)模塊獨立性好。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院137.2.2類人類在認(rèn)識客觀世界時經(jīng)常采用的思維方法,就是把眾多的事物歸納、劃分成一些類。依據(jù)抽象的原則進(jìn)行分類,即忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性;把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。[定義7-3]:類是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院14類與對象的關(guān)系如同一個模具與用這個模具鑄造出來的鑄件之間的關(guān)系。它們的關(guān)系可以用圖7-1表示。圖7-1類與對象的關(guān)系2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院15同類對象具有相同的屬性與服務(wù),是指它們的定義形式相同,而不是說每個對象的屬性值都相同。運用抽象的原則舍棄對象的特殊性,抽取其共同性,則得到適應(yīng)一批對象的類,稱這個類為一般類。在一般類的基礎(chǔ)上,如果定義一個新類時考慮其某些特殊性。則這個類是前一般類的特殊類。如果考慮若干類所具有的共同的特征,舍棄它們各自的特殊性,則得到這些類的一般類。一般類和特殊類是相對而言的,它們之間是一種真包含的關(guān)系。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院167.2.3對象圖對象圖提供了對象、類和它們相互之間聯(lián)系的建模規(guī)范化圖形表示。對象圖有兩種類型:類圖和實例圖。類圖是描述許多可能的數(shù)據(jù)實例的一種模式或模板,類圖也就是描述對象類。實例圖是描述對象之間相互關(guān)系的一種特殊的集合,實例圖也就是描述對象實例。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院177.2.4屬性屬性是一個類中對象所具有的數(shù)據(jù)值。對每個對象實例來說,每個屬性都是一個值。一個屬性應(yīng)是純數(shù)據(jù)值,而不是一個對象。與對象不同,純數(shù)據(jù)值沒有標(biāo)識。屬性置于類矩形框的第二個部分,每個屬性名有可供選擇項,如類型和缺省值。
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院187.2.5服務(wù)(操作或方法)服務(wù)是一種功能或一種轉(zhuǎn)換,它應(yīng)用于類中的對象或被類中對象使用。相同的服務(wù)可用于許多不同的類中,這樣的服務(wù)是多態(tài)的。每種服務(wù)有一個內(nèi)含參數(shù)的目標(biāo)對象,該服務(wù)的行為依賴于它的目標(biāo)類。一個對象“知道”它的類,并能正確實現(xiàn)該服務(wù)。一種服務(wù)可對它的目標(biāo)對象添加參數(shù),這種以參數(shù)化表示的服務(wù)并不影響方法的選擇,方法僅依賴于該目標(biāo)對象的類2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院19服務(wù)列置于類矩形框的第三部分,也是最低的部分,每種服務(wù)名可跟有可任選的部分,諸如參數(shù)表和結(jié)果類型。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院207.2.6封裝封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則。它有兩個涵義:第一個涵義是把對象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個不可分割的獨立單位(即對象);第二個涵義也稱作“信息隱蔽”,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個邊界(或者說形成一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。[定義7-4]:封裝就是把對象的屬性、服務(wù)結(jié)合成為一個獨立的系統(tǒng)單位,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院21封裝是一種機(jī)制,封裝的信息隱蔽作用反映了事物的相對獨立性。前面已經(jīng)討論了封裝的好處,然而封裝也有它的副作用。如果強(qiáng)調(diào)嚴(yán)格的封裝,則對象的任何屬性都不允許外部直接存取,因此就要增加許多沒有其他意義、只負(fù)責(zé)讀或?qū)懙姆?wù)。這為編程工作增加了負(fù)擔(dān),增加了運行開銷,并且使程序顯得臃腫。為了避免這一點,語言往往采取一種比較現(xiàn)實的靈活態(tài)度——允許對象有不同程度的可見性。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院227.2.7繼承[定義7-5]:特殊類的對象擁有其一般類的全部屬性與服務(wù),就是稱作特殊類對一般類的繼承。繼承意味著“自動地?fù)碛小被颉半[含地復(fù)制”,即特殊類中不必重新定義已在它的一般類中定義過的屬性和服務(wù),而它卻自動地、隱含地?fù)碛衅湟话泐惖乃袑傩耘c服務(wù)。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院232022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院24下面給出用C++寫的在日期表示形式上的類繼承。ClassDATE{//用于表示亞洲日期的類DATE(intyy=0;intmm=0;intdd=0;)voideset_date(intyy,intmm,ntdd);voidget_date(int&yy,int&mm,int&dd);voidprinted();protected:intyear,month,day;}classE-DATE:publicDATE{//用于表示歐洲日期的類,繼承了用于表示亞洲日期的類
voidprinted-de();}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院25繼承關(guān)系是傳遞的。繼承具有重要的實際意義,它簡化了人們對事物的認(rèn)識和描述。繼承對于軟件復(fù)用是很有益的。一個類可以是多個一般類的特殊類,它從多個一般類中繼承了屬性與服務(wù),這種繼承模式叫作多繼承。但在實現(xiàn)時能不能做到這一點卻取決于編程語言是否支持多繼承。繼承是任何一種OOPL必須具備的功能,多繼承則未必,現(xiàn)在有許多OOPL只支持單繼承而不支持多繼承。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院26所謂命名沖突是指當(dāng)一個特殊類繼承了多個一般類時,如果這些一般類中的屬性或服務(wù)有彼此同名的現(xiàn)象,則當(dāng)特殊類中引用這樣的屬性名或者服務(wù)名時,系統(tǒng)無法判定它的語義到底是指哪個一般類中的屬性和服務(wù)。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院271)“命名沖突”問題例如:Classbase{
…public:inta,b;}classde:publicbase{
…public:intb,c:}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院28voidf(){…ded;de.a=1;d.b=2;//如果改成這樣:d.base::b=2;就可以d.b=3;d.c=4;base*dp=&d;//也不行。}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院29作者是希望在單元的結(jié)果如下圖7-4所示圖7-4希望在單元的結(jié)果但實際結(jié)果是如圖7-5這樣:2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院302)函數(shù)名沖突例:classbase1{public:voidshow(){cout<<i<<”\n”;}protected:inti;}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院31classbase2{public:voidshow(){cout<<j<<”\n”;}protected:intj;}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院32classde:publicbase1,publicbase2{voidset(intx,inty){i=x;j=y;}}main(){deobj;obj.set(5,7);obj.show();//有二義性obj.base1::show();obj.base2::show();return;}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院33解決的辦法有兩種:(1)不允許多繼承結(jié)構(gòu)中的各個一般類的屬性及服務(wù)取相同的名字,這會為開發(fā)者帶來一些不便。(2)由OOPL提供一種更名機(jī)制,使程序可以在特殊類中更換從各個一般類繼承來的屬性或服務(wù)的名字。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院347.2.8多重繼承多重繼承允許一個類有多個超類,并從多個超類中繼承屬性、操作和關(guān)聯(lián)。這些混合信息來自于兩個或多個原始信息。1.有不同鑒別器的多重繼承在圖7-4中,人可以通過管理狀態(tài)的基本前提(經(jīng)理或職員)和雇傭狀態(tài)(全部工作時間或部分工作時間的職員)來判別這個人是否是經(jīng)理或他是不是獨立的雇傭狀態(tài)。四個子類盡可能把管理狀態(tài)和雇傭狀態(tài)組合在一起,圖中表示了一個全部工作時間的職員情況。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院35圖7-4多重繼承2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院362.無公共祖先的多重繼承多重繼承,甚至有時超類也可能沒有公共祖先,這通常發(fā)生在軟件庫的混合功能方面。當(dāng)軟件庫重疊或抵觸時,多重繼承就成問題了圖7-5對象多重繼承
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院373.多重繼承的工作環(huán)境用角色的聚合授權(quán)。帶多個獨立概括的超類能重構(gòu)成一個其元素各表示一個概括的聚合。這種方法是通過一組構(gòu)成擴(kuò)展對象的對象來替代確定的單一對象。通過該聚合的繼承操作不是自動的,必須由連接類出發(fā)傳給合適的成員。繼承最重要的類并授權(quán)其余的類。構(gòu)造了它本身的是最重要超類的子類的一種連接類。這個連接類作為余下的超類的聚合對待,它們的操作作為前面的替換授權(quán)。這種方法通過一個概括提供了標(biāo)識和繼承。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院38嵌套概括分解技術(shù)分割一個子類用關(guān)聯(lián)替代概括2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院39為選擇最好的工作環(huán)境必須考慮以下一些問題:(1)如子類有好幾個同樣重要的超類,那么最好用“授權(quán)方法”并保持該模型的對稱性。(2)如某一超類明顯地處于支配地位,而其他的類處于相對次要地位時,用單一繼承和授權(quán)方法來實現(xiàn)多重繼承是最佳選擇。(3)如組合數(shù)目少,則可考慮嵌套概括;如果組合數(shù)目多,則避免使用嵌套概括。(4)如一超類比其他的超類有更多的特征,或明顯的是執(zhí)行的瓶頸,則通過該路徑來保持繼承。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院40(5)如選擇嵌套概括,那么首先要考慮的是最重要的分解因素,然后考慮第二個重要的分解因素。(6)如果需要復(fù)制大量代碼,那就盡量避免用嵌套概括。(7)要維護(hù)嚴(yán)格標(biāo)識的重要性,只有嵌套概括才能保證這一點。(8)2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院41要注意的問題:避免太多層次的繼承例如:2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院42一般化后的情況:2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院43問題討論:1、當(dāng)對象類e出現(xiàn)要修改的問題時,而要修改的根源卻不在對象類e中。而是存在在被其繼承的上源對象中。2、要查找到修改源,就要遍歷這棵“樹”。3、現(xiàn)在沒有這樣的查找修改源的軟件工具。4、人工遍歷。修改源如果在c、d、f、g、h、j或者an這些對象類中,或者在這些對象類附近,遍歷工程就容易。如果是在j1、i1或者雜其附近,那么遍歷工程就大了。結(jié)論:繼承應(yīng)選擇小于等于在3、4層內(nèi)。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院447.2.9消息在OO方法中把向?qū)ο蟀l(fā)出的服務(wù)請求稱作消息。通過消息進(jìn)行對象之間的通信,也是OO方法的一個原則,它與封裝的原則有密切的關(guān)系。OO方法中對消息的定義是:[定義7-6]:消息就是向?qū)ο蟀l(fā)出的服務(wù)請求,它應(yīng)該含有下述信息:提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和回答信息。內(nèi)容:提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和回答信息。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院45消息的格式,這種規(guī)定稱作消息協(xié)議。消息的接收者是提供服務(wù)的對象。在設(shè)計時,它對外提供的每個服務(wù)應(yīng)規(guī)定消息的格式,這種規(guī)定稱作消息協(xié)議。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院46作為OO方法中的一個基本概念,采用“消息”這個術(shù)語有以下好處:(1)更接近人們?nèi)粘K季S所采用的術(shù)語。(2)其涵義更具有一般性,而不限制采用何種實現(xiàn)技術(shù)。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院477.2.10結(jié)構(gòu)與連接系統(tǒng)開發(fā)者需認(rèn)識并描述對象之間的以下幾種關(guān)系:(1)對象的分類關(guān)系。(2)對象之間的組成關(guān)系。(3)對象屬性之間的靜態(tài)聯(lián)系。(4)對象行為之間的動態(tài)聯(lián)系。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院481.一般-特殊結(jié)構(gòu)一般-特殊結(jié)構(gòu)又稱作分類結(jié)構(gòu)(ClassificationStructure),它是由一組具有一般-特殊關(guān)系(繼承關(guān)系)的類所組成的結(jié)構(gòu)。它是一個以類為結(jié)點,以繼承關(guān)系為邊的連通有向圖。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院49圖7-6一般-特殊結(jié)構(gòu)2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院502.整體-部分結(jié)構(gòu)整體-部分結(jié)構(gòu)又稱作組裝結(jié)構(gòu)(CompositionStructure),它描述對象之間的組成關(guān)系圖7-7整體-部分結(jié)構(gòu)
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院513.實例連接實例連接反映對象與對象之間的靜態(tài)聯(lián)系。4.消息連接消息連接描述對象之間的動態(tài)聯(lián)系2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院527.2.11多態(tài)性對象的多態(tài)性是指在一般類中定義的屬性或服務(wù)被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為支持多態(tài)性的實現(xiàn)的語言應(yīng)具備的功能是:重載——在特殊類中對繼承來的屬性或服務(wù)進(jìn)行重新定義。動態(tài)綁定——在運行時根據(jù)對象接收的消息動態(tài)地確定要連接哪一段服務(wù)代碼。
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院53重載——在特殊中對繼承來的屬性或服務(wù)進(jìn)行重新定義。例如:…#include<…>…intabs(intx){…}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院542022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院55doubleabs(doublex){…}longabs(longx){…}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院56Main(){cout<<abs(-5)<<”\n”;cout<<abs(-5L)<<”\n”;cout<<abs(3.14)<<”\n”;return;}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院57動態(tài)綁定例如:#include“…”//虛函數(shù)
…classmen{//基類public:virtualvoidans(){cout<<”Iamamember”<<”\n”;return;}}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院58classte:publicmen{//繼承類1public:virtualvoidans(){cout<<”Iamateacher”<<”\n”;return;}}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院59classst:publicmen{//繼承類2public:virtualvoidans(){cout<<”Iamastudent”<<”\n”;return;}}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院60main(){menmember;//定義基類的對象Teteacher;//定義一個繼承類的對象Ststudent;//定義另一個繼承類類的對象men*who;//定義指向基類對象的指針who=&member;//訪問基類中的函數(shù)who->ans();who=&teacher;//訪問繼承類中的函數(shù)who->ans();who=&student;//訪問繼承類中的函數(shù)who->ans();return0;}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院61得出結(jié)果:IamamemberIamateacherIamastudent將基類mem定義的ans()前的virtual保留字刪除,輸出結(jié)果變?yōu)椋篒amamemberIamamemberIamamember2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院62類屬—服務(wù)參量的類型可以是參數(shù)化的。例:定義鏈表類屬類GLIST的界面Template<classELE>2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院63Classle{Public:List(intlenth)//構(gòu)造{v=newELE[LENTH];:}≈list()//析構(gòu){……}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院64ELE—operator{}(intindex){:……}Private:ELE*V;…………}2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院657.2.12永久對象所謂永久對象,就是生存期可以超越程序的執(zhí)行時間而長期存在的對象。永久對象的實現(xiàn)需要有較強(qiáng)的技術(shù)支持。它需要一個能夠描述和處理永久對象的編程語言。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院667.2.13主動對象在OOD階段進(jìn)行任務(wù)管理部分的設(shè)計時用主動對象表示每個任務(wù)。其定義是:主動對象是一組屬性和一組服務(wù)的封裝體,其中至少有一個服務(wù)不需要接收消息就能主動執(zhí)行。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院677.2.14對象類的表示方法在圖7-8中小結(jié)了類的對象模型表示。圖7-8類的對象模型
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院687.3鏈接與關(guān)聯(lián)7.3.1一般概念鏈接是在對象實例之間的一種物理或概念連接關(guān)聯(lián)描述了具有公共結(jié)構(gòu)和共同語義的鏈接的組合關(guān)聯(lián)本來就是雙向的一種鏈接表示兩個或兩個以上對象之間的聯(lián)系關(guān)聯(lián)可以是二元、三元或更高階的2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院697.3.2重數(shù)重數(shù)指定一個類的多少個實例與另一個關(guān)聯(lián)類的單一實例有關(guān)重數(shù)依賴于假定和如何定義問題的邊界最重要的重數(shù)差別是“一”和“多”之間2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院707.3.3關(guān)聯(lián)的重要性大多數(shù)面向?qū)ο笳Z言用對象指針實現(xiàn)關(guān)聯(lián),指針在設(shè)計的最后階段,被看作是為實現(xiàn)優(yōu)化而引入的,它也可能直接實現(xiàn)關(guān)聯(lián)對象,但在實現(xiàn)期間,關(guān)聯(lián)對象的使用的確是一個設(shè)計的策略2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院717.3.4三元關(guān)聯(lián)三元關(guān)聯(lián)是具有三個角色的關(guān)聯(lián),不能重新聲明為二元關(guān)聯(lián)三元關(guān)聯(lián)可以有鏈接屬性,或者作為關(guān)聯(lián)類處理,如圖7-9所示圖7-9多元關(guān)聯(lián)
2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院727.3.5關(guān)聯(lián)的候選關(guān)鍵字在圖7-9中,在三元關(guān)聯(lián)類中或下一個菱形中沒有重數(shù)存在,雖然期望對三元關(guān)聯(lián)用重數(shù)表示,但最好還是用候選關(guān)鍵字,以避免混淆。一個關(guān)聯(lián)的候選關(guān)鍵字是角色的組合,并在一個關(guān)聯(lián)內(nèi)惟一標(biāo)識鏈接的資格符。因為角色和資格符是用屬性來實現(xiàn)的,所以對類和關(guān)聯(lián)都使用術(shù)語“候選關(guān)鍵字”。在候選關(guān)鍵字中角色和資格符的集合必須是最小的2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院737.3.6異或關(guān)聯(lián)異或關(guān)聯(lián)是從一個類起源的關(guān)聯(lián)組的數(shù)目,這個類稱為原始類。原始類中每個對象嚴(yán)格地應(yīng)用于一個異或關(guān)聯(lián),異或關(guān)聯(lián)與目標(biāo)類的原始類有關(guān)。一個單獨關(guān)于目標(biāo)類的異或關(guān)聯(lián)是可選的,但該異或關(guān)聯(lián)語義要求一個目標(biāo)對象被每個原始對象所選取。一個異或關(guān)聯(lián)可以僅屬于一個組。2022/11/3廣東工業(yè)大學(xué)計算機(jī)學(xué)院747.3.7資格關(guān)聯(lián)資格重疊(方式)是一系列連續(xù)的資格關(guān)聯(lián)。資格重疊在表示遞增的具體對象的累積處碰到
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 11856.1-2025烈性酒質(zhì)量要求第1部分:威士忌
- GB 19081-2025飼料加工系統(tǒng)粉塵防爆安全規(guī)范
- 勞動合同范本 派遣
- 養(yǎng)殖場清糞車購銷合同范本
- 區(qū)域銷售協(xié)議合同范本醫(yī)藥
- 包裝印刷公司采購合同范本
- 買宅地合同范例
- 上海住房合同范本
- 個人與團(tuán)隊提成合同范本
- 線上按摩技師合同范本
- 部編版小學(xué)(2024版)小學(xué)道德與法治一年級下冊《有個新目標(biāo)》-第一課時教學(xué)課件
- 稅法(第5版) 課件 第13章 印花稅
- 2024-2025學(xué)年廣州市高二語文上學(xué)期期末考試卷附答案解析
- 咖啡店合同咖啡店合作經(jīng)營協(xié)議
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 全套電子課件:技能成就夢想
- 2024年教育公共基礎(chǔ)知識筆記
- 2025年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 異構(gòu)數(shù)據(jù)融合技術(shù)-深度研究
- 北京市朝陽區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測試題庫標(biāo)準(zhǔn)卷
評論
0/150
提交評論