星期六, 2月 14, 2009

在物件導向中 模組品質的定義


模組設計的準則:
在模組內有最多的關係
在兩模組間有最小的關係


如果產品是以模組來劃分,那如何知道模組的品質?
在物件導向中,有兩個名詞用來看待模組的品質,分別為:
Cohesion (strength):模組內程式碼間的結合度。
Coupling (binding):模組間的關連度。

Degree of Cohesion

Functional cohesion (Good)
Informationial cohesion  
Communicational cohesion  
Procedural cohesion  
Temporal cohesion  
Logical cohesion  
Coincidental cohesion (Bad)


Degree of Coupling

Data coupling (Good)
Stamp coupling  
Control coupling  
Common coupling  
Content coupling (Bad)

這兩個概念在教科書中常常出現;
這兩個指標很重要。為什麼重要?

因為都是用來看系統架構內的結構好不好,彈性夠不夠,相依性會不會過高。
而『重構』的概念 和『設計模式』的各種模式 皆是建立在這樣的基礎上。

依我個人的解讀如下:
在模組內,要求功能是不是夠集中。
在兩個模組之間,要求各自的獨立,不要有相依性。

星期二, 2月 10, 2009

論文程式 Demo

2008/07 完成系統一半的功能,但後續追蹤、重複通報欲鎖的疾病仍是不對
2008/08 重新繪製系統流程、功能
2008/09 重提系統畫面、流程、功能
2008/10- 2009/02/10 建構系統程式

歷時四個月多,終於完成系統主流程 的程式,其過程感觸良多。

打從研二確定論文題目後,一直很茫然不知所措,不知道要怎麼建構系統功能。
報告提案時,也一直被老師唸"你又在當醫生了!",提出的報告也一直被推翻,書讀的很鬱卒,看著身旁的同學一個一個畢業,心裡的感受可想而知。

一直告訴自己,讀書有方法,那麼報告也是有方法的。
首先一定要讓自己提出的系統功能、流程過關。

直到研三,才驚覺不管是報告的能力、寫報告的能力、邏輯思考的能力(常常打結!),都非常的弱。

既然有待加強,就開始找一些有關邏輯思考的書來看,如:
"邏輯思考技巧:寫作、簡報、解決問題的有效方法 "、
"你想通了嗎"、
"金字塔原理:思考、寫作、解決問題的邏輯方法"。

這幾本書,都非常值得一看再看,尤其是"
邏輯思考技巧:寫作、簡報、解決問題的有效方法 ",所提的方法,檢示自己的報告的內容:是否重複、遺漏、離題,反問自己Why so?、So what?

而系統的功能、流程,一定是沒把握重點,所以老師才一直沒接受提案。
網路上有很多討論建構系統功能的高手,如
矇矇的秘密基地UML Blog

尤其是矇矇的秘密基地中的幾篇文章。如:以架構為中心的主要設計產出(1)
以架構為中心的主要設計產出(2) ,提出了建構了系統的方法、先後順序、先後重要性、要畫那些圖才能凸顯焦點;真的是令我開了眼界,要說服別人的證據,原來是這麼建出來的。

在此萬分的感謝這些書的作者及 部落格的高手,不藏私的把自己的經驗分享在網路上。

沒有這幾本書和部落格文章的啟蒙,也沒辦法用好的思維模式,建構出可以說服老師的系統流程、系統功能。沒有某某科技公司的專案經理Magic蔡大哥及另一位孫大哥的指教,我也沒辦法那麼快知道系統實作環境中,目前的情境流程。當然還有老師的指導,沒有他指出正確的方向和系統流程,功能一定仍在修正中。

回到主題 程式Demo,要Demo前一定要做測試,做愈多的測試,系統就愈穩定。

原想說這次的Demo,只是讓老師看看目前的流程、做法、畫面,是不是還有修改、增加的空間 (明明都讀到研四了,還想這麼多!),所以只做了系統流程中,較大功能的測試。

怎麼列出測試情境呢? 這問題在腦海中盤旋了好久,因為流程很大,又有好幾個角色,最後決定用系統流程的情境來測試,在不同的分支作出系統功能的效果。分支愈多,相對的情境就愈多,就愈讓人覺得難以抉擇怎麼列出重要的情境。

當Demo完成主功能後,還想demo非功能的情境,像似 修正公式,系統需重新載入公式,並重新計算,這部份老師就說:「恩!demo到這邊就好了,我相信那部份有做出來!」(很驚訝!因為心裡還想著說:是不是還有很多地方要修! 總覺得還有很多地方有錯!)

Demo就這麼完成了!!

應該還是有很多隱藏的bug!~趁口試前,趕快修一修!
不要口試的時候再出包,這樣會丟老師的臉。

雖然這只是個論文程式,並沒有真的要實際上線,但仍是想把它做好一點!
畢竟這是人生中的第一個從無到有的專案!仍有很多地方需要修正。
如:server對databae的錯誤流程機制、client 與 server之間溝通錯誤流程機制、畫面流程的流暢度。

接下來就剩論文書面撰寫和系統部份功能的修正、還有口試。

星期六, 2月 07, 2009

相依倒轉原則

程式者的胡言亂語 的文章 類別物件的產生(4)相依倒轉原則

在wikipedia 中的解釋

在 wikipedia 的作法

在 良葛格學習筆記 的作法解釋

這是個很實用的作法,用在重構或是設計中,都可以解決物件相依的問題,改善架構的擴充彈性。

有空得多想想例子,這樣才能記得更清楚。

星期五, 2月 06, 2009

真正的問題

人生中重要的是,關注那些真正的問題(real problem),不要陷入那些細枝末節的問題(trivial problem)。就像蘇格拉底說的,「認識你自己」。

星期四, 2月 05, 2009

心五四運動

聖嚴法師 因病過世!

在新聞中看到林青霞小姐說:
法師曾說過:面對它、接受它、處理它、放下它!這段話對我受益匪淺。」

以下是在 wikipedia中 對 法鼓山的定義,我從裡面擷取出來某一段:

心五四運動是一項心靈建設工程,是法鼓山為實踐四種環保而推出的觀念與方法,它將佛法中深奧的名相與學理轉化為一般人都能的觀念與方法。總計五大項,每一項內各有四種「心」的觀念和方法,因此稱之為「心五四」。

四安
—安心、安身、安家、安業,為提昇人品,建立新秩序主張。
四要
—需要的才要、想要的不重要、能要該要的才要、不能要不該要的絕對不要,為面對煩惱,安定人心的主張。
四它
—面對它、接受它、處理它、放下它,為解決人生困境的主張。
四福—知福、惜福、培福、種福,為增進全人類福祉的主張。


我印象中第一本讓我有深刻的勵志書,便是聖嚴法師寫的。
雖然法師已過世了,但是他所留下來的精鋉的話語,是會一直流傳下去的,讓世人有目標可以遵循。