java scripting linguagens interpretados pelo java por paulo césar m. jeveaux
TRANSCRIPT
Java ScriptingLinguagens interpretados pelo Java
por Paulo César M. Jeveaux
Java Scripting
2
Agenda
04/10/2007
Introdução; Linguagens: Compiladas, Interpretadas e híbridas; JSR 223: Scripting para a plataforma Java; Bean Scripting Framework (BSF); Linguagens de Script:
Groovy; JRuby; Jython; JUDOScript; ECMAScript e Rhino; BeanShell;
Prós e Contras;
Java Scripting
3
Paulo César M. Jeveaux
04/10/2007
Javanês desde [+-] 2000/01; Mantenedor do Portal Java e do ESJUG
http://www.portaljava.com https://esjug.dev.java.net
Arquiteto de Sistemas Java EE; Palestrante nos principais eventos Java
do país. Participante de diversos grupos e comunidades de Java, Linux e Software Livre em geral.
4
Java Scripting
Introdução
04/10/2007
Java Scripting
5
Introdução
04/10/2007
Escrever código elegante e eficiente em Java não é tarefa das mais simples;
Manter a qualidade dos códigos e não distorcer o design especificado para a aplicação é uma tarefa ainda mais difícil;
Resolver problemas que exigem solução rápida utlizando APIs Java cujo uso não é tão frequente, geralmente demora mais tempo ou é mais trabalhoso do que o desejado;
Java Scripting
6
Introdução
04/10/2007
Para simplificar e aumentar a produtividade podemos escrever scripts para estas tarefas, que podem ser executados manual ou automaticamente, dentro ou fora da aplicação;
Estes scripts podem ser atualizados com maior frequência e mais facilidade, e a performance não é um ponto crítico;
Java Scripting
7
Introdução
04/10/2007
O processo de escrever um script funcional pode fazer muita diferença na produtividade durante o desenvolvimento de aplicações. Imagine que um simples comando de um determinado script pode ser capaz de “abstrair” parcialmente, ou até mesmo integralmente toda uma API ou framework Java;
Java Scripting
8
Domain Specific Languages
04/10/2007
São criadas com a intenção de remover a complexidade computacional envolvida na resolução de alguma atividade e/ou operação específica para aproximá-las de um determinado domínio do mundo real; Criteria (Hibernate); Regras do IPTABLES; E muitas outras;
9
Java Scripting
Compiladas, Interpretadas e Híbridas
Linguagens
04/10/2007
Java Scripting
10
Linguagens
04/10/2007
Processo de compilação e execução de uma linguagem compilada
Har
dwar
eSist
ema
Ope
raci
onal
Código Fonte Com
pila
dor
Exec
utáv
el
Java Scripting
11
Linguagens
04/10/2007
Processo de execução de uma linguagem interpretada
Har
dwar
eSist
ema
Ope
raci
onal
Código Fonte Inte
rpre
tad
or
Java Scripting
12
Linguagens
04/10/2007
Processo de compilação e execução de uma linguagem híbrida
Har
dwar
eSist
ema
Ope
raci
onal
Código Fonte
Com
pila
dor
Inte
rpre
tado
r
Exec
utáv
el
Java Scripting
13
Unindo os mundos
04/10/2007
O que ganhamos com APIs de Scripting no Java? União de linguagens de script com uma
linguagem de sistema híbrida (Java); Estas linguagens podem continuar sendo
interpretadas dentro ou fora do Java; Podem ser compiladas para bytecodes Java;
14
Java Scripting
Scripting API
JSR 223
04/10/2007
Java Scripting
15
Scripting na plataforma Java
04/10/2007
JSR 223: Scripting for the Java Platform; A JSR 223 é um framework de scripting
que fornece acesso a linguagem de criação de scripts ao Java;
Através da JSR 223 é possível localizar maquinas de scripting e invocá-las para rodar scripts em tempo de execução;
Java Scripting
16
Scripting na plataforma Java
04/10/2007
A Scripting API provê suporte Java via a linguagem de criação de scripts de nossa escolha;
Há também o Web Scripting Framework que permite que o código script gere o conteúdo Web dentro de qualquer container Servlet;
17
Java Scripting
BSF
Bean Scripting Framework
04/10/2007
Java Scripting
18
Bean Scripting Framework
04/10/2007
Assim como a especificação da JSR 223, a BSF provê a capacidade de integração de scripts na linguagem Java;
Com BSF é possível que a aplicação Java use as máquinas de scripts e que estas máquinas de script também usem os objetos definidos na aplicação Java;
Java Scripting
19
Bean Scripting Framework
04/10/2007
Das diversas linguagens de script que rodam sobre a JVM, muitas geralmente implementam seu próprio modo de interagir com a plataforma Java, criando assim uma dependência entre a aplicação que faz uso de scripts e este modo de interação;
O BSF estabelece uma camada comum de ligação entre a plataforma Java e os Scripts sem criar qualquer tipo de dependência entre as partes;
20
Java Scripting
Bean Scripting Framework
JavaScript (Rhino ECMAScript);
NetRexx; Python (Jython); TCL (Jacl); XSLT (Xerces e
Xalan);
Groovy; PROLOG (JLog); JRuby; JUDOScript; ObjectScript;
04/10/2007
Linguagens cujo suporte é mantido pelo próprio projeto BSF
Linguagens que mantém seu próprio suporte ao BSF
21
Java Scripting
Groovy
04/10/2007
Java Scripting
22
Groovy
04/10/2007
Groovy é uma linguagem de programação, desenvolvida em Java e para a plataforma Java com o propósito de ser uma alternativa a própria linguagem Java;
Padronizada na JSR 241; Groovy possui sintaxe similar a de Java,
mas baseia-se em características importantes de Python, Ruby e Smalltalk;
Java Scripting
23
Groovy
04/10/2007
Diferente do Java, Groovy possui: Tipagem dinâmica e estática; Suporte nativo a listas, arrays, vetores e
expressões regulares; Closures; Sobrecarga de operadores; Suporte e acesso completo a API de Java SE
e Java EE; Integrável a programas Java;
Java Scripting
24
Groovy
04/10/2007
Groovy da suporte a outros recursos também, por exemplo: Groovlets: criação de Servlets; GSP: templates semelhantes a JSPs; Grails: Groovy on Rails, framework
implementado baseado no Ruby on Rails; Processamento de XML: trata em scripts de
forma simples e direta o processamento de arquivos XML;
Java Scripting
25
Groovy
04/10/2007
Sobrecarga de operadores
class Numero{
def plus(n){
print "nao sei somar este numero: "+n }
}
numero = new Numero();
numero+2;
Java Scripting
26
Groovy
04/10/2007
Utilizando um Script Groovy dentro de uma aplicação Java
#script.goovy
def helloWorld(){println "Hello Groovy";}
#alguma classe Java
public void metodoExemplo() throws Exception {
GroovyClassLoader groovyLoader = new GroovyClassLoader();
Class classeProxy = groovyLoader.parseClass( new File("script.groovy"));
GroovyObject proxy = (GroovyObject) classeProxy.newInstance();
proxy.invokeMethod("helloWorld", null);
}
27
Java Scripting
JRuby
04/10/2007
Java Scripting
28
Ruby Lang
04/10/2007
Ruby é uma linguagem de script interpretada que foi projetada para programação OO focando agilidade e rapidez. Sintaxe simples e clara (inspirada em Eiffel e
Ada); Possui tratamento de exceções e erros; Totalmente (100%) orientada a objetos; Suporte pleno a Expressões regulares, portável,
validação dinâmica de código, etc; “Princípio de pouca surpresa”, ou seja, as coisas
acontecem como você espera;
Java Scripting
29
Ruby Lang
04/10/2007
# Ruby sabe o que voce quer dizer
cidades = %w[ Vitoria
Porto Alegre
Porto Seguro
Rio de Janeiro
Blumenau ]
conhecidas = %w[Vitoria
Porto Alegre]
puts "Ainda nao conheco: ",
cities - visited
Java Scripting
30
JRuby
04/10/2007
Implementação 100% Pure-Java da linguagem Ruby para ser executada na JVM;
Mantida sob três licenças: CPL, GPL e LGPL;
Código JRuby capaz de acessar classes definidas em Java;
Código Java capaz de acessar código definido em JRuby, através de Bean Scripting Framework (BSF);
JRuby (1.0) 100% compatível com Ruby (1.8.5) e 98% compatível com Ruby on Rails;
31
Java Scripting
Jython
04/10/2007
Java Scripting
32
Jython
04/10/2007
Jython é uma implementação 100% Pure-Java da linguagem de alto nível Python, que pode ser executada na JVM;
Jython é uma continuação baseada no antigo projeto JPython, que também era 100% Pure-Java;
Com Jython é possível utilizar recursos do Python diretamente das aplicações Java;
Java Scripting
33
Jython
04/10/2007
Com Jython é possível enriquecer o desenvolvimento de aplicações Java adicionando: Produtividade
É possível utilizar as bibliotecas e funcionalidades do Python, além de sua sintaxe simples e fácil dentro da sua aplicação Java, reduzindo complexidade e quantidade de código;
Experimentação Interativa Jython fornece um interpretador interativo que pode ser
usado para interagir com aplicações Java em execução. Isto permite aos programadores experimentar e depurar qualquer sistema Java usando Jython.
Java Scripting
34
Jython
04/10/2007
Características que diferenciam Jython de outras implementações de linguaguens de script para a JVM: Compilação dinâmina ou estática
É possível definir se a compilação dos scripts será feita em tempo de execução ou estaticamente;
Herança Permite o uso de classes abstratas do Java para
realizar herança nas classes em Jython; Bean Properties
Facilita o uso de pacotes Java (packages);
Java Scripting
35
Jython
04/10/2007
D:\Development\jython2.2b2>jythonJython 2.2b2 on java1.6.0Type "copyright", "credits" or "license" for more information.
>>> from javax import swing>>> win = swing.JFrame("Janela")>>> label = swing.JLabel("Exemplo Jython")
>>> win.add(label)>>> win.size = (200,200)>>> win.show()
36
Java Scripting
JUDOScript
04/10/2007
Java Scripting
37
JUDOScript
04/10/2007
JUDOScript é uma linguagem de script poderosa, fácil, eficiente e, principalmente, moderna, projetada e implementada em 100% Pure-Java;
JUDOScript nasceu da necessidade de usar diretamente os recursos da plataforma Java de modo mais fácil. Seu propósito é ser uma linguagem de script mais simples e fácil de usar do que as demais existentes;
JUDOScript possui acesso ilimitado aos recursos da plataforma Java;
Java Scripting
38
JUDOScript
04/10/2007
JUDOScript é excelente para combinar e trabalhar com processamento de dados de diversas fontes e formatos diferentes, como processadores de dados e relatórios;
JUDOScript está sempre acompanhando as mais novas tendências e novidades do Java;
Java Scripting
39
JUDOScript
04/10/2007
Conectando a um banco de dados e listando uma tabela com JUDOScript
const #url = "jdbc:mysql://127.0.0.1/banco";
const #user = "usuario";const #pass = "senha";connect to #url, #user, #pass;executeQuery query:select * from tabela;while query.next() {. query.campo;}
40
Java Scripting
ECMAScript e Rhino
04/10/2007
Java Scripting
41
ECMAScript
04/10/2007
European Computer Manufecturers Association – ECMA – é um órgão internacional que estabelece padrões para os formatos utlizados na computação;
ECMAScript talvez seja mais conhecida por alguma de suas variantes: JavaScript, Jscript, Rhino, FESI, etc;
O ECMAScript é a base de várias linguagens de script, entre elas o JavaScript (Netscape) e Jscript (Microsoft);
Java Scripting
42
ECMAScript
04/10/2007
Usando ECMAScript ou uma de suas variantes, como o JavaScript, por exemplo, é possível desenvolver de modo Orientado a Objetos ou Procedural;
Apesar das possibilidades a maior presença e uso massivo das linguagens de script basedas em ECMAScript são feitos de forma procedural, em páginas Web;
Java Scripting
43
Rhino
04/10/2007
Rhino é uma implementação totalmente em Java da linguagem JavaScript;
Apesar de ser uma implementação de JavaScript, Rhino implementa o Standard ECMAScript, ou seja, não existem objetos de JavaScript como: window, document e form;
Java Scripting
44
Rhino
04/10/2007
Atualmente o projeto Rhino, mantido pela Mozilla, mantém: Compatibilidade com JavaScript 1.5; Shell para execução de scripts; Manipulação direta de objetos Java; Compilar arquivos JS para bytecodes Java;
Executando um script JS com Rhino: java org.mozilla.javascript.tools.shell.Main script.js
45
Java Scripting
BeanShell
04/10/2007
Java Scripting
46
BeanShell
04/10/2007
BeanShell é um interpretador de comandos de script 100% pure-Java;
BeanShell é capaz de interpretar tanto comandos de script quanto comandos de Java;
BeanShell também é capaz de tratar em tempo de execução os métodos como objetos, assim como Python;
BeanShell pode ser resumidamente chamado de a Linguagem Java dinâmica e interpretada;
Java Scripting
47
BeanShell
04/10/2007
Possui acesso ilimitado a toda API Java Usa a API de Reflection para interpretação
de comandos e expressões Java; Funciona com aplicações, console,
applets, etc; Tipagem dinâmica; Suporta também o BSF;
Java Scripting
48
Outras linguagens de script
04/10/2007
Linguagem Implementação em Java
Awk Jawk
JavaScript Rhino
Python Jython
Ruby JRuby
Scheme SISC
TCL JACL
PHP Quercus
JavaScript Templates (JST) TrimPath JST
E muitas outras…
49
Java Scripting
Vantagens e desvantagens
04/10/2007
Java Scripting
50
Vantagens e desvantagens
04/10/2007
Linguagens de script geralmente são encaradas como ferramentas perfeitas para trabalhos do tipo “rápido, porém sujo” (“quick’n dirty”) de todo tipo.
Outra grande utilidade das linguagens de Script é na customização de sistemas, permitindo colocar boa parte das regras de negócio em scripts, separados da base do sistema, que continuará em Java;
Java Scripting
51
Vantagens
04/10/2007
Diversidade de opções Vasta quantidade de linguagens de scripts
suportadas; Simplicidade; Redução da curva de aprendizado; Produtividade
Com as linguagens de script em quase todos os casos a quantidade de código escrito é significativamente reduzida, além disso, pode-se unir isso com um prévio conhecimento da linguagem de script pelo desenvolvedor, aumentando ainda mais a produtividade;
Java Scripting
52
Desvantagens
04/10/2007
Performance Apesar de muitas das linguagens de script
já darem suporte a compilação estática e/ou com o JIT, o desempenho não é como uma implementação em Java;
Dificuldade para encontrar erros; Sintaxe não tão clara (às vezes, às
vezes) Em algumas situações, por algum comando
de script ter muitas funcionalidades implícitas, as leitura do código pode ficar consideravelmente prejudicada;
Java Scripting
53
Referências
04/10/2007
[1] Portal Java – http://www.portaljava.com [2] GUJ – http://www.guj.com.br [3] JVMScript – http://jvmscript.hpg.com.br
por Marcio Alexandre Barbosa [4] Ruby Lang – http://www.ruby-lang.org [5] JRuby – http://jruby.org [6] Groovy – http://groovy.codehaus.org
Java Scripting
54
Ok. Podem acordar!
04/10/2007
Muito Obrigado a todos;
Contatos:
Paulo César M. Jeveaux (Jevô)
[email protected] / [email protected]
www.portaljava.com / www.jeveaux.com
Java ScriptingLinguagens interpretados pelo Java
por Paulo César M. Jeveaux