這學(xué)期開(kāi)始認(rèn)真學(xué)習(xí)設(shè)計(jì)模式這門(mén)課,老師課上說(shuō)了一句話(huà):在設(shè)計(jì)模式出現(xiàn)以前,軟件開(kāi)發(fā)是門(mén)藝術(shù),只有那些有天賦的程序員才能寫(xiě)有優(yōu)雅的代碼;設(shè)計(jì)模式被人們總結(jié)出來(lái)之后,軟件開(kāi)發(fā)就成了一門(mén)技術(shù)了,有著固定的模式可以參考,沒(méi)有天賦的程序員也可以寫(xiě)出很好的代碼。
先不管這句話(huà)的正確與否,但是有一點(diǎn)是確定的,軟件的開(kāi)發(fā)過(guò)程中,設(shè)計(jì)是非常重要的。有一個(gè)好的設(shè)計(jì)能夠?qū)④浖_(kāi)發(fā)失敗的機(jī)率降到最低。
設(shè)計(jì)模式不應(yīng)該被視為軟件開(kāi)發(fā)的說(shuō)明書(shū),照著那一條一條的模式套用并不一定能寫(xiě)出來(lái)好的程序,正確的態(tài)度應(yīng)該是把它們作為軟件設(shè)計(jì)的經(jīng)驗(yàn)和建議來(lái)看。
最近看了下那本《敏捷軟件開(kāi)發(fā):原則、模式與實(shí)踐》,感覺(jué)確實(shí)是本好書(shū),可以看出來(lái)作者對(duì)軟件開(kāi)發(fā)的功力非常豐富。我發(fā)現(xiàn)作者在說(shuō)明軟件開(kāi)發(fā)過(guò)程的時(shí)候大量使用了UML,以前我都認(rèn)識(shí)這些東西很虛,很麻煩。現(xiàn)在看這本書(shū)的時(shí)候卻有點(diǎn)了不同的體會(huì),哈哈,看來(lái)是我以前層次太低了。UML實(shí)在是一個(gè)好東西,清晰明了,用來(lái)描述復(fù)雜的系統(tǒng)的時(shí)候真有種撥云見(jiàn)日的感覺(jué)。
下面簡(jiǎn)單寫(xiě)一下UML的基本知識(shí):
1.識(shí)別參與者
2.抽取用例
用例中有兩點(diǎn)需要說(shuō)明一下:擴(kuò)展(extension)/包含(include)
擴(kuò)展:它們之間互不引用,僅僅插入到被擴(kuò)展用例中
包含:包含用例會(huì)引用被包含的用例
基本用例完成之后,可以根據(jù)參與者將其分類(lèi)組織起來(lái),形成系統(tǒng)的邊界圖來(lái)匯總顯示。
3.領(lǐng)域模式(domain)
這是一種類(lèi)似于UML類(lèi)圖,但是它們之間有很大的差別,它并不會(huì)對(duì)應(yīng)于編碼中的類(lèi)(class)。
4.類(lèi)之間的關(guān)系
關(guān)聯(lián):以一條線(xiàn)連接兩個(gè)類(lèi)表示,表示它們之間相互包含。更常見(jiàn)的是一種帶箭頭單向關(guān)聯(lián)關(guān)系。
聚合:以一個(gè)白色菱形箭頭表示類(lèi)之間的“整體/局部”關(guān)系,同樣聚合關(guān)系的一個(gè)變體“組合”,以一個(gè)黑色菱形箭頭表示,這也是一種“整體/局部”關(guān)系,但是“部分”不能脫離“整體”而存在,“整體”也必須負(fù)責(zé)管理“部分”的生存期。
舉例:家庭和人是聚合關(guān)系,而電腦與CPU是組合關(guān)系