經(jīng)過(guò)前面四篇注祖,我們已經(jīng)具備了最基本的思考編程的能力皱碘。我們開(kāi)始做一個(gè)真正的應(yīng)用吧询一。
例題
我們現(xiàn)在做一個(gè)應(yīng)用,該應(yīng)用是一個(gè)命令行應(yīng)用癌椿。當(dāng)程序啟動(dòng)的時(shí)候健蕊,我們會(huì)看到一個(gè)命令行的主界面:
1. 添加學(xué)生
2. 生成成績(jī)單
3. 退出
請(qǐng)輸入你的選擇(1~3):
如果我們輸入1,那么界面就會(huì)變成:
請(qǐng)輸入學(xué)生信息(格式:姓名, 學(xué)號(hào), 民族, 班級(jí), 學(xué)科: 成績(jī), ...)踢俄,按回車(chē)提交:
如果輸入格式不正確缩功,就返回:
請(qǐng)按正確的格式輸入(格式:姓名, 學(xué)號(hào), 學(xué)科: 成績(jī), ...):
如果輸入格式正確就會(huì)返回
學(xué)生xxx的成績(jī)被添加
然后打印
1. 添加學(xué)生
2. 生成成績(jī)單
3. 退出
請(qǐng)輸入你的選擇(1~3):
等于回到了主界面。
如果我們?cè)谥鹘缑孑斎肓?都办,那么界面就會(huì)變成:
請(qǐng)輸入要打印的學(xué)生的學(xué)號(hào)(格式: 學(xué)號(hào), 學(xué)號(hào),...)嫡锌,按回車(chē)提交:
如果我們輸入的不正確,就會(huì)打恿斩ぁ:
請(qǐng)按正確的格式輸入要打印的學(xué)生的學(xué)號(hào)(格式: 學(xué)號(hào), 學(xué)號(hào),...)势木,按回車(chē)提交:
如果輸入的格式正確,則會(huì)打印成績(jī)單并回到主界面歌懒。
成績(jī)單
姓名|數(shù)學(xué)|語(yǔ)文|英語(yǔ)|編程|平均分|總分
========================
張三|75|95|80|80|82.5|330
李四|85|80|70|90|81.25|325
========================
全班總分平均數(shù):xxx
全班總分中位數(shù):xxx
如果我們輸入的學(xué)號(hào)不存在啦桌,該學(xué)號(hào)在計(jì)算時(shí)就會(huì)被忽略。
講解
這個(gè)題目比之前的復(fù)雜一點(diǎn)及皂,我們可以先按照功能簡(jiǎn)單列一下任務(wù)列表甫男。
#1 打印主菜單
#2 添加學(xué)生成績(jī)
#3 生成成績(jī)單
#4 退出
然而這個(gè)列表是跟我們的程序不等價(jià)的。我們還是應(yīng)該列出跟程序等價(jià)的任務(wù)列表躲庄。為了便于表達(dá)查剖,我們就需要畫(huà)圖。我們先不考慮面向?qū)ο笤刖剑苯用嫦蜻^(guò)程的劃分笋庄,我們畫(huà)出來(lái)的圖大概是下面這個(gè)樣子:
也許你覺(jué)得這個(gè)做法并不夠好,我也這么覺(jué)得倔监,那我們可以重構(gòu)這個(gè)圖直砂,畫(huà)出一種更好的解法:
可以看出,這兩種做法浩习,在圖形上看并沒(méi)有明顯的區(qū)別静暂,但是命名上暴露出了思路的不同,后者明顯減少了程序?qū)ν廨斎胼敵龅拇螖?shù)谱秽。所以不要隨便命名洽蛀。
但如果沒(méi)有上面那個(gè)圖摹迷,我們是看不出來(lái)buildReport這個(gè)函數(shù)他打印了還是沒(méi)打印,這就需要我們有一套約定俗成的用語(yǔ)規(guī)范郊供,從用語(yǔ)規(guī)范中可以看出來(lái)我們到底做了什么峡碉。
課后練習(xí)
- 針對(duì)兩張圖,分別列出所有的任務(wù)驮审。
- 在腦中模擬一下鲫寄,如果測(cè)試先行的方式寫(xiě)代碼,兩種實(shí)現(xiàn)的時(shí)間花費(fèi)各會(huì)是多少疯淫。按照任務(wù)列表逐項(xiàng)估出時(shí)間地来,并比較兩種實(shí)現(xiàn)的時(shí)間差異。
題外話 - 1
對(duì)于接觸本文章的編程初學(xué)者熙掺,我需要多說(shuō)幾句:我們可以看到未斑,其實(shí)一個(gè)真正的應(yīng)用也是由一些簡(jiǎn)單函數(shù)構(gòu)成的,那就說(shuō)明編程思想和技巧并不受限于應(yīng)用的表象适掰。前端颂碧、后端荠列、應(yīng)用类浪、系統(tǒng)之類(lèi)的名詞,往往是從分工的角度來(lái)講的肌似,如果從個(gè)人發(fā)展的角度來(lái)講费就,不要拿這些名詞限制自己。這也是我們這個(gè)系列只講一些簡(jiǎn)單應(yīng)用的緣故川队,抽象來(lái)講思路是一樣的力细。
題外話 - 2
到這里,你應(yīng)該能感覺(jué)到我們這些題目固额,其實(shí)是一個(gè)個(gè)思維訓(xùn)練眠蚂,對(duì)于這個(gè)思維訓(xùn)練,最重要的事情有三點(diǎn):
- 語(yǔ)文問(wèn)題(用詞精確斗躏,前后一致)
- 接口問(wèn)題(完全窮盡)
- 每個(gè)函數(shù)之間互相不知道對(duì)方的內(nèi)在實(shí)現(xiàn)(各自獨(dú)立)
能做好這三點(diǎn)逝慧,代碼就能完勝行業(yè)里的大多數(shù)人:)