新聞中心
一些作者已經(jīng)強(qiáng)調(diào)了面向?qū)ο蟪绦蛟O(shè)計(jì)和面向數(shù)值程序設(shè)計(jì)的區(qū)別。MacLenna(1982)指出,值(例如數(shù)字17)是應(yīng)用式的和只讀的,他們總是抽象的。對(duì)象(例如實(shí)例)在一定范圍內(nèi)存在,可以被創(chuàng)造、撤銷、共享和更新。數(shù)值是引用透明的,引用它的一切事情將使用同樣的數(shù)值。Smalltalk也因此受到一些批評(píng),在Smalltalk中任何事物都是對(duì)象。無(wú)法實(shí)現(xiàn)一種正確的區(qū)分將導(dǎo)致幾個(gè)危險(xiǎn)。不清楚共享的數(shù)據(jù)結(jié)構(gòu)是否可能被錯(cuò)誤地更新,或者存在著一個(gè)以潛在的代價(jià)昂貴的復(fù)制開(kāi)銷。在給出了應(yīng)用式程序設(shè)計(jì)或面向數(shù)值的程序設(shè)計(jì)的一切優(yōu)點(diǎn)以后,為什么我們應(yīng)該完全需要對(duì)象呢?

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出龍山免費(fèi)做網(wǎng)站回饋大家。
首先,如果我們所采用的數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)于真實(shí)世界的話,那么計(jì)算機(jī)系統(tǒng)里現(xiàn)實(shí)世界模擬將會(huì)被大大簡(jiǎn)化。文件是對(duì)象,他們不能被代數(shù)描述。在普通程序設(shè)計(jì)語(yǔ)言中,變量是對(duì)象,他們的標(biāo)識(shí)和區(qū)分是通過(guò)他們的位置,而無(wú)需考慮它們的當(dāng)前值是什么。一個(gè)值屬于一個(gè)類型,而一個(gè)對(duì)象屬于一個(gè)類,本質(zhì)的區(qū)別是:具有相同描述的兩個(gè)對(duì)象可能并不相同,而相同的描述不可能是兩個(gè)不同的值。例如,只可能有一個(gè)值等于17的整數(shù),但蒙娜麗莎畫像可以有兩個(gè)完全一樣的副本。反之則是不正確的,這可以通過(guò)下面的情況進(jìn)行說(shuō)明??紤]具有不同描述的兩個(gè)對(duì)象(早晨的星星和晚上的星星),他們代表的是同一物理對(duì)象(金星)。許多語(yǔ)言都混淆了這個(gè)問(wèn)題,例如,Pascal中的文件可能無(wú)法被賦予表達(dá)式或在表達(dá)式中使用,盡管他們的聲明是通過(guò)和其他類型同樣的方式。模擬系統(tǒng)的程序員必須處理“狀態(tài)”和狀態(tài)的變化,他們必須處理時(shí)間或(至少在人工智能里的)可能世界。應(yīng)用式程序設(shè)計(jì)不是為此目的而設(shè)計(jì)的,而是為了處理不受時(shí)間影響的數(shù)學(xué)抽象。
那么,我們所需要做的就是清楚地區(qū)分值和對(duì)象以及支持這種區(qū)分并允許使用恰當(dāng)模型(值或?qū)ο螅┑囊环N語(yǔ)言。
函數(shù)是程序設(shè)計(jì)是一種風(fēng)格,包括建立在形式邏輯和數(shù)學(xué)基礎(chǔ)上的語(yǔ)言,例如Lisp或ML。普通程序通過(guò)向變量賦值而發(fā)生作用,這些變量代表了內(nèi)存中的存儲(chǔ)位置。任何以前存儲(chǔ)的值將會(huì)被重寫并永久消失,除非事先采取了有關(guān)步驟。應(yīng)用式程序語(yǔ)言(比如Lisp)不采用這種破壞的賦值過(guò)程。相對(duì)于命令式編程,應(yīng)用式程序設(shè)計(jì)不允許賦值或側(cè)放作用。在實(shí)際中,這意味著要節(jié)省存儲(chǔ)空間,處理器必須周期性地執(zhí)行一些無(wú)用存儲(chǔ)單元收集以清除那些不再需要的值。另一個(gè)普遍的特征是“延遲計(jì)算”,通過(guò)這種方式,數(shù)值在函數(shù)用到之前是不被計(jì)算的。這種類型的語(yǔ)言建立在函數(shù)應(yīng)用和組合的基礎(chǔ)之上,他們依賴于以以“l(fā)ambda演算”而聞名的邏輯系統(tǒng),對(duì)lambda演算,我們將在下面進(jìn)行說(shuō)明。當(dāng)應(yīng)用式程序設(shè)計(jì)維持“參照透明性”的時(shí)候,這就是說(shuō)每個(gè)表達(dá)式或變量在給定作用于范圍內(nèi)具有相同的值,所有變量都是局部的。那么在這種情況下,應(yīng)用式程序設(shè)計(jì)也就變成了函數(shù)是程序設(shè)計(jì)。這暗示我們可以用一個(gè)相等值來(lái)替換一個(gè)表達(dá)式,而不會(huì)改變整個(gè)表達(dá)式的值。這個(gè)屬性在定理證明和數(shù)據(jù)庫(kù)查詢中是很有用的,因?yàn)槠渲兄貙懞吞鎿Q是很基本的。雖然這種作用與規(guī)則很容易讓人想起面向?qū)ο蟮恼Z(yǔ)言,但函數(shù)式程序設(shè)計(jì)不允許對(duì)象具有狀態(tài)。一種過(guò)程語(yǔ)言命令計(jì)算機(jī)如何執(zhí)行一個(gè)特定的任務(wù)。一種非過(guò)程語(yǔ)言僅僅告訴計(jì)算機(jī)該做些什么,而不是怎么做。思考下列一個(gè)數(shù)據(jù)庫(kù)查詢,該查詢?cè)儐?wèn)每個(gè)部門各有多少個(gè)雇員以及總薪水和平均薪水是多少。
- SELECT DNAME, JOB, SUM(SAL), COUNT(*), AVG(SAL)
- FORM EMPLOYEE,DEPARTMENT
- WHERE EMPLOYEE.DEPTNO=DEPARTMENT.DEPTNO
- GROUP BY DNAME,JOB
實(shí)際上,這個(gè)查詢產(chǎn)生正確輸出,但結(jié)果是不必與我們相關(guān)的。上面所用的語(yǔ)言是SQL語(yǔ)言,注意他并沒(méi)有告訴計(jì)算機(jī)如何回答這個(gè)問(wèn)題。這涉及到獲取雇員表單,按部門和工作進(jìn)行排序,然后計(jì)算人數(shù)以及平均薪水和總薪水。最后,在輸出結(jié)果中,部門編號(hào)必須被部門名稱所代替。這本是一個(gè)相當(dāng)復(fù)雜的過(guò)程,其中涉及到讀紀(jì)錄和保存每一階段的中間結(jié)果。但這種建立在關(guān)系代數(shù)基礎(chǔ)之上的非過(guò)程SQL是所有這些都是不必要的。在SQL
的執(zhí)行過(guò)程中,存在著引入了一種過(guò)程性元素的內(nèi)置函數(shù)。純粹形性是一個(gè)非常珍貴的幫助。
術(shù)語(yǔ)“說(shuō)明性”比“非過(guò)程”更通用一些,因?yàn)樗思冋f(shuō)明性語(yǔ)言。這個(gè)術(shù)語(yǔ)更多的是與數(shù)據(jù)表示方法有關(guān),而于特定的程序設(shè)計(jì)風(fēng)格并無(wú)太大關(guān)系。說(shuō)明性語(yǔ)言的對(duì)立語(yǔ)言通常稱為命令式語(yǔ)言,但這種用法在更時(shí)髦但不太悅耳的“非過(guò)程”的攻擊下邊的落伍。Prolog語(yǔ)言也是一種說(shuō)明性的非過(guò)程風(fēng)格(盡管一種修剪(!)操作的出現(xiàn)使他同樣能夠以一種不靈活的過(guò)程風(fēng)格被使用)。現(xiàn)在,讓我們轉(zhuǎn)向使得這種語(yǔ)言成為可能的邏輯。
Prolog和SQL都是基于一階謂詞演算(這是數(shù)學(xué)邏輯的一種形式),SQL是建立在更小自己的基礎(chǔ)之上,因此可表達(dá)性較差。這些語(yǔ)言金當(dāng)他們的可表達(dá)性像Prolog一樣時(shí)才通常被稱為邏輯程序設(shè)計(jì)語(yǔ)言。函數(shù)式程序設(shè)計(jì)語(yǔ)言建立在另一種邏輯系統(tǒng)的基礎(chǔ)(lambda演算)之上,通常認(rèn)為它是邏輯程序設(shè)計(jì)語(yǔ)言,盡管它們深深根植于邏輯。
函數(shù)式程序語(yǔ)言有一些明顯的好處,這些好處包括:
◆它們的形式化基礎(chǔ)。
◆通過(guò)增加額外的可重用功能,他們很容易被擴(kuò)展。
◆統(tǒng)一的程序設(shè)計(jì)隱喻,從而,每件事都是一個(gè)函數(shù)。
◆較高級(jí)的結(jié)構(gòu)體(函數(shù)的函數(shù))容易表達(dá)。
◆支持多態(tài)性類型(像ML一樣)或完全風(fēng)格的類型自由(像Lisp一樣)。
【相關(guān)閱讀】
- 函數(shù)式編程語(yǔ)言F#:基于CLR的另一個(gè)頭等編程語(yǔ)言
- Scala如何改變了我的編程風(fēng)格:從命令式到函數(shù)式
- 關(guān)于測(cè)試和恢復(fù)性的爭(zhēng)論:面向?qū)ο髒s.函數(shù)式編程
- Scala編程語(yǔ)言
- Visual Studio 2010爆F(xiàn)#二進(jìn)制兼容性問(wèn)題
網(wǎng)頁(yè)題目:函數(shù)式語(yǔ)言基本知識(shí)
網(wǎng)頁(yè)URL:http://m.5511xx.com/article/coeihde.html


咨詢
建站咨詢
