Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.
Transcript of Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.
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