提高程序員項(xiàng)目設(shè)計(jì)水平的11條建議
1.分析清楚你要面對(duì)的項(xiàng)目。
這是進(jìn)行所有工作的***步,如果你在這個(gè)地方都犯錯(cuò)了,那么后續(xù)所做的一切努力都是白費(fèi)。比如,你要完成圖書管理系統(tǒng),那么你就應(yīng)該明白這個(gè)系統(tǒng)主要是用于解決圖書管理的問題。
2.考慮項(xiàng)目設(shè)計(jì)的方法。
在這個(gè)階段,你要根據(jù)這個(gè)項(xiàng)目的特點(diǎn)考慮設(shè)計(jì)的工具和語言。比如,對(duì)于圖書管理系統(tǒng),它需要封裝性好,這樣有利于管理和維護(hù)。而這個(gè)系統(tǒng)開發(fā)周期較短,功能較簡(jiǎn)單。所以,根據(jù)其特點(diǎn),選擇Java作為開發(fā)語言會(huì)是一個(gè)不錯(cuò)的選擇。
3.收集完整的需求。
花時(shí)間整理清楚你的用戶群的基本需求有哪些,而你的產(chǎn)品最終功能有哪些。清晰的思維能夠?yàn)槟愎?jié)省大量的時(shí)間。
4.編寫全面的實(shí)施計(jì)劃(或模型)。
對(duì)于小型獨(dú)立的項(xiàng)目,這可能只是一個(gè)基本的流程圖或一個(gè)簡(jiǎn)單的函數(shù)模型。
對(duì)于較大的項(xiàng)目,它有助于將工作分解成模塊,并作如下考慮:
* 每個(gè)模塊的功能是什么
* 模塊之間的數(shù)據(jù)如何傳遞
* 每個(gè)模塊如何調(diào)用這些數(shù)據(jù)
雖然收集需求和編寫計(jì)劃比起寫代碼來得枯燥,甚至樂趣性比起花費(fèi)幾小時(shí)進(jìn)行Bug調(diào)試還不如。但是,花時(shí)間對(duì)程序的正確流程和結(jié)構(gòu)進(jìn)行預(yù)先計(jì)劃卻能確保后續(xù)的程序設(shè)計(jì)的高效率。
5.為代碼添加注釋。
在你認(rèn)為需要為代碼進(jìn)行解釋說明的地方添加注釋。最常見的注釋會(huì)出現(xiàn)在函數(shù)說明,變量聲明和返回值上,它告訴人們這個(gè)東西有什么用處以及為什么會(huì)這么做。
6.采用統(tǒng)一的命名規(guī)則來為變量命名。
它將幫助你跟蹤每種類型的變量,并弄清楚每種變量的代表的是什么。比起簡(jiǎn)單的x = a + b * c,使用命名規(guī)則的命名的變量能夠使代碼更加易于維護(hù)和調(diào)試。最常見的命名規(guī)則為匈牙利命名法,變量名的前綴包含了它的函數(shù)型。比如,為整數(shù)變量命名的intRowCounter,以及為字符串型命名的strUserName。不管你采用的命名規(guī)則是什么,你必須確保命名規(guī)則的一致性,并且該規(guī)則能夠?qū)δ愕淖兞烤哂泻?jiǎn)單描述性。
7.對(duì)代碼進(jìn)行組織化編輯。
使用可視化的結(jié)構(gòu)來表現(xiàn)代碼結(jié)構(gòu)。比如,在條件語句(if,else)或者循環(huán)語句(for,while)的代碼塊進(jìn)行代碼縮進(jìn)。再比如,在變量和操作符中間加入空格。這樣做能夠使代碼更直觀優(yōu)雅,程序流程一目了然。
8.進(jìn)行全面的測(cè)試。
首先,在每個(gè)模塊中測(cè)試常見的數(shù)據(jù)值,看是否和預(yù)期結(jié)果一樣;再然后測(cè)試那些非常規(guī)的數(shù)據(jù)類型,用于排除隱藏的錯(cuò)誤。測(cè)試是一門藝術(shù),你能夠在實(shí)踐中豐富自己的技巧和見地。編寫的測(cè)試用例通常會(huì)包含以下幾種情形:
極端值:包含極小值和超出預(yù)期的極大值,空字符串的文本值,每個(gè)參數(shù)都為空的情形等。
無意義的值:假定用戶會(huì)輸入一些與輸出要求無關(guān)的東西,看程序會(huì)對(duì)此有何反應(yīng)。
不正確的值:比如把零作為除數(shù),把負(fù)數(shù)作為平方根,或者是在輸入字符串的時(shí)候輸入了一個(gè)數(shù)字。
9.實(shí)踐,實(shí)踐,再實(shí)踐。
編程的工作是與時(shí)俱進(jìn)的,你能夠在實(shí)踐中學(xué)到很多新的知識(shí),同時(shí)以前學(xué)過的舊知識(shí)也能夠被重新溫習(xí)。
10.減小需求改變的風(fēng)險(xiǎn)。
在現(xiàn)實(shí)的工作環(huán)境中,需求的變化一直是一個(gè)令人頭痛但又不得不去面對(duì)的問題。但是,假如你能夠在項(xiàng)目開始階段將需求和項(xiàng)目計(jì)劃越發(fā)清楚地表現(xiàn)出來,那么在后續(xù)因?yàn)闇贤ǖ恼`解或理解力不夠而導(dǎo)致設(shè)計(jì)的結(jié)果與需求產(chǎn)生偏差的問題就會(huì)得到有效的改善。 所以,在項(xiàng)目設(shè)計(jì)的階段,請(qǐng)?jiān)诰帉懘a之前清楚的展示你的需求文檔和工作說明:系統(tǒng)需要什么東西,你正打算做什么,工作開展到了什么地步。
11.學(xué)會(huì)由簡(jiǎn)入繁。
假如你需要編程的東西很復(fù)雜,這樣做能夠幫助你更加順利地開展工作。例如,有這樣一個(gè)項(xiàng)目,窗口上有一個(gè)任意形狀的圖形,需要設(shè)計(jì)一個(gè)程序能夠根據(jù)按住鼠標(biāo)滑動(dòng)的方向和速度而改變它的形狀。
首先,你可以設(shè)計(jì)完成一個(gè)正方形在按住鼠標(biāo)滑動(dòng)而產(chǎn)生形變的情形。換句話說,這一步主要是解決鼠標(biāo)運(yùn)動(dòng)跟蹤的問題。
接著,將這個(gè)正方形的大小與鼠標(biāo)的速度相關(guān)聯(lián)起來。換句話說,這一步是解決鼠標(biāo)速度與自身的形狀的關(guān)聯(lián)問題。
***,創(chuàng)建你想要的實(shí)際形狀,并把這三個(gè)組件連接在一起。
這種方法有助于模塊化項(xiàng)目的代碼編寫,其中每個(gè)組件都有它自己的獨(dú)立的塊。這對(duì)代碼重用是非常有用的(例如你想使用鼠標(biāo)跟蹤新項(xiàng)目)并使得程序更容易調(diào)試和維護(hù)。
本文鏈接:http://www.cocoachina.com/gamedev/misc/2014/0723/9224.html