結對程式設計小夥伴:李入雲
下面是我們在新主樓一起程式設計的時候的場景,外面霧霾很重

通過這次結對程式設計,讓我對結對程式設計有了一個初步的認識。在此之前,我從來沒有接觸過結對程式設計。雖然自己程式設計的時間并不長,但是對程式設計還是有一定的認識。以前都是單打獨鬥,自己一個人編完整個程式。這些程式确實也不是很大,但是,有時候,面對即将到來的deadline和沒有實作的功能,這些程式還是很大了。是以,這次結對程式設計的優勢就很明顯了:由兩個人完成一個程式,那麼每個人的任務就輕松許多了(開始的時候一直這麼想)。後來,我才發現,其實并不是這樣的,因為結對程式設計的小夥伴是一位女生,是以兩個人要坐在一起程式設計,從時間和空間上就有很大的限制。在結對程式設計的過程中,有一個很大的好處就是少調試。當時我們程式設計式的時候就出現了一個很小的bug,基本上是一次過的節奏。這一點,我想也是結對程式設計的一個比較重要的優勢吧。
小夥伴的優缺點:碼代碼的能力很強、碼代碼的時候很仔細、思維發散,很喜歡想一些拓展的東西(也許這就是一個缺點吧,花了一些沒必要的時間)、心平氣和,在碼代碼的時候不會受其他事情打擾
我的優缺點:和小夥伴不一樣的就是我在碼代碼的時候容易受到幹擾,有時候容易走神,還有就是自己碼代碼的能力較差,感覺自己沒什麼優點
關于Information Hiding
在現在的面向對象的程式設計中,Information Hiding是一個很重要的設計方法。很多時候,軟體開發人員并不希望自己做的軟體的源代碼被别人發現,因為這些源代碼是他的人才财産,是他自己的腦力成果,是以Information Hiding就顯得至關重要。面向對象的設計思想就是一個很好的手段,将自己的程式封裝起來,隻是向外界暴露自己的接口而不暴露我的程式内部是如何運作的,采用了何種算法。
關于interface design
面向接口程式設計是軟體工程領域常用的設計手段,特别是在大型團隊項目中,接口的設計至關重要,往往接口的設計就決定了程式的很大一部分工作量。在團隊程式設計的過程中,首先需要定義各個子產品的接口,然後再開始團隊程式設計;在個人項目中,自己也應該設計各個功能子產品的接口,也許一開始的時候不能把接口完全定義好,但是至少在自己的心裡會有一定的概念,這個東西到底該怎麼寫,這樣一來,對自己的程式設計有很大的幫助。
關于loose coupling
對于loose coupling,現在基本上所有的軟體都必須支援。它在某種程度上代表了軟體的未來。軟體一旦更新,使用者的想法是不需要做太大的改變就可以像以前一樣使用這個軟體,是以loose coupling是軟體必須能夠達到的。
Design by Contract, Code Contract
DbC中,使用者和被調用者地位平等,雙方必須彼此履行義務,才可以行駛權利。調用者必須提供正确的參數,被調用者必
須保證正确的結果和調用者要求的不變性。雙方都有必須履行的義務,也有使用的權利,這樣就保證了雙方代碼的品質,提高了
軟體工程的效率和品質。
缺點是對于程式語言有一定的要求,契約式程式設計需要一種機制來驗證契約的成立與否。而斷言顯然是最好的選擇,但是并不
是所有的程式語言都有斷言機制。那麼強行使用語言進行模仿就勢必造成代碼的備援和不可讀性的提高。
算法介紹
生成器:1)設定操作數棧和運算符棧,其中操作數棧儲存運算出現的全部操作數,包括中間數
2)操作數兩兩入棧,遇到加法或者乘法,将較小的數先入棧
解析器:1)根據輸入表達式生成逆波蘭式,并進行計算
2)将表達式的計算結果輸出到string ,與使用者輸入的答案進行字元串比對,相同即為right,不同即為wrong
針對使用者的不同需求:
1)使用者如果選擇運算過程中無負數,即将操作數棧中含有負數的表達式删掉
2)表達式不含有括号,将含有括号的表達式删掉
3)表達式中不允許有分數,将表達式和答案中含有‘/’的删掉
4)表達式中不含有乘除法,在生成運算符個數op_num時,op_num = rand(0,1),其中0 = ADD,1 = SUB,2 = MUL,3 = DIV;
程式的UML圖
感覺UML程式圖并沒有什麼好畫的,兩個類的關系也不過如此
測試
用例