專案資訊 專案名稱 MVC and Thread
建立日期 2005/6/3
專案描述 MVC 架構與多執行緒
學習成果表 (成效:1-5)
成效 學習目的
5 了解 MVC 架構以及 Java 的多執行緒功能。
功能需求表 (完成度:1-5)
完成度 功能需求說明
5 此用 MVC 架構設計此系統。
5 至少設計兩個 controller,一為市場,一為使用者。
5 至少設計兩個 view,一為數字,一為波浪圖。
5 當股價改變時,所有的 view 應即時反應股價。
5 參考課本 page481,multiple thread 的實例將兩個 controller 分別以 thread 設計,
以便兩個 controller 都可以改變股價。 價放入 controller、由圖表及數字呈現的放入 view。
89 Coding
將 JQA 系統的 MVC 範例抓下來,依照上面的架構增加另一個 controller-market,並用 multi thread 實作、另外增加一個 view 以顯示股價波動的圖形,圖形以 AWT 的繪圖完成。
8 Refactoring
依照 MVC 架構整理程式碼,由於使用 MVC,程式的架構更為
執行結果
心得:MVC(Model、View、Controller)模式是現在當紅的架構。MVC 架構 將企業邏輯模式、呈現方式、以及控制方式完全分離。在互相不甘擾的情況下,
我們仍然可以藉由 Controller 改變 Model,再由 Model 通知 Observer。MVC 主要 的精神就是將三者分離,使得日後程式設計師能夠獨立工作,互不影響,增加工 作效率。MVC 的另一層意義是,當 Model 有改變時,才通知 View。如此便可以 免除 View 必須持續監控 Model,造成系統資源的浪費。很幸運的,Java 已經有 現成的 MVC 架構,我們只要直接引用便可以實踐 MVC 架構了。在這個程式中,
我設計了五個物件並遵循 MVC 架構,分別是 Model (企業邏輯模式)、NumberView (數字的呈現)、GraphicView (圖形的呈現)、MarketContrllor (市場控制模式)、
PeopleContrller (人為控制模式),如此有層次的程式分工,是之前沒有學過的。
多執行緒也是 Java 另一個值得一提的特色。傳統程式語言一次只能執行一個程 式區塊,Java 改變了這個機制,一次可以同時執行多個程式區塊,提高程式的執 行效率。這個程式裡,我們將“市場”交給一個執行緒,因此我們同時間還可以作
其他事情。有了多執行緒的程式設計,可以讓我們更妥善的使用資源,讓電腦執 Pass1、Pass2、以及存檔、讀檔物件。
Pass1:讀進輸入檔,先作字串的切割,依照空白或是 tab。然 後去掉備註欄,判斷結構是否為標籤、運算碼、運算元。接下 來為每個指令加入記憶體位置,建立符號表格,寫入中介檔 (Intermediate)。
681 Coding
Pass2:讀入中介檔,由查表組譯運算碼以及運算元,假指令的 部分則依照指令保留記憶體位置。然後分別輸入 List 及 Object。
33 Compile Compile 沒有預到太大的問題,大部分的是小細節的錯誤。
比較輸出檔與課本的異同,不同則是代表程式邏輯有誤。
28 Test 由於組譯器需要用到索引法而課本的演算法沒有,因此這部分
除錯花了一些時間。
21 Refactoring 依照 Pasa1,Pass2 的架構重新整程式。
16 Report 擷取並整理結果。
詳細資訊
類別數目 8
邏輯複雜度 4 預估 實際 誤差(%)
需求複雜度 4 行數 (行) 500 575 15
技術複雜度 4 時間 (分) 900 854 -5.1
總複雜度 12 產量 (FP/m) 6.6 8.0 -21
程式架構
執行結果 HTEST 00100000107A
T00107A1E1410334820390010362810303010154820613C100300102A0C103900102D T00101E150C10364820610810334C0000454F46000003000000 T0020391E041030001030E0205D30203FD8205D2810303020575490392C205E38203F T0020571C1010364C0000F1004096041030E02079302064509039DC20792C1036 T00207373820644C000005
E001000
心得:因為系統程式這門課需要開發組譯器 (Assembler) ,所以我嚐試用 物件導向的方式並用 Java 實作 Assembler。我設計了七個物件:符號表儲存 (靜 態)、符號表處理 (動態)、助記憶碼表、存檔、讀檔、Pass1、Pass2 物件。表格 的資料結構是雜湊表格,我以 binary-search 取代,由於課本演算法沒有提到索引 法,因此索引法的指令翻錯,除錯花了一些時間。這個程式必須要有資料結構的 基礎,也要對組譯器夠了解,還需要夠熟悉 Java 的語法,因此是對自己能力的 一種考驗,我寫出來實在算蠻高興,蠻有成就感的。
四、專案量化分析
我們課程有一個 JQAS(Java Quality Assurance System)學習輔助系統,可以輔 助學生作專案複雜度分析、程式大小預估、專案開發時間預估、產能計算等等,
也表示我對物件設計的模組觀念越來越清楚了。
程式碼行數(Line of Code; LOC)代表程式的大小,我寫程式時盡量以最精簡的 方式完成需求。由此圖可以發現到後面的程式越來越大,功能也越來越複雜。不 過掌控程式碼的大小還是比掌控開發時間容易多了。
由圖三可以發現曲線有越來越接近 0 的趨勢,特別是在專案 5A-7A,這表示我 越來越清楚 Java 需要多少的程式碼便可以完成需求了,所以預估的能力越來越 精準了。我想這多半是歸功於在前面的專案裡有收集我的產量吧。請注意圖二與