1. 程式人生 > >“愉快”的國慶假期——我們的結對程式設計總結

“愉快”的國慶假期——我們的結對程式設計總結

結對程式設計專案實現功能:在個人專案生成小學、初中、高中不同難度題目檔案的基礎上 1.增加了生成題目答案。 2.加入UI介面實現使用者互動註冊驗證和答題,計算出正確率。 3.運用阿里雲的簡訊服務功能實現傳送簡訊驗證碼驗證的功能。 專案語言和環境:java、eclipse。 專案分工: 陳惠民:實現生成題目檔案,以及計算題目答案,實現簡訊驗證碼功能。 曹原:負責圖形介面設計,以及把各個功能對接起來。 專案效果: 專案總結: 陳惠民: 1.複用個人專案實現結對專案:在之前的個人專案中還存在許多不足的地方需要比如特殊運算平方和開方的符號表示,以及括號的產生等等,另外還有圖形介面的加入,如果使用c++的QT可能會太複雜花去許多時間(教程每集30分鐘,共15集),所以我們改變策略把開發語言改成了java,雖然個人專案寫的很辛苦也基本實現,但是如果換一種新的語言,借鑑之前的部分重要思路,但是加入自己的改進思路,有能很好地加入圖形介面,豈不是更好麼。對於結對專案我們主要用到了之前的隨機數產生運算子和運算元的方面,其他許多部分都是全新的,比如將平方和開方轉變為具體的特殊符號,通過兩個函式,一個產生對應難度的運算元,一個隨機生成對應難度的運算元(包含比其更低難度的運算元),以此來產生題目,對於括號的生成方面,借鑑了網上的思路,每產生一個運算元,隨機產生括號打在當前產生算式兩邊,再隨機將新生成的運算元與當前算式作交換,達到隨機產生括號的目的,也不會有個人專案中出現沒有意義的括號的情況,看上去更加規範和正確。 然後就是生成題目答案方面,這裡就跟個人專案沒有太多關係了,通過上網查詢得到通過算式的字串得到具體的題目答案的思路,就是用中綴表示式向量將算式中的運算元以及操作符儲存在向量其中,然後就是用字尾表示式向量將中綴表示式轉成字尾表示式儲存,這樣就把所有的括號給去掉了,最後就是通過對應演算法將字尾表示式向量表示的算式個計算出來返回一個double的結果。 最後就是我做的簡訊服務方面,說實話其實不是太難,不走彎路的話不超過30分鐘就能完成,但是我做了一個上午加一個下午,其實還是對Java的語言和環境的不夠熟悉,不知道怎麼操作,在阿里雲註冊賬號,並通過簽名和模板的驗證,在阿里雲的官方網站下載好java的相關壓縮檔案,解壓後在資料夾裡面找到兩個對應的jar包,再在專案project中build path中將兩個jar包加入到library庫,這樣就成功的加入的阿里雲的包,然後百度import需要的庫,然後將官網提供的程式碼複製改變對應的引數,測試即可成功傳送簡訊驗證碼到對應的手機上,加上圖形介面中的判斷驗證碼正誤即可。 2.經驗:結對程式設計專案做完了之後說難也不難,但是說不難也是需要花一定功夫的,絕對不是基礎一般的同學一己之力能夠很好的完成的(尤其在國慶假期),所以一定要合理分配好任務,並且要按照要求在規定的時間內準確的完成好任務,雖然大部分的任務是可以同時進行的,但還是有的任務是不能通是進行的,比如實現不同功能類函式接合的方面,雖然不需要知道函式的實現原理,但是瞭解每個函式的功能也已經是需要花費許多的時間了,所以在接合程式碼方面,最好還是兩個同學面對面才是最好講清楚,接合程式碼效率會更高。 在結對程式設計中一定要相互幫助,不能說自己做完了自己的部分之後就拍拍屁股走人了,其他的都事不關己了,這樣的想法是不對的,專案是兩個人共同的東西,只有整個專案完成出色才能體現出每個部分完成出色,所以一定要相互幫助,相互理解,,不能相互埋怨和責備,確實敲了這麼久的程式碼心情也不好,但是一定要剋制,理解對方,這樣才能完成好共同的專案。 結對程式設計一定不能說有一個人全做完了,或者說完全沒做,這樣會導致沒做的同學參與感很低,而且會造成許多不必要的誤解,要充分信任對方,兩個人共同進步才是好的。 遇到無法解決的問題多方面多途徑地尋求幫助,你所遇到的問題一定也有其他人遇到過,問同學,百度等都可以,一個人糾結太久不僅花費時間,更是沒有必要。 教訓: 首先第一個教訓肯定是在做專案的時候一定要多思考這個專案有哪些可以發散推進的地方,留一部分餘地,實現低耦合,就像這裡我們把變成語言和環境給換了,要是專案更加大型一點肯定是會造成許多的麻煩。 在專案最開始的時候一定要把每個部分需要實現的所有功能儘量說清楚,考慮全面,不然到後面寫完了再進行修改和新增就會出現不必要的bug,導致怕出錯不太想添加了,但是當你實現完了功能之後就不要老是想還有什麼功能沒有實現了,因為這是考慮不完的。 完成專案的時候一定要注意用類分裝好,雖然這樣可能會增加許多的呼叫和測試,但是這樣不僅在測試當前類功能方面方便,,而且在接合呼叫方面也更加簡練和容易發現錯誤並改正。 在出現無法理解的錯誤,一定不要放過任何一個小細節,比如我的短息服務功能實現方面畫了一個上午和下午一直檢測不到包,首先被官網上面誤導了以為要用到maven打包,做了很多無用功,其次兩個資料夾下面都包含這兩個需要的同名的jar包,而我恰好就用了另外一個資料夾的,檢查了好久才發現,這兩個包雖然同名,但檔案大小其實還是有差異的,最後才終於成功了。 曹原:  結對專案分析在結對專案中,我主要負責窗體介面的實現。整體佈局上其實比較簡單,即通過網格佈局初始化生成窗體,每一個窗體都為一個函式(類),窗體的具體內容通過面板實現。面板中新增標籤,文字域,密碼文字域等元件來填充窗體,將資料採集,獲取,處理功能放入按鈕的事件監聽中,實現介面的切換、題目檔案讀取、題目檔案的生成、分數計算等功能,簡單一句話:“一個按鈕一個窗,一個介面一功能”。思路上,窗體實現主要是3大模組:登入註冊模組,題目生成模組,答題及分數模組。登入註冊模組:輸入手機號——簡訊驗證碼接收——驗證後登入。在呼叫了阿里雲的驗證碼檔案後,本質上三個窗體大同小異,“接收文字域內容——判定是否輸入符合條件——格局判定結果進入不同的窗體”。題目生成模組:填寫題目數量——選擇題目難度——點選生成題目。主要原理是監聽獲取文字域內容以及JRadioButton的選項結果,通過呼叫題目生成類中的函式生成所需要的檔案,同時在此時定義路徑進入生成的檔案。答題及分數模組:利用readline()函式按行依次讀取檔案,讀取後呼叫計算函式得到正確結果,後再生成3個錯誤答案總計4個答案組成新的按鈕組,點選按鈕進行後臺結果判定以及新題目的讀取。最後生成一個分數。本次專案,我遇到的最大的問題有兩個:1)對變數的處理;2)將結對夥伴的運算程式碼與窗體接好。 1)其實在碼程式碼過程中,介面的大體實現並不是難點,但是對於按鈕監聽這一功能的理解不夠,所以在思路上走了一些彎路,比較大的思路錯誤包括“沒有監聽就想獲取文字域”(可以執行但當要獲取文字域內容時點選按鈕報錯),“生成題目介面用迴圈呼叫按鈕監聽函式”(直接生成了多個介面,根本不是預期的每按一次按鈕介面改變一次)。在理解了按鈕監聽的原理後,又引發了下一個問題:變數的作用域。因為多模組的結構,很多時候需要在下一個窗體方法(類)中呼叫上一個方法的資料,但是很明顯不可能直接呼叫。這裡要用到的變數我們設定為private許可權,做成類的全域性變數。同時改為static靜態成員。同時涉及到輸入輸出時的異常處理上也吃了一些苦頭,最後總結了一個頗有些搞笑的口令“要麼throw,要麼try-catch”。2)第二個問題也是困擾了我許久。這裡我首先要感謝一下我的結對夥伴,他的計算功能實現真的很棒,而且使用多個類去實現功能很方便我的對接。但是,即使如此,因為程式碼風格的不同我依然在對接時花費了一些時間。大的思路方向上我修改了兩次,最後採用了較為合理的一個方法實現了對接。總的來說,首先這次結對程式設計一方面讓我認識到了自己的不足,尤其是演算法方面比較薄弱,仍需要加強練習。同時在程式碼上可以更加簡潔,“高內聚,低耦合”應該作為一個主線始終貫穿我們的程式開發過程。最後,也是最最重要的,一定要對自己,對夥伴充滿信心,永遠不要質疑自己。只要花費精力和心思,個人的潛力,自主學習能力將迸發出巨大能量來幫助你完成你的目標。不要畏懼困難,所有的困難都是我們必須面對的,要去思考,去查詢資料,去詢問他人。最後的最後,給自己加油打個氣,小組專案加油!