當前位置:機電之家首頁 >> 工程造價>> 工程論文 >> 軟件工程論文 >> 再探結(jié)構(gòu)化設計和面向?qū)ο笤O計方法
再探結(jié)構(gòu)化設計和面向?qū)ο笤O計方法

結(jié)構(gòu)化設計歷來備受責備的就是需求和設計之間的鴻溝,以前不是很理解這個鴻溝的原因?,F(xiàn)在再看,在結(jié)構(gòu)化設計中模塊和模塊之間的關(guān)系,被緊緊局限于信息流,這限制了對模塊之間眾多關(guān)系的表達,也無法體現(xiàn)模塊和模塊之間其他的眾多關(guān)系,包含各種各樣的結(jié)構(gòu)、行為、依賴、包含(在結(jié)構(gòu)化設計中這種關(guān)系隱含在分層中)、繼承、關(guān)聯(lián)關(guān)系等等。它僅僅解決了模塊在封裝和信息隱藏方面的問題。

  再看面向?qū)ο笤O計方法,充分挖掘了“關(guān)系”的表達方式,可以盡可能的將事物之間復雜的關(guān)系予以體現(xiàn),而這些關(guān)系是實現(xiàn)設計的關(guān)鍵??梢赃@樣比喻目前為什么面向?qū)ο蠓椒ㄈ绱肆餍?,記得小時候經(jīng)常在各種雜志上看到許多這樣的圖畫“一個鋼球,從高處落下,擊中某個翹起的裝置,裝置受到鋼球的沖擊,另一端抬起后,原來被截斷的水流開始流通,并引發(fā)另一個設備開始工作……,最終在另一端的某個蠟燭被點燃”。這就是在工業(yè)時代,眾多人被機械設計的靈巧和創(chuàng)意所深深吸引的其中一份圖畫。姑且不論這樣的裝置是否有實用價值,但它肯定帶給構(gòu)思者無限的快樂和想象力,以至于當時經(jīng)??梢钥吹礁鞣N各樣這樣的圖畫。而面向?qū)ο蟮姆椒ㄕ且蚴褂脤ο蟮母拍钭屧O計更接近于上面的各種設備,而讓機械設計時代的瘋狂和無盡的創(chuàng)造力進入了軟件工程師的視野。由于能夠充分表達事物之間各種各樣的關(guān)系(更接近于結(jié)構(gòu)和行為方面),面對對象設計方法在今天創(chuàng)造了一個奇跡,各式各樣巧妙的設計實現(xiàn)、設計模式的流行,幾乎在永無止境的激發(fā)著愛好設計的人們的想象力和創(chuàng)造力。再看最流行的類比:建筑和軟件。建筑最主要的特征是什么——結(jié)構(gòu)。這也是為什么建筑能夠和軟件設計(最終設計都要體現(xiàn)在模塊上)進行類比的潛在原因。相比之下,我更傾向于拿機械設計來和軟件設計進行類比。

  回到結(jié)構(gòu)設計化方法上來,雖然很多人都說結(jié)構(gòu)化設計和面向?qū)ο笤O計沒有本質(zhì)上的區(qū)別,那是因為某些關(guān)系依然可以通過轉(zhuǎn)換映射到信息流上,但這畢竟繞了一個大彎,而且由于缺乏足夠的表達各種關(guān)系的能力,極大的限制了軟件設計者的想象力和創(chuàng)造力。結(jié)構(gòu)化設計方法使用自頂向下的手段,通過Process的逐層分解來理解和構(gòu)建系統(tǒng),然后把Process分配給模塊,這里的“分配”這幾乎讓每一個初次接觸結(jié)構(gòu)化設計方法的人大惑不解,似乎模塊是Process分解的結(jié)果,甚至在如果已知了某些模塊時又直接將模塊映射成一個黑盒的Process,Process和模塊究竟是什么關(guān)系?沿著這個思路,很容易陷進“雞生蛋,蛋生雞”的困境。而事實是,模塊和Process的誕生,兩者之間根本沒有任何關(guān)聯(lián),都是獨自根據(jù)經(jīng)驗所產(chǎn)生的。為什么會產(chǎn)生這樣的問題?究其原因,結(jié)構(gòu)化設計方法和我們自出生以來認識事物的方式有著很大的不同。因為打我們一出生,眼里落入的就是各式各樣的實體,而我們區(qū)分它們主要依靠就是事物各式各樣的特征,包括事物不同的結(jié)構(gòu)和特定的行為,而結(jié)構(gòu)化設計方法試圖通過信息流及其轉(zhuǎn)換來認識系統(tǒng),這天生造成了某種障礙。相比之下,面向?qū)ο蠓椒▌t和我們所熟悉的認識世界的方式相吻合,更加的自然。

  那么結(jié)構(gòu)化設計的優(yōu)點到底是什么呢?考慮警察破案時,需要根據(jù)證人不斷的描述犯罪嫌疑人特征對犯罪嫌疑人進行畫像的場景,就可以理解結(jié)構(gòu)化設計方法優(yōu)點在于:當我們面對一個只知道存在各式各樣需求,而對系統(tǒng)其它方面一無所知的時候,它可以通過“功能”幫助我們逐步理清需求之間復雜的關(guān)系,它天生就有對需求之間重復功能進行匯聚的能力,通過對系統(tǒng)的需求的整體理解,讓我們知道系統(tǒng)到底需要做些什么,從而對系統(tǒng)有更清楚的認識,對“需求”的理解和澄清是結(jié)構(gòu)化方法的核心。這樣也可以理解為什么結(jié)構(gòu)化設計方法比面向?qū)ο笤O計方法更早的誕生。因為在軟件工業(yè)的早期,軟件系統(tǒng)彼此獨立,數(shù)量稀少,可以利用的經(jīng)驗非常缺乏,而結(jié)構(gòu)化設計方法則在這種一開始就缺乏經(jīng)驗的時候有著極大的幫助,幫助人們從需求、功能的角度分析和理解系統(tǒng)。

  那么,在我們理解結(jié)構(gòu)化設計和面向?qū)ο笤O計的背后,到底隱藏了什么樣的秘密,又如何理解其他各式各樣的設計方法呢?其實,這個秘密躲藏在我們經(jīng)常談起的“差異性”的背后。我們經(jīng)常談起差異性,但卻很容易忽視和差異性相伴相生的另一面——“共同性”。共同性促使我們對事物進行分類和總結(jié),而差異性則讓世界充滿了變化,并讓這個世界變得更加的復雜而樸素迷離。每一種“共同性”凝聚成一個軸,構(gòu)成了我們觀察世界的“維度”。各種“維度”交織在一起,讓整個世界系統(tǒng)變成了一個復雜的“立方體”,這個立方體既不是平面的,也不是三維的,而是一個多維交織的復雜事物。結(jié)構(gòu)化設計方法,抓住了“信息流”和“信息流轉(zhuǎn)換”兩個維度,并試圖沿著這兩個維度理解和認識系統(tǒng);而面向?qū)ο笤O計方法則采用了“結(jié)構(gòu)、行為”這兩個主要的維度(還有其他),引領(lǐng)我們看清世界。每一種方法都試圖通過某一個維度或者某幾個維度的組合,去幫助我們認識和理解世界,比如面向方面的設計方法、面向服務的設計方法等等。這樣再去理解表達方式,當某種表達方式能夠表達的維度越多,它所能適應的范圍就越廣,這樣也可以理解為什么目前很多的設計方法,都依靠的是UML,導致大家看不清其和面向?qū)ο蠓椒ù嬖诘谋举|(zhì)區(qū)別,也解釋了為什么結(jié)構(gòu)化設計方法的表達方式其實限制了我們的想象力和創(chuàng)造力。其實面向?qū)ο蠓椒ㄒ灿衅渚窒扌裕唵蔚呐e例,比如模板編程就抓住了算法結(jié)構(gòu)的緯度。

  沿著維度的概念,我們也可以看清楚Java和C#以及C++本身的區(qū)別,也可以想象如果Java始終局限于純面向?qū)ο笳Z言的偏執(zhí)中,很有可能在通用語言的競賽中落后。再看動態(tài)語言Python,拋棄“類型”的維度,只抓住“名字”的維度,帶來的極大靈活性,它不需要判斷對象的其他維度的特征,只需要有一個相同的名字,程序就可以執(zhí)行,當然也帶來了隱患,但如果認識不到這個維度的差別,很可能將會將這種語言特性,和面向?qū)ο笳Z言中的“接口”(專注結(jié)構(gòu)和行為)概念相混淆。其實,“共同性”所構(gòu)成的“維度”的概念就像一個重磅炸彈,可以激發(fā)我們對世界包括軟件設計許許多多方面的思考火花,剩下的則更多的想象力的競賽。


 

作者:未知 點擊:608次 [打印] [關(guān)閉] [返回頂部]
本文標簽:再探結(jié)構(gòu)化設計和面向?qū)ο笤O計方法
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《再探結(jié)構(gòu)化設計和面向?qū)ο笤O計方法》相關(guān)權(quán)利人與機電之家網(wǎng)取得聯(lián)系。
關(guān)于“再探結(jié)構(gòu)化設計和面向?qū)ο笤O計方法”的更多資訊

電子樣本

SN系列樣冊
:鞏經(jīng)理
:13915946763
:南京塞姆泵業(yè)有限公司
個人求購

雒工 【求購】  永磁風力發(fā)...  2025-12-1
楊異乾 【求購】  電涌保護器  2025-11-28
趙焱 【求購】  電氣溫控閥  2025-11-28
張揚瓊 【求購】  ABB火檢...  2025-11-27
張雪根 【求購】  固體除垢劑  2025-11-26
趙經(jīng)理 【求購】  變壓器  2025-11-26
羅經(jīng)理 【求購】  巡邏車跟蹤...  2025-11-26
趙經(jīng)理 【求購】  柴油發(fā)電機  2025-11-26
VIP公司推薦