天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

基于自然語言的軟件工程和程序設計(中)

系列文章導航:

基于自然語言的軟件工程和程序設計(上)

基于自然語言的軟件工程和程序設計(中)

基于自然語言的軟件工程和程序設計(下)


  軟件發(fā)展至今,無論是編程語言,還是軟件工程,乃至是互聯(lián)網(wǎng)的趨勢發(fā)展,都是飛速發(fā)展。于是,我們便迷茫于這樣形形色色的語言和概念之間,無所適從。其實,我們不妨返璞歸真,回到最初,讓我們從語義出發(fā),來討論這形形色色的種種,你是否恍然大悟呢?

  5. 面向過程是先總后分的行文順序

  相信大多數(shù)程序員都和我一樣,C語言都是自己的第一門語言,那么面向過程的這個概念也自然深入人心。其實,我相信,每個人心中的思維都是面向過程的。

  “我們應該先干嘛,再干嘛”。這是每個人在做一件事情前的常規(guī)思維,編程時也是一樣,我們在實現(xiàn)一個方法,或者在完成一個功能時,都會去想,應該先做什么,再做什么,然后我們會相應地把一個方法拆分成若干個子方法,這就是我們傳統(tǒng)的面向過程的編程。

  我們把這種方式稱之為“自頂向下”的編程思維。在做一件事情之前,我們要了解這件事情是什么,然后再去想這件事情應該怎么做。

  這種與我們常規(guī)的對應叫做記敘文,說得難聽一些我們可以稱之為流水賬。

  我們不妨說得偏激一點,面向過程的核心不在于方法,而在于過程。面向過程本是沒有方法的,后來為了可讀性才增加了方法這個概念。本就是輔助,當然可有可無。

  概括起來,面向過程的編程方式是先總后分的行文方式,先知道總體意思,再逐條去寫。

  6. 面向?qū)ο笫窍确趾罂偟男形捻樞?/strong>

  逐漸地,我們開始接觸了Java、C#等面向?qū)ο蟮恼Z言,但是我們是否卻始終沒有辦法扭轉(zhuǎn)思維,來找到如何來面向?qū)ο竽兀恳只蚴俏覀兘?jīng)常為了面向?qū)ο蠖嫦驅(qū)ο竽兀?/p>

  我們究竟錯在了哪?我就是按照常規(guī)的語義來分析整個的項目,那為什么無法面向?qū)ο竽兀垮e只錯在我們解析語法的角度出現(xiàn)了問題。

  在上文中,我提到了我在高中時非常常用的一種記敘方式,就是我會在文章的題記前,先把開場的主人公全部都陳列出來,其中包括他們的主要性格,以及簡要概括他們的陳年往事。如此做的原因是因為文章的故事結構比較復雜。

  那么我會做的是,首先在提綱上列去所有的主人公,然后想清楚他的主要性格,之后再去根據(jù)他的性格來為他設定一些事件,最后根據(jù)這些事件安排這些主人公的出場順序,以及人物之間的關系。

  這也得出了我對面向?qū)ο蟮暮诵乃枷氲母攀觯阂匀藶楸尽_@里的人不僅僅是人,是指所有存在的生物,乃至非生物。換句話說,所有需要有行為的物體。可以是人,可以是計算機,甚至可以是一個衣柜。

  面向?qū)ο蟮暮诵牟辉谟跇I(yè)務邏輯的過程,而在于找到所有的“人”,然后知道每個人都能做什么,最后我們再把這些行為加以組裝而已。

  概括起來,面向?qū)ο蟮木幊谭绞绞窍确趾罂偟男形姆绞剑谖恼乱潦迹考虑槎疾恢雷约菏窃诟陕铮皇窃诒磉_著自己。知道最后,才會發(fā)現(xiàn),原來這些事情的作用是這個樣子的。

  有這樣一本書,叫像堆積木一樣做軟件。我不清楚這本書的內(nèi)容是什么,但是這個題目很形象,面向?qū)ο笤诜治鲞^程實際上就是在做積木,每個積木都不知道自己未來會干嘛,而當積木都做好了之后,堆積木就變得簡單而易行了。

  7. 并發(fā)式編程是交錯式的行文順序

  隨著軟件對性能要求的逐漸提升,并發(fā)已經(jīng)成為了我們不可回避的話題,從Erlang到C#4.0的并行庫,再到顯卡編程的盛行,并發(fā)編程已經(jīng)逐漸走到了我們的面前。

  在高中時,有一種文體非常盛行,我也曾多次嘗試,最后的分數(shù)也還不錯。這種問題是在行文時,分別描述兩件事情或多件事情,這幾件看上去毫無關系,只是由每一段的ABCD、abcd等不同的符號來標識,然而這些事情到最后卻揭示的同一道理,或者是最后他們在同一場景匯聚,來構成了故事的結局。

  這種文體在新概念作文大賽上屢有出現(xiàn)。其實這就對應著我們常規(guī)意義上的并發(fā)編程。每件事情和每件事情之間從局部上沒有著直接聯(lián)系,但是最后宏觀上,他們都是在為了做同一件事情,達到同一個目的。就像裝配腦袋某天在群里討論的冒泡排序的并發(fā)版——奇偶排序一樣,從微觀上,對奇數(shù)排序和對偶數(shù)排序沒有必然聯(lián)系,實則他們在完成著同一項工作。

  8. 重談總體行文

  我一直在編程中都很強調(diào)一點,語義的重要性!

  完美的編程語言應該是與自然語言完全對應的,可以把一篇文章翻譯成與之對應的計算機語言,發(fā)展到那時,程序員就真的變成了翻譯工作,只需要把對應的需求文檔無需設計,翻譯成計算機認識的一串串代碼就可以了。

  我們究竟如何分析一個軟件需求。在我看來,軟件的創(chuàng)造過程實則就是語義的分析過程。

  當拿到一份需求時,按照面向?qū)ο蟮能浖こ趟枷耄覀儜撌紫茸龅教崛〕鲞@份需求文檔中所有的“主人公”,然后找到這些主人公每個人都可以干嘛,能干嘛,要干嘛。然后為之建立模型。這是面向?qū)ο蟮倪^程。

  然后是每個行為的分析過程,要做這個行為,我們要先怎么做,再怎么做,為這個行為建立相應的流程圖,這是面向過程的分析過程。

  接下來,我們可以分析某個行為怎么做,是否可以一邊干嘛,一邊干嘛。這是面向并發(fā)的建模過程。

  當我們要描述某個算法時,我們可以說這個算法要怎么做,只是基于語義的描述,例如斐波那契數(shù)列要用第一個數(shù)加上第二個數(shù),這其實就很有可能是一個函數(shù)式編程的產(chǎn)生過程。

  最后是組裝,也就是堆積木的過程。我們的積木都已經(jīng)做好了,我們只需要按照不同的業(yè)務邏輯,去把這些積木搭起來就可以了。

  也就是說,當我們建立一個項目時,首先建立人物傳記(面向?qū)ο螅缓髮θ宋锏慕?jīng)歷進行描述(面向過程)。最后成文時,我們可以用交錯式行文方式對其重組(并發(fā)式)。

  那么好,我們概括下整個的過程:面向?qū)ο蠓治?->面向過程分析--->在過程的細節(jié)上并發(fā)或者函數(shù)式--->組裝時再次考慮并發(fā)。

  9. 小議過時說

  經(jīng)常會聽到這樣的聲音,未來是面向服務的,未來是面向?qū)ο蟮模嫦蚝瘮?shù)的,面向過程已經(jīng)過時了之類的話。

  其實,看過我上面的分析過程,一個完整的工程只靠著某一種編程范式是行不通的,一個工程的搭建需要的是各種范式的配合使用,每種范式都有著它所擅長的部分。

  就像面向?qū)ο笤俸糜茫矡o法脫離了面向過程而單獨存在,哪怕你的原子拆分得再細,也無法逃開對每件事情進行分析的過程,況且還有著業(yè)務邏輯組裝過程的存在。

  而面向函數(shù),面向并發(fā)再強大,他也無法取代面向?qū)ο笤诜治鲆粋€大型項目中自底向上這樣巨大的優(yōu)勢。因此任何編程范式皆無過時說。就像語言之爭一樣,每種語言都有著其合適的應用范圍,談語言優(yōu)劣,過時與否,我覺得毫無必要。

  下文簡介:

  在下文中,我會對對全文進行一個總體的總結,以及語義與面向?qū)ο蟮年P系,設計模式與語義的關系,并且會淺談個人認為未來語言的發(fā)展方向等等,敬請關注,謝謝。

it知識庫基于自然語言的軟件工程和程序設計(中),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 男人边吃奶边挵进去呻吟漫画 | 18禁国产精品久久久久久麻豆 | 免费韩伦影院在线观看 | 换脸国产AV一区二区三区 | 亚洲国产精品一区二区三区在线观看 | 凤楼app | 91久久偷偷做嫩草影院免费看 | 野花社区视频WWW高清 | 久久综合中文字幕无码 | 在线观看视频中文字幕 | 小柔的性放荡羞辱日记 | 中文字幕中文字幕永久免费 | 久艾草在线精品视频在线观看 | 亚洲乱色视频在线观看 | 欧美在线亚洲综合国产人 | 办公室里呻吟的丰满老师电影 | 樱桃bt在线www | 欧美日韩中文在线字幕视频 | 夜夜女人国产香蕉久久精品 | 99九九精品国产高清自在线 | 一个人免费观看HD完整版 | 伊人天天躁夜夜躁狠狠 | 国产高清超清在线播放 | 娇喘嗯嗯 轻点啊视频福利 娇喘高潮教室h | 新香蕉少妇视频网站 | 精品亚洲午夜久久久久 | 日韩午夜中文字幕电影 | 乱精品一区字幕二区 | 国产欧美在线亚洲一区刘亦菲 | 青青草久久伊人 | 国产亚洲欧洲日韩在线观看 | 无码精品AV久久久奶水 | 亚洲国产成人精品不卡青青草原 | 亚洲在线视频自拍精品 | 色宅男午夜电影网站 | 高潮久久久久久久久不卡 | 年轻的朋友4在线看中文字幕 | 高中生高潮抽搐喷出白浆视频 | 亚洲欧美日韩另类精品一区二区三区 | xxx动漫xxx在线观看 | 白白操在线视频 |