|
系列文章導(dǎo)航:
軟件發(fā)展至今,無論是編程語言,還是軟件工程,乃至是互聯(lián)網(wǎng)的趨勢發(fā)展,都是飛速發(fā)展。于是,我們便迷茫于這樣形形色色的語言和概念之間,無所適從。其實,我們不妨返璞歸真,回到最初,讓我們從語義出發(fā),來討論這形形色色的種種,你是否恍然大悟呢?
10. 面向?qū)ο笈c語義分析
我們都知道,面向?qū)ο笫亲皂斚蛳碌姆治鲞^程和自底向上的設(shè)計過程。在這里,首先,我們先不談分析過程,只談設(shè)計過程。
系統(tǒng)有多少個類,不是一拍腦袋想出來的,不是經(jīng)驗累積而成的,而是根據(jù)需求分析中提煉出來的。
類的產(chǎn)生是名詞提煉的過程,我們知道,每個對象都是對應(yīng)著現(xiàn)實中的一個實體,而每個類都是對具有相同特征的對象的抽象。越是恰當(dāng)?shù)某橄螅覀兙驮侥芴釤挸鼍_的類。
這時,讓我們不得不感嘆古人詩詞的精妙:
枯藤老樹昏鴉,小橋流水人家,古道西風(fēng)瘦馬。夕陽西下,斷腸人在天涯。
詩詞,是對文章高度的抽象過程;面向?qū)ο蟮脑O(shè)計過程,也是對現(xiàn)實世界的抽象過程;何時,我們能將需求分析文檔精確提煉成古詩詞,此時乃大悟面向?qū)ο笾酪病?/p>
11. 設(shè)計是違反語義的過程
與其說面向?qū)ο罂芍赜茫拙S護(hù),不如說面向?qū)ο蟾N近我們的現(xiàn)實設(shè)計,讓我們的每一個類的產(chǎn)生都有章可循。此乃為面向?qū)ο笾钜病?/p>
在之前的一部,我們將現(xiàn)實社會映射成了我們的程序中對應(yīng)的類,可是這時肯定會有人跳出來說,這是面向?qū)ο竺矗坷^承,多態(tài),封裝,你這什么都沒有??!
這就是我在本節(jié)中要提到的,在我看來:設(shè)計是一個違反語義的過程。
例如:”老師講課,學(xué)生聽課。“這樣的語義環(huán)境,自然會產(chǎn)生老師和學(xué)生兩個類,可是大家這時都會想到,此時應(yīng)該提取出來”人“作為老師和學(xué)生的基類(父類)。可是,我們知道,人在此語義中是不存在的,他只是我們根據(jù)經(jīng)驗來假設(shè)出來的。我們在之前說過,類是對對象(現(xiàn)實事物)的抽象,而父類又是對類的再抽象過程。因此,我認(rèn)為:繼承是對抽象的再抽象。
提到設(shè)計,我們就要提到設(shè)計模式,我們來想想常見的設(shè)計模式,工廠,適配器,策略等等,這些在我們的語義中都是無法分析出來的,因此,在我看來,設(shè)計模式實際上是犧牲了語義的自然性,來換取軟件的可重用性和可維護(hù)性。
12. 數(shù)據(jù)庫設(shè)計與自然語義的沖突
在此,我指的數(shù)據(jù)庫特指關(guān)系型數(shù)據(jù)庫。因此我說,數(shù)據(jù)庫設(shè)計與自然語義的沖突,其實就是說關(guān)系型數(shù)據(jù)庫與面向?qū)ο笳Z言之間無可調(diào)和的矛盾。
換句話說,在面向?qū)ο笾校瑢傩圆灰欢ㄊ窃拥?,?shù)據(jù)也不一定沒有冗余,因此數(shù)據(jù)庫的三大范式對于面向?qū)ο笤O(shè)計來說,是不適用的,這也就間接導(dǎo)致了,關(guān)系型數(shù)據(jù)庫和面向?qū)ο笤O(shè)計時沖突的。
(注:由于本人對 ORM了解甚少,以下言論請大家選擇性相信,也希望大家不吝賜教)其中ORM就是為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫不匹配而產(chǎn)生的技術(shù)。很多人在用ORM時有一個誤區(qū),就是首先建立數(shù)據(jù)庫,然后由數(shù)據(jù)庫生成實體對象,但是在我看來,數(shù)據(jù)庫只應(yīng)該是存儲數(shù)據(jù)的工具,而絕不應(yīng)該成為整個項目設(shè)計的核心,正確使用ORM的辦法應(yīng)該是把程序自動持久化到關(guān)系數(shù)據(jù)庫中,而我們在程序中對數(shù)據(jù)庫是一無所知的,我們操作的只是一個對象的集合罷了。我不清楚ORM當(dāng)今的發(fā)展,但是在我看來,一個完美的ORM系統(tǒng)應(yīng)該具備解析對象,然后將對象轉(zhuǎn)換為符合范式的數(shù)據(jù)庫結(jié)構(gòu)的能力。
另外,視圖和緩存表也是解決方案之一。
最后,我們只能期待對象型數(shù)據(jù)庫的進(jìn)一步成熟了。
13. 我眼中的未來語言
在我眼中,語言的發(fā)展方向應(yīng)該是逐步貼近語義,試想從第一代語言發(fā)展至今,語言的趨勢無非是越來越適合于程序員使用,提高程序員的工作效率,說句再難聽些的,就是逐步降低系統(tǒng)開發(fā)程序員的門檻,其體現(xiàn)一者在于方法封裝的逐步完善,二就在于越來越接近自然語言,越來越接近“大型作文”的寫作過程。
那么當(dāng)軟件發(fā)展到一定程度,我認(rèn)為未來的語言是等同于自然語言的程序設(shè)計語言。從而人人可編程,方法高度封裝,編譯器可識別人們的自然語言語義從而轉(zhuǎn)換成機器可識別的語言。我們需要做的只是把需求整理成“無語病”的需求分析文檔,然后把文檔移交給“編譯器”,返回給我們的是一個個.exe,.ASPx。
也許到了那一天,程序員這個職業(yè)不復(fù)存在了,取而代之的是作家,這一天,我們說,軟件真的發(fā)展到了最高階段。
it知識庫:基于自然語言的軟件工程和程序設(shè)計(下),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。