自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Jython和JRuby,以及Groovy:Java平臺的統(tǒng)一認(rèn)識模型

開發(fā) 后端
本文從面向方面設(shè)計、分析的角度建立Jython和JRuby以及Groovy的統(tǒng)一認(rèn)識模型,以期對實際開發(fā)應(yīng)用有所指導(dǎo)。

當(dāng)前,對于Python、Ruby 和Groovy的討論以及學(xué)習(xí)正如火如荼。很多愛好者出于各種目的都在積極地開發(fā)這3種語言的潛力。Python和Ruby也分別有Java的版本:Jython和JRuby,再加上Groovy,把一些軟件初學(xué)者,特別是初初弄軟件架構(gòu)的人員搞得在他們這幾種語言中無從著手進(jìn)行選擇,本文從面向方面程序設(shè)計、分析的角度,幫助初學(xué)者對目前很熱的這3種語言進(jìn)行分類,以期這部分讀者能順利地解決對這3種語言的認(rèn)識問題,同時也解決一些長期以來糾纏不清的理論問題。為了達(dá)到這個目的,我們從以下4個方面來進(jìn)行敘述:

◆Python、Ruby和Groovy都是動態(tài)語言

◆元邏輯編程和面向方面的編程

◆Jython、JRuby和Groovy的語言層次分析

◆如何比較經(jīng)濟(jì)地使用Python、Ruby和Groovy語言

一、Python、Ruby和Groovy都是動態(tài)語言

【動態(tài)語言】是指用該語言編寫的程序在運(yùn)行時可以動態(tài)地改變程序定義的語言要素的層次結(jié)構(gòu)或內(nèi)部結(jié)構(gòu)。比如,你可以在運(yùn)行時用Ruby的反射機(jī)制或Groovy的元對象協(xié)議(MOP)完成下列編程:

例1:下面是一個Ruby腳本

  1. #Ruby 程序  
  2. #alias_method:用來記錄被覆蓋的方法  
  3. #define_method:重新定義一個方法,一般會調(diào)用alias_method保存的方法  
  4. #class_eval: 根據(jù)傳入字符串的值,給類增加一個方法。  
  5. def run_before(m)  
  6.        alias_method "__before__#{m}", m  
  7.        define_method(m) {|*arg| yield(*arg); send("__before__#{m}", *arg);}   
  8. end 
  9.    
  10. class Test  
  11.        def run  
  12.               puts "hello, my run" 
  13.        end 
  14.         
  15.        def self.log  
  16.               puts "before run" 
  17.        end 
  18. end 
  19.    
  20. class Test  
  21.        run_before("run") {log}  
  22. end 
  23.    
  24. test = Test.new 
  25. test.run  

例2:下面是一段Groovy腳本

  1. //Groovy程序  
  2. package com.groovy;  
  3. class MOPHandler {  
  4.        static void main(args) {  
  5.               def hndler = new MOPHandler()  
  6.               hndler.helloWorld()  
  7.               hndler.createUser("Joe"18new Date())  
  8.               hndler.name  
  9.               hndler.metaClass.toString()  
  10.        }  
  11.        def invokeMethod(String method, Object params) {  
  12.               println "MOPHandler was asked to invoke ${method}" 
  13.               if(params != null) {  
  14.                      params.each{ println "\twith parameter ${it}" }  
  15.               }  
  16.        }  
  17.        def getProperty(String property) {  
  18.               if (property.equals("name")) {  
  19.                      print "你用過 name 屬性\n" 
  20.               }  
  21.               println "MOPHandler was asked for property ${property}" 
  22.        }  
  23. }  

到這里我們必須提出一個比較嚴(yán)肅的問題:像上面我們看到的兩個程序一樣,這種反射式的編程和時下流行的“面向方面”的程序設(shè)計到底式什么樣的一個關(guān)系呢?

二、元邏輯編程和面向方面的編程

【元邏輯編程】通常是指利用語言本身的各種固有機(jī)制,特別是一些語言本身的背景機(jī)制進(jìn)行編程的邏輯機(jī)制。比如,反射,又如作用于Java字節(jié)碼的一些開源工程項目(像ASM)等等。當(dāng)你對Jython、JRuby 和 Groovy 的jar包進(jìn)行分析后,你會發(fā)現(xiàn)下面的一張表格:

語言對比條目

Jython

JRuby

Groovy

語言***版本

2.2.1

1.0.3

1.5.1

基本jar

jython.jar 

共計:1177KB

asm-2.2.3.jar

asm-commons-2.2.3.jar

backport-util-concurrent.jar

bsf.jar

jline-0.9.91.jar

jruby.jar

共計:2932030字節(jié)

groovy-all-1.5.1.jar

共計:2718KB

字節(jié)碼處理

Java的兼容性

稍低

中等

極高

元邏輯編程機(jī)制

開發(fā)者支持程度

人數(shù)少

人數(shù)中等

人數(shù)呈上升趨勢

掌握難度

及其容易

不易掌握

要懂Java

Web開發(fā)框架慣例

Rails

Grails

可編譯特性(Java

可以

可以

可以

原生AOP支持

不支持

偏向于不支持

支持

這份簡單的表格為我們提供了很多有用的信息,在這里我們主要關(guān)注——這3種語言的“元邏輯編程”和“面向方面編程(AOP)”兩項內(nèi)容。

首先我們要清楚元邏輯編程并不是AOP,當(dāng)前很多的開發(fā)者將元邏輯編程和AOP混淆了起來,比如,上面例子1中有些開發(fā)者就將它認(rèn)為是AOP的例子,這里我們來澄清一下相關(guān)認(rèn)識:

1、AOP本身強(qiáng)調(diào)的是:連接點、切點、通知以及方面,并且AOP很在乎由這些AOP編程機(jī)制帶來的類層次結(jié)構(gòu)的改變。這一點對于無論你用的是靜態(tài)織機(jī)還是動態(tài)織機(jī)都一樣。

2、我們不能把類似Java的動態(tài)代理機(jī)制就認(rèn)為是AOP的本真編程,比如,例子2中這個Groovy的程序由一個子句:  new MOPHandler()  就沒有被元對象協(xié)議捕捉。

因此,我們說:雖然面向方面的分析與設(shè)計是帶來軟件革命的一項已經(jīng)不算新的技術(shù)了,但請不要把稍微動態(tài)化一點的程序都冠以AOP的標(biāo)簽,這有助于我們把握技術(shù)的前沿方向。所以,在這里由必要向開發(fā)界提出元程序邏輯和【AOP本真編程】的概念。我們把應(yīng)用了【連接點】、【切點】、【通知】以及【方面】的程序設(shè)計叫做AOP本真編程或【原生AOP編程】,而以此同元邏輯編程相區(qū)別,把AOP本真編程以下的動態(tài)化編程稱為元邏輯編程。

三、Python、Ruby和Groovy的語言層次分析

對它們?nèi)叩恼Z言層次分析有助于我們把握他們的某些實質(zhì)。很多開發(fā)者都有一個共同認(rèn)識就是:很難在這三者中做出選擇主要用何種語言進(jìn)行24小時的開發(fā)。這里我們試圖幫助你做出選擇。

其實只要我們以面向方面的程序設(shè)計作為未來發(fā)展方向的話,一切問題就可以迎刃而解。我們在上的表格中看到,Jython沒有原生的AOP支持,JRuby傾向于不支持原生AOP編程,Groovy的元對象協(xié)議就是AOP的制作。說JRuby傾向于不支持AOP是由于在制作JRuby的過程中,ASM的字節(jié)碼修改主要是為了Ruby的語法,而不是向Groovy一樣使語言本身具有AOP的功能。于是我們可以用下列圖示表示Jython和JRuby以及Groovy的層次關(guān)系:

Jython和JRuby以及Groovy的層次關(guān)系 

從圖中我們可以看到,在Java平臺之上,Jython和JRuby作為不具備原生AOP功能基本處于同一層次,而Groovy從原生AOP功能上說比Jython和JRuby都強(qiáng)。

四、如何比較經(jīng)濟(jì)地使用Python、Ruby和Groovy語言

沒有任何一種語言可以徹底地取代另外一種或是所有的語言。因此無論Jython、JRuby和Groovy在AOP的未來功能上如何發(fā)展,你都必須對他們進(jìn)行學(xué)習(xí)。但是,什么時候該用什么語言進(jìn)行開發(fā)呢?我們來試著總結(jié)性回答這個問題。

1、從軟件工程的角度上講,Jython是最節(jié)省成本的選擇,JRuby次之,而Groovy雖然也很簡單但深入一點的開發(fā)其實還是較為困難的;

2、從個人學(xué)習(xí)的角度上講,可能有很多人處于Rails的原因會偏愛JRuby,也有一些開發(fā)者由于Groovy和Java的無縫集成而使用Groovy,然而大家需要知道的是,在這3種語言中其實個人可能會覺得JRuby非常不容易掌握;

3、從團(tuán)隊學(xué)習(xí)和應(yīng)用的角度講,Jython和Groovy是簡單的,而JRuby是較為困難的;

4、這3種語言都可以進(jìn)一步結(jié)合Java的字節(jié)碼處理技術(shù),進(jìn)一步完成AOP的功能,在這個時候,Jython將碰到的技術(shù)問題最多,JRuby次之,而Groovy將碰到的技術(shù)問題可能沒有。

在Jython、JRuby和Groovy的應(yīng)用開發(fā)上,但愿本文起到拋磚引玉的作用。

【編輯推薦】

  1. 略談Jython語言:什么是Jython?
  2. Python實用開發(fā)指南
  3. Groovy VS JRuby
  4. Ruby實用開發(fā)手冊
  5. Java、.Net、PHP、Ruby優(yōu)劣勢概覽
  6. Groovy創(chuàng)始人:Java面臨終結(jié) Scala將取而代之
責(zé)任編輯:yangsai 來源: CSDN博客
相關(guān)推薦

2011-06-22 10:14:49

JVM

2012-05-18 00:01:07

JVMJavaJVM平臺

2009-07-17 17:49:39

JRuby學(xué)習(xí)

2009-07-16 14:26:44

Python和Jyth

2010-05-13 23:31:54

統(tǒng)一通信平臺

2020-09-15 15:06:43

智慧

2009-07-16 13:09:46

Jython安裝

2012-05-07 23:45:54

FantomJavaJVM

2011-08-10 09:54:10

JRubyJava 7

2009-07-15 16:35:55

Jython訪問Jav

2010-05-17 15:58:04

統(tǒng)一通信平臺

2009-07-14 15:20:25

Jython腳本Jython解釋器

2009-07-17 17:05:29

JRuby是什么JRuby

2012-02-09 14:59:11

IBMDB2

2009-07-10 17:33:39

jython語言什么是JythonJython

2009-07-15 16:29:39

Jython連接JavJavaUtils模塊

2018-05-31 21:14:49

Amas大數(shù)據(jù)監(jiān)控平臺

2010-05-13 11:23:46

統(tǒng)一通信平臺

2024-07-11 07:02:01

2010-07-28 10:21:44

統(tǒng)一計算
點贊
收藏

51CTO技術(shù)棧公眾號