A Linguagem JAVA E Aplicações com NetBeans

A Linguagem JAVA E Aplicações com NetBeans

(Parte 1 de 7)

A Linguagem

Aplicações com

NetBeans

PRODUZIDA PELA A TURMA DE COMPUTAÇÃO BLOCO V – ANO 2007 CAMPUS OEIRAS

OEIRAS (PI), DEZEMBRO DE 2007

Histórico da Linguagem

Java é uma linguagem de programação ideal para aplicativos para a Internet. Mostraremos a seguir as origens da linguagem, e porque ela é tão apropriada para ser usada na Internet, particularmente na WorldWide Web. Embora as papplets Java sejam escritas na linguagem Java, não é necessário saber programar em Java para usá-las. Se você está interessado em usar applets sem realmente programar em Java, pode pular esta parte, que introduz a linguagem. Você pode ler a definição da linguagem Java (em inglês), no site Java/HotJava da Web. http://www.javasoft.com/hooked/language-ref.html A História da Linguagem Java A história de uma linguagem de programação pode contar muita coisa sobre a linguagem em si. Durante a fase de projeto, é importante usar a linguagem em aplicativos reais. Do contrário, a linguagem não será tão útil quando for lançada, e não será tão divertido programar nela. A linguagem de programação Java foi usada no desenvolvimento de diversos aplicativos enquanto estava sendo projetada. Originalmente, pretendia-se que a Java fosse usada na programação de produtos eletrônicos de consumo (eletrodomésticos, eletroeletrônicos). Entretanto, ela se transformou em uma grande linguagem para programação para a WorldWide Web. As Origens da Java A linguagem de programação Java foi projetada e implementada por uma pequena equipe de pessoas coordenada por James Gosling na Sun Microsystems em Mountain View, Califórina. Além de seu trabalho com a Java, James Gosling é o autor do emacs do Unix e do sistema de janelas neWs. http://www.javasoft.com/people/jag/index.html. A equipe Java original trabalhava no projeto de software para produtos eletrônicos de consumo. Rapidamente, eles descobriram que as linguagens de programação existentes, como C e C++, não eram adequadas. Programas escritos em C e C++ têm de ser compilados para cada tipo específico de processador (chip de CPU). Quando um novo processador é lançado, a maior parte do software tem de ser recompilada, para aproveitar os novos recursos do processador. Depois de compilados, os programas em C e C++ não são facilmente adaptáveis ao uso de novas bibliotecas de software. Os programas têm de ser totalmente recompilados quando a biblioteca muda. Entretanto, softwares para produtos de eletrônica de consumo devem funcionar em novos processadores, porque os fabricantes têm como restrição o custo dos componentes. Se o preço de um processador fica muito alto, eles o substituirão imediatamente por um mais novo, de custo-benefício mais atraente. Mesmo pequenas variações de preço podem fazer diferença, quando se pensa em termos de vendas de milhões de unidades. Outro problema no uso de linguagens de programação tradicionais para o software de produtos eletrônicos de consumo está em que o consumidor quer uma vida útil longa para seu produto. Há torradeiras funcionando que têm 50 anos de idade. O plugue ainda se encaixa na tomada e as fatias de pão ainda se encaixam nas aberturas. Os Software normalmente tem uma vida útil bem mais curta, o que tornaria difícil construir uma torradeira com um computador embutido. Sempre que novos programas para torradeiras fossem escritos, eles teriam de apresentar compatibilidade retroativa, pois o software das torradeiras antigas teria de ser substituído. O software usado em produtos eletrônicos de consumo também precisa ser muito confiável, muito mais do que o software para computadores. Se um eletrodoméstico ou eletroeletrônico falha, o fabricante geralmente tem de substituir todo o aparelho.

Em 1990, James Gosling começou a projetar uma linguagem de programação nova, que seria mais apropriada para produtos eletrônicos de consumo, sem os problemas de linguagens tradicionais como C e C++. O resultado é Java, uma linguagem muito rápida, pequena e confiável, que rodará em todos os tipos de processadores.

Inicialização de variáveis

No Java não é permitido o uso de variáveis indefinidas. Variáveis definidas dentro do método são chamadas de variáveis automáticas, locais, temporárias ou estáticas e devem ser inicializadas antes do uso. Quando um objeto é criado, as variáveis membro são inicializadas com os seguintes valores em tempo de alocação: Tipo de variável Valor inicial Tamanho byte 0 8 bits short 0 16 bits Int 0 32 bits long 0L 64 bits float 0.0f 32 bits Double 0.0d 64 bits Char ‘\u0000’ (Null) 64 bits Boolean false Operadores

No Java os operadores são muito similares ao estilo e funcionalidade de outras linguagens como por exemplo o C e o C++. Pré-incremento: x = 10; x = x + 1; O valor da variável x é 1 ou x = 10;

++x O valor da variável x é 1. Pós-Incremto: x = 10; x = x + 1; O valor da variável x é 1 ou x = 10; x++ O valor da variável x é 1. Diferença entre o Pré-Incremento e o Pós-Incremento: x = 10 ++x => neste exato momento a variável a vale 1 x =10 x++ => neste exato momento a variável x vale 10 Separadores: . [ ] ( ) ; , Operadores: Operadores Descrição == Igualdade != Negação + - * / Aritméticos && e || ou Concatenação

O operador + é utilizado para concatenar objetos do tipo String, produzindo uma nova String: String PrimeiroNome = “Antonio”; String SegundoNome = “Carlos”; String Nome = PrimeiroNome + SegundoNome; Casting ( Conversão de tipos ) A linguagem Java não suporta conversões arbitrárias de tipos de variáveis. Você deve explicitar a conversão entre tipos de variáveis. Exemplo: long bigval = 6; // Operação válida int smallval = 99L; // Operação inválida porque são de tipos diferentes float z = 12.414F; // Operação válida float zp = 12.414; // Inválido, porque está tentando atribuir um valor double. Convertendo Long bigValue = 99L; Int squashed = (int)(bigValue);

Instruções de controle:

Declarações de Fluxos If, else if (expressão) // expressão cujo retorno é um valor do tipo boolean { Declarações ou blocos } else // caso a condição anterior não seja satisfeita { Declarações ou blocos } switch switch (expressão) // Esta expressão deve ser do tipo int ou char { case cond01: declarações; break; // usado para sair do case. case cond02: declarações; break; case cond03: declarações; break; } for Loops for (expr_inicial; condição_boolean; incremento) { Declarações ou blocos; } while Loops while(condição_boolean) { Declarações ou blocos; } do Loops do { Declarações ou blocos; } while(condição_boolean);

Palavras Reservadas abstract do implements private throw boolean double import protected throws breaak else instanceof public true transient byte extends int return case false interface short try catch final long static void char finally native super volatile class float new switch while continue for null synchronized default if package this Estruturação teórica da linguagem: Classes e objetos: 1º Nível 2º Nível 3º Nível Veículos de Passeio Veículos de Transporte Fabricante Veículos n Níveis Abstração de Tipos de Dados Quando itens de dados são compostos para tipos de dados, semelhante a uma data, você pode definir um número de bits de programas que especifica a operação do tipo de dados. Em Java você pode criar uma associação entre o tipo data e a operação tomorrow a seguir: public class Date { private int day, month, year; public void tomorrow( ) { // código que incrementa o dia }

} Definição de Métodos

Em Java, métodos são definidoss usando uma aproximação que é muito similar à usada em outras linguagens, como por exemplo C e C++. A declaração é feita da seguinte forma: < modifiers > <tipo de retorno> < nome > ( < lista de argumentos > ) < bloco >

< modifiers > -> segmento que possue os diferentes tipos de modificações incluíndo public, protected e private. < tipo de retorno > -> indica o tipo de retorno do método.

< nome > -> nome que identifica o método.

< lista de argumentos > -> todos os valores que serão passados como argumentos. public void addDays (int days) Passagem de Valores Em Java o único argumento passado é “by-value”; este é um argumento may not be changed do método chamado. Quando um objeto é criado, é passado um argumento para o método e o valor deste argumento é uma referência do objeto. O conteúdo do objeto passível de alteração é chamado do método, mas o objeto referenciado jamais é alterado. A Referência This É aplicado a métodos não estáticos. O Java associa automaticamente a todas as variáveis e métodos referenciados com a palavara this. Por isso, na maioria dos casos torna-se redundante o uso em todas as variáveis da palavra this. Existem casos em se faz necessário o uso da palavar this. Por exemplo, você pode necessitar chamar apenas uma parte do método passando uma instância do argumento do objeto. (Chamar um classe de forma localizada); Birthday bDay = new Birthday(this);

Ocultando Dados Usando a palavra private na declaração de day, month e year na classe Date, você impossibilitará o acesso a estes membros de um código fora desta classe. Você não terá permissão para atribuir valores, mas poderá comparar valores.

Como Java é executado

Um programa fonte escrito em linguagem Java é traduzido pelo compilador para os bytecodes, isto é, o código de máquina de um processador virtual, chamado Java Virtual Machine (JVM). A JVM é um programa capaz de interpretar os bytecodes produzidos pelo compilador, executando o programa cerca de 20 vezes mais lento do que C. Pode parecer ruim, mas é perfeitamente adequado para a maioria das aplicações. Com isto, um programa Java pode ser executado em qualquer plataforma, desde que esteja dotada de uma JVM. É o caso dos programas navegadores mais populares, como o Netscape Navigator e o Internet Explorer, que já vêm com uma JVM. A vantagem desta técnica é evidente: garantir uma maior portabilidade para os programas Java em código-fonte e compilados. Porém, as JVM tendem a ser programas extensos que consomem muitos recursos, restringindo assim o tamanho das aplicações escritas em Java.

Atualmente, já existem compiladores capazes de traduzir bytecodes para instruções de máquina nativas, como o Just In Time compiler (ou JIT), tornando os programas ainda mais rápidos. Este compilador requer uma versão específica para cada plataforma onde se pretende que o programa Java seja executado. Em contrapartida à maior velocidade de execução está também uma maior necessidade de memória, pois os bytecodes compilados, em geral, ficam três vezes maiores do que o original. Uma alternativa bem mais interessante, e talvez muito mais viável, é a implementação da JVM em hardware na forma de uma placa ou microchip. A primeira iniciativa neste sentido é da Sun Microelectronics, que está produzindo os chips picoJava ITM, microJavaTM e UltraJavaTM. Estes são capazes executar diretamente bytecodes, acelerando em milhares de vezes a velocidade de execução. Isto permitirá o desenvolvimento viável de aplicativos cada vez mais complexos, abrangentes e funcionais. Espera-se que estas soluções sejam brevemente empregadas na fabricação de telefones celulares, pagers, jogos, organizadores pessoais digitais, impressoras e eletrodomésticos de consumo, além aplicações mais sérias como estações de trabalho dotadas do sistema operacional JavaOSTM. Trata-se certamente do futuro das soluções para aplicações de rede.

Já se tornou clássica a idéia de que para aprender uma nova linguagem de programação não se deve ir direto à descrição sua formal. Ao invés disso, é melhor examinar cuidadosamente um pequeno programa escrito nessa linguagem, o mais simples possível, mas que permita "quebrar o gelo". Isso faz sentido pois, por exemplo, quando vamos aprender Inglês, ou outro idioma qualquer, não iniciamos com a leitura compenetrada de um livro de gramática, mas aprendemos algumas estruturas simples e procuramos exercitá-las, adiando o estudo rigoroso para quando estivermos suficientemente maduros. Ao compreender as diversas partes componentes do exemplo, já teremos dado um grande passo para podermos escrever qualquer programa.

Seguindo essa linha, apresentamos nosso primeiro programa, o clássico "Alô pessoal!". O objetivo deste programa é simplesmente escrever na tela a frase "Alô pessoal!". Vejamos como é o código fonte:

System.out.println("Alo pessoal!");

public class AloPessoal { public static void main(String args[]) { }

Digitando o programa

Que tal colocarmos a mão na massa e digitarmos esse programinha? Para isso, é recomendável utilizar um editor de texto simples como o Notepad ou Bloco de Notas do Windows. Se estiver no Unix, use preferencialmente o TextEdit ou o vi. O nome do arquivo deve ser exatamente igual ao nome que aparece após a palavra class na primeira linha do programa e dever ter .java como sufixo. Assim sendo, o nome deverá ser "AloPessoal.java". Cuidado para digitar corretamente as maiúsculas e minúsculas, pois a linguagem Java é sensível ao tipo de caixa das letras.

Compilando o código fonte

Para criar o código binário, chamamos o compilador Java através da linha de comando, do seguinte modo:

javac AloPessoal.java

Com isso, será criado um arquivo binário (desde que tudo corra bem) com mesmo nome do arquivo original, mas com sufixo .class no lugar de .java. No nosso caso, teríamos um arquivo AloPessoal.class. Entre as (muitas) coisas que poderiam dar errado nesse momento, o código fonte pode conter erros. Esse não deverá ser o caso, se tiver digitado o programa exatamente como aparece acima. Se, porém, o compilador emitir mensagens de erro, será preciso identificar as linhas que estão incorretas, corrigí-las no editor, e chamar o compilador novamente. As linhas que contém algum tipo de incorreção são listadas pelo compilador juntamente com seu número, facilitando sua localização no editor.

Executando o código

Para podermos executar o programa é necessário chamar o interpretador Java, pois, como vimos, os bytecodes foram feitos para rodar em uma Java Virtual Machine. Podemos fazêlo do seguinte modo:

java [nome da classe] onde [nome da classe] é o nome do arquivo sem o sufixo .class. Em nosso caso, este será AloPessoal. Ao executar o programa, ele deverá exibir na tela a frase:

Alo pessoal!

Se isto não ocorrer, volte atrás e verifique se o programa foi digitado exatamente como aparece na listagem acima.

Este é um programa muito simples. Porém, a boa compreensão das estruturas presentes nele deverá permitir a programação fluente em Java em pouco tempo.

Entendendo a estrutura do programa Todo programa Java, deve conter ao menos uma declaração da forma public class [nome] { public static void main(String args[]) { ... }

Onde [nome] é o nome da classe e a parte "..." é o código Java válido, a ser executado no programa. O nome de uma classe é um identificador, como qualquer outro presente no programa, porisso não deve conter espaços ou outros caracteres gráficos, isto é, deve ser um nome composto de uma seqüência de caracteres que seja válida para um identificador. Outros exemplos de identificadores são nomes de variáveis, nomes de comandos, etc.

Vamos adiar um pouco a complicação sobre o que vem a ser uma classe, pois isso depende de alguns conceitos da programação orientada a objetos. Por hora, vamos apenas aceitar que todo programa Java deve conter ao menos uma classe, e que é dentro de uma classe que vão os dados e os procedimentos. Notemos ainda que todo programa Java (mas não as applets) deve ter uma classe dotada de um procedimento chamado main. Os procedimentos em Java são chamados métodos. Os métodos encerram um conjunto de declarações de dados e de comandos que são executados mediante a chamada do método por seu nome. Vamos estudar os métodos em detalhe mais adiante. O método main é o ponto onde se dá o início da execução do programa, isto é, um método chamado automaticamente pela JVM.

Voltando ao nosso programinha AloPessoal, o código a ser executado é System.out.println("Alo pessoal!");

System.out.println é o nome de uma função que serve para escrever informações textuais na tela. Os dados a serem escritos, devem estar delimitados entre os parênteses "(" e ")". "Alo pessoal!" é uma frase. Em computação, uma palavra ou uma frase que tenha função literal é denominada string. Em Java, a representação de uma string constante se dá colocando os caracteres entre aspas, por exemplo: "Imagem", "Rio de Janeiro", "Brasília", etc, são strings constantes.

Note que existe um ; (ponto e vírgula) no final da linha, logo após o ")". Em Java, é obrigatório colocar um ponto e vírgula após cada comando. Isso porque um comando pode ser quebrado em múltiplas linhas, sendo necessário sinalizar de algum modo onde é que o comando termina.

Java é sensível ao tipo de caixa, isto é, distingue caixa alta (maiúsculo) da caixa baixa (minúsculo). Os programadores acostumados a linguagem C e C++ vão certamente sentir-se em casa; porém os programadores acostumados à linguagem PASCAL devem ficar mais atentos.

Mais exemplos

Podemos escrever "Alo pessoal!" escrevendo primeiro, "Alo " e depois, "pessoal!". Para isso, o programa deve ser alterado da seguinte forma:

System.out.print("Alo ");
System.out.println("pessoal!");

public class Alo { public static void main(String args[]) { }

(Parte 1 de 7)

Comentários