![代碼重構(gòu)如何實(shí)現(xiàn)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/29199e61-c590-4258-b4ba-d8093ef0ed58/29199e61-c590-4258-b4ba-d8093ef0ed581.gif)
![代碼重構(gòu)如何實(shí)現(xiàn)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/29199e61-c590-4258-b4ba-d8093ef0ed58/29199e61-c590-4258-b4ba-d8093ef0ed582.gif)
![代碼重構(gòu)如何實(shí)現(xiàn)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/29199e61-c590-4258-b4ba-d8093ef0ed58/29199e61-c590-4258-b4ba-d8093ef0ed583.gif)
![代碼重構(gòu)如何實(shí)現(xiàn)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/29199e61-c590-4258-b4ba-d8093ef0ed58/29199e61-c590-4258-b4ba-d8093ef0ed584.gif)
![代碼重構(gòu)如何實(shí)現(xiàn)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/29199e61-c590-4258-b4ba-d8093ef0ed58/29199e61-c590-4258-b4ba-d8093ef0ed585.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、代碼重構(gòu)如何實(shí)現(xiàn)重構(gòu)的定義重構(gòu)是在不改變軟件可觀察行為的前提下改善其內(nèi)部結(jié)構(gòu)。重構(gòu)的節(jié)奏以微小的步伐修改程序。如果你犯下錯(cuò)誤,很容易便可發(fā)現(xiàn)它。· 一個(gè)方法里面,不應(yīng)該有很多的代碼,我們可以通過(guò)分解后重組。· 好的代碼應(yīng)該清楚的表達(dá)出自己的功能,變量名稱是代碼清晰的關(guān)鍵。· 盡量減少臨時(shí)變量,大量參數(shù)被傳來(lái)傳去,很容易跟丟,可讀性差。· 提煉出邏輯代碼,以便功能復(fù)用。重構(gòu)(名詞):對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。重構(gòu)(動(dòng)詞):使用一系列重構(gòu)首發(fā),在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu)。為
2、何重構(gòu)?· 重構(gòu)改進(jìn)軟件設(shè)計(jì)· 重構(gòu)是軟件更容易理解· 重構(gòu)幫助找到bug· 重構(gòu)提高編程速度何時(shí)重構(gòu)?幾乎任何情況下我都反對(duì)專門(mén)拔出時(shí)間進(jìn)行重構(gòu)。在我看來(lái)重構(gòu)本來(lái)就不是一件應(yīng)該特別撥出時(shí)間做的事情,重構(gòu)應(yīng)該隨時(shí)隨地的進(jìn)行。你不應(yīng)該為重構(gòu)而重構(gòu),你之所以重構(gòu),是因?yàn)槟阆胱鰟e的什么事,而重構(gòu)可以幫助你把那些事做好。三次法則第一次做某件事只管去做,第二次做類(lèi)似的事情會(huì)有反感,第三次再做類(lèi)似的事,你就應(yīng)該重構(gòu)。事不過(guò)三,三則重構(gòu)。· 添加功能時(shí)重構(gòu)· 修補(bǔ)錯(cuò)誤時(shí)重構(gòu)· 復(fù)審代碼時(shí)重構(gòu)為什么重構(gòu)有用?難以修改的程序· 難以
3、閱讀的· 邏輯重復(fù)的· 添加新行為需要修改已有代碼的· 帶復(fù)雜條件邏輯的好的程序· 容易閱讀· 所有邏輯都只是在唯一地點(diǎn)指定· 新的改動(dòng)不會(huì)危及現(xiàn)有行為· 盡可能簡(jiǎn)單表達(dá)條件邏輯重構(gòu)是這樣一個(gè)過(guò)程:它在一個(gè)目前可運(yùn)行的程序上進(jìn)行,在不改變程序行為的前提下使其具備上述美好性質(zhì),使我們能夠繼續(xù)保持高速開(kāi)發(fā),從而新增程序的價(jià)值。何時(shí)不該重構(gòu)?· 無(wú)法穩(wěn)定運(yùn)行直接重寫(xiě)不用重構(gòu)· 項(xiàng)目以及接近最后期限,不應(yīng)該重構(gòu),雖然重構(gòu)能夠提高生產(chǎn)力,但是你沒(méi)有足夠的時(shí)間,通常標(biāo)示你其實(shí)早該進(jìn)行重構(gòu)了。代碼的壞味道·
4、Duplicated Code 重復(fù)代碼· Long Method 過(guò)長(zhǎng)函數(shù)· Large Class 過(guò)大的類(lèi)· Long Parameter List 過(guò)長(zhǎng)參數(shù)列· Divergent Change 發(fā)散式變化· Shotgun Surgery 散彈式修改· Feature Envy 依戀情結(jié) (StrategyVisitor)· Data Clumps 數(shù)據(jù)泥團(tuán)· Primitive Obsession 基本類(lèi)型偏執(zhí)· Switch Statements switch驚悚現(xiàn)身 (使用多態(tài)性替換)
5、183; Parallel Inheritance Hierarchies 平行繼承體系· Lazy Class 冗贅類(lèi)· Speculative Generality 夸夸其談未來(lái)性· Temporary Field 令人迷惑的暫時(shí)字段· Message Chains 過(guò)渡耦合的消息鏈· Middle Man 中間人· Inappropriate Intimacy 狎昵關(guān)系· Alternative Classes with Different Interfaces 異曲同工的類(lèi)· Incomplete Libr
6、ary Class 不完美的庫(kù)類(lèi)· Data Class 純稚的數(shù)據(jù)類(lèi)· Refused Bequest 被拒絕的遺贈(zèng)· Comments 過(guò)多的注釋當(dāng)你感覺(jué)需要撰寫(xiě)注釋時(shí),請(qǐng)先嘗試重構(gòu),試著讓所有注釋變得多余。構(gòu)建測(cè)試體系· 確保所有測(cè)試都完全自動(dòng)化,讓他們檢查自己的測(cè)試結(jié)果。· 一套測(cè)試就是一個(gè)強(qiáng)大的bug偵察器,能夠大大縮減查找bug所需要的時(shí)間。· 頻繁地運(yùn)行測(cè)試。每次編譯請(qǐng)把測(cè)試也考慮進(jìn)去 每天至少執(zhí)行每個(gè)測(cè)試一次。· 每當(dāng)你收到bug報(bào)告,請(qǐng)先寫(xiě)一個(gè)單元測(cè)試來(lái)暴露這個(gè)bug。· 編寫(xiě)未完善的測(cè)試并執(zhí)行,
7、好過(guò)對(duì)完美測(cè)試的無(wú)盡等待。· 考慮可能出錯(cuò)的邊界條件,把測(cè)試火力集中在那兒。· 當(dāng)事情被認(rèn)為應(yīng)該會(huì)出錯(cuò)時(shí),別忘了檢查是否拋出了預(yù)期的異常。· 不要因?yàn)闇y(cè)試無(wú)法捕捉所有bug就不寫(xiě)測(cè)試,因?yàn)闇y(cè)試可以捕捉到大多數(shù)的bug。重構(gòu)列表重構(gòu)記錄格式· 名稱· 概要o 描述解決的問(wèn)題o 描述要做的事情o 速寫(xiě)圖展示重構(gòu)前和重構(gòu)后的示例· 動(dòng)機(jī)· 做法· 范例重構(gòu)的基本技巧小步前進(jìn)、頻繁測(cè)試模式和重構(gòu)之間有著一種與生俱來(lái)的關(guān)系。模式是你希望到達(dá)的目標(biāo),重構(gòu)則是到達(dá)之路。重新組織函數(shù)· Extract Method 提煉
8、函數(shù)o 你有一段代碼可以被組織在一起并獨(dú)立出來(lái)。將這段代碼放進(jìn)一個(gè)獨(dú)立函數(shù)中,并讓函數(shù)名稱解釋該函數(shù)的用途。· Inline Method 內(nèi)聯(lián)函數(shù)o 一個(gè)函數(shù),其本體應(yīng)該與其名稱同樣清楚易懂。在函數(shù)調(diào)用點(diǎn)插入函數(shù)本體,然后移除該函數(shù)。· Inline Temp 內(nèi)聯(lián)臨時(shí)變量o 你有一個(gè)臨時(shí)變量,只被一個(gè)簡(jiǎn)單表達(dá)式賦值一次,而它妨礙了其他重構(gòu)方法。將所有對(duì)該變量的引用動(dòng)作,替換為對(duì)它賦值的那個(gè)表達(dá)式本身。· Replace Temp with Query 已查詢?nèi)〈R時(shí)變量o 你的程序以一個(gè)臨時(shí)變量(temp)保存某一個(gè)表達(dá)式的運(yùn)算結(jié)果。將這個(gè)表達(dá)式提煉到一個(gè)獨(dú)立
9、函數(shù)(query查詢式)中。將這個(gè)臨時(shí)變量的所有被引用點(diǎn)替換為對(duì)新函數(shù)的調(diào)用。新函數(shù)可被其他函數(shù)使用。· Introduce Explaining Variable 引入解釋性變量o 你有一個(gè)復(fù)雜的表達(dá)式。將該復(fù)雜表達(dá)式(或其中一部分)的結(jié)果放進(jìn)一個(gè)臨時(shí)變量,以此變量名稱來(lái)解釋表達(dá)式用途。· Split Temporary Variable 分解臨時(shí)變量o 你的程序有某個(gè)臨時(shí)變量被賦值超過(guò)一次,它既不是循環(huán)變量,也不是一個(gè)集用臨時(shí)變量(collecting temporary variable)。針對(duì)每次賦值,創(chuàng)造一個(gè)獨(dú)立。對(duì)應(yīng)的臨時(shí)變量。· Remove Ass
10、ignments to Parameters 移除對(duì)參數(shù)的賦值o 你的代碼對(duì)一個(gè)參數(shù)進(jìn)行賦值動(dòng)作。以一個(gè)臨時(shí)變量取代該參數(shù)的位置。· Replace Method with Method Object 以函數(shù)對(duì)象取代函數(shù)o 你有一個(gè)大型函數(shù),其中對(duì)局部變量的使用,使你無(wú)法采用Extract Method。將這個(gè)函數(shù)放在一個(gè)獨(dú)立的對(duì)象中,如此一來(lái)局部變量就變成了對(duì)象內(nèi)的值域,然后你可以在同一個(gè)對(duì)象中將這個(gè)大型函數(shù)分解為數(shù)個(gè)小型函數(shù)。· Substitute Algorithm 替換算法o 你想要把某個(gè)算法替換為另一個(gè)更清晰的算法。將函數(shù)本體替換為另一個(gè)算法。在對(duì)象之間搬移特性
11、· Move Method 搬移函數(shù)o 你的程序中,有個(gè)函數(shù)與其所駐class之外的另一個(gè)class進(jìn)行更多交流:調(diào)用后者,或被后者調(diào)用。在函數(shù)最常引用的class中建立一個(gè)有著類(lèi)似行為的新函數(shù)。將舊函數(shù)變成一個(gè)單純的委托函數(shù),或是將舊函數(shù)完全移除。· Extract Class 提煉類(lèi)o 你的程序中,某個(gè)field(值域)被所駐class之外的另一個(gè)class更多地用到。在target class 建立一個(gè)new field ,修改source field 的所有用戶,令它們改用new field.· Inline Class 將類(lèi)內(nèi)斂化o 某個(gè)class做了應(yīng)
12、該由兩個(gè)classes做的事情。建立一個(gè)新的class,將相關(guān)的值域和函數(shù)從就class搬移到新class。· Hide Delegate 隱藏委托類(lèi)o 客戶直接調(diào)用其server object(服務(wù)對(duì)象)的delegate class。在sever端(某個(gè)class)建立客戶所需要的所有函數(shù),用以隱藏委托關(guān)系。· Remove Middle Man 移除中間人o 某個(gè)class做了過(guò)多的簡(jiǎn)單委托(simple delegation).讓客戶直接調(diào)用delegate(受托類(lèi))。· Introduce Foreign Method 引入外加函數(shù)o 你所使用的serv
13、er class 需要一個(gè)額外函數(shù),但你無(wú)法修改這個(gè)class。在client class 中建立一個(gè)函數(shù),并以一個(gè)server class實(shí)體作為第一引數(shù)(argument)。· Introduce Local Extension 引入本地?cái)U(kuò)展o 你所使用的server class 需要一些額外函數(shù),但你無(wú)法修改這個(gè)class。建立一個(gè)新class,使它包含這些額外函數(shù)。讓這個(gè)擴(kuò)展品成為source class的subclass(子類(lèi))或(wrapper)外覆類(lèi)。重新組織數(shù)據(jù)· Self Encapsulate Field 自封裝字段o 你直接訪問(wèn)一個(gè)值域(field),
14、但與值域直接的耦合關(guān)系變得逐漸變得笨拙。為這個(gè)值域建立取值/設(shè)值函數(shù),并且只有這些函數(shù)來(lái)訪問(wèn)值域。· Replace Data Value with Object 以對(duì)象取代數(shù)據(jù)值o 你有一筆數(shù)據(jù)項(xiàng)(data item),需要額外的數(shù)據(jù)和行為。將這筆數(shù)據(jù)項(xiàng)變成一個(gè)對(duì)象。· Change Value to Reference 將值對(duì)象改成引用對(duì)象 o 你有一個(gè)class,衍生出許多相等視圖(equal instance),你希望將它們替換為單元對(duì)象。將這個(gè) value object(實(shí)值對(duì)象)變成一個(gè)reference object(引用對(duì)象)。· Change R
15、eference to Value 將引用對(duì)象改成值對(duì)象 (equals hashCode)o 你有一個(gè)reference object(引用對(duì)象),很小且不可變,而且不易管理。將他變成一個(gè)value object(實(shí)值對(duì)象)。· Replace Array with Object 以對(duì)象取代數(shù)組o 你有一個(gè)數(shù)組(array),其中的元素個(gè)各自代表不同的東西,以對(duì)象替換數(shù)組。對(duì)于數(shù)組中的每個(gè)元素,以一個(gè)值域表示之。· Duplicate Observed Data 復(fù)制“被監(jiān)聽(tīng)數(shù)據(jù)” o 你有一些domain data 置身GUI控件中,而domain method 需要訪
16、問(wèn)之。即那個(gè)該筆數(shù)據(jù)拷貝到以到domain object。建立一個(gè)observer模式,用以對(duì)domain object和GUI object 內(nèi)的重復(fù)數(shù)據(jù)進(jìn)行同步控制(sync).· Change Unidirectional Association to Bidirectional 將單向關(guān)聯(lián)改為雙向關(guān)聯(lián)o 兩個(gè)classes都需要使用對(duì)方特性,但其間只有一條單向連接。添加一個(gè)反向指針,并使修改函數(shù)能夠同時(shí)更新兩條連接。· Change Bidirectional Association to Unidirectional 將雙向關(guān)聯(lián)改成單向關(guān)聯(lián)o 兩個(gè)classes之
17、間有雙向關(guān)聯(lián),但其中一個(gè)class如今不再需要另一個(gè)class的特性。去除不必要的關(guān)聯(lián)(association)。· Replace Magic Number with Symbolic Constant 以字面常量取代魔法數(shù)o 你有一個(gè)字面值,帶有特別的含義。創(chuàng)造一個(gè)常量,根據(jù)其意義為它命名,并將上述的字面數(shù)值替換為這個(gè)常量。· Encapsulate Field 封裝字段o 你的class存在一個(gè)public值域。將它聲明為private,并提供相應(yīng)的訪問(wèn)函數(shù)。· Encapsulate Collection 封裝集合o 有個(gè)函數(shù)返回一個(gè)群集(collecti
18、on)。放這個(gè)函數(shù)返回該群集的一個(gè)只讀映件,并在這個(gè)class中提供添加移除群集元素的函數(shù)。· Replace Record with Data Class 以數(shù)據(jù)類(lèi)取代記錄o 你需要面對(duì)傳統(tǒng)編程環(huán)境中的record structure(記錄結(jié)構(gòu))。為該record(記錄)創(chuàng)建一個(gè)啞數(shù)據(jù)對(duì)象(dumb data object)。· Replace Type Code with Class 以類(lèi)取代類(lèi)型碼o class之中有一個(gè)數(shù)值別碼,但他并不影響class的行為。以一個(gè)新的class替換數(shù)值型別碼。· Replace Type Code with Subclas
19、ses 以子類(lèi)取代類(lèi)型碼 (多態(tài)機(jī)制)o 你有一個(gè)不可變的type code,它會(huì)影響class的行為。以一個(gè)subclass取代這個(gè)type code。· Replace Type Code with State/Strategy 以State/Strategy取代類(lèi)型碼o 你有一個(gè)type code,它會(huì)影響class 的行為,但你無(wú)法使用subclassing。以state object取代type code.· Replace Subclass with Fields 以字段取代子類(lèi)o 你的各個(gè)subclasses的唯一差別只在返回常量數(shù)據(jù)的函數(shù)身上。修改這些函數(shù),
20、使他們返回superclass中的某個(gè)(新增)值域,然后銷(xiāo)毀sublcasses。簡(jiǎn)化條件表達(dá)式· Decompose Conditional 分解條件表達(dá)式o 你有一個(gè)復(fù)雜的條件語(yǔ)句。從if、then、else三個(gè)段落中分別提出獨(dú)立函數(shù)。· Consolidate Conditional Expression 合并條件表達(dá)式 o 你有一系列條件測(cè)試,都得到相同結(jié)果。將這些測(cè)試合并為一個(gè)條件式,并將這個(gè)條件式提煉成為一個(gè)獨(dú)立函數(shù)。· Consolidate Duplicate Conditional Fragments 合并重復(fù)的條件片段o 在條件式的每一個(gè)分支上
21、著相同的代碼。將這個(gè)段重復(fù)代碼搬移到條件式之外。· Remove Control Flag 移除控制標(biāo)記 (break/continue/return)o 在一系列布爾表達(dá)式中,某個(gè)變量帶有控制標(biāo)記的作用,以break語(yǔ)句或return語(yǔ)句取代控制標(biāo)記。· Replace Nested Conditional with Guard Clauses 以衛(wèi)語(yǔ)句取代嵌套條件表達(dá)式 (單獨(dú)判斷被稱為“衛(wèi)語(yǔ)句”)o 函數(shù)中的條件邏輯使人難以看清正常的執(zhí)行路徑。使用衛(wèi)語(yǔ)句表現(xiàn)所有特殊的情況。衛(wèi)語(yǔ)句就是把復(fù)雜的條件表達(dá)式拆分成多個(gè)條件表達(dá)式,比如一個(gè)很復(fù)雜的表達(dá)式,嵌套了好幾層的if -
22、 then-else語(yǔ)句,轉(zhuǎn)換為多個(gè)if語(yǔ)句,實(shí)現(xiàn)它的邏輯,這多條的if語(yǔ)句就是衛(wèi)語(yǔ)句· Replace Conditional with Polymorphism 以多態(tài)取代條件表達(dá)式o 你手上有個(gè)條件式,它根據(jù)對(duì)象型別的不同而選擇不同的行為。將這個(gè)條件式的每個(gè)分支放進(jìn)一個(gè)subclass內(nèi)的覆寫(xiě)函數(shù)中,然后將原始函數(shù)聲明為抽象函數(shù)。· Introduce Null Object 引入Null對(duì)象o 你需要再三檢查某個(gè)是否為null value。將null value(無(wú)效值)替換為null object(無(wú)效物)· Introduce Assertion 引入
23、斷言o 某一段代碼需要對(duì)程序狀態(tài)做出某種假設(shè)。以assertion(斷言)明確表現(xiàn)這種假設(shè)。簡(jiǎn)化函數(shù)調(diào)用· Rename Method 函數(shù)改名o 函數(shù)的名稱未能揭示函數(shù)的用途,修改函數(shù)名稱。· Add Parameter 添加參數(shù)o 某個(gè)函數(shù)需要從調(diào)用端得到更多信息。為此函數(shù)添加一個(gè)對(duì)象參數(shù),讓該對(duì)象帶進(jìn)函數(shù)所需信息。· Remove Parameter 移除參數(shù)o 函數(shù)本體不再需要某個(gè)參數(shù),將該參數(shù)去除。· Separate Query from Modifier 講查詢函數(shù)和修改函數(shù)分離o 某個(gè)函數(shù)即返回函數(shù)對(duì)象狀態(tài)值,又修改對(duì)象狀態(tài)。將來(lái)兩個(gè)不同
24、的函數(shù),其中一個(gè)負(fù)責(zé)查詢,另一個(gè)負(fù)責(zé)修改。· Parameterize Method 令函數(shù)攜帶參數(shù)o 若干函數(shù)做了類(lèi)似的工作,但在函數(shù)本體中卻包含了不同的值。建立單一函數(shù),以參數(shù)表達(dá)那些不同的值。· Replace Parameter with Explicit Methods 以明確函數(shù)取代參數(shù)o 你有一個(gè)函數(shù),其內(nèi)完全取決于參數(shù)值而采取不同反應(yīng)。針對(duì)該參數(shù)的每一個(gè)可能值,建立一個(gè)獨(dú)立函數(shù)。· Preserve Whole Object 保持對(duì)象完整o 你從某個(gè)對(duì)象中取出某個(gè)值,將它們作為某一次函數(shù)調(diào)用的參數(shù)。該引用(傳遞)整個(gè)對(duì)象。· Replac
25、e Parameter with Methods 以函數(shù)取代參數(shù)o 對(duì)象調(diào)用某個(gè)函數(shù),并將所得結(jié)果作為參數(shù),傳遞給另一個(gè)函數(shù)。而接受該參數(shù)的函數(shù)也可以調(diào)用前一個(gè)函數(shù)。讓參數(shù)接受者去除該項(xiàng)參數(shù),并直接調(diào)用前一個(gè)函數(shù)。· Introduce Parameter Object 引入?yún)?shù)對(duì)象o 某個(gè)參數(shù)總是很自然地同時(shí)出現(xiàn)。以一個(gè)對(duì)象取代這些參數(shù)。· Remove Setting Method 移除設(shè)置函數(shù)o 你的class中的某個(gè)值域,應(yīng)該在對(duì)象初創(chuàng)時(shí)被設(shè)值,然后就不再改變。去掉該值域的所有設(shè)置函數(shù)。· Hide Method 隱藏函數(shù)o 有一個(gè)函數(shù),從來(lái)沒(méi)有被其他任何
26、class用到。將這個(gè)函數(shù)改為private。· Replace Constructor with Factory Method 以工廠函數(shù)取代構(gòu)造函數(shù)o 你希望在創(chuàng)建對(duì)象時(shí)不僅僅是對(duì)它做簡(jiǎn)單的構(gòu)建工作,將construcotr(構(gòu)造函數(shù))替換為factory method(工廠函數(shù))· Encapsulate Downcast 封裝向下轉(zhuǎn)型o 某個(gè)函數(shù)返回的對(duì)象,需要由函數(shù)調(diào)用者執(zhí)行向下轉(zhuǎn)型動(dòng)作。將向下轉(zhuǎn)型動(dòng)作移到函數(shù)中。· Replace Error Code with Exception 以異常取代錯(cuò)誤碼o 某個(gè)函數(shù)返回一個(gè)特定的代碼,用以表示某種錯(cuò)誤情況。
27、改用異常。· Replace Exception with Test 以測(cè)試取代異常o 面對(duì)一個(gè)調(diào)用者可預(yù)先加以檢查的條件,你拋出一個(gè)異常。修改調(diào)用者,使它在調(diào)用函數(shù)之前先做檢查。處理概括關(guān)系· Pull Up Field 字段上移o 兩個(gè)subclass擁有相同的值域。將此一值域移至superclass。· Pull Up Method 函數(shù)上移o 有些函數(shù),在各個(gè)subclass中產(chǎn)生完全相同的效果。將該函數(shù)移至superclass。· Pull Up Constructor Body 構(gòu)造函數(shù)本體上移o 你的各個(gè)subclass中擁有一些構(gòu)造函數(shù),
28、它們的本體幾乎完全一致。在superclass中新建一個(gè)構(gòu)造函數(shù),并在subclass構(gòu)造函數(shù)中調(diào)用它。· Push Down Method 函數(shù)下移o superclass中的某個(gè)函數(shù)只與部分(而非全部)subclass有關(guān)。將這個(gè)函數(shù)移到相關(guān)的那些subclasses去。· Push Down Field 字段下移o superclass中的某個(gè)值域只被部分subclass用到。將這個(gè)值域到需要它的那些subclasses去。· Extract Subclass 提煉子類(lèi)o class中某些特性只被某些而非全部實(shí)體用到。新建一個(gè)subclass,將上面所說(shuō)的那一部分特性移到subclass中。· Extract Superclass 提煉超類(lèi)o 兩個(gè)classes有相似特性。為這連個(gè)classes建立一個(gè)superclass.將相同特性移至superclass.· Extract Interface 提煉接口o 若干客戶使用class接口中的同一子集?;蛘撸瑑蓚€(gè)Classes的接口有部分
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械工程居間合同范本
- 施工電梯布置專項(xiàng)方案
- 食品安全風(fēng)險(xiǎn)評(píng)估與管理技術(shù)作業(yè)指導(dǎo)書(shū)
- 承包山林合同書(shū)
- 市場(chǎng)營(yíng)銷(xiāo)策略制定與實(shí)施作業(yè)指導(dǎo)書(shū)
- 停車(chē)場(chǎng)管理服務(wù)合同
- 住房和城鄉(xiāng)建設(shè)委員會(huì)
- 林業(yè)經(jīng)濟(jì)管理與政策作業(yè)指導(dǎo)書(shū)
- 雞舍租賃合同
- 技術(shù)服務(wù)合同格式
- 22G101三維彩色立體圖集
- (正式版)HG∕T 20644-2024 彈簧支吊架選用標(biāo)準(zhǔn)
- 中心醫(yī)院消防施工組織設(shè)計(jì)
- 港口自動(dòng)化與智慧港口發(fā)展方向
- 黑龍江省哈爾濱市雙城區(qū)2024年八年級(jí)下冊(cè)物理期末經(jīng)典試題含解析
- 項(xiàng)目采購(gòu)管理培訓(xùn)
- 精益生產(chǎn)工作匯報(bào)(模板)
- 面試官面試技巧(精簡(jiǎn)版)課件
- 中央空調(diào)節(jié)能改造方案
- 高校圖書(shū)館服務(wù)
- 河南省南陽(yáng)市唐河縣2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)
評(píng)論
0/150
提交評(píng)論