亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

診斷 Java 代碼:設計輕松的代碼維護

2019-11-18 13:34:57
字體:
來源:轉載
供稿:網友

  本月,Eric Allen 解釋了在使代碼更易于維護的同時,避免和控制無理由的變化怎么會是保持代碼健壯性的要害。他集中討論了諸如函數樣式代碼編寫之類的概念,以及標記字段、方法和類的方法來處理并防止可變性。Eric 還解釋了本任務中單元測試和重構的角色,并提供了協助實現重構的兩個工具。在相關論壇中與作者和其他讀者分享您對本文的看法。(您也可以單擊本文頂部或底部的“討論”,訪問該論壇。)
有效調試源自良好的編程。設計易于維護的程序是程序員面臨的最困難挑戰之一,其部分原因在于程序通常并不是由那些編寫代碼的程序員維護的。為了有效維護這樣的程序,新程序員必須能夠快速了解程序的工作原理,假如程序員能夠單獨理解整個程序中各個小部分,那么就可以輕易地了解程序的工作原理。

通過討論可變性、可譯碼性、私有方法、最終方法、最終類、本地代碼、單元測試以及重構問題,我們將簡述編寫程序的一些方法,以幫助使程序更易理解和維護。

可變性和可譯碼性
首先討論可變性問題。假如在一個程序的計算期間,其每一部分所處理的數據都沒有被該程序的其它、遠程部分更改,那么就很輕易單獨理解該程序的各個部分。

太多信息
例如,請考慮一個使用容器類實例的程序,可以修改其中的成分鏈接。每次將容器從程序某一部分上的方法傳遞到該程序其它部分的方法,以及每次調用 new 表達式(其中容器被作為參數傳遞)時,容器就可能脫離調用方法的控制發生改變。

在我們首先理解調用方法調用的每個方法如何修改容器之前,我們不能真正確保我們理解了調用方法,由此我們診斷錯誤的能力也就更差。假如這些被調用的每個方法都依次調用其它修改方法,那么維護程序員為了理解單個方法必須閱讀的代碼總量會迅速增加,多得無法控制。

由于這個原因,對可變容器和不可變容器使用不同類會非常有利。在不可變版本中,容器的字段可以標記成 final。

求助于函數樣式
相對于修改舊數據,為構造新數據而進行代碼編寫稱為函數樣式,因為程序的方法與數學函數相似,其行為是根據每個輸入所返回的輸出來單獨描述的。

函數樣式經常被忽略的優點是相當輕易單獨理解程序的個別組件。假如方法所操縱的數據決不會被其主體中執行的任何操作改變,那么程序員要理解該方法必須做的就是理解那些操作返回的結果。將之與前面的一個方法調用幾個其它方法的方案相對照,那個方案中的其它幾個方法都修改這一方法所操作的數據結構。

java 語言的一個相當好的特性是它答應我們使用 final 要害字(作為類型檢查器的偽指令)來聲明何時我們要使某個數據成為不可變。

使用 final 要害字來避免變化是“釘住”類的方法行為的一個好方法。每次修改字段時,都有可能改變引用該字段的方法的行為。另外,將字段標記為 final 讓閱讀程序的其他程序員立即知道:不管整個程序有多大,決不要修改該字段。例如,請考慮下列表示不可變列表的類層次結構。

清單 1. 表示不可變列表的類層次結構

abstract class List {...}
class Empty extends List {...}
class Cons extends List {
PRivate final Object first;
private final List rest;
}



這些類中的所有字段都被標記成 final。要確保這些類的實例不可變,這樣做夠了嗎?不太夠。當然,即使字段被標記成 final,該字段本身的組件可能不是 final,記住這一點很重要。當那些組件更改時,引用那些組件的程序的任何部分可能會被修改,而不管字段本身是否改變。在上面的示例中,盡管列表的組成元素不能被修改,但是我們必須檢查那些元素本身沒有包含可能被修改的非最終字段。

在這種情形中,盡管列表可能包含可變元素,但是我們可以看到存儲在給定列表中的元素序列由于以下原因而不可變:Empty 列表(即,長度為零的列表)的實例根本不包含任何元素;因此不能修改它們。Cons(非空列表)實例包含兩個字段,都是 final。第一個字段包含該列表的第一個元素,它不能被修改;第二個字段包含一個列表,其中包含所有剩余元素。假如這個列表的內容不可變,那么該包含列表也不可變。

但是包含在這第二個字段中的列表比包含列表的長度小一,所以假如我們知道長度為 n 的所有列表都不可變,那么我們就知道長度為 n + 1 的列表也不可變。因為我們已經知道長度為零的列表不可變,所以我們也知道長度為 1、2、3 等的列表同樣不可變。

跟蹤與此類似的數據結構連接會很乏味,但當您能確定這種結構的全局特性(諸如不可變性)時,這樣做是值得的。

控制變化
防止出現不期望的變化的最佳策略就是盡可能避免所有變化。只有當出現一定要改變的原因時(例如,當這樣做大大簡化了代碼結構時),我們才應該使用它。當可以避免變化時,所產生的好處是巨大的(在較低的維護費用和增強的健壯性方面)。

即使存在一定要改變數據的原因,最好還是設法控制那種變化,從而盡可能限制可能產生的破壞。迭代器和流是數據結構的極佳示例,這些數據結構明確設計成通過答應我們以常規的、定義良好的形式利用一系列元素,而不是明確修改這些元素的某個句柄來控制變化。

私有方法
就如同將字段設置成 final 有助于限制對字段值產生外部影響一樣,將它們設置成 private 有助于限制它們對程序其它部分產生的影響。假如字段是私有的,那么我們可以確信該程序的其它部分都不與它直接相關。假如我們除去了該字段,并替換了該類數據的內部表示,那么我們只要關心修正該類內部的方法,以正確訪問新數據。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品自拍偷拍| 亚洲综合小说区| 日韩av在线播放资源| 美女视频黄免费的亚洲男人天堂| 国产成人精品久久亚洲高清不卡| 日韩免费在线观看视频| 国产精品一区二区电影| 亚洲国产精品嫩草影院久久| 国产不卡视频在线| 人人做人人澡人人爽欧美| 亚洲日本中文字幕免费在线不卡| 欧美日本在线视频中文字字幕| 亚洲欧美国产va在线影院| 欧美日韩中国免费专区在线看| 国产欧美一区二区| 亚洲一区国产精品| 北条麻妃一区二区三区中文字幕| 国内精品免费午夜毛片| 欧美激情精品久久久久久黑人| 亚洲欧美999| 国产午夜一区二区| 国产欧美日韩中文字幕在线| 国产精品久久电影观看| 国产精品久久久久久久久久ktv| 国产精品狼人色视频一区| 欧美一乱一性一交一视频| 亚洲色图五月天| 久久久久久久久国产| 国产中文日韩欧美| 欧美性黄网官网| 中文精品99久久国产香蕉| 亚洲人成网站色ww在线| 国产女同一区二区| 欧美成人精品一区| 91久久精品日日躁夜夜躁国产| 性欧美长视频免费观看不卡| 成人444kkkk在线观看| 欧美日韩国产在线| 成年无码av片在线| 久久精品国产精品亚洲| 国产精品日韩电影| 欧美日韩国产在线看| 国产97在线视频| 成人福利视频网| 不卡伊人av在线播放| 国产成人综合亚洲| 国产精品精品一区二区三区午夜版| 国产aaa精品| 中文字幕一区二区三区电影| 九九视频直播综合网| 亚洲男人天堂九九视频| 日韩在线一区二区三区免费视频| 91久久久久久| 欧美一级黑人aaaaaaa做受| 欧美日韩精品在线| 丝袜美腿精品国产二区| 国产精品男女猛烈高潮激情| 亚洲毛茸茸少妇高潮呻吟| 欧美日韩一二三四五区| 全色精品综合影院| 色综合天天狠天天透天天伊人| 亚洲欧洲在线免费| 久久免费精品日本久久中文字幕| 欧美日韩在线观看视频| 国产午夜精品全部视频在线播放| 欧美日韩国产麻豆| 国产视频久久网| 精品中文视频在线| 亚洲最大成人网色| 成人妇女免费播放久久久| 国产日韩欧美中文| 狠狠久久五月精品中文字幕| 性欧美视频videos6一9| 国产男女猛烈无遮挡91| 久久久久久久久久久91| 国产精品一区二区久久久久| 亚洲国产另类 国产精品国产免费| 91免费欧美精品| 成人免费淫片aa视频免费| 欧美第一黄网免费网站| 亚洲精品网站在线播放gif| 国产精品扒开腿做爽爽爽视频| 亚洲全黄一级网站| 久久久精品美女| 精品夜色国产国偷在线| 热久久免费国产视频| 欧美日韩激情小视频| 成人做爰www免费看视频网站| 亚洲美女av黄| 国产日本欧美一区| 最近2019好看的中文字幕免费| 日韩美女激情视频| 国产亚洲一区二区在线| 久久久久国产精品www| 日韩在线免费视频观看| 欧美激情一区二区三级高清视频| 国产精品自产拍在线观看中文| 亚洲视频在线视频| 日韩中文字幕不卡视频| 国产欧美精品一区二区| 91国内在线视频| 日韩av一区在线| 成人在线小视频| 奇门遁甲1982国语版免费观看高清| 国产精品网站大全| 亚洲美女在线观看| 日韩精品电影网| www高清在线视频日韩欧美| 日韩精品免费在线视频| 亚洲人成自拍网站| 91国偷自产一区二区三区的观看方式| 欧美孕妇孕交黑巨大网站| 亚洲欧美制服另类日韩| 国产精品十八以下禁看| 欧美精品精品精品精品免费| 日韩视频免费在线观看| 亚洲男人av电影| 美日韩丰满少妇在线观看| 亚洲视频在线免费看| 成人精品久久av网站| 欧美日韩国产第一页| 日韩精品视频观看| 中文字幕久久久av一区| 最近2019中文字幕第三页视频| 国产欧美日韩中文字幕在线| 欧美一级黑人aaaaaaa做受| 青青草国产精品一区二区| 亚洲精品ady| 在线不卡国产精品| 成人性生交xxxxx网站| 色偷偷偷综合中文字幕;dd| 日本精品久久久久影院| 中文字幕成人精品久久不卡| 97视频在线播放| 精品激情国产视频| 欧美日韩美女视频| 欧美激情极品视频| 国模gogo一区二区大胆私拍| 久久久国产精品x99av| 久久久人成影片一区二区三区| 国内精品国产三级国产在线专| 亚洲伊人成综合成人网| 26uuu另类亚洲欧美日本老年| 色偷偷9999www| 一本色道久久88精品综合| 欧美精品国产精品日韩精品| 成人在线视频福利| 日韩在线观看视频免费| 色婷婷亚洲mv天堂mv在影片| 91香蕉亚洲精品| 一区二区福利视频| 亚洲黄色av网站| 国产精品视频26uuu| 国产精品va在线播放| 亚洲第一福利网| 国产一区二区三区三区在线观看| 亚洲人成77777在线观看网| 国产精品国内视频| 亚洲性日韩精品一区二区| 国产亚洲精品久久久久久| 亚洲天堂第二页| 俺去了亚洲欧美日韩| 国产亚洲日本欧美韩国| 色妞在线综合亚洲欧美|