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