感悟UML中的禪理 UML 模型
關鍵字:UML
UML來做一些設計時,開發人員會覺得自己好像不會寫程序了。的確用UML降低了開發效率,好處卻并不顯見。于是我們看到了在教科書中大量地采用UML,看到了用UML解釋別人的系統設計。
筆者是從C++開始學習面向對象程序設計的,并被IO流和Borland Turbo Vision這樣的OO設計所折服,驚嘆于OO編程的優雅,于是致力于學習OO編程。
當我自以為在OO編程上小有心得時,在網上看到了關于UML的介紹。開始了解UML時,我的心情是復雜的。原來軟件是這樣設計出來的?如果真像Booch所說,那么我們一直在造狗窩,一直不知道怎樣造大廈?于是有了學習UML的沖動。但是隨著學習的深入,產生了新的問題。UML很難掌握,盡管有“精通UML”之類的書。僅以用例圖來說,曾在BBS論壇上遇到無數的人不知道怎樣合適地畫用例圖。UML不但難掌握,而且很“膚淺”——它只是一種表示法而已。它只是一種語言,而用這種語言說出的話到底水平如何,顯然取決于說話人的其他素養。
UML和OO思想哪個重要?沒有OOA/OOD的深厚功底,學UML有何用?當我試著用UML來做一些設計時,覺得自己好像不會寫程序了。用UML降低了我的開發效率,好處卻并不顯見。另外還有一些其他的問題也在困擾著我,例如:如何以用例驅動的方式設計一個類似Swing這樣的類庫?為什么書上的例子舉來舉去都是ATM機?為什么這么多優秀的開放源代碼軟件,幾乎沒有聲稱是以這種方式來設計開發的?我置疑是否這種方式真的有價值。
語言甚至會束縛思想。維特根斯坦應該是持這種觀點的。奧威爾在他的名著《1984》中有一段描述,說明“新話”對思想的控制。UML1.x的版本對實際可能的設計做了許多簡化,使我對UML有一種“新話”的感覺。我頭腦中,曾一度把UML與“符號暴力”相聯系。
據說Kent Beck從來不畫UML圖,最多畫點簡單的CRC卡片,經常是直奔編碼而去。但很多人都不懷疑他是位優秀的OO設計師。于是我大部分時間思考的都是測試驅動,依賴注入,代碼即設計這類問題,與UML漸行漸遠。
機緣湊巧,我讀過一點佛經和故事。給我留下很深印象的是,禪宗六祖惠能是不識字的。禪宗的十六字心傳是“教外別傳,不立文字。直指人心,見性成佛”。而正是這位不識字的六祖,要求“不立文字”的大德,他的講稿被整理成了唯一一部由中國人寫的被稱為經的佛教典籍——六祖壇經。非常矛盾的一件事。壇經記載,惠能還未出家時,聽到有人讀《金剛經》,“惠能一聞,心明便悟”。這就是“籍教悟宗”。六祖之后,禪宗進入“不立文字”的無字禪時代。視語言為障道之本,視讀經為磨磚成鏡。然而沒有文字終究不便,到了北宋,由于禪宗燈錄的大量刊行,參究公案之風日盛,文字禪由之而起?!安涣⑽淖帧敝U變成了“不離文字”之禪。
忽然間我仿佛明白了UML存在的意義:說不可說之說?!搬屽人氖拍暾f,未曾說著一字?!狈鹪唬翰豢烧f。明明不可說,偏又說了那么多。
以前曾經認為,設計OO系統掌握住一個要點就行,即“道法自然”。然后就是“運用之妙,存乎一心”。在這個理論結構里,似乎是沒有UML存在的位置。畢竟“道可道,非常道”。但是佛經給了我啟發,這些經書在翻來覆去花了很多力氣講一些本來講不明白的東西?!安涣⑽淖帧?,是“說不得”;“不離文字”,是“說不得的東西如何去說”。對于這種難以言說的東西,人們常常采用寓言或發生在別人身上的故事來說明,即把抽象的道理形象化地釋出。
UML所做的正是相同的事,于是我們看到了在教科書中大量地采用UML,看到了用UML解釋別人的系統設計。也許我們能通過學習教科書中的UML和別人設計的UML實現“籍教悟宗”。
UML也是一種想像力的培訓,讓您在一切都還沒有的時候,生動地想象出系統將來的樣子。一個偉大的設計師,必是具有超凡想像力的人。UML是渡河的筏,對于已在河對岸的人,自然不需要;對于未渡而想渡的人,卻是非常需要的東西。此時我的感覺就是:“向來枉費推移力,今日自在水中行?!?
原文轉自:http://www.anti-gravitydesign.com