Ola galera, fiz uma boa pesquisa para o assunto de hoje.

Vamos falar hoje de algumas teorias que particularmente acho interessantes, são elas:

  • Componentes AWT e Swing, suas semelhanças e diferenças.
  • Código nativo X Código interpretado. - Isso é muito bom
  • Interpretador de comandos X Compiladores.
  • Algumas diferença entre ASP, Java e PHP.

Bom o tema do artigo surgiu devido à pergunta deixada pelo meu aluno Diego Silva Pires:

“Junior, você saberia me responder por que existe o "J" na frente desses objetos, eu li que é porque eles pertencem à classe Swing e os que não possuem o "J" na frente são da classe AWT, agora me vem a pergunta, qual a diferença entre ambos?”

Poderia responder a pergunta simplesmente falando que um é melhor que outro, mas vi uma grande oportunidade de explicar os assuntos acima.

Código nativo X Código interpretado

O Java propõe uma ideia inovadora e pode-se disser que foi esta idéia a responsável pela grande aceitação da linguagem no mercado.

Podemos dizer que a linguagem Java é a primeira linguagem Multi-plataforma, ela funciona com a geração de um código intermediário que futuramente será interpretado como no esquema abaixo:

swingawtfig01.JPG

Desta forma o Java é capaz de roda em “qualquer” arquitetura que possua um interpretador java, uma Java Machine e, dizer isso é afirmar que temos um “Compilador” Java que traduz o código Java para umByteCodee uma Máquina Virtual Java traduz esse ByteCode para umcódigo de máquinaespecifico para cada arquitetura, seja ela Unix, Macintosh, etc.

Cada arquitetura de computador possui maneiras diferentes para executar um comando, para ter uma ideia legal pense assim, umIF (A == B)que esteja presente em qualquer programa Java será executado de maneira singular para cada arquitetura de maquina (CISC, APPLE, RISC, etc).

Uma maneire de resumir melhor a explicação eu encontrei no artigo elaborado por Marco Aurélio Souza Mangan, Patrícia Kayser Vargas e Denny Azzolin no III SIMPÓSIO BRASILEIRO DE LINGUAGENS DE PROGRAMAÇÃO realizado no ano de 1999 em porto alegre.

“Nesse tipo de compilador, o código Java é transmitido em byte codes até a máquina cliente e então é convertido parainstruções nativasantes de iniciar a execução. Depois de compilado, a velocidade de execução é comparável com a de um programa nativo.” (Fonte:http://www.inf.ufrgs.br/~kayser/sblp99/tutorial/TutorialJavaSBLP99.html)

Ou seja, o byteCode, em relação a suaexecuçãopode ser comparado a uma “linguagem nativa”, ou melhor um programa nativo, que é escrito especificamente para cada arquitetura de máquina.

Uma maneira correta de pensar seria a seguinte: Um código Java é multi-plataforma, mas o byteCode jamais seria pois ele é quem mostra a cada tipo de maquina como deverá executar tal instrução Java.

Interpretador de comandos X Compiladores

Agora podemos perceber que um programa java é parte interpretado (Geração do byteCode) e parte compilado (execução do programa).

Mas, códigos interpretados são geralmente lentos, e esse tipo de programação degrada muito a performance de um programa por exemplo os códigos HTML, quando você acessa uma pagina ela tem um código a ser interpretado pelo seu navegador, e quando seu navegar “lê”, esse tipo de código: <title> Exemplo </title>; Ele interpreta para algo como “esse é o título da pagina”, mas essa tarefa é relativamente lenta.

A compilação tem inúmeras vantagens. O código compilado roda ao menos 10 vezes mais rápidos que códigos interpretados.

Agora pensemos na questão o Java não é uma linguagem Interpretada pela JVM(Java Virtual Machine)? A resposta é sim, mas essa tarefasó ocorre uma única vez, depois que o compilador JVM gera o ByteCode a tarefa de interpretação acaba e o programa Java passa a ser executado como se fosse um Código Nativo.

Componentes AWT e Swing, suas semelhanças e diferenças

Mas o que isso tem haver com componentes Swing e Componentes AWT?

É relativamente simples, os componentes do tipo swing possuem uma grande diferença dos Componentes AWT, pois os componentes Swing sãoimplementados com nenhum código nativo, ou seja,apesar de serem sensivelmente mais lentos que os Componentes nativos, eles permitem maiorliberdade(Eu amo essa palavra) aos programadores. Como podemos ver no artigo http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingoverview/swingfeatures.html

“Excepto los contenedores de alto nivel, todos los componentes que empiezan con J descienden de la clase JComponent. Obtienen muchas características de esta clase, como la posibilidad de tener bordes, tooltips, y Aspecto y Comportamiento configurable. También heredan muchos métodos de conveniencia.”

Exceto os Containers de Alto nível, todos os componentes que começam com a letra J herdam as características da classe JComponent. Tendo muitas características desta classe, como a possibilidade de ter bordas, tooltips, aspecto e comportamento configurável. Também herdam muitos métodos convenientes.(tradução livre pelo autor)

Outra característica importante é o fato dos componentes swingserem subclasses do mesmo componente, Jcomponent, e isso facilita e muito a programação destes componentes.

Agora você pode perguntar: E o que isso muda na minha prática de programação?

A ideia sempre será,depende do contexto no qual o seu programa está inserido, se você esta programando para uma maquina lenta, um processador fraco ou de pequeno porte (agendas eletrônicas, celulares, terminais de consulta, etc), geralmente neste tipo de arquitetura de hardware a capacidade de processamento é parcialmente fraca e qualquer economia em relação a isso será bem vinda.

Imagine o contexto mercado, um terminal de consulta de preço, se você tem 100 terminais burros (sem capacidade de processamento local), qualquer economia de programa e tráfico de rede -afinal um servidor vai processar esse programa - será bem vinda.

Infelizmente nos dias de hoje a velocidade de processamento associada ao baixo custo do hardware faz com que não pensemos neste tipo de situação, o “profissional da informática” muitas vezes esquece da análise de requisitos de um contexto.

Perceber e acompanhar as mudanças do tecnológicas é fundamental para o profissional de informática mas antes de mudarmos todo o nosso cliente, mas pensar em perceber e acompanhar as necessidades do nosso cliente e não obriga-lo a trocar de maquina a cada nova versão de software – tem uma grande empresa que faz isso e acho isso terrível.

Algumas diferença entre ASP, Java e PHP

Mas vamos voltar a nossa última questão: Quais as diferenças entre ASP, php e java?

Vou ser o mais sucinto o possível, pois a proposta do artigo não é tratar esse tipo de assunto, mas pense comigo:

  • O ASP não parece ser um Compilador em si, a priori podemos disser que o ASP é algum tipo de Interpretador de comandos que podemos manipular através de Scripts em HTML.
  • E em relação ao PHP? Maior concorrente do ASP na atualidade. Pode-se afirmar que possui as mesmas características do ASP certo? Errado, apesar de muito semelhantes em relação a maneira como escrevemos o código, ambas são bem diferentes em sua execução e certamente vale uma pesquisa.

Quer saber mais? Acesse:

http://www.linhadecodigo.com.br/artigos.asp?id_ac=748&pag=2

http://www.tarcisiolopes.com.br/intro_java/interpretada.htm

http://www.clubepda.com.br/tutoriais2.asp?pid=64