面向?qū)ο蠖鄳B(tài)變量_第1頁(yè)
面向?qū)ο蠖鄳B(tài)變量_第2頁(yè)
面向?qū)ο蠖鄳B(tài)變量_第3頁(yè)
面向?qū)ο蠖鄳B(tài)變量_第4頁(yè)
面向?qū)ο蠖鄳B(tài)變量_第5頁(yè)
已閱讀5頁(yè),還剩75頁(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ū)ο蠖鄳B(tài)變量4/18/20231第1頁(yè),共80頁(yè),2023年,2月20日,星期二很少使用賦值,通常是伴隨著函數(shù)或方法調(diào)用,通過(guò)數(shù)值和參數(shù)之間的綁定來(lái)實(shí)現(xiàn)的。實(shí)際用法4/18/20232第2頁(yè),共80頁(yè),2023年,2月20日,星期二簡(jiǎn)單變量接收器變量反多態(tài)純多態(tài)(多態(tài)方法)多態(tài)變量形式4/18/20233第3頁(yè),共80頁(yè),2023年,2月20日,星期二publicclassSolitaire{ . . staticCardPileallPiles[]; . . publicvoidpaint(Graphicsg){ for(inti=0;i<13;i++) allPiles[].display(g); }}簡(jiǎn)單多態(tài)變量4/18/20234第4頁(yè),共80頁(yè),2023年,2月20日,星期二布局管理器LayoutManager是一個(gè)接口標(biāo)準(zhǔn)庫(kù)為這個(gè)接口提供了幾種不同的實(shí)現(xiàn)通過(guò)調(diào)用繼承自Component類的setLayoutManager方法,將參數(shù)賦值給本地多態(tài)變量實(shí)例4/18/20235第5頁(yè),共80頁(yè),2023年,2月20日,星期二多態(tài)變量最常用的場(chǎng)合是作為一個(gè)數(shù)值,用來(lái)表示正在執(zhí)行的方法內(nèi)部的接收器。隱藏偽變量smalltalk:self,C++,Java,C#:this接收器變量4/18/20236第6頁(yè),共80頁(yè),2023年,2月20日,星期二classThisExample{ publicvoidone(intx){ value=x+4; two(x+3); } privateintvalue; privatevoidtwo(inty){ System.out.println(“Valueis”+(value+y)); }}例4/18/20237第7頁(yè),共80頁(yè),2023年,2月20日,星期二classThisExample{ publicvoidone(intx){

this.value=x+4;

this.two(x+3); } privateintvalue; privatevoidtwo(inty){ System.out.println(“Valueis”+(this.value+y)); }}等價(jià)的明確形式4/18/20238第8頁(yè),共80頁(yè),2023年,2月20日,星期二多態(tài)接收器功能的強(qiáng)大之處表現(xiàn)在消息傳遞與改寫(xiě)相結(jié)合時(shí)。這種結(jié)合是軟件框架開(kāi)發(fā)的關(guān)鍵。一般框架系統(tǒng)中的方法分為兩大類:在父類中定義基礎(chǔ)方法,被多個(gè)子類所繼承,但不被改寫(xiě);父類定義了關(guān)于多種活動(dòng)的方法,但要延遲到子類才實(shí)現(xiàn)。

多態(tài)變量在框架中的作用4/18/20239第9頁(yè),共80頁(yè),2023年,2月20日,星期二由于基礎(chǔ)方法被子類所繼承,因此它們可以用于各個(gè)子類實(shí)例。接收器變量多態(tài)性的展現(xiàn)。當(dāng)執(zhí)行基礎(chǔ)方法時(shí),接收器實(shí)際上保存的是一個(gè)子類實(shí)例的數(shù)值。當(dāng)執(zhí)行一個(gè)改寫(xiě)方法時(shí),執(zhí)行的是子類的方法,而不是父類的方法。例4/18/202310第10頁(yè),共80頁(yè),2023年,2月20日,星期二classWindow{ publicvoidrepaint(){

…paint(graphicsContext);… }

abstractpublicvoidpaint(Graphicsg);privateGraphicsgraphicsContext;}classGraphicsWindowextendsWindow{ publicvoidpaint(Graphicsg){ //dotheappropriatepaintingjob }}例4/18/202311第11頁(yè),共80頁(yè),2023年,2月20日,星期二基礎(chǔ)方法執(zhí)行延遲方法的模式。該結(jié)合允許在不修改原始代碼的條件下,裁剪延遲方法以適應(yīng)新的形勢(shì)。是解決軟件復(fù)用問(wèn)題的關(guān)鍵。思考4/18/202312第12頁(yè),共80頁(yè),2023年,2月20日,星期二向下造型向下造型是處理多態(tài)變量的過(guò)程,并且在某種意義上這個(gè)過(guò)程的取消操作就是替換。能夠?qū)⑵滟x值給一個(gè)聲明為子類的變量嗎?該取消多態(tài)賦值的過(guò)程,也稱為反多態(tài)。4/18/202313第13頁(yè),共80頁(yè),2023年,2月20日,星期二其它例常用的數(shù)據(jù)結(jié)構(gòu):集合、堆棧、隊(duì)列、列表。容器對(duì)象??蓮?fù)用的軟件組件。將不同的對(duì)象放入一個(gè)集合,取出時(shí),如何知道對(duì)象的類型呢?4/18/202314第14頁(yè),共80頁(yè),2023年,2月20日,星期二實(shí)現(xiàn)機(jī)制ChildaChildIf(aVariableinstanceofChild) aChild=(Child)aVariable

4/18/202315第15頁(yè),共80頁(yè),2023年,2月20日,星期二純多態(tài)多態(tài)方法支持可變參數(shù)的函數(shù)。支持代碼只編寫(xiě)一次、高級(jí)別的抽象以及針對(duì)各種情況所需的代碼裁剪。通常是通過(guò)給方法的接收器發(fā)送延遲消息來(lái)實(shí)現(xiàn)這種代碼裁剪的。4/18/202316第16頁(yè),共80頁(yè),2023年,2月20日,星期二純多態(tài)例關(guān)于純多態(tài)的一個(gè)簡(jiǎn)單實(shí)例就是用JAVA語(yǔ)言編寫(xiě)的StringBuffer類中的append方法。這個(gè)方法的參數(shù)聲明為Object類型,因此可以表示任何對(duì)象類型。ClassStringbuffer{ Stringappend(Objectvalue){ returnappend(value,toString();}

…}方法toString被延遲實(shí)現(xiàn)。4/18/202317第17頁(yè),共80頁(yè),2023年,2月20日,星期二純多態(tài)例方法toString在子類中得以重定義。toString方法的各種不同版本產(chǎn)生不同的結(jié)果。所以append方法也類似產(chǎn)生了各種不同的結(jié)果。Append;一個(gè)定義,多種結(jié)果。4/18/202318第18頁(yè),共80頁(yè),2023年,2月20日,星期二泛型通過(guò)類型的使用提供了一種將類或者函數(shù)參數(shù)化的方法。與通常的函數(shù)參數(shù)一樣,泛型提供了一種無(wú)需識(shí)別特定數(shù)值的定義算法的方法。第18章泛型4/18/202319第19頁(yè),共80頁(yè),2023年,2月20日,星期二泛型將名稱定義為類型參數(shù)。在編譯器讀取類描述時(shí),無(wú)法知道類型的屬性,但是該類型參數(shù)可以像類型一樣用于類定義內(nèi)部。在將來(lái)的某一時(shí)刻,會(huì)通過(guò)具體的類型來(lái)匹配這一類型參數(shù),這樣就形成了類的完整聲明。C++支持泛型4/18/202320第20頁(yè),共80頁(yè),2023年,2月20日,星期二我們先來(lái)看看一個(gè)只能持有單個(gè)對(duì)象的類。4/18/202321第21頁(yè),共80頁(yè),2023年,2月20日,星期二在JavaSE5之前,我們可以讓這個(gè)類直接持有Object類型的對(duì)象:4/18/202322第22頁(yè),共80頁(yè),2023年,2月20日,星期二有些情況下,我們確實(shí)希望容器能夠同時(shí)持有多種類型的對(duì)象。但是,通常而言,我們只會(huì)使用容器來(lái)存儲(chǔ)一種類型的對(duì)象。泛型的主要目的之一就是用來(lái)指定容器要持有什么類型的對(duì)象,而且由編譯器來(lái)保證類型的正確性。4/18/202323第23頁(yè),共80頁(yè),2023年,2月20日,星期二因此,與其使用Object,我們更喜歡暫時(shí)不指定類型,而是稍后再?zèng)Q定具體使用什么類型。要達(dá)到這個(gè)目的,需要使用類型參數(shù),用尖括號(hào)括住,放在類名后面。然后在使用這個(gè)類的時(shí)候,再用實(shí)際的類型替換此類型參數(shù)。在下面的例子中,T就是類型參數(shù):4/18/202324第24頁(yè),共80頁(yè),2023年,2月20日,星期二4/18/202325第25頁(yè),共80頁(yè),2023年,2月20日,星期二現(xiàn)在,當(dāng)你創(chuàng)建Holder3對(duì)象時(shí),必須指明想持有什么類型的對(duì)象,將其置于尖括號(hào)內(nèi)。就像main()中那樣。然后,你就只能在Holder3中存入該類型(或其子類,因?yàn)槎鄳B(tài)與泛型不沖突)的對(duì)象了。并且,在你從Holder3中取出它持有的對(duì)象時(shí),自動(dòng)地就是正確的類型。

這就是Java泛型的核心概念:告訴編譯器想使用什么類型,然后編譯器幫你處理一切細(xì)節(jié)。

4/18/202326第26頁(yè),共80頁(yè),2023年,2月20日,星期二泛型接口泛型也可以應(yīng)用于接口。例如生成器(generator),這是一種專門(mén)負(fù)責(zé)創(chuàng)建對(duì)象的類。4/18/202327第27頁(yè),共80頁(yè),2023年,2月20日,星期二我們需要IA的doSomething返回的是一個(gè)對(duì)象這個(gè)對(duì)象extends于BaseBeanInterfaceIA<TextendsBaseBean>{publicTdoSomething();}classIAImplimplementsIA<ChildBean>{publicChildBeandoSomething(){returnnewChildBean();}}這樣當(dāng)你調(diào)用這個(gè)實(shí)現(xiàn)的時(shí)候就能明確地得到返回的對(duì)象類型

4/18/202328第28頁(yè),共80頁(yè),2023年,2月20日,星期二Template<classT>Tmax(Tleft,Tright){ //returnlargestargument if(left<right) returnright; returnleft;}名稱T是一個(gè)參數(shù),但是它不同于函數(shù)的兩個(gè)參數(shù)。在函數(shù)的代碼體中,T可以用于任何合適的類型。C++模板函數(shù)4/18/202329第29頁(yè),共80頁(yè),2023年,2月20日,星期二代碼體功能決定。并非函數(shù)頭強(qiáng)加的本例要求可比較對(duì)T的限制?4/18/202330第30頁(yè),共80頁(yè),2023年,2月20日,星期二Template<classT>classBox{ public: Box(Tinitial):value(initial){}

TgetValue(){returnvalue;} setValue(TnewValue){value=newValue;} private:

Tvalue;};模板類4/18/202331第31頁(yè),共80頁(yè),2023年,2月20日,星期二為了創(chuàng)建模板實(shí)例,模板參數(shù)必須與具體類型聯(lián)系起來(lái)。Box(int)iBox(7);Cout<<iBox.getValue();???iBox.setValue(12);Cout<<iBox.getValue();???參數(shù)必須與接收器的類型相匹配iBox.setValue(3.1415);//ERROR,invalidtype模板類的使用4/18/202332第32頁(yè),共80頁(yè),2023年,2月20日,星期二模板類一般用于開(kāi)發(fā)容器類Template<classT>classList{Public: voidadd(T); TfirstElement(); Tvalue;Private: List<T>*nextElement模板類的應(yīng)用4/18/202333第33頁(yè),共80頁(yè),2023年,2月20日,星期二在不允許改變?cè)蓄惖那闆r下,如何將來(lái)自兩個(gè)或者更多個(gè)不同類的元素結(jié)合起來(lái)。例如以統(tǒng)一的表示方式來(lái)處理。思考?4/18/202334第34頁(yè),共80頁(yè),2023年,2月20日,星期二Apple類:使用printOn方法將自身輸出。Orange類:使用writeTo方法將自身輸出。二進(jìn)制提供希望將Apple對(duì)象和Orange對(duì)象保存在同一個(gè)列表中,并且使用一個(gè)多態(tài)函數(shù)將它們輸出。例4/18/202335第35頁(yè),共80頁(yè),2023年,2月20日,星期二定義一個(gè)公共的父類,具有共同行為ClassFruit{ public: virtualvoidprint(ostream&)=0;//純虛方法};第一步4/18/202336第36頁(yè),共80頁(yè),2023年,2月20日,星期二使用模版,創(chuàng)建一個(gè)fruitadapter類,將以Apple或者Orange為參數(shù),同時(shí)符合水果的定義Template<classT>ClassFruitAdapter:publicFruit{Public: FruitAdapter(T&f):theFruit(f){} T&value(){returntheFruit;} virtualvoidprint(ostream&out){print(theFruit,out);}Public: T&theFruit;}; 第二步4/18/202337第37頁(yè),共80頁(yè),2023年,2月20日,星期二使用模版函數(shù)簡(jiǎn)化適配器的創(chuàng)建過(guò)程Template<classT>Fruit*newFruit(T&f){ returnnewFruitAdapter<T>(f);}; 第三步4/18/202338第38頁(yè),共80頁(yè),2023年,2月20日,星期二AppleanApple(“Rome”);OrangeanOrange;List<Fruit*>fruitList;fruitList.insert(newFruit(anApple));fruitList.insert(newFruit(anOrange));List<Fruit*>::iteratorstart=fruitList.begin();List<Fruit*>::iteratorstop=fruitList.end();For(;start!=stop;++start){ Fruit&aFruit=*start;aFruit.print(cout);}最終方案4/18/202339第39頁(yè),共80頁(yè),2023年,2月20日,星期二對(duì)于一類相似問(wèn)題的骨架解決方案。通過(guò)類的集合形成,類之間緊密結(jié)合,共同實(shí)現(xiàn)對(duì)問(wèn)題的可復(fù)用解決方案繼承和改寫(xiě)的強(qiáng)大能力體現(xiàn)最常見(jiàn)的框架Java中的GUI框架Web開(kāi)發(fā)中的Struts框架第21章框架4/18/202340第40頁(yè),共80頁(yè),2023年,2月20日,星期二框架開(kāi)發(fā)的一個(gè)重要基礎(chǔ)使用繼承的兩種方式:代碼復(fù)用:基本方法,對(duì)問(wèn)題的現(xiàn)存的解決方案。概念復(fù)用:特化方法,用于特定應(yīng)用的解決方案。復(fù)用和特化4/18/202341第41頁(yè),共80頁(yè),2023年,2月20日,星期二例:雇員排序。高級(jí)抽象和低級(jí)抽象4/18/202342第42頁(yè),共80頁(yè),2023年,2月20日,星期二classEmployee{public: stringname; intsalary; intstartingYear; }雇員類4/18/202343第43頁(yè),共80頁(yè),2023年,2月20日,星期二voidsort(Employee*data[],intn){ for(inti=1;i<n;i++){ intj=i-1; while(j>=0&& v[j+1]->startingYear<v[j]->startingYear){ //swapelements Employee*temp=v[j]; v[j]=v[j+1]; v[j+1]=temp; j=j-1; } }}插入排序-根據(jù)工作年份4/18/202344第44頁(yè),共80頁(yè),2023年,2月20日,星期二按照薪水排序?按照姓名排序?不再對(duì)雇員記錄排序,對(duì)一個(gè)浮點(diǎn)數(shù)組排序?思考4/18/202345第45頁(yè),共80頁(yè),2023年,2月20日,星期二源代碼級(jí)的修改。復(fù)用的是排序的思想,不是真正的實(shí)現(xiàn)。觀察4/18/202346第46頁(yè),共80頁(yè),2023年,2月20日,星期二需要源代碼級(jí)的修改的地方?元素類型、元素?cái)?shù)目、數(shù)值比較、元素交換。封裝改變OO方案4/18/202347第47頁(yè),共80頁(yè),2023年,2月20日,星期二classInsertionSorter{public: voidsort(){ intn=size(); for(inti=1;i<n;i++){ intj=i-1; while(j>=0&&lessThan(j+1,j)){

swap(j,j+1); j=j-1; } } }OO方案-排序框架4/18/202348第48頁(yè),共80頁(yè),2023年,2月20日,星期二private: virtualintsize()=0;//abstractmethods virtualbooleanlessThan(inti,intj)=0; virtualvoidswap(inti,intj)=0;}OO方案-排序框架4/18/202349第49頁(yè),共80頁(yè),2023年,2月20日,星期二classEmployeeSorter:publicInsertionSorter{public: EmployeeSorter(Employee*d[],intn) {data=d;sze=n;}private: Employee*data[]; intsze=n; virtualintsize(){returnsze;} virtualboollessThan(inti,intj) {returndata[i]->startingYear<data[j]->startingYear;}OO方案-特化4/18/202350第50頁(yè),共80頁(yè),2023年,2月20日,星期二 virtualvoidswap(inti,intj){ Employee*temp=v[i]; v[i]=v[j]; v[j]=temp; }}OO方案-特化4/18/202351第51頁(yè),共80頁(yè),2023年,2月20日,星期二基類不再需要改變。特化子類滿足不同的需求。如:改變?yōu)閷?duì)收入進(jìn)行排序只需改變子類,無(wú)需改變父類對(duì)浮點(diǎn)數(shù)進(jìn)行排序也只需創(chuàng)建一個(gè)新的子類,而無(wú)需改變父類觀察4/18/202352第52頁(yè),共80頁(yè),2023年,2月20日,星期二繼承允許進(jìn)行高級(jí)別算法細(xì)節(jié)的封裝還允許在不改變?cè)即a的情況下修改或特化這些細(xì)節(jié)。繼承4/18/202353第53頁(yè),共80頁(yè),2023年,2月20日,星期二框架改變了應(yīng)用程序(開(kāi)發(fā)者定義的代碼)與庫(kù)代碼之間的關(guān)系傳統(tǒng)的應(yīng)用程序中應(yīng)用程序特定的代碼定義了程序執(zhí)行的總體流程在框架中控制流是由框架決定的,并且隨應(yīng)用程序的不同而不同新的應(yīng)用程序的創(chuàng)建者只需改變供框架調(diào)用的例程即可,而無(wú)需改變總體結(jié)構(gòu).框架占主導(dǎo)地位,而應(yīng)用程序特定的代碼處于次要位置.倒置庫(kù)4/18/202354第54頁(yè),共80頁(yè),2023年,2月20日,星期二面向?qū)ο笤O(shè)計(jì)藝術(shù)為應(yīng)用程序預(yù)言將來(lái)可能發(fā)生的變化,并對(duì)應(yīng)用程序進(jìn)行相應(yīng)的設(shè)計(jì)做到這點(diǎn)不容易,需要程序員認(rèn)識(shí)到可以通過(guò)類似于以前解決問(wèn)題的方式或者現(xiàn)存軟件系統(tǒng)的方式來(lái)解決新問(wèn)題時(shí),才能夠?qū)⒃搯?wèn)題泛化,使其適合于更廣泛的應(yīng)用程序象C++,需要程序員區(qū)分哪些方法可以改寫(xiě),以及哪些方法不能改寫(xiě),這種方式過(guò)于僵硬了由于程序員在最初無(wú)法預(yù)言改寫(xiě)某個(gè)方法的需求預(yù)言變化4/18/202355第55頁(yè),共80頁(yè),2023年,2月20日,星期二多個(gè)代理組成的團(tuán)體?對(duì)象綁定到一起的連接特性?第23章對(duì)象互連4/18/202356第56頁(yè),共80頁(yè),2023年,2月20日,星期二一種考慮對(duì)象互連的方式就是研究可視性和依賴性這兩個(gè)概念。可視性描述了關(guān)于名稱的特性,通過(guò)該名稱句柄可以存取對(duì)象,如果對(duì)象的名稱是合法的且代表該對(duì)象,那么在這個(gè)特定環(huán)境下該對(duì)象就是可見(jiàn)的。描述可視性的相關(guān)術(shù)語(yǔ)還包括標(biāo)識(shí)符的范疇依賴性將兩個(gè)對(duì)象或者類聯(lián)系起來(lái),在不存在另外一個(gè)對(duì)象的條件下,如果一個(gè)對(duì)象的存在無(wú)任何意義,就說(shuō)該對(duì)象依賴于另外那個(gè)對(duì)象。例如:子類幾乎總是依賴于它的父類對(duì)象互連4/18/202357第57頁(yè),共80頁(yè),2023年,2月20日,星期二耦合(coupling)和內(nèi)聚(cohesion)的思想提供了一個(gè)框架,用于評(píng)價(jià)對(duì)象和類的應(yīng)用是否有效。耦合描述類之間的關(guān)系,內(nèi)聚描述類內(nèi)部的關(guān)系。耦合和內(nèi)聚4/18/202358第58頁(yè),共80頁(yè),2023年,2月20日,星期二從最差的耦合到較好的耦合:內(nèi)部數(shù)據(jù)耦合全局?jǐn)?shù)據(jù)耦合控制(或順序)耦合組件耦合參數(shù)耦合子類耦合耦合的種類4/18/202359第59頁(yè),共80頁(yè),2023年,2月20日,星期二內(nèi)部數(shù)據(jù)耦合發(fā)生在當(dāng)一個(gè)類的實(shí)例直接修改另外一個(gè)類中的本地?cái)?shù)據(jù)值(實(shí)例變量)時(shí)。ClassSneakyModifier{ public:voidsneaky(){ //changemyfriendsname myFriend->name=“Lucy”; } Person*myFriend;};ClassPerson{ public:Person(){ name=“Larry”; } stringname;};內(nèi)部數(shù)據(jù)耦合4/18/202360第60頁(yè),共80頁(yè),2023年,2月20日,星期二全局?jǐn)?shù)據(jù)耦合發(fā)生在兩個(gè)或者更多個(gè)類型都依賴于公用的全局?jǐn)?shù)據(jù)結(jié)構(gòu)而綁定到一起的時(shí)候。DoubletodaysDow;ClassOne{ public:voidsetDow(){ todayDow=9473; }}ClassTwo{ public:voidprintDow(){ cout<<“TodaytheDowhit”<<todaysDow; }};全局?jǐn)?shù)據(jù)耦合4/18/202361第61頁(yè),共80頁(yè),2023年,2月20日,星期二一個(gè)類必須以一種由任何位置控制的特定的順序來(lái)執(zhí)行操作。classMyClass{public: doFirst(){...} doSecond(){...} doThird(){...}}控制或者順序耦合4/18/202362第62頁(yè),共80頁(yè),2023年,2月20日,星期二被順序化的類應(yīng)確保自身能夠以正確的順序?qū)崿F(xiàn)操作,不應(yīng)僅依賴于調(diào)用者的正確處理classMyClass{public: doStuff(){ doFirst(); doSecond(); doThird(); }protected: doFirst(){...} doSecond(){...} doThird(){...}}控制或者順序耦合4/18/202363第63頁(yè),共80頁(yè),2023年,2月20日,星期二組件耦合發(fā)生在一個(gè)類包含的數(shù)據(jù)字段或數(shù)值為另外一個(gè)類的實(shí)例時(shí)ClassSet{ . . private: Listdata;};組件耦合4/18/202364第64頁(yè),共80頁(yè),2023年,2月20日,星期二參數(shù)耦合發(fā)生在一個(gè)類必須調(diào)用另外一個(gè)類的服務(wù)和例程時(shí),此時(shí)兩個(gè)類之間所發(fā)生的唯一關(guān)系就是一個(gè)類需要為另一個(gè)類提供參數(shù)數(shù)目、類型和返回值類型。ClassmyClass{ public: voiddoSomething(Setaset){ //dosomethingusingtheargumentvalue . }}參數(shù)耦合4/18/202365第65頁(yè),共80頁(yè),2023年,2月20日,星期二子類耦合是面向?qū)ο缶幊趟赜械?,描述了一個(gè)類與其父類之間的關(guān)系。通過(guò)繼承,子類的實(shí)例可以被看成父類的實(shí)例。ClassParent{ . .}ClassChildextendsParent{ . .}子類耦合4/18/202366第66頁(yè),共80頁(yè),2023年,2月20日,星期二類的內(nèi)部?jī)?nèi)聚性是該結(jié)構(gòu)中各個(gè)元素之間綁定程度的量度。內(nèi)聚4/18/202367第67頁(yè),共80頁(yè),2023年,2月20日,星期二從最弱的內(nèi)聚到最強(qiáng)的內(nèi)聚:隨機(jī)內(nèi)聚:對(duì)程序隨意劃分邏輯內(nèi)聚:算術(shù)函數(shù)庫(kù)時(shí)間內(nèi)聚:如實(shí)現(xiàn)程序初始化的類通信內(nèi)聚:數(shù)據(jù)或者設(shè)備的manager順序內(nèi)聚:避免順序耦合功能內(nèi)聚:類中元素通過(guò)執(zhí)行特定功能關(guān)聯(lián)起來(lái)數(shù)據(jù)內(nèi)聚:數(shù)據(jù)結(jié)構(gòu)內(nèi)聚的種類4/18/202368第68頁(yè),共80頁(yè),2023年,2月20日,星期二目的:通

溫馨提示

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