freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

如何更容易的看懂別人的源代碼--(分析源代碼方法)(參考版)

2024-08-16 05:24本頁面
  

【正文】 。你也有可能在閱讀的同時(shí),發(fā)現(xiàn)原作者所留下的缺失或?qū)懽鲿r(shí)的缺點(diǎn),而暗自警惕于心。有些時(shí)候,在閱讀之初,你并不知道原作者的習(xí)性跟喜好,甚至你也不知道他的功力。而閱讀慣用,善用設(shè)計(jì)模式的程式人所寫下的程式碼時(shí),不難推想出他會(huì)在各種常見的應(yīng)用情境下,套用哪些模式。從程式碼著手認(rèn)識(shí)作者獨(dú)有的風(fēng)格,進(jìn)而見賢思齊如果你能知道原作者的背景,程式設(shè)計(jì)時(shí)的偏好,閱讀他的程式碼,就更能得心應(yīng)手了。當(dāng)你短暫化身為原作者時(shí),才能更輕易的理解他所寫下的程式碼。他寫下這段程式碼的用意是什么?為什么他會(huì)采取這樣的寫法?順著原作者的思考理路閱讀,自己的思考才能更貼近對方寫作當(dāng)時(shí)的想法。我在閱讀非自己所寫的程式碼時(shí),會(huì)觀察原作者寫作的習(xí)慣,借以對應(yīng)到腦中所記憶的多種寫作模型。好比之前提到的ml_pod專案,因?yàn)槌淌酱a中混合了不同的來源,而呈現(xiàn)風(fēng)格不一致的情況。不過,有些開放原始碼的專案,往往又整合了其他開放原始碼的專案。在多人開發(fā)的模式下,越是好的軟體專案,越看不出某程式碼片段究竟是由誰所寫下的。許多軟體專案,都不是由單一程式人所獨(dú)力完成。當(dāng)你試著設(shè)身處地站在他的立場,透過他的思考方式來閱讀,追蹤他所寫下的程式碼,將會(huì)感覺更加流暢。除了工具及技巧之外, “想要閱讀程式碼,得先試著閱讀寫這個(gè)程式碼的程式人的心。這種感受和聯(lián)想的能力,究竟應(yīng)該如何精進(jìn),很難具體描述。當(dāng)你自己的經(jīng)驗(yàn)豐富,看過及接觸過的程式碼也多時(shí),對于名稱的感受及聯(lián)想的能力自然會(huì)有不同。命名本身就是一種文化產(chǎn)物。盡管如此,能否理解程式人命名的用意,和自身的經(jīng)驗(yàn)以及是否了解原作者的文化背景,是息息相關(guān)的。例如,當(dāng)我們看到parseIpodDb ( )時(shí),便可以輕易了解它是剖析(解析)的iPod的資料庫( DB )的,因此便不需要立即鉆進(jìn)parseIpodDb ( )中查看底細(xì)。我們在展開樹狀結(jié)構(gòu)時(shí),有時(shí)候需要預(yù)看一層,有時(shí)卻不需要這么做,便可得到印證。名稱做為隱喻(隱喻)的作用很大,好的名稱能夠摘要性地點(diǎn)出實(shí)體的作用,例如我們看到autoDetectIpod ( ) ,自然而然能夠想像它的作用在于自動(dòng)(自動(dòng))偵測(檢測)的iPod的存在。就原始碼的閱讀來說,之前的討論涉及了工具面及技巧面。我們采用逐漸開展的樹狀結(jié)構(gòu)來記錄追蹤的過程,并借以建立起對系統(tǒng)的概觀認(rèn)識(shí)。它是一個(gè)AOL的Winamp的iPod的外掛程式。追蹤原始碼時(shí),固然可以用本來的方式,利用編輯器開啟所需的檔案,然后利用編輯器提供的機(jī)制閱讀,但是倘若能夠善用工具,閱讀程式碼的效率及品質(zhì)都能大大提升。當(dāng)你識(shí)別出系統(tǒng)所用的架構(gòu)時(shí),便能夠輕易了解在這個(gè)架構(gòu)下會(huì)有的角色,以及它們之間的動(dòng)態(tài)及靜態(tài)的關(guān)系。由上而下的閱讀方式,是因?yàn)槲覀冎匾暭軜?gòu)更勝于細(xì)節(jié)。在此之后,我們反覆提起了“由上而下”的閱讀方向的重要性。尤其在開放原始碼的風(fēng)氣如此之盛的情況下,妥善利用開放原始碼所提供的資源,不僅能夠更快學(xué)習(xí)到新的技術(shù),同時(shí)在原始碼版權(quán)合適時(shí),還可以直接利用現(xiàn)成的程式碼,大幅地提高開發(fā)階段的生產(chǎn)力。閱讀程式碼是新時(shí)代程式人必備的重要技能只有極為少數(shù)的情況下,你才會(huì)需要細(xì)讀每一行程式碼。雖然這一系列的文章前提為“閱讀他人的程式碼” ,但我們真正想做的工作,并不在于徹底地詳讀每一行程式碼的細(xì)節(jié),而是想要透過重點(diǎn)式的程式碼“摘讀” ,達(dá)到對系統(tǒng)所需程度的了解。閱讀程式碼時(shí),多半會(huì)采取由上而下,抽絲剝繭的方式。漸漸地,你就會(huì)對這個(gè)程式更加的了解。每次的閱讀也許都在探索程式中不同的區(qū)域。你可以視自己需要,了解的深入程度,再?zèng)Q定要展開的層數(shù)。當(dāng)我們層層探索與分解之后,找到了parseIpodDb ( ) ,從函式名稱判斷它是我們想要的。例如,我們閱讀AOL的Winamp的iPod插件的程式目錄,其實(shí)是想從中了解究竟應(yīng)該如何存取的iPod上的iTunes的數(shù)據(jù)庫,使我們能夠?qū)P3播放歌曲或播放清單加至此數(shù)據(jù)庫中,并于的iPod中播放。有時(shí)候,你并不是一視同仁地針對每個(gè)動(dòng)作,都展開到相同深度的層次。倘若需要更深入的了解,就會(huì)需要展開更多的層次才行。我們究竟需要展開多少層呢?這個(gè)問題和閱讀程式碼時(shí)所需的“粒度(粒度) ”有關(guān)。因?yàn)橛辛诉@樣的動(dòng)作,我們可以在展開樹狀結(jié)構(gòu)中,為itunesdb_init_cc ( )附上補(bǔ)充說明:建立存取iTunes的數(shù)據(jù)庫的同步物件。原來它是用來初始化同步化機(jī)制用的物件。為了理解這一層某個(gè)子動(dòng)作的真實(shí)意義,有時(shí)免不了要往前多看一層。對于某些不明作用的函式叫用,不是望其文便能生其義的。這樣做可讀性更高,然而基于種種理由,原作者并沒有這么做。因?yàn)楹脦仔谐淌?,才?gòu)成一個(gè)具有獨(dú)立抽象意義的子動(dòng)作。但是當(dāng)看到如下的程式行:所以在的init ( )中看到像“ itunesdb_init_cc ( ) 。)返回0 。autoDetectIpod ( ) 。...略g_log = GetPrivateProfileInt ( “ ml_ipod ” , “日志” , 0 , conf_file ) ! = 0 。...略conf_file = (字符* ) SendMessage詮釋的init ( ) (除此之外,每次只試著往下探索一層。首先,應(yīng)該一邊閱讀,一邊記錄文件。●執(zhí)行所連接之蘋果的MessageProc ( )當(dāng)我們從一個(gè)入口點(diǎn)找到三個(gè)分支后,可以順著每個(gè)分支再展開一層,所以分別繼續(xù)閱讀的init ,退出,以及PluginMessageProc的內(nèi)容,并試著再展開一層。從這個(gè)入口點(diǎn),可以往下再展開一層,分別找到三個(gè)重要的組成及其意義:探索系統(tǒng)架構(gòu)的第一步,就是找到程式的入口點(diǎn)。閱讀他人的程式碼( 5 ) 找到程式入口,再由上而下抽絲剝繭根據(jù)需要決定展開的層數(shù),或展開特定節(jié)點(diǎn),并記錄樹狀結(jié)構(gòu),然后適度忽略不需要了解的細(xì)節(jié)─這是一個(gè)很重要的態(tài)度。當(dāng)AOL的Winamp打算結(jié)束自己或結(jié)束某個(gè)插件的執(zhí)行時(shí),便會(huì)呼叫退出函式。名稱及命名慣例是很重要的。這暗示在多型的作用下,它們都是在某些時(shí)間點(diǎn),會(huì)由AOL的Winamp核心本體呼叫的函式。善用名稱可加速了解winampGetMediaLibraryPlugin ( )所回傳的winampMediaLibraryPlugin結(jié)構(gòu),正好就描述了每個(gè)AOL的Winamp插件的實(shí)作內(nèi)容。如果你熟悉設(shè)計(jì)模式,你更會(huì)知道這是簡單工廠方法這個(gè)設(shè)計(jì)模式的運(yùn)用。像上述的插件程式手法,時(shí)??梢栽谠S多允許“外掛”程式碼的系統(tǒng)中看到。只需要瞧上幾眼,就能明白系統(tǒng)所用的架構(gòu),自然就能夠直接聯(lián)想到其中可能存在的角色,以及角色間的關(guān)系。隨著實(shí)務(wù)經(jīng)驗(yàn),歸納常見的架構(gòu)模式這也正是物件導(dǎo)向程式設(shè)計(jì)中的“多型”觀念。雖然系統(tǒng)并不確切知道插件會(huì)有什么行為展現(xiàn),但是因?yàn)樗贫艘粋€(gè)標(biāo)準(zhǔn)的介面,所以系統(tǒng)仍然可以預(yù)期每個(gè)插件能夠處理的動(dòng)作類型。當(dāng)系統(tǒng)初始化時(shí),所有的插件都可以依循相同的方式,向系統(tǒng)注冊,合法宣示自己的存在。當(dāng)一個(gè)系統(tǒng)采用所謂插件形式的架構(gòu)時(shí),它通常不會(huì)知道它的插件究竟會(huì)怎么實(shí)作,實(shí)作什么功能。而事實(shí)上,當(dāng)你已經(jīng)知道它是一個(gè)插件程式時(shí),就應(yīng)該要明白,它可能采用的,就是許多系統(tǒng)都采用的相同架構(gòu)處理插件程式。系統(tǒng)多會(huì)采用相同的架構(gòu)處理插件程式所以,不論是利用grep按或gtags之類的工具,我們可以很快從原始碼中,找到它只有一個(gè)DLL的函式(這對我們而言,真是一個(gè)好消息) ,而這個(gè)函式便是上述的winampGetMediaLibraryPlugin 。對一個(gè)本身就是可獨(dú)立執(zhí)行的程式來說,我們會(huì)找啟動(dòng)程式的主要函式,例如對的C / C + +來說就是主要( ) ,而對爪哇來說,便是靜無效的main ( ) 。如何找到呢?這會(huì)依程式的性質(zhì)不同而有所差別。我們追蹤與閱讀這個(gè)外掛程式的思路及步驟如下,首先,我們要先了解外掛程式的系統(tǒng)架構(gòu)。AOL的Winamp是個(gè)人電腦上極受歡迎的播放軟體,而我們找到的外掛程式,能讓
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1