SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
De Java Para Python
2 de Setembro de 2008
Conteúdo
I Sobre essa apostila 3
II Informações Básicas 5
III GNU Free Documentation License 10
IV de Java para Python 19
1 de Java para Python 20
2 Visão Geral 21
2.1 Conhecendo Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Conhecendo Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3 Diferenças básicas e comparativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Comparativos Básicos 25
3.0.1 Instalando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.0.2 Testando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.0.3 Interpretador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1 Aspectos de programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.1 Estrutura, Compilação e Execução . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.2 A estrutura de um programa em Java . . . . . . . . . . . . . . . . . . . . . . 27
3.1.3 A estrutura de um programa em Python . . . . . . . . . . . . . . . . . . . . . 28
3.1.4 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Identação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Produtividade 32
4.1 Java vs Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2 Produtividade e Tipagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5 Jython o melhor dos dois mundos 41
5.1 O que é Jython? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Instalação Básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.1 Modo Autônomo (Standalone) . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3 Utilizando o Jython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1 Tornando scripts Jython executáveis . . . . . . . . . . . . . . . . . . . . . . . 43
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
6 Referências Bibliográficas 45
2
Parte I
Sobre essa apostila
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br), desde outubro
de 2006. Criticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste conteúdo, atividades e avaliações é de responsabilidade de Edson Hungria
Junior (hungria@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vem
sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto
com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando
inclusive a comunidade Free Software junto a outras entidades no país.
Informações adicionais podem ser obtidas atréves do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006,Edson Hungria Junior (hungria@cdtc.org.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível
• Os 10 mandamentos do aluno de Educação a Distância
• Como participar dos fóruns e da wikipédia
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Edson Hungria Junior (hungria@cdtc.org.br) .
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
publicada pela Free Software Foundation; com o Capítulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso a Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância.
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas.
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores.
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre.
• 8. Flexibilidade e adaptação: requisitos necessário a mudança tecnológica, aprendizagens
e descobertas.
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto-chave na comunicação pela Internet.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso, é recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervosismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
9
Parte III
GNU Free Documentation License
10
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licençaa de Documentação Livre GNU em Português
Brasileiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a dis-
tribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso.
Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor
a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março de 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o titulo com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, a qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
tal como a GNU General Public License, para permitir o seu uso em software livre.
18
Parte IV
de Java para Python
19
Capítulo 1
de Java para Python
Figura 1 - Jython
Um programador pode ser significativamente mais produtivo em Python do que em Java,
dizem os especialistas. A estimativa mais aceita é de que Python seja de 5 a 10 vezes mais
eficiente. Cada vez mais pessoas e empresas estão migrando para Python para testarem essa
produtividade. No entanto, é preciso se aprofundar na relação de ambas as linguagens com
os paradigmas da orientação a objeto para que se compreenda as razões pelas quais alguns
programadores estão fazendo essa migração. Este curso é para aqueles que pretendem fazer
migração.
20
Capítulo 2
Visão Geral
A idéia do curso Java para Python é apresentar uma visão geral e comparativa da linguagem
Python para desenvolvedores familiarizados com a linguagem Java. Você conhecerá as principais
características da linguagem Python estabelendo analogias e contra exemplos com a linguagem
Java.
Como poderá ser verificado, as linguagens têm princípios diferenciados apesar de ambas
serem marcadas pela orientação a objeto, entretanto são bem similares quanto a seus usos finais:
prover uma linguagem multiplataforma de uso genérico, que pode variar de grandes sistemas em
Intranets e para a Internet até o desenvolvimento de jogos e aplicações para dispositivos portáteis
(telefones celulares, câmeras digitais, etc...)
2.1 Conhecendo Java
O Java hoje é uma linguagem extremamente popular, impulsionada pela gigante Sun Mi-
crosystems e centrada no mote "Write Once, Run Anyware"(Escreva o código uma vez, execute
-o em qualquer lugar). Houve um esforço muito grande para que ela cumprisse esse objetivo de
ser uma linguagem para uso generalizado e para todas as plataformas, de supercomputadores a
celulares.
Não é o objetivo deste curso apresentar o Java e suas características do ponto de vista téc-
nico e histórico, sendo que tal introdução pode ser achada em vários pontos da web e em cursos
específicos. Uma rápida busca no google pode apontar para vários deles.
Como qualquer criação humana, ela tem imperfeições. Conhecendo outras alternativas e
estabelecendo comparações podemos perder o medo de abordar os pontos negativos da lingua-
gem. Uma queixa de alguns desenvolvedores é a grande quantidade de código que se tem que
escrever para realização de algumas ações. A estrutura da linguagem é tal que uma quantidade
grande de declarações é necessária para o funcionamento de algumas estruturas.
Essas declarações, quando multiplicadas pelas centenas de partes de um projeto de médio a
grande porte, acabam tomando um tempo considerável de codificação - já que parte das mesmas
pode ser automatizada pelo editor - de leitura do código, uma vez que a parte essencial acaba
ofuscada por estruturas de controle inerentes à linguagem.
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Falando um pouco sobre a linguagem em si, Java se caracteriza por ter um ambiente de exe-
cução próprio - uma máquina virtual, que provê sempre o mesmo ambiente de execução para os
programas, independentemente de estarem sendo executados num PC Pentium, num Macintosh
PowerPC, em servidor IBM POWER ou SUN Sparc, ou mesmo num telefone celular ou PDA.
Com uma linguagem compilada normal, como o C ou Pascal, o programa teria que, na me-
lhor das hipóteses, ser recompilado, a partir do código fonte para funcionar em cada arquitetura
dessas e na pior, ter que sofrer várias adaptações para funcionar em uma ou em outra.
Essa funcionalidade multi-arquitetura sempre foi o carro chefe para o marketing do Java. No
entanto, perceba que ao não disponibilizar o ambiente de execução como Software Livre, as pes-
soas ficam a mercê da SUN Microsystems em relação a programas Java. O sistema GNU/Linux
funciona perfeitamente em muitas plataformas de hardware para as quais a SUN e a IBM simples-
mente não disponibilizam seus ambientes de execução Java proprietários. Nesses ambientes, os
programas Java não vão rodar.
O "Run anywhere"se prova mais uma peça de marketing que uma realidade - pelo menos
enquanto o as JVMs não forem livres. Exemplos de ambientes sem JVMs completas disponíveis
são GNU/Linux em qualquer hardware que não seja compatível com Intel Pentium, inclusive em
Power Macs, o sistema FreeBSD em qualquer arquitetura, e várias outras.
2.2 Conhecendo Python
O Python foi criado por Guido Van Rossun em 1990, e hoje seu desenvolvimento é continuado
pela Python Software Foundation. A preocupação de Guido era criar uma linguagem elegante,
mas de fácil acesso e ententimento. Na prática, um suscessor da linguagem ABC na qual ele já
havia trabalhado, que por sua vez era uma sucessora do antigo BASIC (Beginners All-purpose
Symbolic Code), popular em todos os microcomputadores da década de 80.
O Python surge então como uma linguagem versátil, facilmente extensível com novos módulos
em C ou C++, que funcionam em um ambiente de execução virtual, o que faz com que o mesmo
programa possa ser executado em qualquer plataforma. E que, desde o princípio sempre teve
seu ambiente de execução e API distribuídos de forma Livre.
Isso faz com que na prática o Python seja mais "run anywhere"que o Java, uma vez que seu
compilador e ambiente de execução está disponível em plataformas para as quais a SUN não
fornece o ambiente de execução Java.
Mas o grande conceito de "marketing"do Python não é o de que ele pode ser executado em
qualquer lugar, mas sim de que o tempo de trabalho do desenvolvedor é a coisa mais cara hoje no
Software. E é no tempo do desenvolvedor que Python faz sua economia com sintaxe e recursos
que economizam código digitado desnecessariamente. Um porgrama em Python tem uma fração
do tamanho que o mesmo programa teria se fosse escrito em outra linguagem como C ou Java
e faz isso sem prejudicar a legibilidade do código, pelo contrário, a legibilidade é forçada pela
sintaxe e assim se torna justamente outro fator de economia de tempo para o desenvolvedor.
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Além do interpretador, que na verdade é exatamente equivalente ao compilador + máquina
virtual do Java, fornecido pela Python Software Foundation, há também o Java+Python ou Jython.
Ele traz o melhor dos dois mundos, as em Python para bytecode Java que podem ser executados
em qualquer ambiente de execução Java e ter pleno acesso a suas APIs.
2.3 Diferenças básicas e comparativas
Java é fortemente tipada, enquanto que o Python é diamicamente tipada. Ou seja, Python
não obriga a declarar variáveis e permite atribuir qualquer tipo de objeto a qualquer variável. O
Python permite a execução dinâmica de código, ou seja, um programa Python pode construir
código Python interativamente e executá-lo imediatamente.
O Python também permite que blocos arbitrários de código (em geral pré-compilados para
byte-code) sejam enviados como argumentos para métodos, de modo que não precisamos criar
várias classes pequenas como fazemos em Java, como por exemplo, para tratamento de eventos
ou para fornecer um método de comparação de objetos para ordenação de coleções.
O Java estrutura o código em blocos, o Python estrutura pela identação.
O Python não é uma linguagem "livre de formato"como a maioria das linguagens populares
hoje (a exceção é o Visual Basic). A estrutura de um programa é dada pela identação das linhas
de código e não por marcadores do tipo begin...end (ou ). Na verdade, isto ajuda, pois obriga os
programadores Python a tornarem o código mais legível.
Sobrecarga de operadores
Embora Java não permita, Python permite que sejam definidos novos significados para os
operadores padrão da linguagem sobre tipos definidos pelo usuário, como o C++ permite. Esta é
uma das características que permitem escrever códigos em Python mais concisos e eficientes do
que em Java.
Qual classe devo utilizar?
Tanto Java quanto Python são linguagens de programação de propósito geral, ambas forne-
cem classes padrão para uma variedade de tarefas, como: estruturas de dados, interface gráfica
e acesso a bancos de dados. Com o Jython, ambas as linguagens podem utilizar as mesmas
bibliotecas e o Jython inclui até interfaces mais "Python-like"para APIs importanes do Java como
JDBC.
Devido às diferenças semânticas entre as duas linguagens, tente utilizar as classes básicas
do Python sempre que possível e procure utilizar classes de nível mais alto escritas em Java. Ou
tente o contrário, procure definir uma das linguagens como a preferencial para o front-end, seja
ele em modo texto, GUI ou web e tente restringir-se ao uso de apenas objetos de negócio na
outra linguagem.
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Referências nulas
Java identifica referências que não apontam para nenhum objeto válido com o valor null ,
enquanto que o Python define o valor None para a mesma finalidade.
As classes devem ser importadas uma a uma
Ou seja, não podemos fazer coisas como "import java.sql.*", mas sim "from java.applet import
Applet."
Por outro lado, o desenvolvedor Java irá encontrar no Python algumas características familia-
res e que dificilmente são encontradas em outras linguagens de programação:
• linguagem de fácil aprendizado;
• tratamento estruturado de exceções, semelhante aos blocos try..catch do Java;
• estrutura hierárquica de pacotes;
• arrays dinâmicos e outras estruturas de dados (coleções) genéricas;
• linguagem em constante desenvolvimento pela comunidade de Software Livre.
24
Capítulo 3
Comparativos Básicos
3.0.1 Instalando o Python
Para usuários das mais diversas distribuições de GNU/Linux que possuem o APT, como o
Debian, basta apenas um:
° Ôع Ø Ò×Ø ÐÐ ÔÝØ ÓÒ
Você também pode acessar o site http://www.python.org e baixar a versão mais recente do
Python. Utilizamos aqui a versão 2.4.2 do Python, não há problemas em baixar uma versão mais
recente neste caso.
Entre na pasta onde foi baixado o arquivo, faça o logon como root e siga as instruções:
• digite tar xzvf Python-2.4.2.tgz;
• acesse o diretório e execute ./configure;
• execute make.
Neste momento, o Python já esta operacional, porém não está instalado em /usr/local no
system. Faça o seguinte:
• para instalar execute: make install
O Python é normalmente instalado em locais padrão como em máquinas Unix e GNU/Linux
no /usr/bin enquanto suas bibliotecas(lib) estão em /usr/lib/python2.x, já no caso do DOS ou
MS-Windows o Python é instalado em C:Python.
3.0.2 Testando o Python
Abra o terminal e digite o comando python. Se tudo der certo, será aberto o interpretador
do Python. Ele permite que você execute todos os comandos da linguagem, sem que para isso
precise criar um arquivo com o código. Para sair do interpretador, aperte Ctrl + D.
Caso você queira jogar tudo em um arquivo, para depois executar, faça o seguinte:
crie um arquivo com a extensão .py, por exemplo, primeiro.py;
adicione a seguinte linha no início do arquivo:
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
»Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ
No caso da primeira linha temos algo comum em ambientes Unix, que são os comentários
funcionais. Se na primeira linha de um arquivo existir #!/ seguido de um caminho para um exe-
cutável, este executável será chamado e o nome do arquivo será passado como argumento. No
nosso caso, o arquivo é primeiro.py e o Unix vai identificar a primeira linha como sendo um
comentário funcional e executar da seguinte forma:
»Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ ÔÖ Ñ ÖÓºÔÝ
Pronto, agora é só adicionar as outras linhas do programa, por exemplo:
ÔÖ ÒØ ³ÔÖ Ñ ÖÓ ÔÖÓ Ö Ñ ººº³
O arquivo completo ficaria da seguinte maneira:
»Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ
ÔÖ ÒØ ³ÔÖ Ñ ÖÓ ÔÖÓ Ö Ñ ººº³
Mande salvar o arquivo e rode no terminal da seguinte maneira:
ÔÝØ ÓÒ ÔÖ Ñ ÖÓºÔÝ
3.0.3 Interpretador
Existem duas maneiras de iniciar o Python. A mais simples é iniciar o interpretador intera-
tivamente, adicionando linhas a serem executados em tempo de execução. A outra maneira e
inicializando um script Python.
O primeiro modo pode ser feito no shell (terminal do GNU/Linux) ou no DOS com o comando:
° ÔÝØ ÓÒ
ÈÝØ ÓÒ ¾º¿º ´ ¾¸ Ë Ô ¾¼¼ ¸ ¾¾ ¼½ ¾µ
¿º¿º ´ Ò ½ ¿º¿º ¹½¿µ℄ ÓÒ Ð ÒÙܾ
ÌÝÔ ÐÔ ¸ 
ÓÔÝÖ Ø ¸ 
Ö Ø× ÓÖ Ð 
 Ò× ÓÖ ÑÓÖ Ò ÓÖÑ Ø ÓÒº
Algo como a saída acima deve aparecer para você, e um cursor esperando suas entradas
devem ficar piscando após os »>.
Agora a outra forma é passando um script já previamente criado diretamente para o interpre-
trador, veja:
° ÔÝØ ÓÒ Ü ÑÔÐÓºÔÝ
Observação : todos os códigos fontes em Python tem extensão .py
Para sistemas Unix-like, temos mais uma outra forma específica de invocar o Python. Isso só
pode ser feito em scripts feitos em Python, veja um exemplo:
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
»Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ
¹¶¹ 
Ó Ò ×Ó ¹½ ¹¶¹
ÔÖ ÒØ ÇÐ ÑÙÒ Ó
No caso, o script deve possuir em seu cabeçalho as duas primeiras linhas deste exemplo.
A primeira invoca o ambiente Python e a segunda define a codificação a ser utilizada, quando
dizemos codificação, queremos dizer os caracteres que são conhecidos, ou seja, acentuação e
caracteres específicos de cada língua. A codificação iso8859-1 é a codificação utilizada no Brasil,
neste caso também poderíamos ter utilizado a codificação universal utf8.
Todos os exemplos deste curso, se forem utilizados num arquivo (script), devem possuir o
cabeçalho acima para que possam rodar corretamente.
3.1 Aspectos de programação
Nesta lição, quero apresentar uma lista lado a lado de comparação das características de Java
e Python. Se você olhar para essas comparações poderá ver por que Python pode ser escrita
muito mais rapidamente e ser mais facilmente mantida do que Java. Essa lista não é longa, pois
deseja-se fazer uma abordagem representativa e não exaustiva.
Um programa é a implementação de um algoritmo em uma linguagem de programação. O
algoritmo precisa ser bem definido do início ao fim, tendo comandos ordenados e finitos capazes
de produzirem um resultado visível. Para programar bem deve-se fazer um algoritmo apropriado
e ter um conhecimento léxico, sintático e semântico da linguagem de programação a ser utlizada.
3.1.1 Estrutura, Compilação e Execução
Um programa é um texto (chamado de programa fonte) que possui comandos e declarações
necessárias para a implementação de um algoritmo que é traduzido para um produto equiva-
lente escrito em comandos binários (código binário) os quais são executados pelo computador.
O processo de tradução é chamado de compilação e posteriormente a ele se produz a ligação do
código binário a outros códigos para se obter finalmente o programa executável.
O programa executável é carregado na memória e colocado sobre o controle de um ambiente
de execução, que faz com que cada comando seja executado pelo processador.
Todo programa deve ter uma estrutura que permita definir seu início e fim, de tal forma que o
ambiente de execução possa identificar precisamente o ponto de entrada do programa, isto é, o
primeiro comando que será executado e o término da execução.
3.1.2 A estrutura de um programa em Java
Os programas orientados a objetos são baseados no conceito classe. Cada classe contém
as declarações e os comandos que, em conjunto, implementam o algoritmo do programa. Estes
comandos são organizados na forma de métodos e devem possuir um método principal que é o
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
ponto de início da execução, a partir dele os demais métodos são acionados.
Em Java, especificamente, a sua estrutura consiste de um conjunto de unidades de compi-
lação. Cada uma delas contêm as especificações de classes e interfaces, juntamente com as
declarações necessárias para a compilação. Quando compiladas essas unidades geram arqui-
vos com os códigos binários referentes às classes e interfaces nelas descritas.
A estrutura básica de uma classe consiste de uma palavra chave class, de um identificador (o
nome da classe) e de um corpo que é delimitado por chaves e contém opcionalmente declarações
e comandos próprios da classe.
3.1.3 A estrutura de um programa em Python
Os conceitos fundamentais da linguagem são simples de entender tornando a sintaxe da lin-
guagem ainda mais clara e fácil de aprender. O código produzido é normalmente curto e legível,
sendo que os tipos pré-definidos incluídos em Python são poderosos e ainda assim simples de
usar.
A linguagem possui um interpretador de comandos interativo que permite aprender e testar
rapidamente trechos de código, além de ser expressiva, com abstrações de alto nível. Na grande
maioria dos casos um programa em Python será muito mais curto que seu correspondente es-
crito em outra linguagem. Isto também faz com que o ciclo de desenvolvimento seja rápido e
apresente potencial de defeitos reduzido: menos código, menos oportunidade para errar.
3.1.4 Comentários
Em Java temos:
Os comentários são textos normalmente explicativos que servem para informar tanto o pro-
gramador que o escreveu quanto outros que venham a utilizar ou somente ler aquele código. Em
Java os comentários podem ser de três tipos:
• Uma linha - utiliza duas barras // marcando seu início.
• Múltiplas linhas - utiliza barra asterisco no início /* e asterisco barra no fim */.
• Documentação - semelhante ao de múltiplas linhas mas com propósito de documentar o
código. Iniciado por /** e finalizado com */.
Em Python temos:
Este é um item muito importante que as vezes é ignorado por muitos programadores. A im-
portância de comentar o código é enorme e isso deve ser feito sempre que possível.
Existem duas formas de comentário dentro do Python: o comentário passivo e o comentário
ativo. Vejamos como podemos definir cada um deles:
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
• passivo - é o comentário feito utilizando o símbolo "#", conhecido também como tralha,
hash ou pound. Este comentário apenas aparece dentro do código onde foi escrito e é bom
quando temos diversos programadores desenvolvendo em cima de um mesmo código fonte,
isto ajuda na leitura do trecho de código em questão;
• ativo - são comentários feitos de uma forma específica dentro de funções e classes, estes
comentários geram uma documentação automaticamente que pode ser acessada através
da função help().
Vamos dar uma olhada em como funcionam estes dois tipos de comentários:
×Ø ÙÑ 
ÓÑ ÒØ Ö Ó Ô ×× ÚÓ Ò Ó Þ Ò
Onde aparecere as reticências poderia ser adicionado algum código ou mais comentário, no
nosso caso apenas apertamos enter para sair do comentário. Um comentário passivo também
pode ser feito após uma linha de código normalmente, veja:
ÔÖ ÒØ ³ÇÐ ³ Ó ÔÖ ÒØ Ú Ö ØÓÖÒ Ö ÙÑ ³ÇÐ ³
³ÇÐ ³
Agora, os comentários ativos são um tanto quanto mais interessantes. Não se preocupem
se não entenderem muito bem o código abaixo, prestem atenção apenas no código em negrito e
vejam a saída gerada pela função help().
ÙÒ
 Ó´µ
³³³ ×Ø ÙÑ ÙÒ
 Ó ÕÙ Ò Ó Þ Ò ³³³
Acabamos de criar uma função que não faz nada, mas contém o nosso precioso comentário,
veja o que a função help() nos retorna:
ÐÔ´ ÙÒ
 Óµ
Será impresso:
À ÐÔ ÓÒ ÙÒ
Ø ÓÒ ÙÒ
 Ó Ò ÑÓ ÙÐ Ñ Ò
ÙÒ
 Ó´µ
×Ø ÙÑ ÙÒ
 Ó ÕÙ Ò Ó Þ Ò
*Para sair, aperte a tecla ’q’.
A função que acabamos de criar ganha no seu help() o comentário que foi feito. Um detalhe
importante é que este tipo de comentário é feito através das aspas triplas. Nas classes a saída é
muito mais interessante, veja:

Ð ×× Ø ×Ø
³³³ ×Ø ÙÑ 
Ð ×× Ø ×Ø ³³³
Ò Ø ´× Ð µ
³³³Ç 
ÓÒ×ØÖÙØÓÖ³³³
Ô ××
Ô ÒØ ´× Ð µ
³³³Å ØÓ Ó ÕÙ Ô ÒØ ³³³
Ô ××
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Com nossa classe de teste criada vamos chamar o help() com o nome da classe como parâ-
metro:
ÐÔ´Ø ×Ø µ
Será impresso:

Ð ×× Ø ×Ø
×Ø ÙÑ 
Ð ×× Ø ×Ø
Å Ø Ó × Ò Ö
Ò Ø ´× Ð µ
Ç 
ÓÒ×ØÖÙØÓÖ
Ô ÒØ ´× Ð µ
3.2 Identação
Quando colocamos espaços em branco no início da linha de um código, estamos identando-o.
A identação serve para organizar melhor o código para que ele fique visualmente mais agradável
e intuitivo. No Python estes espaços são bem importantes, pois os blocos de instruções devem
estar em um mesmo nível de identação, caso contrário, erros podem ocorrer. Exemplo:
ÓÖ Ü Ò Ö Ò ´½¸½¼µ
ÔÖ ÒØ Ü
Aparecerá o seguinte erro:
Ð ×Ø Ò ¸ Ð Ò ¾
ÔÖ ÒØ Ü
ÁÒ ÒØ Ø ÓÒ ÖÖÓÖ ÜÔ 
Ø Ò Ò ÒØ ÐÓ
Corrigido:
ÓÖ Ü Ò Ö Ò ´½¸½¼µ
ÔÖ ÒØ Ü
½
¾
¿
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
As identações podem ser feitas com espaços em brancos ou com tabulações. Recomenda-se
utilizar a tabulação em todos os casos. A obrigatoriedade da identação no Python é bem interes-
sante, pois "força"o programador a escrever um programa visualmente bem estruturado.
Em Java o escopo de uma variável é a parte do programa na qual pode-se diretamente
referenciá-la. Uma variável local tem seu escopo com alcance somente dentro do bloco onde
ela foi declarada. Bloco este que em Java é delimitado por chaves e que deve ser identado
como mandam as regras da boa programação.
3.3 Variáveis
Na linguagem Java todas as variáveis têm seus tipos de dados definidos. Os tipos de dados
definem quais são os valores que uma variável pode armazenar e quais operações pode execu-
tar. Esses tipos básicos são os mesmos para qualquer ambiente de programação Java, por se
tratar de uma linguagem portável.
As variáveis locais são declaradas no corpo de um método*, existindo somente durante a ati-
vidade dele. Já as variáveis de instância e variáveis de classe são declaradas ambas no corpo
de uma classe*, mas as de instância especificam atributos próprios de cada objeto da classe,
enquanto que as de classe especificam atributos comuns a todos os objetos da classe.
Existem também as variáveis paramétricas que são declaradas como tratadoras de exceção,
construtoras e parâmetros formais de métodos. São variáveis declaradas na especificação de um
método, estas variáveis possuem algum valor que será usado no método invocado. Seu uso é
semelhante ao das variáveis locais podendo ser modificado o seu valor.
Em Python existe suporte para uma grande diversidade de bibliotecas externas. Ou seja,
pode-se fazer em Python qualquer tipo de programa, mesmo que utilize gráficos, funções mate-
máticas complexas ou uma determinada base de dados SQL.
• É possível escrever extensões a Python em C e C++, quando é necessário desempe-
nho máximo ou quando for desejável fazer interface com alguma ferramenta que possua
biblioteca apenas nestas linguagens;
• Python permite que o programa execute inalterado em múltiplas plataformas. Em ou-
tras palavras, a sua aplicação feita para Linux, funcionará normalmente sem problemas em
Windows e em outros sistemas onde existir um interpretador Python;
• Python é pouco punitivo: em geral, "tudo pode"e há poucas restrições arbitrárias. Esta
propriedade acaba por tornar prazeroso o aprendizado e uso da linguagem;
• Python é livre: além do interpretador ser distribuído como software livre, pode ser usado
para criar qualquer tipo de software, proprietário ou livre. O projeto e implementação da
linguagem é discutido aberta e diariamente em uma lista de correio eletrônico e qualquer um
é bem-vindo para propor alterações por meio de um processo simples e pouco burocrático.
31
Capítulo 4
Produtividade
Observaremos a partir de agora apenas a Produtividade do programador e não tentaremos
comparar Java e Python em qualquer outro critério que não esse. No entanto, existe um tópico
relacionado que é praticamente impossível evitar.
Python é uma linguagem dinamicamente tipada e esta característica é uma importante ra-
zão pela qual os programadores podem ser mais produtivos em Python, pois eles não têm que
lidar com a sobrecarga da tipagem estática de Java. Por isso, os debates sobre produtividade
Java/Python podem inevitavelmente transformar-se em debates sobre as vantagens e as desvan-
tagens comparativas de tipagem estática versus tipagem dinâmica ou fortemente tipada versus
fracamente tipada em linguagens de programação.
É importante notar que a afirmação de que um programador pode ser mais produtivo em
Python do que em Java, não é o mesmo que afirmar que deva-se sempre usar Python e nunca
utilizar outras tecnologias com Java. As linguagens de programação são ferramentas, e os dife-
rentes instrumentos são apropriados para diferentes tipos de trabalho.
Um operário cujas ferramentas sejam resumidas apenas a um martelo, não importa o quão
grande ele seja, está mal instrumentado e inapto a fazer seu trabalho de maneira eficiente. Um
programador ou uma empresa de desenvolvimento de software cujo toolkit de desenvolvimento
contém apenas uma linguagem de programação é também ineficiente. Nossas "toolboxes"devem
conter tanto Python e Java de modo que, em qualquer tipo de situação, tenhamos a opção de
escolher a melhor ferramenta para o trabalho.
4.1 Java vs Python
Há três características principais das linguagens que tornam os programadores mais produti-
vos com Python do que com Java.
JAVA
• Tipada estaticamente
Em Java todos os nomes de varáveis, juntamente com seus tipos, precisam ser explici-
tamente declarados. A tentativa de atribuir um objeto do tipo errado como nome de uma
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
variável desencadeia um tipo de exceção. É isso o que significa dizer que Java é uma lin-
guagem estaticamente tipada.
Recipientes de objetos Java, por exemplo, Vector e ArrayList podem ter objetos genéricos
do tipo Object, mas não podem ter tipos primitivos como Int. Para armazenar um int em um
Vetor, primeiro tem-se de converter o int pera um número inteiro (Integer). Quando você
requisitar um objeto, essa requisição não lembrará o seu tipo, na verdade ele deverá ser
explicitamente expresso como sendo do tipo pretendido para que seja reconhecido.
• Verbosidade
Abundante em palavras. Parece conter mais palavras que o necessário.
• Não compacta
PYTHON
• Tipada dinamicamente
Em Python, você nunca declara coisa alguma. Uma declaração de atribuição liga um nome
a um objeto e o objeto pode ser de qualquer tipo. Se um nome é atribuído a um objeto
de um tipo, pode mais tarde ser atribuído a um objeto de um tipo diferente. É isso o que
significa dizer que o Python é uma linguagem dinamicamente tipada.
Recipentes de objetos Python, por exemplo, listas e dicionários podem possuir objetos de
qualquer tipo, incluindo números e listas. Quando você requisitar um objeto de um recipi-
ente, ele relembra o seu tipo, de modo algum "relembrar"é necessário.
• Verbosidade
Concisa. Expressa muito em poucas palavras. Implicações limpas e breves evitando o
supérfluo.
• Compacta
Em The New Hacker’s Dictionary, Eric S. Raymond dá a seguinte definição de "compacta":
Compacto adj. Em um projeto, descreve as valiosas propriedades que podem ser apre-
endidas todas de uma só vez. Isto significa que a coisa criada a partir do projeto pode ser
utilizada com maior facilidade e efetividade do que um instrumento equivalente que não é
compacto.
Exemplo:
O clássico programa "Hello, world"ilustra a relativa "verbosidade"de Java.
JAVA
ÔÙ Ð 
 
Ð ×× À ÐÐÓÏÓÖÐ ß
ÔÙ Ð 
 ×Ø Ø 
 ÚÓ Ñ Ò ´ËØÖ Ò ℄ Ö ×µß
ËÝ×Ø ÑºÓÙغÔÖ ÒØÐÒ´ À ÐÐÓ¸ ÛÓÖÐ µ
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
PYTHON
ÔÖ ÒØ À ÐÐÓ¸ ÛÓÖÐ
ou
ÔÖ ÒØ´ À ÐÐÓ¸ ÛÓÖÐ µ ÈÝØ ÓÒ Ú Ö× Ó ¿
No exemplo a seguir, inicializamos um inteiro como zero, então o convertemos em uma String
em seguida cheque se está vazio. Observe os dados declarados na primeira e segunda linhas,
que são necessários em Java, mas não em Python. Note também a verbosidade Java, até mesmo
em uma operação básica como a comparação das duas Strings para sua igualdade.
JAVA
ÒØ ÑÝ ÓÙÒØ Ö ¼
ËØÖ Ò ÑÝËØÖ Ò ËØÖ Ò ºÚ ÐÙ Ç ´ÑÝ ÓÙÒØ Öµ
´ÑÝËØÖ Ò º ÕÙ Ð×´ ¼ µµ ººº
PYTHON
ÑÝ ÓÙÒØ Ö ¼
ÑÝËØÖ Ò ×ØÖ´ÑÝ ÓÙÒØ Öµ
ÑÝËØÖ Ò ¼ ººº
JAVA
»» ÔÖ ÒØ Ø ÒØ Ö× ÖÓÑ ½ ØÓ
ÓÖ ´ ÒØ ½ ½¼ ··µ ß
ËÝ×Ø ÑºÓÙغÔÖ ÒØÐÒ´ µ
PYTHON
ÔÖ ÒØ Ø ÒØ Ö× ÖÓÑ ½ ØÓ
ÓÖ Ò Ö Ò ´½¸½¼µ
ÔÖ ÒØ
Considerando que sua aplicação possui 15 classes. Mais precisamente possui 15 classes
públicas de nível alto. Temos:
JAVA
Cada classe pública de nível alto precisa ser definidade em seu próprio arquivo. Se sua
aplicação tiver 15 dessas classes, terá 15 arquivos.
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
PYTHON
Classes múltiplas podem ser definidas em um único arquivo. Se sua aplicação tiver 15 clas-
ses, a aplicação inteira pode ser armazenada em um único arquivo, embora você provavelmente
deva querer particioná-lo em talvez 5 ou 6 arquivos.
Em sua aplicação, o método A chama o método B, que chama o método C, que chama o
método D, que chama o método E, que chama o método F. Dai você descobre que F pode causar
um erro de exceção (SpecialException) e que este erro precisa ser capturado por A.
JAVA
Você precisará lançar o erro de "SpecialException"em F e capturá-lo em A. E, ainda, precisará
adicionar a assinatura "throws SpecialException"em todosos métodos de B, C, D, E e F.
PYTHON
Você deve lançar o erro SpecialException F e capturá-lo em A, apenas. As exeções irão se
propagar automaticamente pelos métodos subseqüentes, não sendo necessário que você faça
algo mais.
A razão para isto é que Java, isoladamente de outras linguagens de programação objeto-
orientadas, utiliza verificações de exceções, ou seja, exceções devem ser capturados ou lança-
das por cada método em que elas possam aparecer ou o código irá falhar ao compilar.
Exemplo:
Sua aplicação tem uma classe Empregado. Quando uma instância de Empregado é criada,
a construtora pode passar um, dois ou três argumentos. Se você estiver programando em Java,
isto significa que você escreveu três construtoras com 3 diferentes assinaturas. Se você tiver
programando em Python, você terá escrito apenas um único construtor, com valores padrão para
os argumentos opcionais.
JAVA
ÔÙ Ð 
 
Ð ×× ÑÔÐÓÝ ß
ÔÖ Ú Ø ËØÖ Ò ÑÝ ÑÔÐÓÝ Æ Ñ
ÔÖ Ú Ø ÒØ ÑÝÌ Ü Ù
Ø ÓÒ× ½
ÔÖ Ú Ø ËØÖ Ò ÑÝÅ Ö Ø ÐËØ ØÙ× × Ò Ð
»»¹¹¹¹¹¹¹¹¹ 
ÓÒ×ØÖÙ
ØÓÖ ½ ¹¹¹¹¹¹¹¹¹¹¹¹¹
ÔÙ Ð 
 ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ µß
Ø ×´ ÑÔÐÓÝ Æ Ñ ¸ ½µ
»»¹¹¹¹¹¹¹¹¹ 
ÓÒ×ØÖÙ
ØÓÖ ¾ ¹¹¹¹¹¹¹¹¹¹¹¹¹
ÔÙ Ð 
 ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ ¸ ÒØ Ø Ü Ù
Ø ÓÒ×µß
Ø ×´ ÑÔÐÓÝ Æ Ñ ¸ Ø Ü Ù
Ø ÓÒ׸ × Ò Ð µ
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
»»¹¹¹¹¹¹¹¹¹ 
ÓÒ×ØÖÙ
ØÓÖ ¿ ¹¹¹¹¹¹¹¹¹¹¹¹¹
ÔÙ Ð 
 ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ ¸ ÒØ Ø Ü Ù
Ø ÓÒ׸
ËØÖ Ò Ñ Ö Ø ÐËØ ØÙ×µß
Ø ×º ÑÔÐÓÝ Æ Ñ ÑÔÐÓÝ Æ Ñ
Ø ×ºØ Ü Ù
Ø ÓÒ× Ø Ü Ù
Ø ÓÒ×
Ø ×ºÑ Ö Ø ÐËØ ØÙ× Ñ Ö Ø ÐËØ ØÙ×
PYTHON

Ð ×× ÑÔÐÓÝ ´µ
Ò Ø ´× Ð ¸ ÑÔÐÓÝ Æ Ñ ¸ Ø Ü Ù
Ø ÓÒ× ½¸ Ñ Ö Ø ÐËØ ØÙ× × Ò Ð µ
× Ð º ÑÔÐÓÝ Æ Ñ ÑÔÐÓÝ Æ Ñ
× Ð ºØ Ü Ù
Ø ÓÒ× Ø Ü Ù
Ø ÓÒ×
× Ð ºÑ Ö Ø ÐËØ ØÙ× Ñ Ö Ø ÐËØ ØÙ×
4.2 Produtividade e Tipagem
Em Python, uma classe possui apenas um construtor. O método construtor é simplesmente
outro método da classe, mas um que tem um nome especial:__init__
Uma boa razão que demonstra a eficiência de programar em Python é o idioma simples usado.
Eu por exemplo, ainda tenho que dar uma olhada em como abrir um arquivo toda vez que tenho
que fazê-lo em Java.
JAVA
ÑÔÓÖØ Ú º Óº¶
Ù Ö Ê Ö ÑÝ Ð Ò Û Ù Ö Ê Ö´ Ò Û Ð Ê Ö´ Ö Ð Ò Ñ µµ
PYTHON
ÓÔ Ò Ò ÒÔÙØ Ð
ÑÝ Ð ÓÔ Ò´ Ö Ð Ò Ñ µ
Exemplo:
ÙÒ
Ø ÓÒ ÓÖ Å Ø Ó Â Ú ÈÝØ ÓÒ
Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò
Ó ×ÕÙ Ö Ö Ø ×ØÖ Ò × ×ºØÖ Ñ´µ ׺×ØÖ Ô´µ
Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò
Ó ×ÕÙ Ö ×ØÖ Ò × ´ÒÓØ Ú Ð Ð µ ׺Ð×ØÖ Ô´µ
Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò
Ó Ö Ø ×ØÖ Ò × ´ÒÓØ Ú Ð Ð µ ׺Ö×ØÖ Ô´µ
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Código para adicionar um int em um Vetor e requisitá-lo.
A partir do Java 1.5 um novo objeto de Integer precisa ser criado e inicializado a partir de int
antes de poder ser adicionado ao Vetor. Para se requisitar o valor, o membro do Vetor precisa ser
transformado devolta em Integer e, então convertido em um int.
JAVA (versões anteriores a 1.5)
ÔÙ Ð 
 Î 
ØÓÖ Ä ×Ø Ò Û Î 
ØÓÖ
ÔÙ Ð 
 ÒØ ÆÙÑ Ö
ÔÙ Ð 
 ÒØ ÒÓØ ÖÆÙÑ Ö
Ä ×غ Ð Ñ ÒØ´Ò Û ÁÒØ Ö´ ÆÙÑ Öµµ
ÒÓØ ÖÆÙÑ Ö ´´ÁÒØ Öµ Ä ×غ Ø Ð Ñ ÒØ´¼µµº ÒØÎ ÐÙ ´µ
PYTHON
Ä ×Ø ℄
ÆÙÑ Ö
Ä ×غ ÔÔ Ò ´ ÆÙÑ Öµ
ÒÓØ ÖÆÙÑ Ö Ä ×Ø ¼℄
JAVA (versões posteriores a 1.5)
ÔÙ Ð 
 Î 
ØÓÖ ÁÒØ Ö Ä ×Ø Ò Û Î 
ØÓÖ ÁÒØ Ö
ÔÙ Ð 
 ÒØ ÆÙÑ Ö
ÔÙ Ð 
 ÒØ ÒÓØ ÖÆÙÑ Ö
Ä ×غ Ð Ñ ÒØ´ ÆÙÑ Öµ
ÒÓØ ÖÆÙÑ Ö Ä ×غ Ø Ð Ñ ÒØ´¼µ
PYTHON
Ä ×Ø ℄
ÆÙÑ Ö
Ä ×غ ÔÔ Ò ´ ÆÙÑ Öµ
ÒÓØ ÖÆÙÑ Ö Ä ×Ø ¼℄
Verbosidade não é apenas uma questão de aumentar o número de caracteres que devem ser
digitados, mas também uma questão de aumentar o número de lugares onde erros podem ser
feitos. O código Java à esquerda tem 5 caracteres de controle: ( ) ; onde o correspondente
código Python tem apenas um caracter de controle, os dois pontos : . (ou dois, se você contar a
identação. Veja abaixo.)
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
JAVA
´ µß

PYTHON

Omitir ou duplicar esses caracteres é algo fácil de se fazer acidentalmente e constitui um grave
erro no código. Na minha estimativa pessoal, eu gasto 5 vezes mais tempo arrumando erros em
Java do que em Python. É realmente um corte na sua produtividade e em sua energia criativa
gastar tanto tempo apenas tentando satisfazer o compilador.
Tecnicamente, Python tem um outro caracter de controle que Java não tem, a identação. Mas,
a exigência de identação correta é a mesma em Java, assim como em Python, isso porque em
ambas as linguagens identar corretamente os códigos é um boa prática de programação que am-
plia a legibilidade humana do código. O interpretador Python força identação correta, enquanto
que o compilador Java não. Com o Java, você precisa de produtos adicionais, tais como o forma-
tador de código Jalopy para prover identação automática segundo os padrões.
Tipagem estática vs tipagem dinamica e fortemente tipado e fracamente tipado
Em uma linguagem tipada estaticamente, cada nome de variável está vinculado tanto (1) a
um tipo em tempo de compilação, por meio de declaração de dados e (2) a um objeto. A ligação
a um objeto é opcional, se um nome não está vinculado a um objeto, o nome é dito nulo. Uma
vez que um nome da variável for vinculado a um tipo, ou seja, declarado ele pode ser vinculado
através de uma declaração a objetos desse tipo. Ele não pode nunca ser vinculado a um objeto
de um tipo diferente. Uma tentativa de vincular o nome a um objeto do tipo errado irá gerar um
tipo de exceção.
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Figura 2 - Estaticamente tipada
Em uma linguagem tipada dinamicamente, cada nome de variável é (a menos que seja
nulo) vinculada apenas a um objeto. Nomes estão vinculados a objetos em tempo de execução
por meio de declarações e é possível vincular um nome a objetos de diferentes tipos durante a
execução do programa.
Figura 3 - Dinamicamente tipada
Aqui está um exemplo: em uma linguagem tipada estaticamente, com a seguinte seqüência
de declarações, que ligam um objeto de inteiro um objeto de string ao nome employeeName,
é ilegal. Se employeeName tiver sido declarado para ser um int, então, a segunda declaração
seria ilegal. Se ele tivesse sido declarado para ser uma String, então a primeira declaração
seria ilegal. Mas, em uma linguagem tipada dinamicamente esta seqüência de declarações está
perfeitamente escrita.
ÑÔÐÓÝ Æ Ñ
ÑÔÐÓÝ Æ Ñ ËØ Ú Ê
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
Python é uma linguagem tipada dinamicamente. Java é uma linguagem tipada estaticamente.
Em uma linguagem fracamente tipada, variáveis podem ser implicitamente transformadas
em tipos não relacionados, enquanto em uma linguagem fortemente tipada isso não pode, pois
é necessário uma transformação explícita. Note que eu disse tipos não relacionados. A maioria
das linguagens permitirá transformações implícitas entre tipos relacionadas. Por exemplo: a adi-
ção de um inteiro e número em ponto flutuante. Aos tipos não relacionados quero dizer coisas
como números e strings. Em uma linguagem fracamente tipada, o número 9 e a string "9"são
intercambiáveis, e a seguinte seqüência de declarações é legal.

 
ÓÒ
 Ø Ò Ø ´ ¸ µ »» ÔÖÓ ÙÞ
´ ¸ µ »» ÔÖÓ ÙÞ ½
Em uma linguagem fortemente tipada, por outro lado, as duas últimas afirmações gerariam
exceções. Para evitá-las uma espécie de conversão explícita de tipo seria necessária, como esta:

 
ÓÒ
 Ø Ò Ø ´ ×ØÖ´ µ¸ µ
´ ¸ ÒØ ´ µµ
Tanto Java e Python são linguagens fortemente tipadas. Exemplos de linguagens fracamente
tipadas: Perl e Rexx.
40
Capítulo 5
Jython o melhor dos dois mundos
5.1 O que é Jython?
Jython consiste de um compilador de código fonte Python para bytecodes Java que possam
ser executados diretamente em uma JVM, implementando a linguagem de programação Python
na plataforma Java. Possui, para tal, um conjunto de bibliotecas que são utilizadas pelo compila-
dor Java e tem suporte extra para tornar trivial o uso de pacotes Java dentro do Jython.
• Escrita de scripts de forma interativa - Programadores Java podem adicionar bibliotecas
Jython ao seu sistema e permitir que usuários finais escrevam scripts simples ou complexos
que adicionem funcionalidades à aplicação.
• Experimentação Interativa - Jython fornece um interpretador interativo que pode ser usado
para interagir com pacotes Java ou com aplicações Java em execução. Isto permite aos
programadores experimentar e depurar qualquer sistema Java usando Jython.
• Desenvolvimento Rápido de Aplicações (RAD) - Programas em Python são tipicamente
de 2 a 10 vezes menores que o seu equivalente em Java. Isto se trasforma diretamente
em aumento da produtividade do programador. A integração entre Python e Java permite
aos desenvolvedores misturar livremente as duas linguagens durante o desenvolvimento e
distribuição das aplicações.
5.2 Instalação Básica
O Jython 2.2.1 é distribuído como um arquivo ".jar". Depois de baixar o mesmo, quer dê um
duplo clique em "jython_installer-2.2.1.jar"ou execute java com a opção "-jar".
Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö
Isto iniciará o instalador GUI regular na maioria dos sistemas ou um console instalador para
forçá-lo a trabalhar em "headless mode"("Headless mode"é uma configuração do sistema ope-
racional na qual dispositivos de vídeo, teclado, mouse ou estão ausentes. Na verdade, você pode
executar diversas operações neste modo, mesmo com dados gráficos) invocando o instalador
com um console "switch".
Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö ¹¹
ÓÒ×ÓÐ
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
O instalador então caminhará através de um conjunto de medidas semelhantes em modo
gráfico ou console. Veja a licença, selecione um diretório de instalação, na prática a JVM copia
o Jython para o sistema de arquivos. Após isso, Jython é instalado no diretório selecionado. Há
um script no diretório de instalação ("jython"em sistemas Unix ou "jython.bat"no Windows), que
irá iniciar o console Jython que pode ser usado para explorar dinamicamente o Jython e o Java
Runtime.
5.2.1 Modo Autônomo (Standalone)
Nesta opção não há "caching"evitando a sobrecarga de inicialização (provavelmente a maior
parte do custo da velocidade de chamada de classe Java).
Você pode fazer o download do instalador a partir daqui:
ØØÔ »» ÓÛÒÐÓ ×º×ÓÙÖ
 ÓÖ ºÒ Ø» ÝØ ÓÒ» ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö
E executá-lo assim:
° Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö
Quando você entrar na página "Installation type", selecione "Standalone".
Quando a instalação acabar, você terá um jython.jar com os arquivos "/lib", assim:
° Ú ¹ Ö ÝØ ÓÒº Ö
Você verá um prompt Jython sem cache. É claro que você pode executar scripts apenas
chamnado-as, se você desejar:
° Ú ¹ Ö ÝØ ÓÒº Ö ×
Ö ÔغÔÝ
E você pode adicionar esse "jar"para o "classpath"do seu aplicativo, o que permitirá importa-
ções.
Opções de instalação
Você pode obter uma lista de opções para instalação executando:
° Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö ¹¹ ÐÔ
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
5.3 Utilizando o Jython
Jython é invocado usando o script "jython", um script curto que invoque a sua JVM local,
define as propriedades Java "install.path"para um valor adequado e, em seguida, executa o
"org.python.util.jython".
jython [opcoes] [-jar jar |-c cmd | arquivo | -] [argumentos]
• opcoes
-i: inspeciona interativamente, após executar scripts. Força o prompt stdin mesmo se não
for para o terminal;
-S: não implica na importação de sites na inicialização;
-Dprop = [valor]: define o valor da propriedade Jython(prop).
• -jar jar O programa a ser executado é lido a partir do arquivo "__run__.py"no arquivo
"jar"especificado.
• -c cmd O programa a ser executado é passado como uma string no caso "cmd". Esta opção
encerra a lista de opções de arquivo, executando o arquivo com script.
* O programa é lido em standard-in (padrão; modo interativo é usado se estiver num tty).
Esta flag permite a você embutir um arquivo no Jython e que ele tenha o tratamento correto.
Por exemplo:
ÐØ Ö ÖÕÙ ÚÓ ÝØ ÓÒ ¹
• argumentos Argumentos passados para o programa no "sys.argv[1:]"
–help: imprime uma mensagem de utilização.
–version: imprime a versão atual do Jython.
5.3.1 Tornando scripts Jython executáveis
Para fazer um arquivo Jython ".py"executável em um sistema Unix:
• certifique-se de que o Jython está no seu PATH padrão;
• faça o arquivo executável ".py". Geralmente, isso é feito com o comando "chmod + x
foo.py";
• adicione a linha a seguir ao início do arquivo:
»Ù×» Ò» ÒÚ ÝØ ÓÒ
Nota: "#! <...>/jython"geralmente não irá funcionar para tornar o seu script executável. Isto
porque "jython"é em si um script e o "#!"requer que o arquivo a ser executado seja um binário
executável, isso na maioria das distribuições Unix. Usando "/usr/bin/env"contornará este pro-
blema e fará com que os seus scripts sejam mais portáveis.
Veja o seguinte código:
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF
ÑÔÓÖØ Ú Üº×Û Ò × Ð ×Û Ò
ÔÒÙÑ ÖÓ Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÁÒÔÙØ ÐÓ ´ Ø ÙÑ ÆÙÑ ÖÓ ÁÒØ ÖÓ µ
×ÒÙÑ ÖÓ Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÁÒÔÙØ ÐÓ ´ Ø ÙÑ ÆÙÑ ÖÓ ÁÒØ ÖÓ µ
×ÓÑ ÒØ´ÔÒÙÑ ÖÓµ · ÒØ´×ÒÙÑ ÖÓµ
Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÅ ×× ÐÓ ´ÆÓÒ ¸ ×ÓÑ ± ± ×ÓÑ µ
Caso este arquivo seja salvo com o nome "soma.py", ao se executar o seguinte comando:
° ÝØ ÓÒ ×ÓÑ ºÔÝ
O programa irá solicitar a entrada de dois números inteiros e exibirá a soma dos mesmos.
Esta é apenas uma ínfima parte da capacidade do Jython de unir o melhor que existe dos dois
mundos: Java e Python. Para mais, faça o curso Jython ou consulte o link www.jython.org.
44
Capítulo 6
Referências Bibliográficas
Site oficial: http://www.jython.org
Site oficial (BR): http://www.pythonbrasil.com.br
Outras Referências: http://www.ferg.org/projects/python_java_side-by-side.html
45

Mais conteúdo relacionado

Mais procurados

Tcl tk
Tcl tkTcl tk
Tcl tkTiago
 
Selinux
SelinuxSelinux
SelinuxTiago
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguroTiago
 
Screen
ScreenScreen
ScreenTiago
 
X dialog
X dialogX dialog
X dialogTiago
 
Tunelamento
TunelamentoTunelamento
TunelamentoTiago
 
Wx python
Wx pythonWx python
Wx pythonTiago
 
Squid guard
Squid guardSquid guard
Squid guardTiago
 
Pascal
PascalPascal
PascalTiago
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoopsTiago
 

Mais procurados (20)

Tcl tk
Tcl tkTcl tk
Tcl tk
 
Selinux
SelinuxSelinux
Selinux
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Screen
ScreenScreen
Screen
 
X dialog
X dialogX dialog
X dialog
 
Samba
SambaSamba
Samba
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Zope
ZopeZope
Zope
 
Wx python
Wx pythonWx python
Wx python
 
Squid guard
Squid guardSquid guard
Squid guard
 
Sql
SqlSql
Sql
 
Qemu
QemuQemu
Qemu
 
Uml
UmlUml
Uml
 
Pascal
PascalPascal
Pascal
 
Vim
VimVim
Vim
 
Linguagem Ruby
Linguagem RubyLinguagem Ruby
Linguagem Ruby
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Inkscape
InkscapeInkscape
Inkscape
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 

Semelhante a Java para Python

Intro micro software
Intro micro softwareIntro micro software
Intro micro softwareTiago
 
Fw builder
Fw builderFw builder
Fw builderTiago
 
Jabber
JabberJabber
JabberTiago
 
Drupal
DrupalDrupal
DrupalTiago
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linuxTiago
 
Open vpn
Open vpnOpen vpn
Open vpnTiago
 
F fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwdF fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwdTiago
 
Pen linux
Pen linuxPen linux
Pen linuxTiago
 
Nagios2
Nagios2Nagios2
Nagios2Tiago
 
Dovecot
DovecotDovecot
DovecotTiago
 
Monitoramento
MonitoramentoMonitoramento
MonitoramentoTiago
 
Inkscape
InkscapeInkscape
InkscapeTiago
 
K mobile jpilot_kpilot
K mobile jpilot_kpilotK mobile jpilot_kpilot
K mobile jpilot_kpilotTiago
 

Semelhante a Java para Python (20)

Ftp
FtpFtp
Ftp
 
Intro micro software
Intro micro softwareIntro micro software
Intro micro software
 
Fw builder
Fw builderFw builder
Fw builder
 
J2me
J2meJ2me
J2me
 
Plone
PlonePlone
Plone
 
Ferm
FermFerm
Ferm
 
Jabber
JabberJabber
Jabber
 
Mrtg
MrtgMrtg
Mrtg
 
Drupal
DrupalDrupal
Drupal
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
Open vpn
Open vpnOpen vpn
Open vpn
 
F fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwdF fmpeg2 theora_oggfwd
F fmpeg2 theora_oggfwd
 
Ltsp
LtspLtsp
Ltsp
 
Nvu
NvuNvu
Nvu
 
Pen linux
Pen linuxPen linux
Pen linux
 
Nagios2
Nagios2Nagios2
Nagios2
 
Dovecot
DovecotDovecot
Dovecot
 
Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Inkscape
InkscapeInkscape
Inkscape
 
K mobile jpilot_kpilot
K mobile jpilot_kpilotK mobile jpilot_kpilot
K mobile jpilot_kpilot
 

Mais de Tiago

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 
C# classes
C#   classesC#   classes
C# classesTiago
 

Mais de Tiago (20)

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 
C# classes
C#   classesC#   classes
C# classes
 

Java para Python

  • 1. De Java Para Python 2 de Setembro de 2008
  • 2. Conteúdo I Sobre essa apostila 3 II Informações Básicas 5 III GNU Free Documentation License 10 IV de Java para Python 19 1 de Java para Python 20 2 Visão Geral 21 2.1 Conhecendo Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Conhecendo Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3 Diferenças básicas e comparativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 Comparativos Básicos 25 3.0.1 Instalando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.0.2 Testando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.0.3 Interpretador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1 Aspectos de programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.1 Estrutura, Compilação e Execução . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.2 A estrutura de um programa em Java . . . . . . . . . . . . . . . . . . . . . . 27 3.1.3 A estrutura de um programa em Python . . . . . . . . . . . . . . . . . . . . . 28 3.1.4 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2 Identação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4 Produtividade 32 4.1 Java vs Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2 Produtividade e Tipagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5 Jython o melhor dos dois mundos 41 5.1 O que é Jython? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2 Instalação Básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2.1 Modo Autônomo (Standalone) . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.3 Utilizando o Jython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.3.1 Tornando scripts Jython executáveis . . . . . . . . . . . . . . . . . . . . . . . 43 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF 6 Referências Bibliográficas 45 2
  • 4. Parte I Sobre essa apostila 3
  • 5. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br. O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br), desde outubro de 2006. Criticas e sugestões construtivas são bem-vindas a qualquer tempo. Autores A autoria deste conteúdo, atividades e avaliações é de responsabilidade de Edson Hungria Junior (hungria@cdtc.org.br) . O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vem sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas atréves do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006,Edson Hungria Junior (hungria@cdtc.org.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 4
  • 7. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível • Os 10 mandamentos do aluno de Educação a Distância • Como participar dos fóruns e da wikipédia • Primeiros passos É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Edson Hungria Junior (hungria@cdtc.org.br) . 6
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Software Foundation; com o Capítulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso a Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância. • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas. • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores. • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo. • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais. • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real. • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre. • 8. Flexibilidade e adaptação: requisitos necessário a mudança tecnológica, aprendizagens e descobertas. • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto-chave na comunicação pela Internet. • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso, é recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervosismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 9
  • 11. Parte III GNU Free Documentation License 10
  • 12. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF (Traduzido pelo João S. O. Bueno através do CIPSGA em 2001) Esta é uma tradução não oficial da Licençaa de Documentação Livre GNU em Português Brasileiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a dis- tribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Por- tuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licença de Documentação Livre GNU Versão 1.1, Março de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas não é permitido alterá-lo. INTRODUÇÃO O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo, com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge- ral (GNU GPL), que é um copyleft para software livre. Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin- cipalmente para trabalhos cujo propósito seja de introdução ou referência. APLICABILIDADE E DEFINIÇÕES Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. 11
  • 13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex- clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci- onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo. As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença. Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença. Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica- mente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de- sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é "Transparente"é chamada de "Opaca". Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim- ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenas com processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída. A "Página do Título"significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe- minente do título do trabalho, precedendo o início do corpo do texto. 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF FAZENDO CÓPIAS EXATAS Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres- cente nenhuma outra condição, quaisquer que sejam, às desta Licença. Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com- pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você também precisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também pode exibir cópias publicamente. FAZENDO CÓPIAS EM QUANTIDADE Se você publicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o titulo com- pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes. Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, a qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel- mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta- mente ou através de seus agentes ou distribuidores) daquela edição para o público. É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento. 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF MODIFICAÇÕES Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se- ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versão modificada: A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do- cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão lhe der permissão; B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá- veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença do Documento; H. Incluir uma cópia inalterada desta Licença; I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal como descrito na sentença anterior; J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu- mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção "Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 14
  • 16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri- buidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção; M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci- sam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual- quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão. Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente , e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada. COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com- binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença. O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado. Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver- sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso". COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento. AGREGAÇÃO COM TRABALHOS INDEPENDENTES Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se- parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver- são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Senão eles precisarão aparecer nas capas de todo o agregado. TRADUÇÃO Tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in- clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF versão original em Inglês desta Licença, a versão original em Inglês prevalecerá. TÉRMINO Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres- samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen- ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença. REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen- tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licença para seus documentos Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright e licenças logo após a página de título: Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft- ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li- cença está inclusa na seção entitulada "Licença de Documentação Livre GNU". Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda- mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 17
  • 19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF tal como a GNU General Public License, para permitir o seu uso em software livre. 18
  • 20. Parte IV de Java para Python 19
  • 21. Capítulo 1 de Java para Python Figura 1 - Jython Um programador pode ser significativamente mais produtivo em Python do que em Java, dizem os especialistas. A estimativa mais aceita é de que Python seja de 5 a 10 vezes mais eficiente. Cada vez mais pessoas e empresas estão migrando para Python para testarem essa produtividade. No entanto, é preciso se aprofundar na relação de ambas as linguagens com os paradigmas da orientação a objeto para que se compreenda as razões pelas quais alguns programadores estão fazendo essa migração. Este curso é para aqueles que pretendem fazer migração. 20
  • 22. Capítulo 2 Visão Geral A idéia do curso Java para Python é apresentar uma visão geral e comparativa da linguagem Python para desenvolvedores familiarizados com a linguagem Java. Você conhecerá as principais características da linguagem Python estabelendo analogias e contra exemplos com a linguagem Java. Como poderá ser verificado, as linguagens têm princípios diferenciados apesar de ambas serem marcadas pela orientação a objeto, entretanto são bem similares quanto a seus usos finais: prover uma linguagem multiplataforma de uso genérico, que pode variar de grandes sistemas em Intranets e para a Internet até o desenvolvimento de jogos e aplicações para dispositivos portáteis (telefones celulares, câmeras digitais, etc...) 2.1 Conhecendo Java O Java hoje é uma linguagem extremamente popular, impulsionada pela gigante Sun Mi- crosystems e centrada no mote "Write Once, Run Anyware"(Escreva o código uma vez, execute -o em qualquer lugar). Houve um esforço muito grande para que ela cumprisse esse objetivo de ser uma linguagem para uso generalizado e para todas as plataformas, de supercomputadores a celulares. Não é o objetivo deste curso apresentar o Java e suas características do ponto de vista téc- nico e histórico, sendo que tal introdução pode ser achada em vários pontos da web e em cursos específicos. Uma rápida busca no google pode apontar para vários deles. Como qualquer criação humana, ela tem imperfeições. Conhecendo outras alternativas e estabelecendo comparações podemos perder o medo de abordar os pontos negativos da lingua- gem. Uma queixa de alguns desenvolvedores é a grande quantidade de código que se tem que escrever para realização de algumas ações. A estrutura da linguagem é tal que uma quantidade grande de declarações é necessária para o funcionamento de algumas estruturas. Essas declarações, quando multiplicadas pelas centenas de partes de um projeto de médio a grande porte, acabam tomando um tempo considerável de codificação - já que parte das mesmas pode ser automatizada pelo editor - de leitura do código, uma vez que a parte essencial acaba ofuscada por estruturas de controle inerentes à linguagem. 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Falando um pouco sobre a linguagem em si, Java se caracteriza por ter um ambiente de exe- cução próprio - uma máquina virtual, que provê sempre o mesmo ambiente de execução para os programas, independentemente de estarem sendo executados num PC Pentium, num Macintosh PowerPC, em servidor IBM POWER ou SUN Sparc, ou mesmo num telefone celular ou PDA. Com uma linguagem compilada normal, como o C ou Pascal, o programa teria que, na me- lhor das hipóteses, ser recompilado, a partir do código fonte para funcionar em cada arquitetura dessas e na pior, ter que sofrer várias adaptações para funcionar em uma ou em outra. Essa funcionalidade multi-arquitetura sempre foi o carro chefe para o marketing do Java. No entanto, perceba que ao não disponibilizar o ambiente de execução como Software Livre, as pes- soas ficam a mercê da SUN Microsystems em relação a programas Java. O sistema GNU/Linux funciona perfeitamente em muitas plataformas de hardware para as quais a SUN e a IBM simples- mente não disponibilizam seus ambientes de execução Java proprietários. Nesses ambientes, os programas Java não vão rodar. O "Run anywhere"se prova mais uma peça de marketing que uma realidade - pelo menos enquanto o as JVMs não forem livres. Exemplos de ambientes sem JVMs completas disponíveis são GNU/Linux em qualquer hardware que não seja compatível com Intel Pentium, inclusive em Power Macs, o sistema FreeBSD em qualquer arquitetura, e várias outras. 2.2 Conhecendo Python O Python foi criado por Guido Van Rossun em 1990, e hoje seu desenvolvimento é continuado pela Python Software Foundation. A preocupação de Guido era criar uma linguagem elegante, mas de fácil acesso e ententimento. Na prática, um suscessor da linguagem ABC na qual ele já havia trabalhado, que por sua vez era uma sucessora do antigo BASIC (Beginners All-purpose Symbolic Code), popular em todos os microcomputadores da década de 80. O Python surge então como uma linguagem versátil, facilmente extensível com novos módulos em C ou C++, que funcionam em um ambiente de execução virtual, o que faz com que o mesmo programa possa ser executado em qualquer plataforma. E que, desde o princípio sempre teve seu ambiente de execução e API distribuídos de forma Livre. Isso faz com que na prática o Python seja mais "run anywhere"que o Java, uma vez que seu compilador e ambiente de execução está disponível em plataformas para as quais a SUN não fornece o ambiente de execução Java. Mas o grande conceito de "marketing"do Python não é o de que ele pode ser executado em qualquer lugar, mas sim de que o tempo de trabalho do desenvolvedor é a coisa mais cara hoje no Software. E é no tempo do desenvolvedor que Python faz sua economia com sintaxe e recursos que economizam código digitado desnecessariamente. Um porgrama em Python tem uma fração do tamanho que o mesmo programa teria se fosse escrito em outra linguagem como C ou Java e faz isso sem prejudicar a legibilidade do código, pelo contrário, a legibilidade é forçada pela sintaxe e assim se torna justamente outro fator de economia de tempo para o desenvolvedor. 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Além do interpretador, que na verdade é exatamente equivalente ao compilador + máquina virtual do Java, fornecido pela Python Software Foundation, há também o Java+Python ou Jython. Ele traz o melhor dos dois mundos, as em Python para bytecode Java que podem ser executados em qualquer ambiente de execução Java e ter pleno acesso a suas APIs. 2.3 Diferenças básicas e comparativas Java é fortemente tipada, enquanto que o Python é diamicamente tipada. Ou seja, Python não obriga a declarar variáveis e permite atribuir qualquer tipo de objeto a qualquer variável. O Python permite a execução dinâmica de código, ou seja, um programa Python pode construir código Python interativamente e executá-lo imediatamente. O Python também permite que blocos arbitrários de código (em geral pré-compilados para byte-code) sejam enviados como argumentos para métodos, de modo que não precisamos criar várias classes pequenas como fazemos em Java, como por exemplo, para tratamento de eventos ou para fornecer um método de comparação de objetos para ordenação de coleções. O Java estrutura o código em blocos, o Python estrutura pela identação. O Python não é uma linguagem "livre de formato"como a maioria das linguagens populares hoje (a exceção é o Visual Basic). A estrutura de um programa é dada pela identação das linhas de código e não por marcadores do tipo begin...end (ou ). Na verdade, isto ajuda, pois obriga os programadores Python a tornarem o código mais legível. Sobrecarga de operadores Embora Java não permita, Python permite que sejam definidos novos significados para os operadores padrão da linguagem sobre tipos definidos pelo usuário, como o C++ permite. Esta é uma das características que permitem escrever códigos em Python mais concisos e eficientes do que em Java. Qual classe devo utilizar? Tanto Java quanto Python são linguagens de programação de propósito geral, ambas forne- cem classes padrão para uma variedade de tarefas, como: estruturas de dados, interface gráfica e acesso a bancos de dados. Com o Jython, ambas as linguagens podem utilizar as mesmas bibliotecas e o Jython inclui até interfaces mais "Python-like"para APIs importanes do Java como JDBC. Devido às diferenças semânticas entre as duas linguagens, tente utilizar as classes básicas do Python sempre que possível e procure utilizar classes de nível mais alto escritas em Java. Ou tente o contrário, procure definir uma das linguagens como a preferencial para o front-end, seja ele em modo texto, GUI ou web e tente restringir-se ao uso de apenas objetos de negócio na outra linguagem. 23
  • 25. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Referências nulas Java identifica referências que não apontam para nenhum objeto válido com o valor null , enquanto que o Python define o valor None para a mesma finalidade. As classes devem ser importadas uma a uma Ou seja, não podemos fazer coisas como "import java.sql.*", mas sim "from java.applet import Applet." Por outro lado, o desenvolvedor Java irá encontrar no Python algumas características familia- res e que dificilmente são encontradas em outras linguagens de programação: • linguagem de fácil aprendizado; • tratamento estruturado de exceções, semelhante aos blocos try..catch do Java; • estrutura hierárquica de pacotes; • arrays dinâmicos e outras estruturas de dados (coleções) genéricas; • linguagem em constante desenvolvimento pela comunidade de Software Livre. 24
  • 26. Capítulo 3 Comparativos Básicos 3.0.1 Instalando o Python Para usuários das mais diversas distribuições de GNU/Linux que possuem o APT, como o Debian, basta apenas um: ° Ôع Ø Ò×Ø ÐÐ ÔÝØ ÓÒ Você também pode acessar o site http://www.python.org e baixar a versão mais recente do Python. Utilizamos aqui a versão 2.4.2 do Python, não há problemas em baixar uma versão mais recente neste caso. Entre na pasta onde foi baixado o arquivo, faça o logon como root e siga as instruções: • digite tar xzvf Python-2.4.2.tgz; • acesse o diretório e execute ./configure; • execute make. Neste momento, o Python já esta operacional, porém não está instalado em /usr/local no system. Faça o seguinte: • para instalar execute: make install O Python é normalmente instalado em locais padrão como em máquinas Unix e GNU/Linux no /usr/bin enquanto suas bibliotecas(lib) estão em /usr/lib/python2.x, já no caso do DOS ou MS-Windows o Python é instalado em C:Python. 3.0.2 Testando o Python Abra o terminal e digite o comando python. Se tudo der certo, será aberto o interpretador do Python. Ele permite que você execute todos os comandos da linguagem, sem que para isso precise criar um arquivo com o código. Para sair do interpretador, aperte Ctrl + D. Caso você queira jogar tudo em um arquivo, para depois executar, faça o seguinte: crie um arquivo com a extensão .py, por exemplo, primeiro.py; adicione a seguinte linha no início do arquivo: 25
  • 27. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF »Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ No caso da primeira linha temos algo comum em ambientes Unix, que são os comentários funcionais. Se na primeira linha de um arquivo existir #!/ seguido de um caminho para um exe- cutável, este executável será chamado e o nome do arquivo será passado como argumento. No nosso caso, o arquivo é primeiro.py e o Unix vai identificar a primeira linha como sendo um comentário funcional e executar da seguinte forma: »Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ ÔÖ Ñ ÖÓºÔÝ Pronto, agora é só adicionar as outras linhas do programa, por exemplo: ÔÖ ÒØ ³ÔÖ Ñ ÖÓ ÔÖÓ Ö Ñ ººº³ O arquivo completo ficaria da seguinte maneira: »Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ ÔÖ ÒØ ³ÔÖ Ñ ÖÓ ÔÖÓ Ö Ñ ººº³ Mande salvar o arquivo e rode no terminal da seguinte maneira: ÔÝØ ÓÒ ÔÖ Ñ ÖÓºÔÝ 3.0.3 Interpretador Existem duas maneiras de iniciar o Python. A mais simples é iniciar o interpretador intera- tivamente, adicionando linhas a serem executados em tempo de execução. A outra maneira e inicializando um script Python. O primeiro modo pode ser feito no shell (terminal do GNU/Linux) ou no DOS com o comando: ° ÔÝØ ÓÒ ÈÝØ ÓÒ ¾º¿º ´ ¾¸ Ë Ô ¾¼¼ ¸ ¾¾ ¼½ ¾µ ¿º¿º ´ Ò ½ ¿º¿º ¹½¿µ℄ ÓÒ Ð ÒÙܾ ÌÝÔ ÐÔ ¸ ÓÔÝÖ Ø ¸ Ö Ø× ÓÖ Ð Ò× ÓÖ ÑÓÖ Ò ÓÖÑ Ø ÓÒº Algo como a saída acima deve aparecer para você, e um cursor esperando suas entradas devem ficar piscando após os »>. Agora a outra forma é passando um script já previamente criado diretamente para o interpre- trador, veja: ° ÔÝØ ÓÒ Ü ÑÔÐÓºÔÝ Observação : todos os códigos fontes em Python tem extensão .py Para sistemas Unix-like, temos mais uma outra forma específica de invocar o Python. Isso só pode ser feito em scripts feitos em Python, veja um exemplo: 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF »Ù×Ö» Ò» ÒÚ ÔÝØ ÓÒ ¹¶¹ Ó Ò ×Ó ¹½ ¹¶¹ ÔÖ ÒØ ÇÐ ÑÙÒ Ó No caso, o script deve possuir em seu cabeçalho as duas primeiras linhas deste exemplo. A primeira invoca o ambiente Python e a segunda define a codificação a ser utilizada, quando dizemos codificação, queremos dizer os caracteres que são conhecidos, ou seja, acentuação e caracteres específicos de cada língua. A codificação iso8859-1 é a codificação utilizada no Brasil, neste caso também poderíamos ter utilizado a codificação universal utf8. Todos os exemplos deste curso, se forem utilizados num arquivo (script), devem possuir o cabeçalho acima para que possam rodar corretamente. 3.1 Aspectos de programação Nesta lição, quero apresentar uma lista lado a lado de comparação das características de Java e Python. Se você olhar para essas comparações poderá ver por que Python pode ser escrita muito mais rapidamente e ser mais facilmente mantida do que Java. Essa lista não é longa, pois deseja-se fazer uma abordagem representativa e não exaustiva. Um programa é a implementação de um algoritmo em uma linguagem de programação. O algoritmo precisa ser bem definido do início ao fim, tendo comandos ordenados e finitos capazes de produzirem um resultado visível. Para programar bem deve-se fazer um algoritmo apropriado e ter um conhecimento léxico, sintático e semântico da linguagem de programação a ser utlizada. 3.1.1 Estrutura, Compilação e Execução Um programa é um texto (chamado de programa fonte) que possui comandos e declarações necessárias para a implementação de um algoritmo que é traduzido para um produto equiva- lente escrito em comandos binários (código binário) os quais são executados pelo computador. O processo de tradução é chamado de compilação e posteriormente a ele se produz a ligação do código binário a outros códigos para se obter finalmente o programa executável. O programa executável é carregado na memória e colocado sobre o controle de um ambiente de execução, que faz com que cada comando seja executado pelo processador. Todo programa deve ter uma estrutura que permita definir seu início e fim, de tal forma que o ambiente de execução possa identificar precisamente o ponto de entrada do programa, isto é, o primeiro comando que será executado e o término da execução. 3.1.2 A estrutura de um programa em Java Os programas orientados a objetos são baseados no conceito classe. Cada classe contém as declarações e os comandos que, em conjunto, implementam o algoritmo do programa. Estes comandos são organizados na forma de métodos e devem possuir um método principal que é o 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF ponto de início da execução, a partir dele os demais métodos são acionados. Em Java, especificamente, a sua estrutura consiste de um conjunto de unidades de compi- lação. Cada uma delas contêm as especificações de classes e interfaces, juntamente com as declarações necessárias para a compilação. Quando compiladas essas unidades geram arqui- vos com os códigos binários referentes às classes e interfaces nelas descritas. A estrutura básica de uma classe consiste de uma palavra chave class, de um identificador (o nome da classe) e de um corpo que é delimitado por chaves e contém opcionalmente declarações e comandos próprios da classe. 3.1.3 A estrutura de um programa em Python Os conceitos fundamentais da linguagem são simples de entender tornando a sintaxe da lin- guagem ainda mais clara e fácil de aprender. O código produzido é normalmente curto e legível, sendo que os tipos pré-definidos incluídos em Python são poderosos e ainda assim simples de usar. A linguagem possui um interpretador de comandos interativo que permite aprender e testar rapidamente trechos de código, além de ser expressiva, com abstrações de alto nível. Na grande maioria dos casos um programa em Python será muito mais curto que seu correspondente es- crito em outra linguagem. Isto também faz com que o ciclo de desenvolvimento seja rápido e apresente potencial de defeitos reduzido: menos código, menos oportunidade para errar. 3.1.4 Comentários Em Java temos: Os comentários são textos normalmente explicativos que servem para informar tanto o pro- gramador que o escreveu quanto outros que venham a utilizar ou somente ler aquele código. Em Java os comentários podem ser de três tipos: • Uma linha - utiliza duas barras // marcando seu início. • Múltiplas linhas - utiliza barra asterisco no início /* e asterisco barra no fim */. • Documentação - semelhante ao de múltiplas linhas mas com propósito de documentar o código. Iniciado por /** e finalizado com */. Em Python temos: Este é um item muito importante que as vezes é ignorado por muitos programadores. A im- portância de comentar o código é enorme e isso deve ser feito sempre que possível. Existem duas formas de comentário dentro do Python: o comentário passivo e o comentário ativo. Vejamos como podemos definir cada um deles: 28
  • 30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF • passivo - é o comentário feito utilizando o símbolo "#", conhecido também como tralha, hash ou pound. Este comentário apenas aparece dentro do código onde foi escrito e é bom quando temos diversos programadores desenvolvendo em cima de um mesmo código fonte, isto ajuda na leitura do trecho de código em questão; • ativo - são comentários feitos de uma forma específica dentro de funções e classes, estes comentários geram uma documentação automaticamente que pode ser acessada através da função help(). Vamos dar uma olhada em como funcionam estes dois tipos de comentários: ×Ø ÙÑ ÓÑ ÒØ Ö Ó Ô ×× ÚÓ Ò Ó Þ Ò Onde aparecere as reticências poderia ser adicionado algum código ou mais comentário, no nosso caso apenas apertamos enter para sair do comentário. Um comentário passivo também pode ser feito após uma linha de código normalmente, veja: ÔÖ ÒØ ³ÇÐ ³ Ó ÔÖ ÒØ Ú Ö ØÓÖÒ Ö ÙÑ ³ÇÐ ³ ³ÇÐ ³ Agora, os comentários ativos são um tanto quanto mais interessantes. Não se preocupem se não entenderem muito bem o código abaixo, prestem atenção apenas no código em negrito e vejam a saída gerada pela função help(). ÙÒ Ó´µ ³³³ ×Ø ÙÑ ÙÒ Ó ÕÙ Ò Ó Þ Ò ³³³ Acabamos de criar uma função que não faz nada, mas contém o nosso precioso comentário, veja o que a função help() nos retorna: ÐÔ´ ÙÒ Óµ Será impresso: À ÐÔ ÓÒ ÙÒ Ø ÓÒ ÙÒ Ó Ò ÑÓ ÙÐ Ñ Ò ÙÒ Ó´µ ×Ø ÙÑ ÙÒ Ó ÕÙ Ò Ó Þ Ò *Para sair, aperte a tecla ’q’. A função que acabamos de criar ganha no seu help() o comentário que foi feito. Um detalhe importante é que este tipo de comentário é feito através das aspas triplas. Nas classes a saída é muito mais interessante, veja: Ð ×× Ø ×Ø ³³³ ×Ø ÙÑ Ð ×× Ø ×Ø ³³³ Ò Ø ´× Ð µ ³³³Ç ÓÒ×ØÖÙØÓÖ³³³ Ô ×× Ô ÒØ ´× Ð µ ³³³Å ØÓ Ó ÕÙ Ô ÒØ ³³³ Ô ×× 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Com nossa classe de teste criada vamos chamar o help() com o nome da classe como parâ- metro: ÐÔ´Ø ×Ø µ Será impresso: Ð ×× Ø ×Ø ×Ø ÙÑ Ð ×× Ø ×Ø Å Ø Ó × Ò Ö Ò Ø ´× Ð µ Ç ÓÒ×ØÖÙØÓÖ Ô ÒØ ´× Ð µ 3.2 Identação Quando colocamos espaços em branco no início da linha de um código, estamos identando-o. A identação serve para organizar melhor o código para que ele fique visualmente mais agradável e intuitivo. No Python estes espaços são bem importantes, pois os blocos de instruções devem estar em um mesmo nível de identação, caso contrário, erros podem ocorrer. Exemplo: ÓÖ Ü Ò Ö Ò ´½¸½¼µ ÔÖ ÒØ Ü Aparecerá o seguinte erro: Ð ×Ø Ò ¸ Ð Ò ¾ ÔÖ ÒØ Ü ÁÒ ÒØ Ø ÓÒ ÖÖÓÖ ÜÔ Ø Ò Ò ÒØ ÐÓ Corrigido: ÓÖ Ü Ò Ö Ò ´½¸½¼µ ÔÖ ÒØ Ü ½ ¾ ¿ 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF As identações podem ser feitas com espaços em brancos ou com tabulações. Recomenda-se utilizar a tabulação em todos os casos. A obrigatoriedade da identação no Python é bem interes- sante, pois "força"o programador a escrever um programa visualmente bem estruturado. Em Java o escopo de uma variável é a parte do programa na qual pode-se diretamente referenciá-la. Uma variável local tem seu escopo com alcance somente dentro do bloco onde ela foi declarada. Bloco este que em Java é delimitado por chaves e que deve ser identado como mandam as regras da boa programação. 3.3 Variáveis Na linguagem Java todas as variáveis têm seus tipos de dados definidos. Os tipos de dados definem quais são os valores que uma variável pode armazenar e quais operações pode execu- tar. Esses tipos básicos são os mesmos para qualquer ambiente de programação Java, por se tratar de uma linguagem portável. As variáveis locais são declaradas no corpo de um método*, existindo somente durante a ati- vidade dele. Já as variáveis de instância e variáveis de classe são declaradas ambas no corpo de uma classe*, mas as de instância especificam atributos próprios de cada objeto da classe, enquanto que as de classe especificam atributos comuns a todos os objetos da classe. Existem também as variáveis paramétricas que são declaradas como tratadoras de exceção, construtoras e parâmetros formais de métodos. São variáveis declaradas na especificação de um método, estas variáveis possuem algum valor que será usado no método invocado. Seu uso é semelhante ao das variáveis locais podendo ser modificado o seu valor. Em Python existe suporte para uma grande diversidade de bibliotecas externas. Ou seja, pode-se fazer em Python qualquer tipo de programa, mesmo que utilize gráficos, funções mate- máticas complexas ou uma determinada base de dados SQL. • É possível escrever extensões a Python em C e C++, quando é necessário desempe- nho máximo ou quando for desejável fazer interface com alguma ferramenta que possua biblioteca apenas nestas linguagens; • Python permite que o programa execute inalterado em múltiplas plataformas. Em ou- tras palavras, a sua aplicação feita para Linux, funcionará normalmente sem problemas em Windows e em outros sistemas onde existir um interpretador Python; • Python é pouco punitivo: em geral, "tudo pode"e há poucas restrições arbitrárias. Esta propriedade acaba por tornar prazeroso o aprendizado e uso da linguagem; • Python é livre: além do interpretador ser distribuído como software livre, pode ser usado para criar qualquer tipo de software, proprietário ou livre. O projeto e implementação da linguagem é discutido aberta e diariamente em uma lista de correio eletrônico e qualquer um é bem-vindo para propor alterações por meio de um processo simples e pouco burocrático. 31
  • 33. Capítulo 4 Produtividade Observaremos a partir de agora apenas a Produtividade do programador e não tentaremos comparar Java e Python em qualquer outro critério que não esse. No entanto, existe um tópico relacionado que é praticamente impossível evitar. Python é uma linguagem dinamicamente tipada e esta característica é uma importante ra- zão pela qual os programadores podem ser mais produtivos em Python, pois eles não têm que lidar com a sobrecarga da tipagem estática de Java. Por isso, os debates sobre produtividade Java/Python podem inevitavelmente transformar-se em debates sobre as vantagens e as desvan- tagens comparativas de tipagem estática versus tipagem dinâmica ou fortemente tipada versus fracamente tipada em linguagens de programação. É importante notar que a afirmação de que um programador pode ser mais produtivo em Python do que em Java, não é o mesmo que afirmar que deva-se sempre usar Python e nunca utilizar outras tecnologias com Java. As linguagens de programação são ferramentas, e os dife- rentes instrumentos são apropriados para diferentes tipos de trabalho. Um operário cujas ferramentas sejam resumidas apenas a um martelo, não importa o quão grande ele seja, está mal instrumentado e inapto a fazer seu trabalho de maneira eficiente. Um programador ou uma empresa de desenvolvimento de software cujo toolkit de desenvolvimento contém apenas uma linguagem de programação é também ineficiente. Nossas "toolboxes"devem conter tanto Python e Java de modo que, em qualquer tipo de situação, tenhamos a opção de escolher a melhor ferramenta para o trabalho. 4.1 Java vs Python Há três características principais das linguagens que tornam os programadores mais produti- vos com Python do que com Java. JAVA • Tipada estaticamente Em Java todos os nomes de varáveis, juntamente com seus tipos, precisam ser explici- tamente declarados. A tentativa de atribuir um objeto do tipo errado como nome de uma 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF variável desencadeia um tipo de exceção. É isso o que significa dizer que Java é uma lin- guagem estaticamente tipada. Recipientes de objetos Java, por exemplo, Vector e ArrayList podem ter objetos genéricos do tipo Object, mas não podem ter tipos primitivos como Int. Para armazenar um int em um Vetor, primeiro tem-se de converter o int pera um número inteiro (Integer). Quando você requisitar um objeto, essa requisição não lembrará o seu tipo, na verdade ele deverá ser explicitamente expresso como sendo do tipo pretendido para que seja reconhecido. • Verbosidade Abundante em palavras. Parece conter mais palavras que o necessário. • Não compacta PYTHON • Tipada dinamicamente Em Python, você nunca declara coisa alguma. Uma declaração de atribuição liga um nome a um objeto e o objeto pode ser de qualquer tipo. Se um nome é atribuído a um objeto de um tipo, pode mais tarde ser atribuído a um objeto de um tipo diferente. É isso o que significa dizer que o Python é uma linguagem dinamicamente tipada. Recipentes de objetos Python, por exemplo, listas e dicionários podem possuir objetos de qualquer tipo, incluindo números e listas. Quando você requisitar um objeto de um recipi- ente, ele relembra o seu tipo, de modo algum "relembrar"é necessário. • Verbosidade Concisa. Expressa muito em poucas palavras. Implicações limpas e breves evitando o supérfluo. • Compacta Em The New Hacker’s Dictionary, Eric S. Raymond dá a seguinte definição de "compacta": Compacto adj. Em um projeto, descreve as valiosas propriedades que podem ser apre- endidas todas de uma só vez. Isto significa que a coisa criada a partir do projeto pode ser utilizada com maior facilidade e efetividade do que um instrumento equivalente que não é compacto. Exemplo: O clássico programa "Hello, world"ilustra a relativa "verbosidade"de Java. JAVA ÔÙ Ð Ð ×× À ÐÐÓÏÓÖÐ ß ÔÙ Ð ×Ø Ø ÚÓ Ñ Ò ´ËØÖ Ò ℄ Ö ×µß ËÝ×Ø ÑºÓÙغÔÖ ÒØÐÒ´ À ÐÐÓ¸ ÛÓÖÐ µ 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF PYTHON ÔÖ ÒØ À ÐÐÓ¸ ÛÓÖÐ ou ÔÖ ÒØ´ À ÐÐÓ¸ ÛÓÖÐ µ ÈÝØ ÓÒ Ú Ö× Ó ¿ No exemplo a seguir, inicializamos um inteiro como zero, então o convertemos em uma String em seguida cheque se está vazio. Observe os dados declarados na primeira e segunda linhas, que são necessários em Java, mas não em Python. Note também a verbosidade Java, até mesmo em uma operação básica como a comparação das duas Strings para sua igualdade. JAVA ÒØ ÑÝ ÓÙÒØ Ö ¼ ËØÖ Ò ÑÝËØÖ Ò ËØÖ Ò ºÚ ÐÙ Ç ´ÑÝ ÓÙÒØ Öµ ´ÑÝËØÖ Ò º ÕÙ Ð×´ ¼ µµ ººº PYTHON ÑÝ ÓÙÒØ Ö ¼ ÑÝËØÖ Ò ×ØÖ´ÑÝ ÓÙÒØ Öµ ÑÝËØÖ Ò ¼ ººº JAVA »» ÔÖ ÒØ Ø ÒØ Ö× ÖÓÑ ½ ØÓ ÓÖ ´ ÒØ ½ ½¼ ··µ ß ËÝ×Ø ÑºÓÙغÔÖ ÒØÐÒ´ µ PYTHON ÔÖ ÒØ Ø ÒØ Ö× ÖÓÑ ½ ØÓ ÓÖ Ò Ö Ò ´½¸½¼µ ÔÖ ÒØ Considerando que sua aplicação possui 15 classes. Mais precisamente possui 15 classes públicas de nível alto. Temos: JAVA Cada classe pública de nível alto precisa ser definidade em seu próprio arquivo. Se sua aplicação tiver 15 dessas classes, terá 15 arquivos. 34
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF PYTHON Classes múltiplas podem ser definidas em um único arquivo. Se sua aplicação tiver 15 clas- ses, a aplicação inteira pode ser armazenada em um único arquivo, embora você provavelmente deva querer particioná-lo em talvez 5 ou 6 arquivos. Em sua aplicação, o método A chama o método B, que chama o método C, que chama o método D, que chama o método E, que chama o método F. Dai você descobre que F pode causar um erro de exceção (SpecialException) e que este erro precisa ser capturado por A. JAVA Você precisará lançar o erro de "SpecialException"em F e capturá-lo em A. E, ainda, precisará adicionar a assinatura "throws SpecialException"em todosos métodos de B, C, D, E e F. PYTHON Você deve lançar o erro SpecialException F e capturá-lo em A, apenas. As exeções irão se propagar automaticamente pelos métodos subseqüentes, não sendo necessário que você faça algo mais. A razão para isto é que Java, isoladamente de outras linguagens de programação objeto- orientadas, utiliza verificações de exceções, ou seja, exceções devem ser capturados ou lança- das por cada método em que elas possam aparecer ou o código irá falhar ao compilar. Exemplo: Sua aplicação tem uma classe Empregado. Quando uma instância de Empregado é criada, a construtora pode passar um, dois ou três argumentos. Se você estiver programando em Java, isto significa que você escreveu três construtoras com 3 diferentes assinaturas. Se você tiver programando em Python, você terá escrito apenas um único construtor, com valores padrão para os argumentos opcionais. JAVA ÔÙ Ð Ð ×× ÑÔÐÓÝ ß ÔÖ Ú Ø ËØÖ Ò ÑÝ ÑÔÐÓÝ Æ Ñ ÔÖ Ú Ø ÒØ ÑÝÌ Ü Ù Ø ÓÒ× ½ ÔÖ Ú Ø ËØÖ Ò ÑÝÅ Ö Ø ÐËØ ØÙ× × Ò Ð »»¹¹¹¹¹¹¹¹¹ ÓÒ×ØÖÙ ØÓÖ ½ ¹¹¹¹¹¹¹¹¹¹¹¹¹ ÔÙ Ð ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ µß Ø ×´ ÑÔÐÓÝ Æ Ñ ¸ ½µ »»¹¹¹¹¹¹¹¹¹ ÓÒ×ØÖÙ ØÓÖ ¾ ¹¹¹¹¹¹¹¹¹¹¹¹¹ ÔÙ Ð ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ ¸ ÒØ Ø Ü Ù Ø ÓÒ×µß Ø ×´ ÑÔÐÓÝ Æ Ñ ¸ Ø Ü Ù Ø ÓÒ׸ × Ò Ð µ 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF »»¹¹¹¹¹¹¹¹¹ ÓÒ×ØÖÙ ØÓÖ ¿ ¹¹¹¹¹¹¹¹¹¹¹¹¹ ÔÙ Ð ÑÔÐÓÝ ´ËØÖ Ò ÑÔÐÓÝ Æ Ñ ¸ ÒØ Ø Ü Ù Ø ÓÒ׸ ËØÖ Ò Ñ Ö Ø ÐËØ ØÙ×µß Ø ×º ÑÔÐÓÝ Æ Ñ ÑÔÐÓÝ Æ Ñ Ø ×ºØ Ü Ù Ø ÓÒ× Ø Ü Ù Ø ÓÒ× Ø ×ºÑ Ö Ø ÐËØ ØÙ× Ñ Ö Ø ÐËØ ØÙ× PYTHON Ð ×× ÑÔÐÓÝ ´µ Ò Ø ´× Ð ¸ ÑÔÐÓÝ Æ Ñ ¸ Ø Ü Ù Ø ÓÒ× ½¸ Ñ Ö Ø ÐËØ ØÙ× × Ò Ð µ × Ð º ÑÔÐÓÝ Æ Ñ ÑÔÐÓÝ Æ Ñ × Ð ºØ Ü Ù Ø ÓÒ× Ø Ü Ù Ø ÓÒ× × Ð ºÑ Ö Ø ÐËØ ØÙ× Ñ Ö Ø ÐËØ ØÙ× 4.2 Produtividade e Tipagem Em Python, uma classe possui apenas um construtor. O método construtor é simplesmente outro método da classe, mas um que tem um nome especial:__init__ Uma boa razão que demonstra a eficiência de programar em Python é o idioma simples usado. Eu por exemplo, ainda tenho que dar uma olhada em como abrir um arquivo toda vez que tenho que fazê-lo em Java. JAVA ÑÔÓÖØ Ú º Óº¶ Ù Ö Ê Ö ÑÝ Ð Ò Û Ù Ö Ê Ö´ Ò Û Ð Ê Ö´ Ö Ð Ò Ñ µµ PYTHON ÓÔ Ò Ò ÒÔÙØ Ð ÑÝ Ð ÓÔ Ò´ Ö Ð Ò Ñ µ Exemplo: ÙÒ Ø ÓÒ ÓÖ Å Ø Ó Â Ú ÈÝØ ÓÒ Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò Ó ×ÕÙ Ö Ö Ø ×ØÖ Ò × ×ºØÖ Ñ´µ ׺×ØÖ Ô´µ Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò Ó ×ÕÙ Ö ×ØÖ Ò × ´ÒÓØ Ú Ð Ð µ ׺Ð×ØÖ Ô´µ Ê ÑÓÚ ×Ô Ó× Ñ Ö Ò Ó Ö Ø ×ØÖ Ò × ´ÒÓØ Ú Ð Ð µ ׺Ö×ØÖ Ô´µ 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Código para adicionar um int em um Vetor e requisitá-lo. A partir do Java 1.5 um novo objeto de Integer precisa ser criado e inicializado a partir de int antes de poder ser adicionado ao Vetor. Para se requisitar o valor, o membro do Vetor precisa ser transformado devolta em Integer e, então convertido em um int. JAVA (versões anteriores a 1.5) ÔÙ Ð Î ØÓÖ Ä ×Ø Ò Û Î ØÓÖ ÔÙ Ð ÒØ ÆÙÑ Ö ÔÙ Ð ÒØ ÒÓØ ÖÆÙÑ Ö Ä ×غ Ð Ñ ÒØ´Ò Û ÁÒØ Ö´ ÆÙÑ Öµµ ÒÓØ ÖÆÙÑ Ö ´´ÁÒØ Öµ Ä ×غ Ø Ð Ñ ÒØ´¼µµº ÒØÎ ÐÙ ´µ PYTHON Ä ×Ø ℄ ÆÙÑ Ö Ä ×غ ÔÔ Ò ´ ÆÙÑ Öµ ÒÓØ ÖÆÙÑ Ö Ä ×Ø ¼℄ JAVA (versões posteriores a 1.5) ÔÙ Ð Î ØÓÖ ÁÒØ Ö Ä ×Ø Ò Û Î ØÓÖ ÁÒØ Ö ÔÙ Ð ÒØ ÆÙÑ Ö ÔÙ Ð ÒØ ÒÓØ ÖÆÙÑ Ö Ä ×غ Ð Ñ ÒØ´ ÆÙÑ Öµ ÒÓØ ÖÆÙÑ Ö Ä ×غ Ø Ð Ñ ÒØ´¼µ PYTHON Ä ×Ø ℄ ÆÙÑ Ö Ä ×غ ÔÔ Ò ´ ÆÙÑ Öµ ÒÓØ ÖÆÙÑ Ö Ä ×Ø ¼℄ Verbosidade não é apenas uma questão de aumentar o número de caracteres que devem ser digitados, mas também uma questão de aumentar o número de lugares onde erros podem ser feitos. O código Java à esquerda tem 5 caracteres de controle: ( ) ; onde o correspondente código Python tem apenas um caracter de controle, os dois pontos : . (ou dois, se você contar a identação. Veja abaixo.) 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF JAVA ´ µß PYTHON Omitir ou duplicar esses caracteres é algo fácil de se fazer acidentalmente e constitui um grave erro no código. Na minha estimativa pessoal, eu gasto 5 vezes mais tempo arrumando erros em Java do que em Python. É realmente um corte na sua produtividade e em sua energia criativa gastar tanto tempo apenas tentando satisfazer o compilador. Tecnicamente, Python tem um outro caracter de controle que Java não tem, a identação. Mas, a exigência de identação correta é a mesma em Java, assim como em Python, isso porque em ambas as linguagens identar corretamente os códigos é um boa prática de programação que am- plia a legibilidade humana do código. O interpretador Python força identação correta, enquanto que o compilador Java não. Com o Java, você precisa de produtos adicionais, tais como o forma- tador de código Jalopy para prover identação automática segundo os padrões. Tipagem estática vs tipagem dinamica e fortemente tipado e fracamente tipado Em uma linguagem tipada estaticamente, cada nome de variável está vinculado tanto (1) a um tipo em tempo de compilação, por meio de declaração de dados e (2) a um objeto. A ligação a um objeto é opcional, se um nome não está vinculado a um objeto, o nome é dito nulo. Uma vez que um nome da variável for vinculado a um tipo, ou seja, declarado ele pode ser vinculado através de uma declaração a objetos desse tipo. Ele não pode nunca ser vinculado a um objeto de um tipo diferente. Uma tentativa de vincular o nome a um objeto do tipo errado irá gerar um tipo de exceção. 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Figura 2 - Estaticamente tipada Em uma linguagem tipada dinamicamente, cada nome de variável é (a menos que seja nulo) vinculada apenas a um objeto. Nomes estão vinculados a objetos em tempo de execução por meio de declarações e é possível vincular um nome a objetos de diferentes tipos durante a execução do programa. Figura 3 - Dinamicamente tipada Aqui está um exemplo: em uma linguagem tipada estaticamente, com a seguinte seqüência de declarações, que ligam um objeto de inteiro um objeto de string ao nome employeeName, é ilegal. Se employeeName tiver sido declarado para ser um int, então, a segunda declaração seria ilegal. Se ele tivesse sido declarado para ser uma String, então a primeira declaração seria ilegal. Mas, em uma linguagem tipada dinamicamente esta seqüência de declarações está perfeitamente escrita. ÑÔÐÓÝ Æ Ñ ÑÔÐÓÝ Æ Ñ ËØ Ú Ê 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF Python é uma linguagem tipada dinamicamente. Java é uma linguagem tipada estaticamente. Em uma linguagem fracamente tipada, variáveis podem ser implicitamente transformadas em tipos não relacionados, enquanto em uma linguagem fortemente tipada isso não pode, pois é necessário uma transformação explícita. Note que eu disse tipos não relacionados. A maioria das linguagens permitirá transformações implícitas entre tipos relacionadas. Por exemplo: a adi- ção de um inteiro e número em ponto flutuante. Aos tipos não relacionados quero dizer coisas como números e strings. Em uma linguagem fracamente tipada, o número 9 e a string "9"são intercambiáveis, e a seguinte seqüência de declarações é legal. ÓÒ Ø Ò Ø ´ ¸ µ »» ÔÖÓ ÙÞ ´ ¸ µ »» ÔÖÓ ÙÞ ½ Em uma linguagem fortemente tipada, por outro lado, as duas últimas afirmações gerariam exceções. Para evitá-las uma espécie de conversão explícita de tipo seria necessária, como esta: ÓÒ Ø Ò Ø ´ ×ØÖ´ µ¸ µ ´ ¸ ÒØ ´ µµ Tanto Java e Python são linguagens fortemente tipadas. Exemplos de linguagens fracamente tipadas: Perl e Rexx. 40
  • 42. Capítulo 5 Jython o melhor dos dois mundos 5.1 O que é Jython? Jython consiste de um compilador de código fonte Python para bytecodes Java que possam ser executados diretamente em uma JVM, implementando a linguagem de programação Python na plataforma Java. Possui, para tal, um conjunto de bibliotecas que são utilizadas pelo compila- dor Java e tem suporte extra para tornar trivial o uso de pacotes Java dentro do Jython. • Escrita de scripts de forma interativa - Programadores Java podem adicionar bibliotecas Jython ao seu sistema e permitir que usuários finais escrevam scripts simples ou complexos que adicionem funcionalidades à aplicação. • Experimentação Interativa - Jython fornece um interpretador interativo que pode ser usado para interagir com pacotes Java ou com aplicações Java em execução. Isto permite aos programadores experimentar e depurar qualquer sistema Java usando Jython. • Desenvolvimento Rápido de Aplicações (RAD) - Programas em Python são tipicamente de 2 a 10 vezes menores que o seu equivalente em Java. Isto se trasforma diretamente em aumento da produtividade do programador. A integração entre Python e Java permite aos desenvolvedores misturar livremente as duas linguagens durante o desenvolvimento e distribuição das aplicações. 5.2 Instalação Básica O Jython 2.2.1 é distribuído como um arquivo ".jar". Depois de baixar o mesmo, quer dê um duplo clique em "jython_installer-2.2.1.jar"ou execute java com a opção "-jar". Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö Isto iniciará o instalador GUI regular na maioria dos sistemas ou um console instalador para forçá-lo a trabalhar em "headless mode"("Headless mode"é uma configuração do sistema ope- racional na qual dispositivos de vídeo, teclado, mouse ou estão ausentes. Na verdade, você pode executar diversas operações neste modo, mesmo com dados gráficos) invocando o instalador com um console "switch". Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö ¹¹ ÓÒ×ÓÐ 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF O instalador então caminhará através de um conjunto de medidas semelhantes em modo gráfico ou console. Veja a licença, selecione um diretório de instalação, na prática a JVM copia o Jython para o sistema de arquivos. Após isso, Jython é instalado no diretório selecionado. Há um script no diretório de instalação ("jython"em sistemas Unix ou "jython.bat"no Windows), que irá iniciar o console Jython que pode ser usado para explorar dinamicamente o Jython e o Java Runtime. 5.2.1 Modo Autônomo (Standalone) Nesta opção não há "caching"evitando a sobrecarga de inicialização (provavelmente a maior parte do custo da velocidade de chamada de classe Java). Você pode fazer o download do instalador a partir daqui: ØØÔ »» ÓÛÒÐÓ ×º×ÓÙÖ ÓÖ ºÒ Ø» ÝØ ÓÒ» ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö E executá-lo assim: ° Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö Quando você entrar na página "Installation type", selecione "Standalone". Quando a instalação acabar, você terá um jython.jar com os arquivos "/lib", assim: ° Ú ¹ Ö ÝØ ÓÒº Ö Você verá um prompt Jython sem cache. É claro que você pode executar scripts apenas chamnado-as, se você desejar: ° Ú ¹ Ö ÝØ ÓÒº Ö × Ö ÔغÔÝ E você pode adicionar esse "jar"para o "classpath"do seu aplicativo, o que permitirá importa- ções. Opções de instalação Você pode obter uma lista de opções para instalação executando: ° Ú ¹ Ö ÝØ ÓÒ Ò×Ø ÐÐ Ö¹¾º¾º½º Ö ¹¹ ÐÔ 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF 5.3 Utilizando o Jython Jython é invocado usando o script "jython", um script curto que invoque a sua JVM local, define as propriedades Java "install.path"para um valor adequado e, em seguida, executa o "org.python.util.jython". jython [opcoes] [-jar jar |-c cmd | arquivo | -] [argumentos] • opcoes -i: inspeciona interativamente, após executar scripts. Força o prompt stdin mesmo se não for para o terminal; -S: não implica na importação de sites na inicialização; -Dprop = [valor]: define o valor da propriedade Jython(prop). • -jar jar O programa a ser executado é lido a partir do arquivo "__run__.py"no arquivo "jar"especificado. • -c cmd O programa a ser executado é passado como uma string no caso "cmd". Esta opção encerra a lista de opções de arquivo, executando o arquivo com script. * O programa é lido em standard-in (padrão; modo interativo é usado se estiver num tty). Esta flag permite a você embutir um arquivo no Jython e que ele tenha o tratamento correto. Por exemplo: ÐØ Ö ÖÕÙ ÚÓ ÝØ ÓÒ ¹ • argumentos Argumentos passados para o programa no "sys.argv[1:]" –help: imprime uma mensagem de utilização. –version: imprime a versão atual do Jython. 5.3.1 Tornando scripts Jython executáveis Para fazer um arquivo Jython ".py"executável em um sistema Unix: • certifique-se de que o Jython está no seu PATH padrão; • faça o arquivo executável ".py". Geralmente, isso é feito com o comando "chmod + x foo.py"; • adicione a linha a seguir ao início do arquivo: »Ù×» Ò» ÒÚ ÝØ ÓÒ Nota: "#! <...>/jython"geralmente não irá funcionar para tornar o seu script executável. Isto porque "jython"é em si um script e o "#!"requer que o arquivo a ser executado seja um binário executável, isso na maioria das distribuições Unix. Usando "/usr/bin/env"contornará este pro- blema e fará com que os seus scripts sejam mais portáveis. Veja o seguinte código: 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF ÑÔÓÖØ Ú Üº×Û Ò × Ð ×Û Ò ÔÒÙÑ ÖÓ Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÁÒÔÙØ ÐÓ ´ Ø ÙÑ ÆÙÑ ÖÓ ÁÒØ ÖÓ µ ×ÒÙÑ ÖÓ Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÁÒÔÙØ ÐÓ ´ Ø ÙÑ ÆÙÑ ÖÓ ÁÒØ ÖÓ µ ×ÓÑ ÒØ´ÔÒÙÑ ÖÓµ · ÒØ´×ÒÙÑ ÖÓµ Ð ×Û Ò ºÂÇÔØ ÓÒÈ Ò º× ÓÛÅ ×× ÐÓ ´ÆÓÒ ¸ ×ÓÑ ± ± ×ÓÑ µ Caso este arquivo seja salvo com o nome "soma.py", ao se executar o seguinte comando: ° ÝØ ÓÒ ×ÓÑ ºÔÝ O programa irá solicitar a entrada de dois números inteiros e exibirá a soma dos mesmos. Esta é apenas uma ínfima parte da capacidade do Jython de unir o melhor que existe dos dois mundos: Java e Python. Para mais, faça o curso Jython ou consulte o link www.jython.org. 44
  • 46. Capítulo 6 Referências Bibliográficas Site oficial: http://www.jython.org Site oficial (BR): http://www.pythonbrasil.com.br Outras Referências: http://www.ferg.org/projects/python_java_side-by-side.html 45