Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

55
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.

Page 1: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

Java ScriptingLinguagens interpretados pelo Java

por Paulo César M. Jeveaux

Page 2: Java Scripting Linguagens 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;

Page 3: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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.

Page 4: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

4

Java Scripting

Introdução

04/10/2007

Page 5: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 6: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 7: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 8: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 9: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

9

Java Scripting

Compiladas, Interpretadas e Híbridas

Linguagens

04/10/2007

Page 10: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 11: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 12: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 13: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 14: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

14

Java Scripting

Scripting API

JSR 223

04/10/2007

Page 15: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 16: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 17: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

17

Java Scripting

BSF

Bean Scripting Framework

04/10/2007

Page 18: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 19: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 20: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 21: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

21

Java Scripting

Groovy

04/10/2007

Page 22: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 23: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 24: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 25: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 26: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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);

}

Page 27: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

27

Java Scripting

JRuby

04/10/2007

Page 28: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 29: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 30: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 31: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

31

Java Scripting

Jython

04/10/2007

Page 32: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 33: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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.

Page 34: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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);

Page 35: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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()

Page 36: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

36

Java Scripting

JUDOScript

04/10/2007

Page 37: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 38: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 39: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;}

Page 40: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

40

Java Scripting

ECMAScript e Rhino

04/10/2007

Page 41: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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);

Page 42: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 43: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 44: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 45: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

45

Java Scripting

BeanShell

04/10/2007

Page 46: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 47: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 48: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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…

Page 49: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

49

Java Scripting

Vantagens e desvantagens

04/10/2007

Page 50: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 51: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 52: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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;

Page 53: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 54: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

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

Page 55: Java Scripting Linguagens interpretados pelo Java por Paulo César M. Jeveaux.

Java ScriptingLinguagens interpretados pelo Java

por Paulo César M. Jeveaux