教學班級:005
項目地址:https://github.com/gzhGit/Intersectprogit
項目 | 內容 |
---|---|
這個做業屬於哪一個課程 | 班級博客 |
這個做業的要求在哪裏 | 結對項目 |
我在這個課程的目標是 | 學會團體和我的的軟件開發方式 |
這個做業在哪一個具體方面幫我實現目標 | 結對編程,體會合做 |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
.Estimate | 估計這個任務須要多少時間 | 40 | 40 |
Development | 開發 | ||
·Analysis | 需求分析 (包括學習新技術) | 600 | 沒有具體計算 |
·Design Spec | 生成設計文檔 | 60 | 60 |
·Design Review | 設計複審 (和同事審覈設計文檔) | 10 | 10 |
·Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 10 | 10 |
·Design | 具體設計 | 20 | 0 |
·Coding | 具體編碼 | 400 | 沒統計 |
·Code Review | 代碼複審 | 30 | 30 |
·Test | 測試(自我測試,修改代碼,提交修改) | 120 | 120 |
Reporting | 報告 | ||
·Test Report | 測試報告 | 20 | 20 |
·Size Measurement | 計算工做量 | 20 | 20 |
·Postmortem & Process Improvement Plan | 過後總結, 並提出過程改進計劃 | 60 | 60 |
Information Hiding:對這一項應用比較少,全部類的屬性和方法基本都是public,沒有特別隱藏的方法或者變量。
Interface Design:只是建立一個能工做的應用程序是不夠的。 用戶期待直觀的,吸引人的,強壯的應用。因此咱們採用gui來完成與用戶的交互。圖形界面簡單直接,易於操做。
Loose Coupling:不少不須要交流的參數和變量都封裝在模塊單元內部,不用被其餘單元知曉,其餘模塊單元只須要知道提供的函數接口須要的數據類型,以及返回的數據類型。github
咱們在core模塊中,爲點、線、圓各建了一個類。其中,線分爲直線、線段、射線,這三種都屬於線這個類,用類中的一個整型變量來區分(0-直線,1-射線,2-線段)。而後線與線求交點,而後線與圓求交點,而後圓與圓求交點三個函數(直線、線段、射線都屬於線,用同一個函數處理,在求出交點後,根據射線和線段的性質對交點取捨)。這些外部單元模塊不須要知道,core向外提供了三個重載函數solve做爲藉口,外部模塊只須要按頭文件中的函數聲明順序輸入參數便可(輸入的參數就和結對項目中給的樣例是同樣的,好比直線就輸入一個字符‘L’,四個整型表明兩個點座標,採用這樣的標準輸入來下降耦合度)。算法
咱們起初用來存儲幾何類型數據信息的數據結構是set容器,可是set容器是一個基於紅黑樹的容器,他須要維護樹結構的平衡和順序,這會帶來時間開銷,然而這些功能對於此次的項目是沒有必要的,因此咱們又換用了vector容器。vector容器至關於就是一個動態數組,他的插入、刪除速度要因爲set,可是數組擴容時,vector須要複製整個數組,也須要大量的時間開銷。vector還有一個致命的問題。在插入幾何對象時須要判斷這個集合對象是否已經存在容器中,要解決這個問題,vector須要遍歷一遍整個數組,在分析圖中咱們也能夠看到,在插入點時,爲了不插入重複點,須要大量時間遍歷數組,佔到了90%以上的時間開銷。因而咱們決定使用hash結構來存儲幾何類型,能夠避免對容器的遍歷
編程
http://en.wikipedia.org/wiki/Design_by_contract
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
描述這些作法的優缺點,說明你是如何把它們融入結對做業中的。
優勢:
(1)編寫者和使用者均可以獲得足夠的信息。
(2)對於編寫者來講,明確接口功能,檢查預期行爲,幫助debug,縮小了檢測時間的花銷。
(3)對於使用者來講,必要的有關接口的信息,給了使用者正確的使用方法。
缺點:編寫須要額外的時間開銷。數組
首先咱們考慮全部的幾何類型組合,共有10種(從4個選2個,好比LC相交,從4個選1個,好比LL相交),再根據分支覆蓋狀況添加測試樣例。
微信
咱們設計了4種異常狀況:
(1)輸入幾何類型字符不合法,輸入了L, R, S, C以外的幾何類型
(2)輸入的點的座標不在規定範圍內
(3)輸入的直線的兩個端點重合
(4)輸入的圓的半徑r小於等於0
數據結構
ui模塊如圖所示,有兩種輸入方式:(1)直接從文件導入; (2)輸入幾何對象數據信息來增長集合對象。
用戶輸入數據後,ui模塊調用core模塊的solve函數接口,將這些數據傳到core模塊中去運算,core將算出來的交點座標返回給ui模塊,ui在下方的顯示界面上繪製出幾何圖形和交點。架構
咱們使用了qt的信號與槽機制來實現以上功能。首先咱們所用的組件有6個push button,分別是上圖中給出的6個功能,每一個push button對應一個被用戶點擊都會發出一個clicked()信號(這個信號函數由qt的庫提供),咱們的工做主要是包這些clicked()對應到相應的功能上,也就是qt的信號與槽機制。如下是這幾個槽函數的函數聲明以及6個push botton的聲明,以及註釋說明每一個槽函數具體幹什麼。函數
private: QPushButton *btnFile; QPushButton *btnHelp; QPushButton *btnLine; QPushButton *btnCycle; QPushButton *btnInfile; QPushButton *btnAbout; private slots: void on_btnFile(bool checked); //btnfile按鈕的clicked(bool)信號的槽函數,點擊將會進入選擇要導入的文件路徑 void on_btnHelp(bool checked);//btnHelp按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個文本窗口介紹本UI界面 void on_btnLine(bool checked); //btnHelp按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個窗口,用戶在這個窗口輸入想要插入的Line的參數 void on_btnCycle(bool checked); //btnCycle按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個窗口,用戶在這個窗口輸入想要插入的Cycle的參數 void on_btnInfile(bool checked); //btnInfile按鈕的clicked(bool)信號的槽函數,點擊將會把先前讀入的文件信息轉化爲幾何圖形繪製在畫布上。 void on_btnAbout(bool checked); //btnAbout按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個文本窗口,窗口中顯示當前已輸入幾何圖形的數字信息。
微信語音形式,界面分享靠截圖。工具
優勢:(1)兩我的起到了一個相互監督的做用,有助於雙方(尤爲是在寫代碼的一方)集中於工做。 (2)兩我的一塊兒工做,能夠隨時討論程序算法、架構等問題,集思廣益。 (3)一我的在寫代碼的同時,另外一我的在debug,極大的下降了出bug的可能性。 缺點:須要兩我的有比較默契的合做,兩人實力差距也不該過大。