jython no javaone latin america 2011
Post on 13-Jan-2015
992 Views
Preview:
DESCRIPTION
TRANSCRIPT
Scripting e desenvolvimento ágil de aplicações
Java EE com JythonLuciano Ramalho
ramalho@turing.com.br
@luciano
Rafael Nunes
rafael@yaw.com.br
@rafanunesWednesday, December 21, 2011
Exemplo: relógio Java Swing# coding: utf-8from javax.swing import *from java.awt import Fontfrom time import strftime
class Relogio(JFrame): def __init__(self): JFrame.__init__(self, u'TicTac', defaultCloseOperation = JFrame.DISPOSE_ON_CLOSE) self.mostrador = JLabel('00:00:00', font=Font('Sanserif',Font.BOLD, 70)) self.contentPane.add(self.mostrador) self.pack() self.visible = True
def start(self): def tic(evento): agora = strftime('%H:%M:%S') if self.mostrador.text != agora: self.mostrador.text = agora Timer(100, tic).start()
if __name__=='__main__': rel = Relogio() rel.start()
Funçãocallback
comolistener
Wednesday, December 21, 2011
Exemplo: relógio Java Swing
from jrelogio import Relogiorel = Relogio()rel.start()
from java.awt import *rel.mostrador.foreground = Color.RED
print rel.mostrador.text
from time import sleepwhile True: if rel.mostrador.text.endswith('0'): print 'PING', rel.mostrador.text sleep(1)
Wednesday, December 21, 2011
é
Wednesday, December 21, 2011
Sobre PythonLinguagem de uso geral
Web, desktop, redes, computação gráfica e científica
Multi-plataforma
Linux, Windows, Mac, Unix, Nokia S-60...
Amplo suporte de fornecedores de TI
Google, IBM, Oracle, Microsoft, RedHat, Amazon...
Sintaxe simples e clara mas muito expressiva
Aprendizagem rápida, produtividade em dias
Wednesday, December 21, 2011
Exemplo: cliente Twitter# coding: utf-8import sysimport urllibimport simplejson as json
if len(sys.argv) == 2: busca = sys.argv[1]else: print 'Informe o texto da busca: %s "texto"' % __file__ sys.exit(1)
url = 'http://search.twitter.com/search.json?q='+buscaresposta = urllib.urlopen(url).read()documento = json.loads(resposta)resultados = documento['results']for resultado in resultados: print u'%(from_user)s: %(text)s\n' % resultadoprint '%s resuldados exibidos' % len(resultados)
Wednesday, December 21, 2011
Exemplo: planilhaclass Planilha: _cels = {} def __init__(self, **funcs): self._funcs = funcs def __setitem__(self, chave, formula): self._cels[chave] = formula def formula(self, chave): return self._cels[chave] def __getitem__(self, chave ): return eval(self._cels[chave], self._funcs, self)
>>> from math import pi, sin>>> from planilha import Planilha>>> p = Planilha(sin=sin, pi=pi)>>> p['a1'] = '.5'>>> p['a2'] = 'pi'>>> p['b1'] = 'a1*a2'>>> p['b2'] = 'sin(b1)'>>> p['b2']1.0
Wednesday, December 21, 2011
Quem usa Python?
Wednesday, December 21, 2011
Wednesday, December 21, 2011
Wednesday, December 21, 2011
Wednesday, December 21, 2011
Wednesday, December 21, 2011
Áreas de aplicação
desenvolvimento Web
computação gráfica
administração de sistemas
integração de sistemas (glue language)
computação científica
games
Wednesday, December 21, 2011
YouTubeWednesday, December 21, 2011
Globo.com usa DjangoWednesday, December 21, 2011
Mozilla Firefox Add-OnsWednesday, December 21, 2011
DropboxWednesday, December 21, 2011
Google App EngineWednesday, December 21, 2011
The Foundry, NUKEWednesday, December 21, 2011
Industrial Light & MagicWednesday, December 21, 2011
Autodesk MayaWednesday, December 21, 2011
InvesaliusWednesday, December 21, 2011
FBI e CIAWednesday, December 21, 2011
brasil.gov.brWednesday, December 21, 2011
Projetos Open Source
Wednesday, December 21, 2011
Características
Não obriga a declarar variáveis, mas obriga a inicializar
>>> a = 10>>> c = a + bTraceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'b' is not defined
Wednesday, December 21, 2011
Características 2
Tipagem dinâmica forte, obriga conversões explícitas
>>> a = '9'>>> b = 10>>> c = a + bTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot concatenate 'str' and 'int' objects
Wednesday, December 21, 2011
Características 3Orientada a objetos, mas não obriga a criar classes
Suporta sobrecarga de operadores e herança múltipla
Usa exceções, mas não obriga a declarar ou tratar
Usa namespaces, módulos e pacotes
Compilada para bytecode
Suporte nativo a properties
Wednesday, December 21, 2011
Exemplo: property read-onlyclass ItemPedido(object): def __init__(self, descr, pr_unit, qtd): self.descr = descr self.pr_unit = pr_unit self.qtd = qtd
@property def total(self): return self.pr_unit * self.qtd
>>> bolas = ItemPedido('bola', 3.1, 10)>>> bolas.descr'bola'>>> bolas.total31.0>>> bolas.total = 30Traceback (most recent call last): ...AttributeError: can't set attribute
Wednesday, December 21, 2011
Exemplo: property read-writeclass ItemPedido(object): def __init__(self, descr, pr_unit, qtd): self.descr = descr self.pr_unit = pr_unit self.qtd = qtd
@property def total(self): return self.pr_unit * self.qtd
@property def qtd(self): return self.__qtd
@qtd.setter def qtd(self, valor): if valor < 1: raise ValueError('quantidade < 1') else: self.__qtd = valor
Wednesday, December 21, 2011
Propriedade(exemplo 2)
class ItemPedido(object): def __init__(self, descr, pr_unit, qtd): self.descr = descr self.pr_unit = pr_unit self.qtd = qtd
@property def total(self): return self.pr_unit * self.qtd
@property def qtd(self): return self.__qtd
@qtd.setter def qtd(self, valor): if valor < 1: raise ValueError('quantidade < 1') else: self.__qtd = valor
>>> bolas = ItemPedido('bola', 3.1, 10)>>> bolas.descr'bola'>>> bolas.total31.0>>> bolas.qtd = -3Traceback (most recent call last): ...ValueError: quantidade < 1>>> duendes = ItemPedido('duende', 999, 0)Traceback (most recent call last): ...ValueError: quantidade < 1
Wednesday, December 21, 2011
Implementações
CPython: o interpretador python padrão, implementando em C
pré-instalado na maioria dos Linux e no OSX
Jython: implementado em Java, roda sobre a JVM
IronPython: implementado em C#, roda sobre .net CLR
PyPy: implementado em Python, compilação JIT
Wednesday, December 21, 2011
Jython falando com Java
Wednesday, December 21, 2011
Jython no ambiente Java EEJython é a principal linguagem de scripting suportada e documentada nos produtos:
Oracle WebLogic
IBM WebSphere
Wednesday, December 21, 2011
Introspecção e Reflexão
Uma classe Java com dois atributos privados
public class ObjetoSecreto {
! private String escondido = "";! private String oculto = "dado ultra secreto";
! public ObjetoSecreto(String texto) {! ! this.escondido = texto;! }}
Wednesday, December 21, 2011
Acesso a atributo privadoimport java.lang.reflect.Field;
public class AcessaPrivado {
! public static void main(String[] args) {! ! ObjetoSecreto oSecreto = new ObjetoSecreto("senha super secreta");! ! Field campoPrivado = null;! ! try {! ! ! campoPrivado = ObjetoSecreto.class.getDeclaredField("escondido");! ! }! ! catch (NoSuchFieldException e) {! ! ! System.err.println(e);! ! ! System.exit(1);! ! }! ! campoPrivado.setAccessible(true); // arrombamos a porta! ! try {! ! ! String tavaEscondido = (String) campoPrivado.get(oSecreto);! ! ! System.out.println("oSecreto.escondido = " + tavaEscondido);! ! }! ! catch (IllegalAccessException e) { ! ! ! // esta exceção nao acontece porque fizemos setAcessible(true)! ! ! System.err.println(e);! ! }!! }}
import ObjetoSecreto
oSecreto = ObjetoSecreto('senha super secreta')campoPrivado = ObjetoSecreto.getDeclaredField('escondido')campoPrivado.setAccessible(True) # arrombamos a portaprint 'oSecreto.escondido =', campoPrivado.get(oSecreto)
Java
Python
Wednesday, December 21, 2011
Acesso a atributo privado 2import ObjetoSecreto
oSecreto = ObjetoSecreto('senha super secreta')campoPrivado = ObjetoSecreto.getDeclaredField('escondido')campoPrivado.setAccessible(True) # arrombamos a portaprint 'oSecreto.escondido =', campoPrivado.get(oSecreto)
from java.lang.reflect import Modifierimport ObjetoSecreto
oSecreto = ObjetoSecreto('senha super secreta')campos = ObjetoSecreto.getDeclaredFields()for campo in campos: # so campos privados! if Modifier.isPrivate(campo.getModifiers()): print campo campo.setAccessible(True) # arrombamos a porta print '\t', campo.getName(), '=', campo.get(oSecreto)
listar todos os atributos privados
Wednesday, December 21, 2011
Exemplo: relógio Java Swing
from javax.swing import *from java.awt import Fontfrom time import strftime
frame = JFrame(u'Relógio', defaultCloseOperation = JFrame.EXIT_ON_CLOSE)
rel = JLabel('00:00:00', font=Font('Sanserif',Font.BOLD,70))frame.contentPane.add(rel)frame.pack()frame.visible = True
def tic(evento): agora = strftime('%H:%M:%S') if rel.text != agora: rel.text = agora
Timer(100, tic).start()
Java beansetteracionadonoconstrutore setteracionadocomoproperty
Wednesday, December 21, 2011
Onde aprender mais
jython.org
Jython book livre (CC)
python.org
python.org.br
Google Groups: python-brasil
Wednesday, December 21, 2011
AcademiaPythonGlobalcode
A partir de janeiro de 2012 em SP
112h de aula
do básico aoavançado em 3,5 meses
Wednesday, December 21, 2011
top related