可復(fù)用構(gòu)件設(shè)計(jì)的原則_第1頁(yè)
可復(fù)用構(gòu)件設(shè)計(jì)的原則_第2頁(yè)
可復(fù)用構(gòu)件設(shè)計(jì)的原則_第3頁(yè)
可復(fù)用構(gòu)件設(shè)計(jì)的原則_第4頁(yè)
可復(fù)用構(gòu)件設(shè)計(jì)的原則_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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)介

1、論文題目:可復(fù)用構(gòu)件設(shè)計(jì)的原則院(系):研究生學(xué)院專業(yè)年級(jí):計(jì)算機(jī)科學(xué)與技術(shù)姓名:楊友星學(xué)號(hào):201307021指導(dǎo)教師:鄭山紅2014年4月29日開(kāi)閉原則1988 年,Bertrand Meyer 在他的著作Object Oriented Software Construction 中提出了開(kāi)閉原則,原文為:“Software entities should be open for extension,but closed for modification”。即“軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉”。即軟件 系統(tǒng)中包含的各種組件,例如模塊(Modules)、類(lèi)(Classes)以及功能(Fu

2、nctions) 等等,應(yīng)該在不修改現(xiàn)有代碼的基礎(chǔ)上,引入新功能。開(kāi)閉原則中的“開(kāi)”,是 指對(duì)于組件功能的擴(kuò)展是開(kāi)放的,是允許對(duì)其進(jìn)行功能擴(kuò)展的;開(kāi)閉原則中的 “閉”,是指對(duì)于原有代碼的修改是封閉的,即不應(yīng)該修改原有的代碼。實(shí)現(xiàn)開(kāi)閉原則的關(guān)鍵就在于抽象”。把系統(tǒng)的所有可能的行為抽象成一個(gè)抽 象底層,這個(gè)抽象底層規(guī)定出所有的具體實(shí)現(xiàn)必須提供的方法的特征。作為系統(tǒng) 設(shè)計(jì)的抽象層,要預(yù)見(jiàn)所有可能的擴(kuò)展,從而使得在任何擴(kuò)展情況下,系統(tǒng)的抽 象底層不需修改;同時(shí),由于可以從抽象底層導(dǎo)出一個(gè)或多個(gè)新的具體實(shí)現(xiàn),可 以改變系統(tǒng)的行為,因此系統(tǒng)設(shè)計(jì)對(duì)擴(kuò)展是開(kāi)放的。在軟件開(kāi)發(fā)的過(guò)程中,一直都是提倡需求導(dǎo)向的。這

3、就要求在設(shè)計(jì)的時(shí)候, 要非常清楚地了解用戶需求,判斷需求中包含的可能的變化,從而明確在什么情 況下使用開(kāi)閉原則。關(guān)于系統(tǒng)可變的部分,還有一個(gè)更具體的原則是對(duì)可變性的封裝原則(Principle of Encapsulation of Variation, EVP),它從軟件工程實(shí)現(xiàn)的角度對(duì)開(kāi)閉 原則進(jìn)行了進(jìn)一步的解釋。EVP要求在做系統(tǒng)設(shè)計(jì)的時(shí)候,對(duì)系統(tǒng)所有可能發(fā)生 變化的部分進(jìn)行評(píng)估和分類(lèi),每一個(gè)可變的因素都單獨(dú)進(jìn)行封裝?!皩?duì)可變性的 封裝原則”意味著兩點(diǎn):(1)一種可變性不應(yīng)當(dāng)散落在代碼的很多角落里,而應(yīng)當(dāng)被封裝到一個(gè)對(duì) 象里面。同一種可變性的不同表象意味著同一個(gè)繼承等級(jí)結(jié)構(gòu)中的具體子類(lèi),

4、因 此,我們可以期待在設(shè)計(jì)模式中看到繼承關(guān)系。繼承應(yīng)當(dāng)被看做是封裝變化的方 法,而不應(yīng)當(dāng)被認(rèn)為是從一般的對(duì)象生成特殊的對(duì)象的方法。(2)一種可變性不應(yīng)當(dāng)與另一種可變性混合在一起。在實(shí)際開(kāi)發(fā)過(guò)程的設(shè)計(jì)開(kāi)始階段,就要羅列出來(lái)系統(tǒng)所有可能的行為,并把 這些行為加入到抽象底層,根本就是不可能的,這么去做也是不經(jīng)濟(jì)的,費(fèi)時(shí)費(fèi) 力。另外,在設(shè)計(jì)開(kāi)始階段,對(duì)所有的可變因素進(jìn)行預(yù)計(jì)和封裝也不太現(xiàn)實(shí),也 是很難做得到。所以,開(kāi)閉原則描繪的藍(lán)圖只是一種理想情況或是極端狀態(tài),現(xiàn) 實(shí)世界中是很難被完全實(shí)現(xiàn)的。只能在某些組件,在某種程度上符合開(kāi)閉原則的 要求。開(kāi)閉原則具有理想主義的色彩,它是面向?qū)ο笤O(shè)計(jì)的終極目標(biāo)。因此

5、,針對(duì) 開(kāi)閉原則的實(shí)現(xiàn)方法,一直都有面向?qū)ο笤O(shè)計(jì)的大師費(fèi)盡心機(jī),研究開(kāi)閉原則的 實(shí)現(xiàn)方式。其它原則和方法如:里氏代換原則、依賴倒轉(zhuǎn)原則、接口隔離原則以 及抽象類(lèi)、接口等等,都可以看作是開(kāi)閉原則的實(shí)現(xiàn)方法。二、里氏代換原則里氏代換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之 一。根據(jù)里氏代換原則,任何基類(lèi)可以出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)。LSP 是繼承復(fù)用的基石,只有當(dāng)衍生類(lèi)可以替換掉基類(lèi),軟件單位的功能不受到影響 時(shí),基類(lèi)才能真正被復(fù)用,而衍生類(lèi)也能夠在基類(lèi)的基礎(chǔ)上增加新的行為。里氏 代換原則是對(duì)“開(kāi)-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開(kāi)閉”原則的關(guān)鍵

6、步驟就是抽象化。 而基類(lèi)與子類(lèi)的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽 象化的具體步驟的規(guī)范。LSP介紹的是基類(lèi)和子類(lèi)的關(guān)系。只有當(dāng)這種關(guān)系存在時(shí),里氏代換關(guān)系才 存在。如果兩個(gè)具體的類(lèi)A,B之間的關(guān)系違反了 LSP的設(shè)計(jì),(假設(shè)是從B到A 的繼承關(guān)系)那么根據(jù)具體的情況可以在下面的兩種重構(gòu)方案中選擇一種。-創(chuàng)建一個(gè)新的抽象類(lèi)C,作為兩個(gè)具體類(lèi)的超類(lèi),將A,B的共同行為移 動(dòng)到C中來(lái)解決問(wèn)題。-從B到A的繼承關(guān)系改為委派關(guān)系。三、依賴倒置原則依賴倒置原則有如下定義:1)上層模塊不應(yīng)該依賴于底層模塊,它們都應(yīng) 該依賴于抽象。2)抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象,要針對(duì)接

7、口 編程,不要針對(duì)實(shí)現(xiàn)編程。依賴倒置原則雖然很強(qiáng)大,但卻最不容易實(shí)現(xiàn)。因?yàn)橐蕾嚨怪玫木壒?,?duì)象 的創(chuàng)建很可能要使用對(duì)象工廠,以避免對(duì)具體類(lèi)的直接引用,此原則的使用可能 還會(huì)導(dǎo)致產(chǎn)生大量的類(lèi),對(duì)不熟悉面向?qū)ο蠹夹g(shù)的工程師來(lái)說(shuō),維護(hù)這樣的系統(tǒng) 需要較好地理解面向?qū)ο笤O(shè)計(jì)。依賴倒置原則假定所有的具體類(lèi)都是會(huì)變化的,這也不總是正確。有一些 具體類(lèi)可能是相當(dāng)穩(wěn)定,不會(huì)變化的,使用這個(gè)具體類(lèi)實(shí)例的應(yīng)用完全可以依賴 于這個(gè)具體類(lèi)型,而不必為此創(chuàng)建一個(gè)抽象類(lèi)型。四、接口隔離原則接口隔離原則的含義是一個(gè)指導(dǎo)可復(fù)用構(gòu)件中實(shí)體接口設(shè)計(jì)的原則,它使得 構(gòu)件中每個(gè)實(shí)體都擁有盡可能簡(jiǎn)單的接口。實(shí)現(xiàn)的策略應(yīng)該是針對(duì)不同的使

8、用者 提供不同的接口,也就是定制服務(wù)的思想。做法是對(duì)構(gòu)件中每個(gè)實(shí)體的使用者進(jìn) 行角色劃分,然后針對(duì)每一類(lèi)使用者提供一套有針對(duì)性的接口。即變一個(gè)大而全 的接口為多個(gè)簡(jiǎn)單有針對(duì)性的接口,減少需求變更引發(fā)的維護(hù)問(wèn)題五、合成/聚合復(fù)用原則合成/聚合復(fù)用原則是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為 新對(duì)象的一部分;新的對(duì)象通過(guò)向這些對(duì)象的委派達(dá)到復(fù)用這些對(duì)象的目的。首 先使用合成/聚合,合成/聚合則使系統(tǒng)靈活,其次才考慮繼承,達(dá)到復(fù)用的目的。 而使用繼承時(shí),要嚴(yán)格遵循里氏代換原則。有效地使用繼承會(huì)有助于對(duì)問(wèn)題的理 解,降低復(fù)雜度,而濫用繼承會(huì)增加系統(tǒng)構(gòu)建、維護(hù)時(shí)的難度及系統(tǒng)的復(fù)雜度。 如果兩個(gè)類(lèi)

9、是“Has-a”關(guān)系應(yīng)使用合成、聚合,如果是“s-a”關(guān)系可使用繼承。“Is-A”是嚴(yán)格的分類(lèi)學(xué)意義上定義,意思是一個(gè)類(lèi)是另一個(gè)類(lèi)的“一種”。而 “Has-A”則不同,它表示某一個(gè)角色具有某一項(xiàng)責(zé)任。通過(guò)合成/聚合來(lái)進(jìn)行復(fù)用的優(yōu)點(diǎn)有:1、新對(duì)象存取成分對(duì)象的唯一方法是 通過(guò)成分對(duì)象的接口。2、這種復(fù)用是黑箱復(fù)用,因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新 對(duì)象所看不見(jiàn)的。3、這種復(fù)用支持包裝。4、這種復(fù)用所需的依賴較少。5、每 一個(gè)新的類(lèi)可以將焦點(diǎn)集中在一個(gè)任務(wù)上。6、這種復(fù)用可以在運(yùn)行時(shí)間內(nèi)動(dòng)態(tài) 進(jìn)行,新對(duì)象可以動(dòng)態(tài)的引用與成分對(duì)象類(lèi)型相同的對(duì)象。7、作為復(fù)用手段可 以應(yīng)用到幾乎任何環(huán)境中去。缺點(diǎn)就是系統(tǒng)中

10、會(huì)有較多的對(duì)象需要管理。六、迪米特法則迪米特法則指的是一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。這樣,當(dāng)一個(gè)模塊修改時(shí),就會(huì)盡量少的影響其他的模塊。擴(kuò)展會(huì)相對(duì)容易。這 是對(duì)軟件實(shí)體之間通信的限制。它要求限制軟件實(shí)體之間通信的寬度和深度。迪 米特法則還有其他表述,例如只與你直接的朋友們通信,不要跟“陌生人”說(shuō)話, 每一個(gè)軟件單位對(duì)其他的單位都只有最少的知識(shí),而且局限于那些與本單位密切 相關(guān)的軟件單位。狹義的迪米特法則是指如果兩個(gè)類(lèi)不必彼此直接通信,那么這兩個(gè)類(lèi)就不應(yīng) 當(dāng)發(fā)生直接的相互作用。如果其中的一個(gè)類(lèi)需要調(diào)用另一個(gè)類(lèi)的某一個(gè)方法的 話,可以通過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。狹義的迪米特法則的缺

11、點(diǎn)是在系統(tǒng)里造出大量的小方法,這些方法僅僅是傳 遞間接的調(diào)用,與系統(tǒng)的商務(wù)邏輯無(wú)關(guān)。遵循類(lèi)之間的迪米特法則會(huì)是一個(gè)系統(tǒng) 的局部設(shè)計(jì)簡(jiǎn)化,因?yàn)槊恳粋€(gè)局部都不會(huì)和遠(yuǎn)距離的對(duì)象有直接的關(guān)聯(lián)。但是, 這也會(huì)造成系統(tǒng)的不同模塊之間的通信效率降低,也會(huì)使系統(tǒng)的不同模塊之間不 容易協(xié)調(diào)。門(mén)面(外觀)模式和調(diào)停者(中介者)模式實(shí)際上就是迪米特法則的 具體應(yīng)用。廣義的迪米特法則迪米特法則的主要用意是控制信息的過(guò)載。在將迪米特法 則運(yùn)用到系統(tǒng)設(shè)計(jì)中時(shí),要注意下面的幾點(diǎn):1)在類(lèi)的劃分上,應(yīng)當(dāng)創(chuàng)建有弱耦合的類(lèi)。2)在類(lèi)的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類(lèi)都應(yīng)當(dāng)盡量降低成員的訪問(wèn)權(quán)限。3)在類(lèi)的設(shè)計(jì)上,只要有可能,一個(gè)類(lèi)應(yīng)當(dāng)設(shè)計(jì)成

12、不變類(lèi)。4)在對(duì)其他類(lèi)的引用上,一個(gè)對(duì)象對(duì)其對(duì)象的引用應(yīng)當(dāng)降到最低。廣義迪米特法則在類(lèi)的設(shè)計(jì)上的體現(xiàn)有:1)優(yōu)先考慮將一個(gè)類(lèi)設(shè)置成不變類(lèi)2)盡量降低一個(gè)類(lèi)的訪問(wèn)權(quán)限3)謹(jǐn)慎使用 Serializable4)盡量降低成員的訪問(wèn)權(quán)限5)取代 C Struct迪米特法則又叫作最少知識(shí)原則(Least Knowledge Principle或簡(jiǎn)寫(xiě)為L(zhǎng)KP), 就是說(shuō)一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解。如何實(shí)現(xiàn)迪米特法則,迪米 特法則的主要用意是控制信息的過(guò)載,在將其運(yùn)用到系統(tǒng)設(shè)計(jì)中應(yīng)注意以下幾 點(diǎn):八、:1)在類(lèi)的劃分上,應(yīng)當(dāng)創(chuàng)建有弱耦合的類(lèi)。類(lèi)之間的耦合越弱,就越有利 于復(fù)用。2)在類(lèi)的結(jié)構(gòu)設(shè)計(jì)

13、上,每一個(gè)類(lèi)都應(yīng)當(dāng)盡量降低成員的訪問(wèn)權(quán)限。一個(gè)類(lèi)不 應(yīng)當(dāng)public自己的屬性,而應(yīng)當(dāng)提供取值和賦值的方法讓外界間接訪問(wèn)自己的屬 性。3)在類(lèi)的設(shè)計(jì)上,只要有可能,一個(gè)類(lèi)應(yīng)當(dāng)設(shè)計(jì)成不變類(lèi)。4)在對(duì)其它對(duì)象的引用上,一個(gè)類(lèi)對(duì)其它對(duì)象的引用應(yīng)該降到最低。七、單一職責(zé)原則一個(gè)類(lèi),應(yīng)該只有一個(gè)職責(zé)。每一個(gè)職責(zé)都是變化的一個(gè)軸線,如果一個(gè)類(lèi) 有一個(gè)以上的職責(zé),這些職責(zé)就耦合在了一起。這會(huì)導(dǎo)致脆弱的設(shè)計(jì)。當(dāng)一個(gè)職 責(zé)發(fā)生變化時(shí),可能會(huì)影響其它的職責(zé)。另外,多個(gè)職責(zé)耦合在一起,會(huì)影響復(fù) 用性。我們可能只需要復(fù)用該類(lèi)的某一個(gè)職責(zé),但這個(gè)職責(zé)跟其它職責(zé)耦合在了 一起,很難分離出來(lái)。SRP中,把職責(zé)定義為“變化的

14、原因”。如果你能想到N個(gè)動(dòng)機(jī)去改變一個(gè) 類(lèi),那么這個(gè)類(lèi)就具有多于一個(gè)的職責(zé)。這里說(shuō)的“變化的原因”,只有實(shí)際發(fā) 生時(shí)才有意義。可能預(yù)測(cè)到會(huì)有多個(gè)原因引起這個(gè)類(lèi)的變化,但這僅僅是預(yù)測(cè), 并沒(méi)有真的發(fā)生,這個(gè)類(lèi)仍可看做具有單一職責(zé),不需要分離職責(zé)。如果分離, 會(huì)帶來(lái)不必要的復(fù)雜性。如果發(fā)現(xiàn)一個(gè)類(lèi)有多于一個(gè)的職責(zé),應(yīng)該盡量解耦。如果很難解耦,也要 分離接口,在概念上解耦。眾所周知,OOPL可以提高程序的封裝性、復(fù)用性、可維護(hù)性。但僅僅是“可 以”。能不能實(shí)現(xiàn)OOPL的這些優(yōu)點(diǎn),要看具體怎么做。如果一個(gè)類(lèi)的代碼非常 混亂,各種功能的代碼都混在一起,封裝性、復(fù)用性、可維護(hù)性無(wú)從談起。SRP是所有原則中最

15、簡(jiǎn)單的,也是最基本的一個(gè)。運(yùn)用這個(gè)原則,可以提高 類(lèi)的內(nèi)聚性,有助于充分發(fā)揮OOPL的優(yōu)勢(shì)。八、原則分析所有的原則都應(yīng)該在對(duì)軟件設(shè)計(jì)有幫助的時(shí)候才遵循。因?yàn)槭褂眠@些原則是 要付出代價(jià)的。例如為了獲得可維護(hù)性和可復(fù)用性需要加入額外的類(lèi)或?qū)ο?,這 會(huì)導(dǎo)致系統(tǒng)占用更多的空間;為了獲得靈活性就需要進(jìn)行抽象或者加入中間層, 這會(huì)導(dǎo)致運(yùn)行速度的降低。所以在使用各種原則之前必須考慮所有因素。下面本 文將從上述原則中選取依賴倒置原則和接口隔離原則進(jìn)行分析。下面是一個(gè)違反了依賴倒置原則的例子。我們有一個(gè)上層類(lèi)Manager和底層 類(lèi)wanggang。我們需要在程序中添加一個(gè)新模塊,因?yàn)橛行碌娜藛T被雇用。為 此,

16、我們創(chuàng)建一個(gè)新的類(lèi)newperson。假設(shè)Manager是一個(gè)包含非常復(fù)雜的邏輯的類(lèi),現(xiàn)在為了引入新的 newperson,我們需要修改它。讓我們看一下這有哪些缺點(diǎn):1、我們需要修改 Manager類(lèi)。2、Manager類(lèi)的一些現(xiàn)有功能可能會(huì)受到影響。3、需要重做單元 測(cè)試。所有的這些問(wèn)題需要大量的時(shí)間去解決。但是如果程序的設(shè)計(jì)符合依賴倒置 原則將會(huì)非常簡(jiǎn)單。即我們?cè)O(shè)計(jì)Manager類(lèi)和一個(gè)person接口以及一些實(shí)現(xiàn)了 該接口的person類(lèi)。當(dāng)需要添加newperson類(lèi)時(shí)我們只需要讓它實(shí)現(xiàn)person接 口。/未使用依賴倒置原則public class Manager wanggang

17、pl;public void setPerson(wanggang p)pl = p ;public void manage()pl.work();public class wanggang public void work()System.out .println(wanggang is working);/新增xiaoli還得修改Manager相關(guān)代碼public class xiaoli public void work()System.out.println(xiaoli is working);下面是支持依賴倒置原則的代碼。在這個(gè)新的設(shè)計(jì)中,我們?cè)黾恿艘粋€(gè)新的 抽象層person接口

18、。現(xiàn)在,上面的問(wèn)題得到了解決:1、不需要修改Manager 類(lèi)。2、使對(duì)Manager類(lèi)現(xiàn)有功能的影響最小化。3、不需要對(duì)Manager類(lèi)重新 進(jìn)行單元測(cè)試。/使用依賴倒置原則public interface person public void work();public class wanggang implements personpublic void work()System.out.println(wanggang is working);public class xiaoli implements personpublic void work()System.out.printl

19、n(xiaoli is working);public class Manager wanggang p1;public void setPerson(wanggang p)p1 = p ;public void manage()p1.work();采用接口隔離原則對(duì)接口進(jìn)行約束時(shí),要注意以下幾點(diǎn):1、接口盡量小, 但是要有限度。對(duì)接口進(jìn)行細(xì)化可以提高程序設(shè)計(jì)靈活性是不掙的事實(shí),但是如 果過(guò)小,則會(huì)造成接口數(shù)量過(guò)多,使設(shè)計(jì)復(fù)雜化。所以一定要適度。2、為依賴接口的類(lèi)定制服務(wù),只暴露給調(diào)用的類(lèi)它需要的方法,它不需要的方法則隱藏起 來(lái)。只有專注地為一個(gè)模塊提供定制服務(wù),才能建立最小的依賴關(guān)系。3、提

20、高 內(nèi)聚,減少對(duì)外交互。使接口用最少的方法去完成最多的事情。運(yùn)用接口隔離原則,一定要適度,接口設(shè)計(jì)的過(guò)大或過(guò)小都不好。設(shè)計(jì)接口的時(shí)候,只有多花些時(shí)間去思考和籌劃,才能準(zhǔn)確地實(shí)踐這一原則。接口隔離原則:wanggangxiaolibreathe() drink() eat() gamble() breathe() drink() eat() bear()圖8.1未遵循接口隔離原則圖8.2遵循接口隔離原則/未使用接口隔離原則breathe();drink();eat();gamble();bear();work();public interface person void void void vo

21、id void voidpublic public public public public publicpublic class man public void food(person p) p.eat();public void water(person p) p.drink();public void air(person p) p.breathe();public void gamble(person p) p.gamble();public void work(person p) p.work(); class wanggang implements person public vo

22、id breathe() System. out .println(接口person :呼吸”); public void drink() System. out .println(接口 person:喝水”); public void eat() System. out .println(接口 person:吃飯”); public void gamble() System. out .println(接口person :賭博”); public void work() System. out .println(接口 person:工作”); /bear()不用實(shí)現(xiàn),但是必須實(shí)現(xiàn)public

23、 void bear() System. out .println(生育”);public class woman public void food(person p) p.eat();public void water(person p) p.drink();public void air(person p) p.breathe();public void bear(person p) p.bear();public void work(person p) p.work();class xiaoli implements person public void breathe() System

24、. out .println(接口person :呼吸”); public void drink() System. out .println(接口 person:喝水”); public void eat() System. out .println(接口 person:吃飯”); public void bear() System. out .println(接口 person:生育”); public void work() System. out .println(接口 person:工作”); /gamble()不用實(shí)現(xiàn),但是必須實(shí)現(xiàn)public void gamble() Syst

25、em. out .println(接口person :賭博”);/使用接口隔離原則breathe();drink();eat();work();voidvoidvoidvoidpublic interface personl public public public publicpublic interface person2 public void gamble();public interface person3 public void bear();public class man public void food(person1 p) p.eat();public void water(person1 p) p.drink();public void air(person1 p) p.breathe();public void gamble(person2 p) p.gamble();public void work(person1 p) p.work();class wa

溫馨提示

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