一.我和小夥伴的合照程序員
結對人員:13061163 趙庶宏算法
13061196 付帥編程
是否是感受我倆頗有愛?其實,這都是被逼的,dealline是第一輩子產力!!!!安全
付帥的優勢有:函數
很拼!很負責,在本身負責的部分中,能按時的完成;學習
基礎比較紮實;編碼
比較喜歡鑽研,接受新知識能力比較強。spa
缺點是:設計
多是過於勞累,有時候邏輯有點混亂。orm
個人優勢:
知識涉獵普遍,能把多種知識融會貫通;
可以發現不少細節問題;
學習中效率較高。
缺點:
有時候本身編碼的時候,不夠細心,老犯低級錯誤。
二.結對編程的優勢
1.兩我的一塊兒編程,能夠提升每一個人的效率。
原本一我的寫代碼的時候,由於每一個人對問題的敏感度不一樣,或者編程風格不一樣,可能會忽略某些bug,而兩我的結對編程,一我的寫,一我的在旁邊看,這至關於同一塊代碼被檢查了兩次,
很大程度上提升了代碼的質量和編程的效率,並且,這也是寫的代碼更簡潔;
2.結對編程,能夠快速提升我的編程水平。
由於一我的在cording的同時,另外一我的在旁邊「指導」,這樣,兩我的能夠互取所長,取長補短,能夠從交流中發現對方的優勢,同時也能夠發現本身的缺點,這樣能夠很快的發現本身的不足,同時予以
改正,能夠在很短的時間裏,提升本身的cording水平。
3.能夠提升代碼質量。
兩我的同時編程,一塊代碼至少通過兩次檢查,而且融合了兩我的的「精華」(暫且這麼說吧,實際上是兩個臭皮匠。。。。。),代碼會更加的簡潔,質量也會更高。
4.能夠提升我的與他人溝通交流的能力。
由於兩我的一塊兒寫代碼,會一直在溝通,兩我的都要用簡潔的語言表達本身的觀點,使對方明白本身的想法,因此,這也在很大程度上,提升了一直被詬病的程序員的溝通能力,會提升我的的一部分
表達能力。
三.怎樣利用這些好的設計方法
Information hiding:信息隱藏原則保證所封裝的數據的安全性,即外部不能直接對內部的數據進行修改。爲了更好的利用這一個方法,能夠作一下應用:
1 多層設計中的層與層之間加入接口層;
2 全部類與類之間都經過接口類訪問;
3 類的全部數據成員都是private,全部訪問都是經過訪問函數實現的;
interface design:接口的設計是爲了統一某種標準,好比說在編寫程序時,有一組類,他們都有相似的行爲,咱們能夠對這種行爲定義一個接口,這些類去實現這個接口就能夠了,
當咱們在實際使用時就沒必要再考慮具體的實現,從而減小了編程複雜度。
Loose coupling:鬆耦合的基本概念是:容許改變或者當問題發生在「電線的一端時」來避免影響到其餘的端點。也就是說,改變或者供應者或者服務的問題不能影響到用戶----或者用戶的問題
不該影響到供應者或者服務。在編寫代碼時,要注意下降模塊(類)之間的依賴性,當一個模塊(類)做出修改時,與之相關的模塊(類)沒必要作過多修改且功能可以正常運行。經過提供API
來供外部調用,類與類之間創建接口類來實現相互的調用,從而下降類與類之間的依賴性。
在咱們的程序中,設計了3個接口(文件接口,算式條件接口,計算接口),只提供這三個接口供外部使用,這樣能夠將內部的實現細節隱藏起來,
外部調用時也不須要清楚內部的具體實現狀況,只須要調用對應的API接口便可。而且外部想修改內部的類屬性時,不可以直接對其賦值,須要調用setting接口實現間接的賦值。
四.Design by Contract&&Code Contract
契約式設計的提出,主要基於軟件可靠性方面的考慮。可靠性包括正確性和健壯性,正確性指軟件按照需求規格執行的能力,健壯性指軟件對需求規格中未聲明情況的處理能力。
健壯性主要與異常處理機制相關 。正確性一方面包括對象元素內部運行的正確性,另外一個重要方面是與其它對象元素交互時的正確性。
優勢是:
提升了代碼的可複用性,在考慮是否可使用某一函數時,只需考察其契約是否知足需求,而不須要考慮其內部的具體實現。
缺點是:
對於程序語言有必定的要求,契約式編程須要一種機制來驗證契約的成立與否。而斷言顯然是最好的選擇,可是並非全部的程序語言都有斷言機制。那麼強行使用語言進行
模仿就勢必形成代碼的冗餘和不可讀性的提升。好比.NET4.0之前就沒有assert的概念,在4.0後全面引入了契約式編程的概念,使得契約式編程的可用性大大提升了。此外,契約式編程並未
被標準化,所以項目之間的定義和修改各不同,給代碼形成很大混亂,這正是不多在實際中看到契約式編程應用的緣由
在咱們的程序中,設計了3個接口(文件接口,算式條件接口,計算接口),只提供這三個接口供外部使用,並且咱們規定了向這三個接口傳參的類型及規格,這樣,就能保證所傳入的
參數都在控制範圍。
五.覆蓋率
覆蓋率 95.72% ,其實也並不高。。。。。因爲時間緊迫,只作到這裏。。。。
六.UML
關係依賴圖:
七.關鍵算法
咱們的算法最關鍵的就是在生成算式的時候,直接生成後綴表達式,而且全部數字都按降序排列,這樣在查重的時候,會至關的方便,並且還不會產生重複的算式,並且加括號與不加括號
均可以隨意選擇;還有就是在計算的時候,轉成中綴表達式之後,在從新轉換成後綴表達式,這兩次的轉換是由於不加括號生成的後綴表達式和其轉換成的中綴表達式的值是不同的,這是咱們算法
的關鍵所在,其餘地方也有一些比較獨特的地方,就不都說了。
八.感想
通過此次的結對編程做業,我真的感覺到了不少。最大的感覺就是:程序員真(不)是(是)偉(人) 大(幹)的職業!仍是說點正能量的,我確實學到了不少的知識,沒有deadline的敦促,
是不會在這麼短的時間裏完成的,還有就是要很是感謝個人小夥伴——付帥,我從他身上學到了不少,堅持,不拖沓,等等,最重要的是,咱們一塊兒找bug的時候很開心(你信嗎?呵呵),兩我的爲了
一個分號,一個逗號,一個負號都得調很長時間,等找到錯誤,我兩真的是被本身蠢哭了,但也沒辦法,還得繼續調。。。。。雖然這裏面有無數的槽點,但咱們兩個確實學到了不少,怎樣在最短的時間
裏肯定分工,怎麼協調兩人的進度,怎麼把兩我的的成果結合在一塊兒,從中發現對方的優勢,提升本身!