1.12 分析和設(shè)計(jì)

面向?qū)ο蟮姆妒绞撬伎汲绦蛟O(shè)計(jì)時(shí)一種新的疫稿、而且全然不同的方式鸵隧,許多人最開(kāi)始都會(huì)在如何構(gòu)造一個(gè)項(xiàng)目上皺起了眉頭。事實(shí)上荒典,我們可以作出一個(gè)“好”的設(shè)計(jì)酪劫,它能充分利用OOP提供的所有優(yōu)點(diǎn)。

有關(guān)OOP分析與設(shè)計(jì)的書(shū)籍大多數(shù)都不盡如人意种蝶。其中的大多數(shù)書(shū)都充斥著莫名其妙的話語(yǔ)契耿、笨拙的筆調(diào)以及許多聽(tīng)起來(lái)似乎很重要的聲明(注釋⑨)瞒大。我認(rèn)為這種書(shū)最好壓縮到一章左右的空間螃征,至多寫成一本非常薄的書(shū)。具有諷剌意味的是透敌,那些特別專注于復(fù)雜事物管理的人往往在寫一些淺顯盯滚、明白的書(shū)上面大費(fèi)周章!如果不能說(shuō)得簡(jiǎn)單和直接酗电,一定沒(méi)多少人喜歡看這方面的內(nèi)容魄藕。畢竟,OOP的全部宗旨就是讓軟件開(kāi)發(fā)的過(guò)程變得更加容易撵术。盡管這可能影響了那些喜歡解決復(fù)雜問(wèn)題的人的生計(jì)背率,但為什么不從一開(kāi)始就把事情弄得簡(jiǎn)單些呢?因此嫩与,希望我能從開(kāi)始就為大家打下一個(gè)良好的基礎(chǔ)寝姿,盡可能用幾個(gè)段落來(lái)說(shuō)清楚分析與設(shè)計(jì)的問(wèn)題。

⑨:最好的入門書(shū)仍然是Grady Booch的《Object-Oriented Design withApplications划滋,第2版本》饵筑,Wiely & Sons于1996年出版。這本書(shū)講得很有深度处坪,而且通俗易懂根资,盡管他的記號(hào)方法對(duì)大多數(shù)設(shè)計(jì)來(lái)說(shuō)都顯得不必要地復(fù)雜。

1.12.1 不要迷失

在整個(gè)開(kāi)發(fā)過(guò)程中同窘,最重要的事情就是:不要將自己迷失玄帕!但事實(shí)上這種事情很容易發(fā)生。大多數(shù)方法都設(shè)計(jì)用來(lái)解決最大范圍內(nèi)的問(wèn)題想邦。當(dāng)然裤纹,也存在一些特別困難的項(xiàng)目,需要作者付出更為艱辛的努力案狠,或者付出更大的代價(jià)服傍。但是钱雷,大多數(shù)項(xiàng)目都是比較“常規(guī)”的,所以一般都能作出成功的分析與設(shè)計(jì)吹零,而且只需用到推薦的一小部分方法罩抗。但無(wú)論多么有限,某些形式的處理總是有益的灿椅,這可使整個(gè)項(xiàng)目的開(kāi)發(fā)更加容易套蒂,總比直接了當(dāng)開(kāi)始編碼好!

也就是說(shuō)茫蛹,假如你正在考察一種特殊的方法操刀,其中包含了大量細(xì)節(jié),并推薦了許多步驟和文檔婴洼,那么仍然很難正確判斷自己該在何時(shí)停止骨坑。時(shí)刻提醒自己注意以下幾個(gè)問(wèn)題:

(1) 對(duì)象是什么?(怎樣將自己的項(xiàng)目分割成一系列單獨(dú)的組件柬采?)

(2) 它們的接口是什么欢唾?(需要將什么消息發(fā)給每一個(gè)對(duì)象?)

在確定了對(duì)象和它們的接口后粉捻,便可著手編寫一個(gè)程序礁遣。出于對(duì)多方面原因的考慮,可能還需要比這更多的說(shuō)明及文檔肩刃,但要求掌握的資料絕對(duì)不能比這還少祟霍。

整個(gè)過(guò)程可劃分為四個(gè)階段,階段0剛剛開(kāi)始采用某些形式的結(jié)構(gòu)盈包。

1.12.2 階段0:擬出一個(gè)計(jì)劃

第一步是決定在后面的過(guò)程中采取哪些步驟沸呐。這聽(tīng)起來(lái)似乎很簡(jiǎn)單(事實(shí)上,我們這兒說(shuō)的一切都似乎很簡(jiǎn)單)续语,但很常見(jiàn)的一種情況是:有些人甚至沒(méi)有進(jìn)入階段1垂谢,便忙忙慌慌地開(kāi)始編寫代碼。如果你的計(jì)劃本來(lái)就是“直接開(kāi)始開(kāi)始編碼”疮茄,那樣做當(dāng)然也無(wú)可非議(若對(duì)自己要解決的問(wèn)題已有很透徹的理解滥朱,便可考慮那樣做)。但最低程度也應(yīng)同意自己該有個(gè)計(jì)劃力试。

在這個(gè)階段徙邻,可能要決定一些必要的附加處理結(jié)構(gòu)。但非常不幸畸裳,有些程序員寫程序時(shí)喜歡隨心所欲缰犁,他們認(rèn)為“該完成的時(shí)候自然會(huì)完成”。這樣做剛開(kāi)始可能不會(huì)有什么問(wèn)題,但我覺(jué)得假如能在整個(gè)過(guò)程中設(shè)置幾個(gè)標(biāo)志帅容,或者“路標(biāo)”颇象,將更有益于你集中注意力。這恐怕比單純地為了“完成工作”而工作好得多并徘。至少遣钳,在達(dá)到了一個(gè)又一個(gè)的目標(biāo),經(jīng)過(guò)了一個(gè)接一個(gè)的路標(biāo)以后麦乞,可對(duì)自己的進(jìn)度有清晰的把握蕴茴,干勁也會(huì)相應(yīng)地提高,不會(huì)產(chǎn)生“路遙漫漫無(wú)期”的感覺(jué)姐直。

從我剛開(kāi)始學(xué)習(xí)故事結(jié)構(gòu)起(我想有一天能寫本小說(shuō)出來(lái))倦淀,就一直堅(jiān)持這種做法,感覺(jué)就象簡(jiǎn)單地讓文字“流”到紙上声畏。在我寫與計(jì)算機(jī)有關(guān)的東西時(shí)撞叽,發(fā)現(xiàn)結(jié)構(gòu)要比小說(shuō)簡(jiǎn)單得多,所以不需要考慮太多這方面的問(wèn)題砰识。但我仍然制訂了整個(gè)寫作的結(jié)構(gòu)能扒,使自己對(duì)要寫什么做到心中有數(shù)佣渴。因此辫狼,即使你的計(jì)劃就是直接開(kāi)始寫程序,仍然需要經(jīng)歷以下的階段辛润,同時(shí)向自己提出一些特定的問(wèn)題膨处。

1.12.3 階段1:要制作什么?
在上一代程序設(shè)計(jì)中(即“過(guò)程化或程序化設(shè)計(jì)”)砂竖,這個(gè)階段稱為“建立需求分析和系統(tǒng)規(guī)格”真椿。當(dāng)然,那些操作今天已經(jīng)不再需要了乎澄,或者至少改換了形式突硝。大量令人頭痛的文檔資料已成為歷史。但當(dāng)時(shí)的初衷是好的置济。需求分析的意思是“建立一系列規(guī)則解恰,根據(jù)它判斷任務(wù)什么時(shí)候完成,以及客戶怎樣才能滿意”浙于。系統(tǒng)規(guī)格則表示“這里是一些具體的說(shuō)明护盈,讓你知道程序需要做什么(而不是怎樣做)才能滿足要求”。需求分析實(shí)際就是你和客戶之間的一份合約(即使客戶就在本公司內(nèi)部工作羞酗,或者是其他對(duì)象及系統(tǒng))腐宋。系統(tǒng)規(guī)格是對(duì)所面臨問(wèn)題的最高級(jí)別的一種揭示,我們依據(jù)它判斷任務(wù)是否完成,以及需要花多長(zhǎng)的時(shí)間胸竞。由于這些都需要取得參與者的一致同意欺嗤,所以我建議盡可能地簡(jiǎn)化它們——最好采用列表和基本圖表的形式——以節(jié)省時(shí)間∥乐Γ可能還會(huì)面臨另一些限制剂府,需要把它們擴(kuò)充成為更大的文檔。

我們特別要注意將重點(diǎn)放在這一階段的核心問(wèn)題上剃盾,不要糾纏于細(xì)枝末節(jié)腺占。這個(gè)核心問(wèn)題就是:決定采用什么系統(tǒng)。對(duì)這個(gè)問(wèn)題痒谴,最有價(jià)值的工具就是一個(gè)名為“使用條件”的集合衰伯。對(duì)那些采用“假如……,系統(tǒng)該怎樣做积蔚?”形式的問(wèn)題意鲸,這便是最有說(shuō)服力的回答。例如尽爆,“假如客戶需要提取一張現(xiàn)金支票怎顾,但當(dāng)時(shí)又沒(méi)有這么多的現(xiàn)金儲(chǔ)備,那么自動(dòng)取款機(jī)該怎樣反應(yīng)漱贱?”對(duì)這個(gè)問(wèn)題槐雾,“使用條件”可以指示自動(dòng)取款機(jī)在那種“條件”下的正確操作。

應(yīng)盡可能總結(jié)出自己系統(tǒng)的一套完整的“使用條件”或者“應(yīng)用場(chǎng)合”幅狮。一旦完成這個(gè)工作募强,就相當(dāng)于摸清了想讓系統(tǒng)完成的核心任務(wù)。由于將重點(diǎn)放在“使用條件”上崇摄,一個(gè)很好的效果就是它們總能讓你放精力放在最關(guān)鍵的東西上擎值,并防止自己分心于對(duì)完成任務(wù)關(guān)系不大的其他事情上面。也就是說(shuō)逐抑,只要掌握了一套完整的“使用條件”鸠儿,就可以對(duì)自己的系統(tǒng)作出清晰的描述,并轉(zhuǎn)移到下一個(gè)階段厕氨。在這一階段进每,也有可能無(wú)法完全掌握系統(tǒng)日后的各種應(yīng)用場(chǎng)合,但這也沒(méi)有關(guān)系腐巢。只要肯花時(shí)間品追,所有問(wèn)題都會(huì)自然而然暴露出來(lái)。不要過(guò)份在意系統(tǒng)規(guī)格的“完美”冯丙,否則也容易產(chǎn)生挫敗感和焦燥情緒肉瓦。

在這一階段遭京,最好用幾個(gè)簡(jiǎn)單的段落對(duì)自己的系統(tǒng)作出描述,然后圍繞它們?cè)龠M(jìn)行擴(kuò)充泞莉,添加一些“名詞”和“動(dòng)詞”哪雕。“名詞”自然成為對(duì)象鲫趁,而“動(dòng)詞”自然成為要整合到對(duì)象接口中的“方法”斯嚎。只要親自試著做一做,就會(huì)發(fā)現(xiàn)這是多么有用的一個(gè)工具挨厚;有些時(shí)候堡僻,它能幫助你完成絕大多數(shù)的工作。

盡管仍處在初級(jí)階段疫剃,但這時(shí)的一些日程安排也可能會(huì)非常管用钉疫。我們現(xiàn)在對(duì)自己要構(gòu)建的東西應(yīng)該有了一個(gè)較全面的認(rèn)識(shí),所以可能已經(jīng)感覺(jué)到了它大概會(huì)花多長(zhǎng)的時(shí)間來(lái)完成巢价。此時(shí)要考慮多方面的因素:如果估計(jì)出一個(gè)較長(zhǎng)的日程牲阁,那么公司也許決定不再繼續(xù)下去;或者一名主管已經(jīng)估算出了這個(gè)項(xiàng)目要花多長(zhǎng)的時(shí)間壤躲,并會(huì)試著影響你的估計(jì)城菊。但無(wú)論如何,最好從一開(kāi)始就草擬出一份“誠(chéng)實(shí)”的時(shí)間表碉克,以后再進(jìn)行一些暫時(shí)難以作出的決策凌唬。目前有許多技術(shù)可幫助我們計(jì)算出準(zhǔn)確的日程安排(就象那些預(yù)測(cè)股票市場(chǎng)起落的技術(shù)),但通常最好的方法還是依賴自己的經(jīng)驗(yàn)和直覺(jué)(不要忘記棉胀,直覺(jué)也要建立在經(jīng)驗(yàn)上)法瑟。感覺(jué)一下大概需要花多長(zhǎng)的時(shí)間,然后將這個(gè)時(shí)間加倍唁奢,再加上10%。你的感覺(jué)可能是正確的窝剖;“也許”能在那個(gè)時(shí)間里完成麻掸。但“加倍”使那個(gè)時(shí)間更加充裕,“10%”的時(shí)間則用于進(jìn)行最后的推敲和深化赐纱。但同時(shí)也要對(duì)此向上級(jí)主管作出適當(dāng)?shù)慕忉尲狗埽瑹o(wú)論對(duì)方有什么抱怨和修改,只要明確地告訴他們:這樣的一個(gè)日程安排疙描,只是我的一個(gè)估計(jì)诚隙!

1.12.4 階段2:如何構(gòu)建?

在這一階段起胰,必須拿出一套設(shè)計(jì)方案久又,并解釋其中包含的各類對(duì)象在外觀上是什么樣子,以及相互間是如何溝通的。此時(shí)可考慮采用一種特殊的圖表工具:“統(tǒng)一建模語(yǔ)言”(UML)地消。請(qǐng)到http://www.rational.com去下載一份UML規(guī)格書(shū)炉峰。作為第1階段中的描述工具,UML也是很有幫助的脉执。此外疼阔,還可用它在第2階段中處理一些圖表(如流程圖)。當(dāng)然并非一定要使用UML半夷,但它對(duì)你會(huì)很有幫助婆廊,特別是在希望描繪一張?jiān)敱M的圖表,讓許多人在一起研究的時(shí)候巫橄。除UML外否彩,還可選擇對(duì)對(duì)象以及它們的接口進(jìn)行文字化描述(就象我在《Thinking in C++》里說(shuō)的那樣,但這種方法非常原始嗦随,發(fā)揮的作用亦較有限列荔。

我曾有一次非常成功的咨詢經(jīng)歷,那時(shí)涉及到一小組人的初始設(shè)計(jì)枚尼。他們以前還沒(méi)有構(gòu)建過(guò)OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))項(xiàng)目贴浙,將對(duì)象畫在白板上面。我們談到各對(duì)象相互間該如何溝通(通信)署恍,并刪除了其中的一部分崎溃,以及替換了另一部分對(duì)象。這個(gè)小組(他們知道這個(gè)項(xiàng)目的目的是什么)實(shí)際上已經(jīng)制訂出了設(shè)計(jì)方案盯质;他們自己“擁有”了設(shè)計(jì)袁串,而不是讓設(shè)計(jì)自然而然地顯露出來(lái)。我在那里做的事情就是對(duì)設(shè)計(jì)進(jìn)行指導(dǎo)呼巷,提出一些適當(dāng)?shù)膯?wèn)題囱修,嘗試作出一些假設(shè),并從小組中得到反饋王悍,以便修改那些假設(shè)破镰。這個(gè)過(guò)程中最美妙的事情就是整個(gè)小組并不是通過(guò)學(xué)習(xí)一些抽象的例子來(lái)進(jìn)行面向?qū)ο蟮脑O(shè)計(jì),而是通過(guò)實(shí)踐一個(gè)真正的設(shè)計(jì)來(lái)掌握OOP的竅門压储,而那個(gè)設(shè)計(jì)正是他們當(dāng)時(shí)手上的工作鲜漩!

作出了對(duì)對(duì)象以及它們的接口的說(shuō)明后,就完成了第2階段的工作集惋。當(dāng)然孕似,這些工作可能并不完全。有些工作可能要等到進(jìn)入階段3才能得知刮刑。但這已經(jīng)足夠了喉祭。我們真正需要關(guān)心的是最終找出所有的對(duì)象养渴。能早些發(fā)現(xiàn)當(dāng)然好,但OOP提供了足夠完美的結(jié)構(gòu)臂拓,以后再找出它們也不遲厚脉。

1.12.5 階段3:開(kāi)始創(chuàng)建

讀這本書(shū)的可能是程序員,現(xiàn)在進(jìn)入的正是你可能最感興趣的階段胶惰。由于手頭上有一個(gè)計(jì)劃——無(wú)論它有多么簡(jiǎn)要傻工,而且在正式編碼前掌握了正確的設(shè)計(jì)結(jié)構(gòu),所以會(huì)發(fā)現(xiàn)接下去的工作比一開(kāi)始就埋頭寫程序要簡(jiǎn)單得多孵滞。而這正是我們想達(dá)到的目的中捆。讓代碼做到我們想做的事情,這是所有程序項(xiàng)目最終的目標(biāo)坊饶。但切不要急功冒進(jìn)泄伪,否則只有得不償失。根據(jù)我的經(jīng)驗(yàn)匿级,最后先拿出一套較為全面的方案蟋滴,使其盡可能設(shè)想周全,能滿足盡可能多的要求痘绎。給我的感覺(jué)津函,編程更象一門藝術(shù),不能只是作為技術(shù)活來(lái)看待孤页。所有付出最終都會(huì)得到回報(bào)尔苦。作為真正的程序員,這并非可有可無(wú)的一種素質(zhì)行施。全面的思考允坚、周密的準(zhǔn)備、良好的構(gòu)造不僅使程序更易構(gòu)建與調(diào)試蛾号,也使其更易理解和維護(hù)稠项,而那正是一套軟件贏利的必要條件。
構(gòu)建好系統(tǒng)须教,并令其運(yùn)行起來(lái)后皿渗,必須進(jìn)行實(shí)際檢驗(yàn),以前做的那些需求分析和系統(tǒng)規(guī)格便可派上用場(chǎng)了轻腺。全面地考察自己的程序,確定提出的所有要求均已滿足』裕現(xiàn)在一切似乎都該結(jié)束了贬养?是嗎?

1.12.6 階段4:校訂

事實(shí)上琴庵,整個(gè)開(kāi)發(fā)周期還沒(méi)有結(jié)束误算,現(xiàn)在進(jìn)入的是傳統(tǒng)意義上稱為“維護(hù)”的一個(gè)階段仰美。“維護(hù)”是一個(gè)比較曖昧的稱呼儿礼,可用它表示從“保持它按設(shè)想的軌道運(yùn)行”咖杂、“加入客戶從前忘了聲明的功能”或者更傳統(tǒng)的“除掉暴露出來(lái)的一切臭蟲(chóng)”等等意思。所以大家對(duì)“維護(hù)”這個(gè)詞產(chǎn)生了許多誤解蚊夫,有的人認(rèn)為:凡是需要“維護(hù)”的東西诉字,必定不是好的,或者是有缺陷的知纷!因?yàn)檫@個(gè)詞說(shuō)明你實(shí)際構(gòu)建的是一個(gè)非橙榔裕“原始”的程序,以后需要頻繁地作出改動(dòng)琅轧、添加新的代碼或者防止它的落后伍绳、退化等。因此乍桂,我們需要用一個(gè)更合理的詞語(yǔ)來(lái)稱呼以后需要繼續(xù)的工作冲杀。

這個(gè)詞便是“校訂”。換言之睹酌,“你第一次做的東西并不完善权谁,所以需為自己留下一個(gè)深入學(xué)習(xí)、認(rèn)知的空間忍疾,再回過(guò)頭去作一些改變”闯传。對(duì)于要解決的問(wèn)題,隨著對(duì)它的學(xué)習(xí)和了解愈加深入卤妒,可能需要作出大量改動(dòng)甥绿。進(jìn)行這些工作的一個(gè)動(dòng)力是隨著不斷的改革優(yōu)化,終于能夠從自己的努力中得到回報(bào)则披,無(wú)論這需要經(jīng)歷一個(gè)較短還是較長(zhǎng)的時(shí)期共缕。

什么時(shí)候才叫“達(dá)到理想的狀態(tài)”呢?這并不僅僅意味著程序必須按要求的那樣工作士复,并能適應(yīng)各種指定的“使用條件”图谷,它也意味著代碼的內(nèi)部結(jié)構(gòu)應(yīng)當(dāng)盡善盡美。至少阱洪,我們應(yīng)能感覺(jué)出整個(gè)結(jié)構(gòu)都能良好地協(xié)調(diào)運(yùn)作便贵。沒(méi)有笨拙的語(yǔ)法,沒(méi)有臃腫的對(duì)象冗荸,也沒(méi)有一些華而不實(shí)的東西承璃。除此以外,必須保證程序結(jié)構(gòu)有很強(qiáng)的生命力蚌本。由于多方面的原因盔粹,以后對(duì)程序的改動(dòng)是必不可少隘梨。但必須確定改動(dòng)能夠方便和清楚地進(jìn)行。這里沒(méi)有花巧可言舷嗡。不僅需要理解自己構(gòu)建的是什么轴猎,也要理解程序如何不斷地進(jìn)化。幸運(yùn)的是进萄,面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言特別適合進(jìn)行這類連續(xù)作出的修改——由對(duì)象建立起來(lái)的邊界可有效保證結(jié)構(gòu)的整體性捻脖,并能防范對(duì)無(wú)關(guān)對(duì)象進(jìn)行的無(wú)謂干擾、破壞垮斯。也可以對(duì)自己的程序作一些看似激烈的大變動(dòng)郎仆,同時(shí)不會(huì)破壞程序的整體性,不會(huì)波及到其他代碼兜蠕。事實(shí)上扰肌,對(duì)“校訂”的支持是OOP非常重要的一個(gè)特點(diǎn)。

通過(guò)校訂熊杨,可創(chuàng)建出至少接近自己設(shè)想的東西曙旭。然后從整體上觀察自己的作品,把它與自己的要求比較晶府,看看還短缺什么桂躏。然后就可以從容地回過(guò)頭去,對(duì)程序中不恰當(dāng)?shù)牟糠诌M(jìn)行重新設(shè)計(jì)和重新實(shí)現(xiàn)(注釋⑩)川陆。在最終得到一套恰當(dāng)?shù)姆桨钢凹料埃赡苄枰鉀Q一些不能回避的問(wèn)題,或者至少解決問(wèn)題的一個(gè)方面较沪。而且一般要多“校訂”幾次才行(“設(shè)計(jì)范式”在這里可起到很大的幫助作用鳞绕。有關(guān)它的討論,請(qǐng)參考本書(shū)第16章)尸曼。

構(gòu)建一套系統(tǒng)時(shí)们何,“校訂”幾乎是不可避免的。我們需要不斷地對(duì)比自己的需求控轿,了解系統(tǒng)是否自己實(shí)際所需要的冤竹。有時(shí)只有實(shí)際看到系統(tǒng),才能意識(shí)到自己需要解決一個(gè)不同的問(wèn)題茬射。若認(rèn)為這種形式的校訂必然會(huì)發(fā)生鹦蠕,那么最好盡快拿出自己的第一個(gè)版本,檢查它是否自己希望的在抛,使自己的思想不斷趨向成熟片部。

反復(fù)的“校訂”同“遞增開(kāi)發(fā)”有關(guān)密不可分的關(guān)系。遞增開(kāi)發(fā)意味著先從系統(tǒng)的核心入手霜定,將其作為一個(gè)框架實(shí)現(xiàn)档悠,以后要在這個(gè)框架的基礎(chǔ)上逐漸建立起系統(tǒng)剩余的部分。隨后望浩,將準(zhǔn)備提供的各種功能(特性)一個(gè)接一個(gè)地加入其中辖所。這里最考驗(yàn)技巧的是架設(shè)起一個(gè)能方便擴(kuò)充所有目標(biāo)特性的一個(gè)框架(對(duì)這個(gè)問(wèn)題,大家可參考第16章的論述)磨德。這樣做的好處在于一旦令核心框架運(yùn)作起來(lái)缘回,要加入的每一項(xiàng)特性就象它自身內(nèi)的一個(gè)小項(xiàng)目,而非大項(xiàng)目的一部分典挑。此外酥宴,開(kāi)發(fā)或維護(hù)階段合成的新特性可以更方便地加入。OOP之所以提供了對(duì)遞增開(kāi)發(fā)的支持您觉,是由于假如程序設(shè)計(jì)得好拙寡,每一次遞增都可以成為完善的對(duì)象或者對(duì)象組。

⑩:這有點(diǎn)類似“快速造型”琳水。此時(shí)應(yīng)著眼于建立一個(gè)簡(jiǎn)單肆糕、明了的版本,使自己能對(duì)系統(tǒng)有個(gè)清楚的把握在孝。再把這個(gè)原型扔掉诚啃,并正式地構(gòu)建一個(gè)∷骄冢快速造型最麻煩的一種情況就是人們不將原型扔掉始赎,而是直接在它的基礎(chǔ)上建造。如果再加上程序化設(shè)計(jì)中“結(jié)構(gòu)”的缺乏仔燕,就會(huì)導(dǎo)致一個(gè)混亂的系統(tǒng)造垛,致使維護(hù)成本增加。

1.12.7 計(jì)劃的回報(bào)

如果沒(méi)有仔細(xì)擬定的設(shè)計(jì)圖涨享,當(dāng)然不可能建起一所房子筋搏。如建立的是一所狗舍,盡管設(shè)計(jì)圖可以不必那么詳盡厕隧,但仍然需要一些草圖奔脐,以做到心中有數(shù)。軟件開(kāi)發(fā)則完全不同吁讨,它的“設(shè)計(jì)圖”(計(jì)劃)必須詳盡而完備髓迎。在很長(zhǎng)的一段時(shí)間里,人們?cè)谒麄兊拈_(kāi)發(fā)過(guò)程中并沒(méi)有太多的結(jié)構(gòu)建丧,但那些大型項(xiàng)目很容易就會(huì)遭致失敗排龄。通過(guò)不斷的摸索,人們掌握了數(shù)量眾多的結(jié)構(gòu)和詳細(xì)資料翎朱。但它們的使用卻使人提心吊膽在意——似乎需要把自己的大多數(shù)時(shí)間花在編寫文檔上橄维,而沒(méi)有多少時(shí)間來(lái)編程(經(jīng)常如此)尺铣。我希望這里為大家講述的一切能提供一條折衷的道路。需要采取一種最適合自己需要(以及習(xí)慣)的方法争舞。不管制訂出的計(jì)劃有多么小凛忿,但與完全沒(méi)有計(jì)劃相比,一些形式的計(jì)劃會(huì)極大改善你的項(xiàng)目竞川。請(qǐng)記椎暌纭:根據(jù)估計(jì),沒(méi)有計(jì)劃的50%以上的項(xiàng)目都會(huì)失斘凇床牧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市遭贸,隨后出現(xiàn)的幾起案子戈咳,更是在濱河造成了極大的恐慌,老刑警劉巖革砸,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件除秀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡算利,警方通過(guò)查閱死者的電腦和手機(jī)册踩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)效拭,“玉大人暂吉,你說(shuō)我怎么就攤上這事《谢迹” “怎么了慕的?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挤渔。 經(jīng)常有香客問(wèn)我肮街,道長(zhǎng),這世上最難降的妖魔是什么判导? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任嫉父,我火速辦了婚禮,結(jié)果婚禮上眼刃,老公的妹妹穿的比我還像新娘绕辖。我一直安慰自己,他們只是感情好擂红,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布仪际。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪树碱。 梳的紋絲不亂的頭發(fā)上肯适,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音赴恨,去河邊找鬼疹娶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伦连,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钳垮,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惑淳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饺窿?” 一聲冷哼從身側(cè)響起歧焦,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肚医,沒(méi)想到半個(gè)月后绢馍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肠套,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年舰涌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片你稚。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓷耙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刁赖,到底是詐尸還是另有隱情搁痛,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布宇弛,位于F島的核電站鸡典,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枪芒。R本人自食惡果不足惜彻况,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望病苗。 院中可真熱鬧疗垛,春花似錦、人聲如沸硫朦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至泽裳,卻和暖如春瞒斩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涮总。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胸囱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瀑梗。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓烹笔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抛丽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谤职,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,079評(píng)論 25 707
  • OOA:Object-Oriented Analysis面向?qū)ο蠓治龇椒?是在一個(gè)系統(tǒng)的開(kāi)發(fā)過(guò)程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)...
    楚易楓閱讀 3,659評(píng)論 0 5
  • 天亮?xí)r蒿柳,清風(fēng)徐徐 是誰(shuí)的夢(mèng)未醒 純凈的人世饶套,我借一顆心 寫土地,蘸惺忪的渴望 露珠晶瑩垒探,具花蕾之狀 在梔子樹(shù)上閃耀...
    詩(shī)人金子閱讀 327評(píng)論 0 1
  • 梧桐葉落漫天秋妓蛮, 冷雨三更客未愁。 邊塞軍人懷壯志叛复, 難聞羌笛復(fù)悠悠仔引。
    繁花落盡深眸閱讀 258評(píng)論 4 9
  • 我以前是個(gè)培訓(xùn)老師,那是我走出校門后的第一份工作褐奥。 簡(jiǎn)單介紹一下這份工作:各層各級(jí)不斷考核咖耘,考核合格者被排課,排到...
    可燃冰coins閱讀 225評(píng)論 0 0