- 部落格注明結對程式設計人員的名字/或學号後3位.
- 179
- 166
- 照至少一張照片, 展現兩人在一起合作程式設計的情況。說明結對程式設計的優點和缺點。結對的每一個人的優點和缺點在哪裡 (要列出至少三個優點和一個缺點)。
結對程式設計優點
- 結對對程式設計兩人合作,結對人員之間的優缺點互補,使得1 + 1 > 2。且在遇到難題時兩個人讨論能夠更快地解決問題,有時能夠爆發出曠世奇作。
- 結對程式設計人員在遇到難題時可以向對方請教,對方也能在某些時候找出自己的BUG,畢竟有時候我們當局者迷。還能夠做到随時溝通和交流,專業一點來說是代碼複審,畢竟隻有兩個人。
- 當有人在和你一起做同一件事情的時候你會覺得很有依靠,就是開發和責任都是兩個人分攤,能夠讓自己冷靜下來全新投入工作。當然這樣的結對中隊員均想表現自己,向對方展示自己的能力,而自己看到了對方的能力後就會更加努力,這就是一個良性循環。
- 結對程式設計可以将代碼層次分工,隊員隻需處理自己層次的代碼,而不用關心其他代碼,這降低了隊員的工作量,減輕了負擔,更利于程式設計。
- 結對程式設計能夠學習對方的經驗長處,培養我們的團隊能力和意識。
結對程式設計缺點
- 隻有兩個人,在項目過大時兩個人很難完成任務。
- 如果兩個人對項目持有不同的意見,由于沒有第三個人來評判,誰也說服不了誰,這樣容易造成結對人員之間的間隙,不利于結對和諧,最終可能導緻隊員不歡而散。
結對成員
- 董元财
優點:
- 擅長界面程式設計
- 善于學習新技術
- 能鑽研
缺點:
- 不太擅長算法
- 薄霖
- 碼代碼能力高,對C++語言熟練掌握
- 對結對分工明确,工作效率高
- 工作認真,責任心強
- 溝通方面稍有不足
- 看教科書和其它資料中關于 Information Hiding, interface design, loose coupling 的章節,說明怎樣利用這些好的設計方法。
- Information Hiding,有利于分層程式設計,讓我們不用考慮其他的實作細節,能更加注重自己任務的開發
- interface design,統一接口,使得我們在團隊開發的過程中能夠按照接口設計開發,而不用在實作代碼時邊寫邊讨論接口問題,大大提高了項目的開發效率。
- loose coupling,具有中立的接口定義(沒有強制綁定到特定的實作上)的特征稱為服務之間的松耦合。松耦合系統的好處有兩點,一點是它的靈活性,另一點是,當組成整個應用程式的每個服務的内部結構和實作逐漸地發生改變時,它能夠繼續存在。SOA的一個關鍵特征是使用松散耦合連接配接。
- 看 Design by Contract, Code Contract 的内容,描述這些做法的優缺點, 說明你是如何把它們融入你的作業中的。
優點
- 能夠減少項目的BUG,在後期測試的時候能夠降低效率
缺點
- 開發的代碼量增加了,項目也會變大
在我開發中我會對函數 傳入的參數值進行判斷,有時候會使用斷言,有時候遇到不對的傳入直接return。
- 通過截屏顯示你是如何用VS 的unit test 來保證你寫的類的品質的。顯示unit test 對你的寫的類(class) 的覆寫率
- 畫出UML 圖顯示各個實體之間的關系 (畫一個圖即可)
- 說明你的算法的關鍵 (不必列出源代碼), 以及獨到之處。
借用了寝室另一個人的設計,即采用表達式樹的形式儲存題目并通過最小表示法來進行查重。
算法設計
我們本次項目沿用了上次我的個人項目的設計,隻不過在其基礎上添加了對負數、有無括号、有無乘除法的限制,以及對運算符個數的限制。
具體來說,對于四則運算題目生成的部分:
- 擷取到傳入的參數限制,包括運算符個數限制、數值限制、有無分數、有無負數
- 遞歸生成一個表達式樹
- 遞歸進行表達式的正确性檢驗(是否出現了負數、除0以及不能整除的情況)
- 遞歸對表達式樹進行最小表示
- 如果得到的算式之前沒有生成過,則将該算式加入到生成隊列中。
- 如果目前的表達式個數已經達到要求,則将表達式與答案傳回。
其中,在生成表達式樹的過程中,首先需要判斷樹中目前的節點是否為分支節點(即運算符)。如果目前的樹的總結點數為0,那麼該節點必須為分支節點,如果目前樹中的分支節點已經打到了要求的上限,則該節點必須為葉子結點(即操作數)。有了這個資訊之後,針對目前結點的類型不同,就可生成對應的結構,之後如果目前結點為分支節點的話,就遞歸生成其左右子樹。
在對表達式進行正确性檢驗的過程中,如果目前結點為葉子節點,那麼我們僅需要檢驗這個葉子結點的數值是否滿足要求。否則,先遞歸對它的左右子樹進行正确性檢驗,在確定左右子樹正确的情況下,檢驗目前結點的運算是否會造成不合法的情況,如果有的話則進行修複。
在對表達式最小表示的過程中,同樣是先遞歸對其左右子樹進行最小表示,之後再看,如果目前結點為'+'或'×',則判斷一下他的兩個子樹的hash值大小,在不改變運算順序的前提下使表達式變為最小辨別的形式。
檢驗算式仍然采用了第一次作業的形式,以一個STL的set來存放最小表示後的字元串,通過字元串的比較進行判重。
對于計算表達式結果的功能,仍然沒什麼好說的,采用了STL的兩個棧來維護。
具體實作
Ditital類實作了分數的各種運算,Tree類則是存放表達式樹。 Core類對操作進行了封裝。
Tree類包含它的左右兒子兩個指針,遞歸調用create_suanshi會建立一個suanshi類型的對象,并将其賦給目前子樹的根,之後遞歸的進行生成。
Tree類僅對有無負數和分數進行了檢查,對于乘除法的限制以及有無括号的限制則在生成字元串後進行判斷。