java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧

java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧

ID:30776400

大?。?40.74 KB

頁(yè)數(shù):14頁(yè)

時(shí)間:2019-01-03

java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁(yè)
java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁(yè)
java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁(yè)
java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧_第4頁(yè)
java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧_第5頁(yè)
資源描述:

《java8采用martinfowler的方法創(chuàng)建內(nèi)部dsl-java開發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、Java8采用MartinFowler的方法創(chuàng)建內(nèi)部DSL-編程開發(fā)技術(shù)Java8采用MartinFowler的方法創(chuàng)建內(nèi)部DSL本文illImportNew-賴信濤翻譯口javacodegeekso歡迎加入翻譯小組。轉(zhuǎn)載詰見文末要求。我最近在讀MartinFlower寫的一本非常棒的關(guān)于DSLs(DomainSpecificLanguages)的書。圍繞DSLs及語(yǔ)言的內(nèi)容使得我們可以很方便地創(chuàng)建DSLs,DSLs的使用讓我對(duì)DSLs的概念更加好奇,這本書讓人印象深刻。在MartinFowler一書的開始是

2、這樣定義DSLs的:Domain-specificlanguage(noun):一種專注于某一領(lǐng)域,僅針對(duì)部分表達(dá)方式的計(jì)算機(jī)編程語(yǔ)言。(譯者注:求專不求全。)DSL不是什么新鮮玩意,很久以前,人們就將XML作為--種DSL的--種形式來(lái)使用了。將XML作為DSL來(lái)使用非常便捷,因?yàn)槲覀兛捎脕?lái)檢查DSL的XSD,有解釋DSL的解釋器,還有能將DSL轉(zhuǎn)換成其他語(yǔ)言的XSLTo并且,多數(shù)的語(yǔ)言都對(duì)解釋XML和獲取該語(yǔ)言領(lǐng)域屮模型對(duì)象的內(nèi)容捉供了很好的支持。像是Ruby,Groovy等等這些語(yǔ)言的出現(xiàn)使得DSL被更

3、廣泛的接受。比如Rails,—個(gè)使用Ruby寫的Web框架,廣泛地采用了DSLs。MartinFowler在他的書中將DSLs分為三類:內(nèi)部的DSL,外部的DSL,和語(yǔ)言工作平臺(tái)的DSL。當(dāng)我讀到內(nèi)部DSL概念時(shí),使用Jewel作為宿主語(yǔ)言,用我口己簡(jiǎn)單的DSL小試牛刀了一下。內(nèi)部DSLs駐于宿主語(yǔ)言屮,并月.遵守宿主語(yǔ)言的語(yǔ)法。盡管使用Java作為宿主語(yǔ)言沒(méi)有讓我非常清楚的了解DSL,但卻有效地讓我以一種合適的方式來(lái)了解DSLo我打算寫一個(gè)能產(chǎn)生圖表的DSLo在Java中有兩種接收輸入并產(chǎn)生表格的方法:Ad

4、jacencyList和AdjacencyMatrixo然血我發(fā)現(xiàn),在沒(méi)有將矩陣作為"一等公民”提供支持的語(yǔ)言(尤其是Java)實(shí)現(xiàn)是非常困難的,所以,我就嘗試著在Java中寫一個(gè)內(nèi)部DSL來(lái)實(shí)現(xiàn)對(duì)表格的操作。在他的書中,MartinFowler強(qiáng)調(diào)需要保持語(yǔ)義模型不同于DSL,并且引入了一個(gè)中間表達(dá)式構(gòu)造器來(lái)從DSL中產(chǎn)生語(yǔ)義模型。所以為了遵守上述內(nèi)容,我通過(guò)寫不同的DSL語(yǔ)法和表達(dá)式構(gòu)造器實(shí)現(xiàn)了三種不同的DSLs形式,同時(shí)又使用了相同的語(yǔ)義模型。理解語(yǔ)義模型在這種情景卜?,語(yǔ)義模型就是包含了Edge實(shí)例數(shù)

5、組的Graph類,每一個(gè)Edge對(duì)象又存放了從Vertex到Vertex的數(shù)據(jù)和一個(gè)weight。卜而看一卜代碼吧。Graph,javaimportjava.util.ArrayList;importjava.util.List;importjava.util.Set;importjava.util.TreeSet;publicclassGraph{privateListedges;privateSetvertices;publicGraph(){edges=newArrayLis

6、tO();vertices=newTreeSetO();}publicvoidaddEdge(Edgeedge){getEdges()?add(edge);}publicvoidaddVertice(Vertexv){getVertices().add(v);}publicListgetEdges(){returnedges;}publicSetgetVertices(){returnvertices;}publicstaticvoidprintGraph(Graphg){Syst

7、em,out.printin("Vertices.??〃);for(Vertexv:g.getVertices()){System,out.print(v.getLabel()+〃〃);}System,out.printIn(〃〃);System,out.printin("Edges.??〃);for(Edgee:g.getEdges()){System,out.println(e);}Edge,javapublicclassEdge{privateVertexfromVertex;privateVertex

8、toVcrtcx;privateDoubleweight;publicEdge(){}publicEdge(VertexfromVertex,VertextoVertex,Doubleweight){this.fromVertex=fromVertex;this.toVertex二toVertex;this.weight二weight;}?OverridepublicStringtoString()

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。