Programação Orientada A Objeto Com JAVA
Programação Orientada A Objeto Com JAVA
Programação Orientada A Objeto Com JAVA
Orientada a Objeto
com JAVA
5. O Eclipse..........................................................................................26
5.1. Aceitação do Eclipse pelo Mercado Brasileiro................................................................................. 26
i
5.2. Obtendo e Instalando o Eclipse ......................................................................................................... 28
5.3. Criando a Primeira Aplicação no Eclipse ........................................................................................ 30
ii
10.4.1. Ligando o Formulário na Opção do Menu .................................................................................. 81
10.4.2. Programando o acesso ao banco de dados................................................................................... 81
10.5. Implementando a Transação “Registrar Contas” ............................................................................ 86
10.5.1. Implementando as Janelas de Consulta ....................................................................................... 87
10.5.2. Ligando a Janela de Consulta ao Formulário “Registrar Contas” .............................................. 90
10.6. O Formulário “Dar Baixa”............................................................................................................... 91
10.7. O Formulário “Consultar”................................................................................................................ 91
iii
Programação Orientada a Objeto com JAVA
1. A Tecnologia JAVA
Atualmente, a tecnologia JAVA é tanto uma linguagem de programação como uma plataforma
de desenvolvimento para as mais variadas aplicações.
Normalmente o termo “Java” é utilizado para referir-se a:
• Uma linguagem de programação orientada a objetos
• Uma coleção de APIs - (classes, componentes, frameworks) para o desenvolvimento de aplicações
multiplataforma
• Um ambiente de execução presente em browsers, mainframes, SOs, celulares, palmtops, cartões
inteligentes, eletrodomésticos etc.
1
Programação Orientada a Objeto com JAVA
2
Programação Orientada a Objeto com JAVA
Atualmente, a linguagem Java é a força propulsora por trás de alguns dos maiores avanços da
computação mundial, como:
• Acesso remoto a bancos de dados
• Bancos de dados distribuídos
• Comércio eletrônico no WWW
• Interatividade em páginas WWW
• Interatividade em ambientes de Realidade Virtual distribuídos
• Gerência de Documentos
• Integração entre dados e forma de visualização
• Network Computer
• Ensino à distância
• Jogos e entretenimento
3
Programação Orientada a Objeto com JAVA
4
Programação Orientada a Objeto com JAVA
• Java: O interpretador java é utilizado para executar aplicações em Java. Ele interpreta os bytecodes
gerados pelo javac. O interpretador é executado a partir de linha de comando da forma:
java NomedaClasse arg1 arg2 arg3...
Ao ser executado, o interpretador busca o arquivo NomedaClasse.class, nele procura um método
public static void main() e a ele passa os argumentos que recebeu (ou não, pois os argumentos são
opcionais e sua existência depende da funcionalidade da classe que está sendo interpretada).
• Appletviewer: é uma ferramenta para visualização de applets fora do ambiente web browser.
Executado a partir de linha de comando, recebe como argumento o arquivo HTML ao qual está
anexo o applet Java. Esta ferramenta é bastante útil no processo de desenvolvimento e teste de
applets.
• Javadoc: é um gerador automático de documentação. Ele lê declarações de classes - código fonte -
e busca por comentários especiais (iniciam com /** e terminam com */), gerando páginas HTML
com as informações contidas nesses comentários, bem como informações sobre os métodos,
variáveis e herança da classe declarada.
5
Programação Orientada a Objeto com JAVA
1
Um sistema embarcado é um sistema de computação especializado, que faz parte de uma máquina ou sistema mais
amplo. Geralmente, são sistemas microprocessados com os programas armazenados em ROM.
6
Programação Orientada a Objeto com JAVA
7
Programação Orientada a Objeto com JAVA
2. Obtendo, Instalando e
Configurando o J2SE
Toda a tecnologia Java pode ser obtida através do servidor web da Sun Microsystem
(http://www.sun.com/java). Para obter o J2SE cuja última versão (considerando janeiro de 2007) é a
6.0 também conhecido como JDK 6, basta acessar o link
http://java.sun.com/javase/downloads/index.jsp. Através deste link o browser é remetido à página
exibido na figura 4.
8
Programação Orientada a Objeto com JAVA
9
Programação Orientada a Objeto com JAVA
10
Programação Orientada a Objeto com JAVA
Figura 13 – Variáveis de
Figura 11 – Propriedades do Figura 12 – Guia Avançadas Ambiente
Sistema
11
Programação Orientada a Objeto com JAVA
3. Desenvolvendo uma
Aplicação em JAVA
Os programas escritos em Java podem assumir duas formas básicas: applets e applications. A
programação desses dois tipos é baseada nos mesmos conceitos da linguagem, mas têm características
bem distintas. Segurança, interface gráfica, acesso à unidades de disco e acesso à rede são pontos de
divergência entre applets e applications.
Entretanto, a diferença básica está no fato de que applets precisam de um web browser para
existir. Isso quer dizer que applets são aplicações voltadas para o ambiente Internet/Intranet e que são
transportadas pela rede junto com hiperdocumentos HTML. Já as applications são programas escritos
para operar sem a necessidade de um web browser - aplicações convencionais para computadores,
como editores de texto, gerenciadores de arquivos, etc.
A seguir, temos exemplos de applets e applications, bem como as características de cada um.
12
Programação Orientada a Objeto com JAVA
dinâmica, colocando applets ligados a páginas, carregando-os automaticamente quando essas páginas
forem carregadas. O applet passa a fazer parte do navegador quando ocorre a sua execução.
A seguir, temos um exemplo simples do código de um applet. Esse código deve ser armazenado
em um arquivo de mesmo nome da classe que ele define, seguido da extensão .java.
//arquivo MeuApplet.java
import java.applet.*;
import java.awt.*;
public class MeuApplet extends Applet {
public void paint (Graphics g) {
g.drawString( “Este é meu applet!” );
}
}
Após o processo de compilação do arquivo MeuApplet.java, que pode ser efetuado pelo
compilador javac encontrado no JDK, é necessário criar um arquivo HTML que contenha a chamada
para o applet. Esse arquivo HTML é que será chamado pelo web browser. O exemplo a seguir mostra
o arquivo HTML com a chamada ao applet:
Arquivo MinhaApplet.html
<HTML>
<applet code=“MeuApplet.class” width=“200” height=“100”>
</applet>
</HTML>
Os applets são carregados e formatados dentro de uma página web de forma semelhante a uma
imagem. Na maioria dos browsers, quando o arquivo HTML indica que uma imagem deve ser colocada
na página, a imagem é carregada a partir do servidor web e exibida no local apropriado: a imagem é
desenhada dentro da janela do navegador, tendo o texto fluindo em torno desta, em vez de dispor de
uma janela externa exclusiva.
Em um browser que suporte Java, o applet também é exibido dentro da página web.
Conseqüentemente, nem sempre o usuário pode ter certeza se uma imagem materializada em seu
browser é um arquivo de imagem ou um applet. Quando um applet é colocado em uma página web, é
definida uma área específica para a sua exibição. Essa área de exibição pertence ao applet, para ser
utilizada conforme a sua execução. Alguns applets utilizam essa área para apresentar animações; outros
a utilizam para exibir informações a partir de um banco de dados ou para permitir que o usuário
selecione itens ou digite informações. A largura e altura dessa área são definidas no arquivo HTML,
dentro da chamada ao applet, nos campos width e height.
A abordagem para o desenvolvimento de programas em Java inicialmente será feita sobre
aplicações stand-alone. No Capítulo 7 a classe applet será vista com maiores detalhes.
13
Programação Orientada a Objeto com JAVA
public
É um qualificador do método que indica que este é acessível externamente a esta classe (para
outras classes que eventualmente seriam criadas), não se preocupe com ele agora, apenas declare todos
os métodos como public.
static
14
Programação Orientada a Objeto com JAVA
É um outro qualificador ou “specifier”, que indica que o método deve ser compartilhado por
todos os objetos que são criados a partir desta classe. Os métodos static podem ser invocados, mesmo
quando não foi criado nenhum objeto para a classe, para tal deve-se seguir a sintaxe:
<NomeClasse>.<NomemetodoStatic>(argumentos);. Retornaremos a esta explicação mais
tarde, por hora você precisa saber que particularmente o método main precisa ter essa qualificação
porque ele é chamado sem que se crie nenhum objeto de sua classe (a classe HelloWorld).
void
Semelhante ao void C++ ou C, é o valor de retorno da função, quando a função não retorna
nenhum valor ela retorna void, uma espécie de valor vazio que tem que ser especificado.
main
Este é um nome particular de método que indica para o compilador o início do programa, é
dentro deste método e através das iterações entre os atributos, variáveis e argumentos visíveis nele que
o programa se desenvolve.
(String args[])
É o argumento de main e por conseqüência do programa todo, ele é um vetor de Strings que é
formado quando são passados ou não argumentos através da invocação do nome do programa na linha
de comando do sistema operacional, exemplo:
Java HelloWorld argumentotexto1 argumentotexto2
{ ... }
“Abre chaves” e “fecha chaves”. Para quem não conhece C ou C++, eles podem ser entendidos
como algo semelhante ao BEGIN END de Pascal ou Modula-3, ou seja: delimitam um bloco de
código. Os programadores Pascal notarão que variáveis locais dos métodos podem ser declaradas em
qualquer local entre as chaves. Mas por motivos de clareza do código declararemos todas no início do
abre chaves.
System.out.println("Hello World!");
Chamada do método println para o atributo out da classe ou objeto System, o argumento é
uma constante do tipo String. println assim como writeln de Pascal, imprime a String e posiciona o
cursor na linha abaixo , analogamente print não avança linha. Por hora você pode guardar esta linha de
código como o comando para imprimir mensagens na tela, onde o argumento que vem entre aspas é a
String a ser impressa. O ; “ponto e vírgula” separa operações.
}
Finalmente o fecha chaves termina com a declaração da classe HelloWorld.
15
Programação Orientada a Objeto com JAVA
Neste capítulo é apresentada uma breve discussão sobre a sintaxe da linguagem Java, abordando
os tipos primitivos de dados suportados, as regras para a declaração de variáveis, as recomendações
para a definição de identificadores, utilização de operadores e a suas precedências, estruturas de
controle fluxo. Como poderá ser notado existe uma semelhança muito grande entre Java e a linguagem
C/C++.
16
Programação Orientada a Objeto com JAVA
17
Programação Orientada a Objeto com JAVA
Exemplo Aritmético:
class TesteArimético {
public static void main ( Strings args[] ) {
short x = 6;
int y = 4;
float a = 12.5f;
float b = 7f;
System.out.println ( “x é “ + x + “, y é “ + y );
System.out.println ( “x + y = “ + (x + y) );
System.out.println ( “x - y = “ + (x - y) );
System.out.println ( “x / y = “ + (x / y) );
System.out.println ( “x % y = “ + ( x % y ) );
System.out.println ( “a é “ + a + “, b é “ + b );
System.out.println ( “ a / b = “ + ( a / b ) );
}
}
Variáveis podem ser atribuídas em forma de expressões como:
int x, y, z;
x = y = z = 0;
No exemplo as três variáveis recebem o valor 0;
Operadores de atribuição podem ser combinados com operadores artiméticos como mostra a
tabela a seguir:
Expressão Significado
x += y x=x+y
x -= y x=x-y
x *= y x=x*y
x /= y x=x/y
Como no C/C++ , Java também possui incrementadores e decrementadores:
y = x++;
y = --x;
As duas expressões dão resultados diferentes, pois existe uma diferença entre prefixo e sufixo.
Quando se usa os operadores ( x++ ou x-- ), y recebe o valor de x antes de x ser incrementado, e
usando o prefixo ( ++x ou --x ) acontece o contrário, y recebe o valor incrementado de x.
Java possui várias expressões para testar igualdade e magnitude. Todas as expressões retornam
um valor booleano (true ou false).
18
Programação Orientada a Objeto com JAVA
4.5.1. If ..else
Desvia o fluxo de acordo com o resultado da expressão. A expressão pode ser algo simples ou
composto. O else é opcional. Se for necessário mais de um comando, é necessário colocar o bloco das
instruções entre { } .
if (expressão)
comando ou { bloco }
else // opcional
comando ou { bloco } // opcional
Exemplo:
if ( fim == true ){
cont = 0;
System.out.println(“Término!”);
19
Programação Orientada a Objeto com JAVA
}
else {
cont = cont +1;
System.out.println(“Continuando...”);
}
4.5.2. While
A expressão é avaliada uma vez antes do comando. Caso seja verdadeira, o comando é executado.
Ao final do comando, a expressão é avaliada novamente. Se for necessário mais de um comando, é
necessário colocar o bloco das instruções entre { } .
while (expressão)
comando ou { bloco }
Exemplo:
while (i!=0 ){
salario=salario*0.5;
i--;
}
4.5.4. For
Uma variável é iniciada na parte de inicialização. A expressão é testada a cada execução do
comando, e enquanto for verdadeira, a(s) instrução(es) contidas no bloco é (são) executada(s). Ao final,
passo é executado.
for (inicialização; expressão; passo)
comando ou { bloco }
Exemplo:
for (i = 0; i < 20; i ++)
salario = salario * 0.5;
Nota: É possível a inicialização de mais de uma variável e a execução de mais de uma instrução no
passo, dividindo as instruções com virgulas, como abaixo:
for (int i=0, j=1; i < 10 && j != 11; i++, j++)
20
Programação Orientada a Objeto com JAVA
4.5.5. Switch
O comando switch serve para simplificar certas situações onde existem vários valores a serem
testados. Assim, identificamos a variável a ser testada (o tipo desta variável pode ser char, byte, short ou
int), e colocamos uma linha case para cada possível valor que a variável possa assumir. No final, é
permitido colocar uma linha default para o caso da variável não assumir nenhum dos valores previstos.
O break no final de cada comando serve para evitar comparações inúteis depois de encontrado o valor
correto. Se for necessário mais de um comando, é necessário colocar o bloco das instruções entre { } .
switch (variável)
{
case (valor1): comando ou { bloco } break;
case (valor2): comando2 ou { bloco2 } break;
...
default: comando_final ou { bloco final }
}
Exemplo:
switch ( cmd ){
case 1: System.out.println(“Item do menu 1”);
break;
case 2: System.out.println(“Item do menu 2”);
break;
case 3: System.out.println(“Item do menu 3”);
break;
default: System.out.println(“Comando invalido!”);
}
O comando return serve para 2 propósitos: mostrar qual valor deve ser retornado do método (se
ele não for void) e para encerrar a execução do método imediatamente.
return
O comando termina a execução de um loop sem executar o resto dos comandos, e força a sadia
do loop.
break
O comando termina a execução de um loop sem executar o resto dos comandos, e volta para o
inicio do loop para uma nova iteração.
continue
4.6. Vetor
Um vetor normalmente é usado para armazenar um grupo de informações semelhantes. Todos
os itens de um vetor devem ser do mesmo tipo em tempo de compilação. Se o vetor for formado por
tipos primitivos, eles devem ser todos do mesmo tipo.
Vetores são inicializados com o uso do operador new. Pense em cada elemento do vetor como
um objeto distinto.
O tipo mais simples de vetor é um vetor de uma dimensão de um tipo primitivo – por exemplo,
um int. O código para criar e inicializar esse vetor é:
Exemplo:
int nums[] = new int [5];
21
Programação Orientada a Objeto com JAVA
4.7. Strings
O tipo String é fornecido com a linguagem como uma classe do pacote java.lang que é
importada implicitamente em todos os programas além disso a sua implementação desta classe é
bastante completa.
A declaração de Strings se dá da mesma forma que as outras variáveis. O compilador oferece
uma facilidade sintática para a inicialização com valores literais, veja a seguir:
String teste=“Ola meu amigo”; //objeto instanciado com valor Ola
//meu amigo
Para concatenar Strings use o operador +. Os operandos podem não ser Strings, nesse caso
serão convertidos para objetos desta classe, por exemplo se um dos argumentos for um inteiro, o
objeto String correspondente conterá o valor literal deste inteiro.
System.out.println(teste + “ Andre!”); //Ola meu amigo Andre!
teste+=“ Andre!”; //atalho para concatenacao seguida de
//atribuicao: teste=teste+” Andre!”
System.out.println(teste); //totalmente equivalente a primeira
22
Programação Orientada a Objeto com JAVA
Para obter o comprimento em número de caracteres de uma String, chame o método length()
para a String em questão. Para obter o caractere presente na posição 6 da String, chame o método
charAt(); . Note que o primeiro caracter da String está na posição zero:
char umChar=teste.charAt(6); //um char recebe ‘u’
Para obter uma substring, chame o método substring(int a,int b); onde o primeiro argumento é
o índice do início da substring e o segundo é o índice do fim da substrings, os caracteres em a e b
também são incluídos:
String aStr=teste.substring(0,2); //aStr recebe ola
Para transformar todos os caracteres de uma String em letras maiúsculas basta chamar o
método toUpperCase();
teste=teste.toUpperCase(); //teste fica igual a OLA MEU AMIGO
Um método interessante para usar em checagem de padrões em texto é indexOf(String str); este
método retorna o índice posição inicial de ocorrência de str na String para a qual foi chamado o
método:
teste.indexOf(“MEU”); //retorna 4
Analogamente, lastIndexOf(String busque), retorna o índice de ocorrência da substring, só que
agora do procurando do fim para o começo.
teste.indexOf(“M”); //resulta em 9 (logo a seguir do ultimo A
//que esta na posicao 8)
Para comparação de igualdade use:
teste.equals(“OLA MEU AMIGO”); //retorna valor booleano
Além disso, a classe String define métodos para conversão dos tipos básicos para seus
valores na forma de String, você pode achar esses métodos um pouco estranhos, pois eles tem todos os
mesmos nomes e não precisam de um objeto para serem chamados, eles são chamados para a classe:
String.valueOf(3); //argumento e naturalmente um inteiro,
//retorna “3”
String.valueOf(3.1415); //argumento e double, retorna “3.1415”
Os métodos de nome valueOf são uma padronização de métodos de conversão entre tipos
encontrados em algumas das classes pré-definidas na linguagem, principalmente nas classes “wrappers”
que foram exemplificadas com a classe Integer.
class StringTest {
public static void main (String args[]) {
String teste="Ola meu amigo";
System.out.println(teste + " Andre!"); //Ola meu amigo Andre!
teste+=" Andre!"; //atalho para concatenacao seguida de atribuicao
System.out.println(teste); //totalmente equivalente a primeira
char umChar=teste.charAt(5); //um char receber ‘e’
System.out.println("Andre "+umChar+teste.substring(3,13));
teste=teste.toUpperCase(); //teste fica igual a OLA MEU AMIGO ANDRE!
for (int i=0;i<teste.length();i++){ //imprimindo caracteres um a um
System.out.print(teste.charAt(i));
}
System.out.println(); //pula uma linha
System.out.println(teste.indexOf("AMIGO")); //retorna 8
System.out.println(teste.indexOf("biba")); //nao acha, retorna -1
System.out.println(teste.lastIndexOf("AMIGO")); //retorna 8
23
Programação Orientada a Objeto com JAVA
String linha="";
DataInputStream in = new DataInputStream(System.in);
try {
linha = in.readLine();
24
Programação Orientada a Objeto com JAVA
int i=Integer.valueOf(linha).intValue();
//converte o String armazenado em linha para um valor int
//armazenando em i
float f=Float.valueOf(linha).floatValue();
//converte o String armazenado em linha para um valor float
//armazenando em f
25
Programação Orientada a Objeto com JAVA
5. O Eclipse
O projeto Eclipse.org nasceu da iniciativa de grandes empresas líderes em seus seguimentos, tais
como Borland, IBM, QNX Software, Rational Software, Red Hat, Suse, Toghether Software (comprada
pela Borland) , Sybase e Fujitsu. O projeto em si foi iniciado em 2001 na IBM que desenvolveu a
primeira versão do produto e doou-o como software livre para a comunidade. O gasto inicial da IBM
no produto foi de mais de 40 milhões de dólares. Em fevereiro de 2004 o Eclipse.org tornou-se
independente, ficando “livre” da IBM.
A Plataforma de Eclipse é projetada para ser um ambiente de desenvolvimento integrado (IDE
– Integrated Development Enviroment), podendo ser usado para criar aplicações tão diversas quanto
web sites, programas Java embarcados, programas C++ e Enterprise JavaBeans. Atualmente o Eclipse
é a IDE Java mais utilizada no mundo.
Atualmente o Eclipse.org mantém 4 grandes projetos e 19 subprojetos, dent re esses grandes
projetos podemos destacar a IDE Eclipse para desenvolvimento Java. Esta ferramenta permite
personalizar totalmente o ambiente de acordo com o projeto que está sendo desenvolvido, seja ele
desenvolvimento para plataforma WEB ou Desktop (Standard), com ou sem EJBs, J2ME, etc. Além
disto, permite a instalação de plugins que t rabalham integrado com a ferramenta. Em sua versão básica,
o Eclipse já t raz alguns plugins (que podemos chamar de plugins básicos), dentre eles podemos
destacar a integração com o Ant e com o CVS.
Apesar de ser uma IDE free e opensource, o Eclipse é bem completo, permitindo que seja feito
nele tudo o que pode ser feito em uma IDE paga, claro, que em alguns casos com um grau de
dificuldade maior, mas para atividades de desenvolvimento básicas como desenvolvimento em Swing,
JSP, Servlets ele atende muito bem, tem grandes facilidades para desenvolvimento de EJB’s.
Figura 15 – Uso de IDE´s Java por pessoas (ano de 2001) – Fonte: DFJUG – Grupo de Usuários Java
do Distrito Federal, 2003
26
Programação Orientada a Objeto com JAVA
Figura 16 – Uso de IDE´s Java por pessoas (ano de 2002) – Fonte: DFJUG – Grupo de Usuários Java
do Distrito Federal, 2003
Figura 17 – Uso de IDE´s Java por pessoas (ano de 2003) – Fonte: DFJUG – Grupo de Usuários Java
do Distrito Federal, 2003
Figura 18 – Uso de IDE´s Java por empresas (ano de 2003) – Fonte: DFJUG – Grupo de Usuários
Java do Distrito Federal, 2003
27
Programação Orientada a Objeto com JAVA
28
Programação Orientada a Objeto com JAVA
Selecione o servidor de onde deseja realizar o donwload e salve o arquivo de instalação numa
pasta especifícia (veja figura 21).
29
Programação Orientada a Objeto com JAVA
Pronto. Já está instalado. Para poder executar a Ferramenta vá para a pasta Eclipse, no local
onde o mesmo foi descompactado e abra o arquivo eclipse.exe (veja figura 23) – é recomendado criar
um atalho no desktop para facilitar o seu acesso .
30
Programação Orientada a Objeto com JAVA
Overview Samples
31
Programação Orientada a Objeto com JAVA
32
Programação Orientada a Objeto com JAVA
A partir do momento que o projeto foi criado passamos a definir as classes. Para isso, no menu
File selecione New e depois Class (veja figura 30). Uma tela se abrirá como exibido na figura 31.
33
Programação Orientada a Objeto com JAVA
34
Programação Orientada a Objeto com JAVA
35
Programação Orientada a Objeto com JAVA
Java é uma linguagem completamente orientada a objetos e não é possível desenvolver nenhum
software sem seguir o paradigma de orientação a objetos.
Um sistema orientado a objetos é um conjunto de classes e objetos que interagem entre si, de
modo a gerar o resultado esperado.
Este capítulo tem o objetivo de apresentar os principais elementos de Orientação a Objetos
aplicados diretamente à linguagem Java.
36
Programação Orientada a Objeto com JAVA
A classe representa somente o molde para a criação dos objetos, estes sim contém informação.
O atributo Identificação tem valor 940718 para a instância (objeto) André da classe Estudantes
de Graduação. Um objeto existente durante um momento da execução de um programa é uma
instancia de uma classe.
Uma classe e suas instancias: Cada estudante (ou instância) poderia ser
modelado, desenhado como:
Objetos podem conter objetos, ou seja, os atributos de um objeto podem ser objetos, da mesma
classe ou não. Objetos podem ser passados pela rede, armazenados em meio físico. Objetos possuem
um estado e um comportamento. Métodos podem receber objetos como argumentos, podem declarar
objetos como variáveis locais, podem chamar outros métodos. Você pode chamar um método (mandar
uma mensagem) para objetos em outras máquinas através de sua rede.
Um objeto pode ser visto como um registro, só que com uma tabela de funções que podem ser
chamadas para ele. Na verdade esta definição não é muito teórica, mas é um bom começo para os
programadores que estão acostumados com linguagens procedurais. Na verdade podemos fazer com
objetos muito mais do que fazemos com registros e procedimentos em Pascal.
Em Java, ao contrário de C++ e Modula-3, não existem funções desvinculadas de classes,
funções isoladas. Isto implica que todo trecho de código que for escrito deve pertencer a uma classe,
mais precisamente deve ser um método desta. O programa mais simples em Java deve conter pelo
menos uma classe e um método de início de programa.
Esta filosofia é simples e semelhante à adotada em Eiffel, tudo o que se pode fazer com
procedimentos, funções isoladas e variáveis de procedimentos, também se pode fazer com classes e
métodos. C++ tinha que permitir a criação de funções isoladas para manter a compatibilidade com
“C”, mas Java não.
6.1.1. Atributos
No programa HelloWorld, não foi observada a criação de nenhum objeto, apenas a declaração
da classe HelloWorld que continha o método main. Este programa funcionou porque o método main
não precisa de um objeto específico para ser invocado.
O exemplo a seguir declara uma classe (Pessoa) e em seguida cria um objeto deste tipo em
main e altera o conteúdo desta variável. Uma classe é parecida com um registro, mais especificamente
esta classe representa uma pessoa com os atributos nome, idade, telefone. Note que esta classe não
possui métodos ainda.
//Classe Pessoa, arquivo Pessoa.Java
public class Pessoa {
public String nome;
public int idade;
public String telefone;
}
A classe Pessoa é especificada em um arquivo separado do arquivo da classe que contém o
método main (início do programa), representado no quadro a seguir.
37
Programação Orientada a Objeto com JAVA
38
Programação Orientada a Objeto com JAVA
Como foi visto, neste exemplo é definida uma classe chamada Pessoa com os atributos nome, idade
e telefone. Mas não basta defini-lo para que ele nos seja útil. Para isso, deve-se instanciá-lo, assim:
Pessoa amigo = new Pessoa();
A partir de agora, o objeto amigo pode ser utilizado para guardar dados. Pode-se incluir dados
assim:
amigo.nome = "Joao";
amigo.idade = 33;
amigo.telefone = "444444";
E quando for necessário acessar os valores, simplesmente pode-se imprimi-los.
System.out.println("Nome"+amigo.nome+" Idade"+amigo.idade+
" telefone"+p.telefone);
O esquema geral para a definição de um atributo é
Qualificador Tipo NomeAtributo;
O Qualificador (veja seção 4.3) define o nível de acesso ao atributo, o Tipo determina o tipo de
dado do atributo que podem ser primitivos (int, float, boolean, String, ...) ou definidos como objetos de
outras classes e NomeAtributo determina a forma como ele será referenciado na classe.
6.1.2. Métodos
Os métodos determinam o comportamento dos objetos de uma classe. Quando um método é
invocado, se diz que o objeto está recebendo uma mensagem (para executar uma ação). Programas
complexos formam conjuntos de objetos que trocam mensagens entre si gerenciando inclusive os
recursos do sistema.
Pode-se agora criar um método para Pessoa. Esse método vai se chamar aniversario, e ele serve
para aumentar em 1 ano a idade do objeto. Então, a classe ficaria:
public class Pessoa {
public String nome;
public int idade;
public String telefone;
public void aniversario() {
idade = idade + 1;
}
}
Agora, para um teste, pode-se alterar a classe Principal como exibido no quadro a seguir:
...
Pessoa amigo = new Pessoa();
amigo.nome = "Joao";
amigo.idade = 33;
amigo.telefone = "2223311";
System.out.println ("Idade antiga"+amigo.idade);
amigo.aniversario();
System.out.println ("Nova idade"+amigo.idade);
...
Pode-se perceber que o valor da idade foi alterado.
O esquema geral para a definição de um método é
EspecificadorModoAcesso TipoRetorno NomeMetodo (argumentos)
{
corpo_do_metodo
39
Programação Orientada a Objeto com JAVA
}
No caso do método aniversario definido acima, não apresenta nenhum tipo de retorno, por isso
ele é do tipo void.
Se for preciso algum resultado de retorno, é necessário indicar qual o tipo desse resultado. Um
outro método é definido no quadro a seguir, que retorna o número de meses baseado na idade da
pessoa.
public int idadeEmMeses(){
return (idade * 12);
}
A instrução return vai indicar qual o valor a ser retornado na chamada do método. Como há um
retorno, ele dever ser utilizado ou apresentado. Pode-se apresentá-lo assim:
System.out.println (amigo.idadeEmMeses());
Nota: Se o valor for utilizado para outros fins, seria interessante definir uma variável do mesmo tipo do
retorno para armazenar o resultado:
int idade_em_meses = amigo.idadeEmMeses();
Às vezes, é necessário enviar argumentos (também chamados parâmetros) para um método para
que ele possa executar seu trabalho. A passagem de parâmetro é feita na hora da chamada, e temos que
criar o método já levando em consideração a quantidade de parâmetros que iremos passar.
Assim, se for necessário alterar o atributo idade do objeto, poderia se criar um método assim:
public void alteraIdade(int nova_idade){
idade = nova_idade;
}
E a chamada ao método ficaria na classe Principal:
amigo.alteraIdade(30);
Nota 1: Caso haja mais de um argumento, eles devem ser separados por virgulas.
Nota 2: Na definição do método com mais de um argumento, é necessário prever as variáveis a serem
recebidas.
Exemplo:
void qualquerCoisa (String nome, int idade, String telefone)
A chamada é
amigo.qualquerCoisa ("paulo", 24, "2221133");
40
Programação Orientada a Objeto com JAVA
idade = idade + 1;
}
}
Não há um construtor definido. Mas existem casos onde é necessário um construtor que faz
algo, como na definição de String. Pode-se definir uma String assim:
String nome = new String();
Ou assim:
String nome = new String ("Joao");
Isso quer dizer que o objeto String tem pelo menos 2 construtores; um que inicia o objeto sem
argumentos e outro que inicia com argumentos. Esse tipo de artifício é chamado de sobrecarga (em
inglês, Overloading).
Se for necessário que Pessoa tenha o mesmo tipo de funcionalidade do String, pode-se definir
dois construtores, assim:
class Pessoa{
String nome;
int idade;
String telefone;
public Pessoa(){}// Esse é o construtor sem argumentos
public Pessoa(String _nome, int _idade, String _telefone)
//Construtor com argumentos {
nome = _nome;
idade = _idade;
telefone = _telefone;
}
public void aniversario() {
idade = idade + 1;
}
}
Agora Pessoa pode ser instanciado como
Pessoa amigo = new Pessoa();
ou
Pessoa amigo = new Pessoa("Joao", 32, "2223311");
A sobrecarga é um dos recursos mais interessantes da orientação a objetos. E não está restrito
aos construtores; pode-se definir o mesmo nome para vários métodos. Assim, é possível tornar o
programa mais legível e com um número menor de identificadores para "inventar" caso seja necessário
realizar uma mesma operação de formas diferentes.
Nota 1: Quando dois (ou mais) métodos tem o mesmo nome, a diferenciação de qual método é
executado depende da quantidade e do tipo dos argumentos enviados.
Nota 2: Quando não definimos construtores, o Java cria um sem argumentos para nos. Quando eu
escolho definir o construtor, tenho que definir para todos os tipos, inclusive o sem argumentos.
41
Programação Orientada a Objeto com JAVA
A idéia é que o objeto deve gerenciar seus próprios dados, que só devem ser acessíveis ao
“mundo exterior” através de seus métodos (excetuando-se aqui os métodos e variáveis estáticas).
Então, pelo menos em teoria, cada atributo de um objeto deve ter um método para gravar
dados e outro para devolver o dado gravado. Isso vai permitir que esse objeto seja utilizado por
qualquer um, a qualquer tempo.
Encapsulamento, “data hiding” é um conceito bastante importante em orientação a objetos.
Neste tópico é definido as maneiras de restringir o acesso às declarações de uma classe e a própria
classe, isto é feito através do uso das palavras reservadas public, private e protected que são
qualificadores. A tabela a seguir exibe os qualificadores que podem ser utilizados na definição dos
componentes de uma classe (atributos e métodos).
Qualificador Nível de Acesso
Public Estes atributos e métodos são sempre acessíveis em todos os métodos
de todas as classes. Este é o nível menos rígido de encapsulamento,
que equivale a não encapsular.
Private Estes atributos e métodos são acessíveis somente nos métodos (todos)
da própria classe. Este é o nível mais rígido de encapsulamento.
Protected Estes atributos e métodos são acessíveis nos métodos da própria classe
e suas subclasses, o que será visto em Herança.
Nada especificado, Estes atributos e métodos são acessíveis somente nos métodos das
Equivale “package” classes que pertencem ao “package” em que foram criados. Este modo
ou “friendly” de acesso é também chamado de “friendly”.
Uma boa política para garantir o encapsulamento seria definir todos os atributos como private e
os métodos que manipulam este atributos como public.
No exemplo a seguir, todos os atributos foram declarados como private. O qualificador private
restringe o acesso do componente ao escopo da classe onde o mesmo é declarado. Sendo assim, a sua
manipulação deve estar prevista através do métodos que também são definidos na classe com o
qualificador public.
public class Pessoa {
private String nome;
private int idade;
private String telefone;
public Pessoa(){}// Esse é o construtor sem argumentos
public Pessoa(String _nome, int _idade, String _telefone)
//Construtor com argumentos {
nome = _nome;
idade = _idade;
telefone = _telefone;
}
public void aniversario() {
idade = idade + 1;
}
public void novo_telefone(String _telefone) {
telefone=_telefone;
}
public String nome_pessoa(){
return nome;
}
}
42
Programação Orientada a Objeto com JAVA
43
Programação Orientada a Objeto com JAVA
6.4.1. Agregação
A agregação é geralmente utilizada quando se deseja aproveitar as características de um objeto,
mas não a sua interface. Quando se tem um objeto do tipo carro e uma outra pessoa vai utilizar um
carro com as mesmas funcionalidades, é mais fácil ela construir um carro utilizando as “peças” (que já
estão prontas). Assim, ela pode importar a classe carro e usar: carro meuCarro = new carro();
A partir de agora, dentro do objeto em questão, tem-se um objeto do tipo carro. O que foi feito
aqui foi compor um objeto. Este objeto agora é do tipo composto, já que ele possui mais do que um
objeto dentro dele. Mas existem situações onde a agregação não basta.
6.4.2. Herança
A herança se dá quando se deseja utilizar o objeto existente para criar uma versão melhor ou
mais especializada dele.
Supondo a existência de uma classe chamada Empregado que possui como atributos o nome,
seção e salário do empregado, e um método para alterar o salário, como exibido a seguir:
class Empregado {
String nome;
String secao;
double salario;
public Empregado (String _nome, String _secao, double _salario){
nome = _nome;
secao = _secao;
salario = _salario;
}
public void aumentaSalario (double percentual){
salario *= 1 + percentual / 100;
}
}
havendo a necessidade de um tipo especial do objeto Empregado, que é o Gerente, sendo que este tem
secretária, e a cada aumento ele recebe a mais 0,5% a título de gratificação. Mas o Gerente continua
sendo um empregado; ele também tem nome, seção e salário. Assim, fica mais fácil utilizar a classe
Empregado já pronta como um modelo, e aumentar as funcionalidades. Isso é chamado de herança.
Veja a classe Gerente no exemplo abaixo:
class Gerente extends Empregado {
private String secretaria;
public Gerente (String _nome, String _secao, double _salario,
String _secretaria){
super (_nome,_secao,_salario); //Aqui eu chamo a super classe
//do Gerente
secretaria = _secretaria;
}
44
Programação Orientada a Objeto com JAVA
6.5. Polimorfismo
O conceito de herança leva a um outro conceito: o polimorfismo. Pode-se traduzir esta palavra
pela capacidade de um objeto em saber qual o método que deve executar. Apesar da chamada ser a
mesma, objetos diferentes respondem de maneira diferente.
Assim, quando chamamos aumentaSalario da classe Gerente, é esse método que será executado.
Se a classe Gerente não tivesse esse método, o método da classe Empregado seria executado. Caso a
classe Empregado também não tivesse esse método, a classe da qual ele veio seria objeto do pedido.
Como exemplo, imagine uma classe chamada Figura. Essa classe tem a habilidade de desenhar a
si mesma na tela. Se eu definir uma classe chamada Triangulo que estenda a classe Figura, ela pode usar
o método da super classe para desenhar a si mesma, sem necessidade de criar um método apenas para
isso.
Usando ainda nosso exemplo de Funcionário e Gerente. Se a classe Funcionário tivesse um
método para mudar a seção do funcionário, não seria necessário definir um método igual para a classe
Gerente. Entretanto, quando eu invocasse o método Gerente.musaSecao(nova_secao), o objeto saberia
como se comportar, pois ele herdou essa “sabedoria” de sua superclasse.
Nota: Como todos os objetos definidos são subclasses de Object, todas as classes que usamos ou
definimos, por mais simples que sejam, tem certas capacidades herdadas desta classe. Para
maiores detalhes, veja a API.
45
Programação Orientada a Objeto com JAVA
import java.io.DataInputStream;
public class Le {
46
Programação Orientada a Objeto com JAVA
47
Programação Orientada a Objeto com JAVA
7. Exceções em JAVA
A elaboração de programas complexos, em Java, o desenvolvimento das classes e interfaces e as
descrições de seus métodos não terão definidos ainda o comportamento completo de seus objetos.
Assim, uma interface descreve a maneira normal de se utilizar um objeto e não inclui qualquer caso
especial ou excepcional. Na verdade, o compilador nada pode fazer para tratar estas condições
excepcionais além de enviar esclarecedores avisos e mensagens de erro, caso um método seja utilizado
incorretamente.
Em JAVA, a utilização de exceções permite manipular as condições excepcionais do programa,
tornando o código normal, não excepcional, mas simples e fácil de ser lido. Assim, uma exceção é um
objeto que é uma instância da classe Throwable.
Como exceções são instâncias de uma classe, elas podem ser hierarquias no sentido de poderem
descrever de uma forma natural o relacionamento entre os diferentes tipos de exceções. As classes
java.lang.erros e java.lang.exceptions são filhas da classe Throwable. Quando se sabe que no método há um
tipo particular de erro ou exceção, supõe-se que o próprio programador trate a exceção através da
cláusula throws, alertando explicitamente os potenciais usuários daquele método sobre tal possibilidade.
48
Programação Orientada a Objeto com JAVA
49
Programação Orientada a Objeto com JAVA
Inicialmente as interfaces gráficas em Java eram geradas através do AWT (Abstract Window
Toolkit). Porém os componentes do AWT apresentam uma deficiência considerada um tanto quanto
séria pelos programadores devido ao fato de sua aparência depender da plataforma (S.O.) onde está
sendo executada a aplicação. Isto causa uma restrição na utilização de seus recursos devido à
dependência com relação à plataforma para os componentes oferecidos; sem contar com alguns “bugs”
e incompatibilidades que existe entre estas plataformas.
O pacote SWING surgiu para contornar as deficiências apresentadas pelo AWT. Ele faz parte
do JFC (Java Foundation Classes) e oferece uma interface mais rica em quantidade e qualidade de
componentes. Estes são “leves” e independem de plataforma. Trata-se de uma das mais completas
bibliotecas gráficas já criada.
50
Programação Orientada a Objeto com JAVA
Container
Window
JDialog JFrame
Figura 1 - Hierarquia das subclasses de Container
• Window: Objeto genérico de janela sem bordas e sem barras de menu
• Frame: Janela com quadro: apresentando título, borda, menus e controles
• Dialog: Janelas secundárias que implementam caixas de diálogo com o usuário (modal e não modal)
• JFrame: janela principal de uma aplicação; contém um painel raiz que gerencia o seu interior
(JrootPane): apresenta painel de conteúdos, barra de menus (JMenuBar) opcional; os componentes
atômicos são sobrepostos no painel de conteúdos; o gerenciador de design (layout manager) são
também são sobrepostos no painel de conteúdo.
• JDialog: é uma especialização de Dialog
• JOptionPane: janelas para entrada de dados ou para exibição de mensagens de erro ou advertência.
• JFileChooser: janela para selecionar arquivos de forma interativa.
JComponent
51
Programação Orientada a Objeto com JAVA
52
Programação Orientada a Objeto com JAVA
GridLayout Redimensiona os componentes para o mesmo tamanho e exibe-os numa tabela com
número de linhas e colunas especificadas.
Construtor:
• GridLayout (int linhas, int colunas)
• Por exemplo: setLayout(new GridLayout(2,3);
Se não incluir o nro de linhas e colunas a célula aparecerá vazia
BorderLayout Divide o recipiente em cinco zonas: norte (NORTH), sul (SOUTH), leste (EAST),
oeste (WEST) e centro (CENTER)
Construtor:
• BorderLayout()
• Por exemplo: setLayout(new BorderLayout());
add (new JTextArea(20,60), BorderLayout.CENTER);
add (new JButton(“OK”), BorderLayout. SOUTH);
53
Programação Orientada a Objeto com JAVA
import javax.swing.*;
class Exemplo1 extends JFrame{
public Exemplo1(){
setTitle("Primeiro Quadro");
setSize(400, 200);
}
public static void main(String[] args){
JFrame frame = new Exemplo1();
frame.setVisible(true);
}
}
54
Programação Orientada a Objeto com JAVA
55
Programação Orientada a Objeto com JAVA
informações gerados em resposta a determinadas ações do usuário. Eventos também podem ser
gerados em resposta a modificações do ambiente – por exemplo, quando uma janela da applet é coberta
por outra janela.
Um evento sempre é gerado por um componente chamado fonte (source).
Um ou mais objetos tratadores de eventos (listeners) podem registrar-se para serem notificados
sobre a ocorrência de eventos de um certo tipo sobre determinado componente (source).
Tratadores de eventos ou listeners podem ser objetos de qualquer classe, entretanto devem
implementar a interface correspondente ao(s) evento(s) que deseja tratar.
Evento Descrição
ActionListener Eventos de ação como o clique do mouse sobre um botão ou acionamento da
barra de espaço sobre o elemento selecionado.
AdjustmentListener Eventos de ajuste que ocorre quando o componente está sendo ajustado, por
exemplo, como o ajuste de uma barra de rolagem.
56
Programação Orientada a Objeto com JAVA
FocusListener Eventos de foco, gerados quando o componente recebe ou perde o foco, por
exemplo, quando uma caixa de textos recebe ou perde o foco.
ItemListener Eventos gerados quando o item selecionado de uma lista é mudado, por
exemplo, quando o usuário escolhe um item de um componente List ou Combo.
KeyListener Refere-se ao evento do teclado, que ocorrem quando uma tecla é pressionada,
quando é solta etc.
MouseListener Os eventos gerados pelo mouse. Por exemplo, quando ele é clicado, quando
entra ou sai da área de um componente.
MouseMotionListener Refere-se a eventos do mouse, gerados pela movimentação dele sobre um
componente.
WindowListener Refere-se a eventos de janela, gerados quando uma janela é maximizada,
minimizada etc.
ComponentListener Refere-se a qualquer componente de uma janela, gerado quando o componente
torna-se visível, torna-se oculto, é movido ou redimensionado.
As interfaces para tratamento de evento das AWT (pacote java.awt.event) são apresentadas a
seguir com seus respectivos métodos (chamados conforme o tipo de evento).
57
Programação Orientada a Objeto com JAVA
58
Programação Orientada a Objeto com JAVA
59
Programação Orientada a Objeto com JAVA
}
}
}
O primeiro passo é definir uma classe receptora. Esta classe receptora implementa uma
interface do tipo de evento que se deseja tratar (por exemplo, ActionListener, KeyListener,
MouseListener, ...)
class trataAcao implements ActionListener { // trata o clique do mouse sobre
//um componente
...
}
O segundo passo é programar os métodos que serão utilizados em função do evento ocorrido.
Convém salientar que mais de um evento pode ser tratado pela classe receptora.
class trataAcao implements ActionListener { // trata o clique do mouse sobre
//um componente
public void actionPerformed (ActionEvent evento){
JButton botao = (JButton) evento.getSource();
botao.setText("Botão acionado ");
}
}
O terceiro passo é fazer com que o componente desejado fique em alerta para o acontecimento
dos eventos. Para isso, devemos adicionar a classe tratadora do evento ao componente em questão.
...
trataAcao trataBotao = new trataAcao();
bt.addActionListener(trataBotao);
...
JButton botao = (JButton) evento.getSource();
botao.setText("Botão acionado ");
60
Programação Orientada a Objeto com JAVA
janela.setVisible(true);
}
class trataAcao implements ActionListener {
public void actionPerformed (ActionEvent evento){
JButton botao = (JButton) evento.getSource();
if (botao.equals(btOla)) // verifica se foi o botão Ola
legenda.setText("Botão acionado: OLA");
else legenda.setText("Botão acionado: TCHAU");
}
}
}
61
Programação Orientada a Objeto com JAVA
62
Programação Orientada a Objeto com JAVA
63
Programação Orientada a Objeto com JAVA
Clique o botão direito do mouse sobre o componente JButton. Um menu será exibido; na
opção Events selecione actionPerformed. O código para o tratamento do evento é gerado
automaticamente.
Dentro do método actionPerformed que foi gerado inclua o seguinte código:
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub
// actionPerformed()
getJTextArea.setText(“Alo Mundo!”); //código digitado pelo programador
}
Já podemos executar a aplicação (veja a figura 16). Analise todo o código gerado para
compreender como o Visual Editor trabalha.
64
Programação Orientada a Objeto com JAVA
9. Introdução ao JDBC
SQL é uma linguagem utilizada para criar, manipular, examinar e gerenciar bancos de dados
relacionais. Devido à SQL ser uma linguagem de aplicação específica, uma simples declaração pode ser
muito expressiva e pode iniciar ações de alto nível, como ordenar e combinar dados. A SQL foi
unificada em 1992, de forma que um programa poderia comunicar-se com a maioria de sistemas de
banco de dados sem ter que mudar os comandos de SQL. Infelizmente, deve-se conectar a um banco
de dados antes de enviar comandos SQL, e cada vendedor de banco de dados tem uma interface
diferente, como também extensões diferentes de SQL.
ODBC, uma interface baseada em C para banco de dados baseados em SQL, provê uma
interface consistente para comunicar-se com um banco de dados e para acessar o meta banco de dados
(informações sobre o sistema de banco de dados de um vendedor, como os dados são armazenados, e
assim por diante). Os vendedores individuais provêem drivers específicos ou “bridges” para o sistema
de administração de banco de dados particular. Por conseguinte, graças a ODBC e SQL, pode-se
conectar a um banco de dados e pode-se manipulá-lo de um modo padrão. Não é nenhuma surpresa
que, embora ODBC tenha começado como um padrão para PC, se tornou quase um padrão de
indústria.
JDBC (Java Data Base Connector) é uma API Java que permite acessar banco de dados através
de comandos SQL (Structured Query Language).
JDBC representa a definição de uma API para acesso, através da linguagem Java, a Sistemas
Gerenciadores de Banco de Dados. Isto permite que através da API JDBC um programa Java acesse o
banco de dados independente do SGBD, desde que exista a implementação do driver JDBC para o
SGBD utilizado. Desta forma, a linguagem Java fornece independência de plataforma e JDBC fornece
independência de SGBD.
JDBC representa uma interface de baixo nível fornecendo mecanismos para executar setenças
sql em bancos de dados relacionais, servindo como base para o desenvolvimento de interfaces de níveis
mais alto.
SQL é uma linguagem padrão, mas nem tanto assim, pois há variações consideráveis entre
SGBDs, a maioria delas, relacionadas aos tipos de dados, dessa forma JDBC defini um conjunto de
tipos genéricos na classe java.sql.Types. Em relação às divergências dos comandos SQLs, JDBC
permite que qualquer setença SQL seja enviada ao SGBD, sendo que caso o SGBD utilizado não
suporte tal setença uma SQLException será lançada.
JDBC fornece também o recurso de obter metadados, através da classe
DatabaseMetadata, sobre o banco de dados em uso, dessa forma é possível que a aplicação faça
ajustes em relação a características do SGBD em uso.
Para que um programa Java acesse um SGBD com JDBC o driver JBDC do SGBD
(implementado pelo fabricante do SGBD) a ser utilizado deve está disponível.
65
Programação Orientada a Objeto com JAVA
Esta API inclui uma estrutura por meio da qual drivers podem ser instalados dinamicamente para
acessar diferentes fontes de dados.
Suas classes mais importantes são:
• DriverManager: gerencia o acesso ao JDBC
• Connection: mantém uma sessão DBMS
• Statement: permite a execução de comandos SQL (query ou update)
• ResultSet: armazena o resultado de uma consulta SQL
9.1.1. DriverManager
A classe DriverManager provê um serviço básico para gerenciar um conjunto de drivers JDBC.
Como parte de sua inicialização, a classe DriverManager tenta carregar classes “driver” referenciadas
pelo sistema “jdbc.driver”. Isto permite que o usuário customize drivers JDBC utilizados por suas
aplicações.
Uma vez as classes “drivers” estejam carregadas e registradas com a classe de DriverManager,
eles estão disponíveis para estabelecer uma conexão com um banco de dados. Quando um pedido para
uma conexão é feito com uma chamada ao método de DriverManager.getConnection, o DriverManager
testa cada driver para ver se pode estabelecer uma conexão.
O código a seguir é um exemplo do que é necessário para estabelecer uma conexão com um
driver como o JDBC-DRIVER.
Class.forName("jdbc.odbc.JdbcOdbcDriver"); //loads the driver
String url = "jdbc:odbc:meuBD";
Connection con = DriverManager.getConnection(url, "userID", "passwd");
9.1.2. Connection
Um objeto Connection representa uma conexão com um banco de dados. Uma sessão de
conexão inclui os comandos SQL que são executados e os resultados que são devolvidos sobre aquela
conexão. Uma única aplicação pode ter uma ou mais conexões com um único banco de dados, ou pode
ter conexões com muitos bancos de dados diferentes.
Um usuário pode adquirir informação sobre o banco de dados de um objeto de Conexão
invocando o método de Connection.getMetaData. Este método devolve um objeto de
DatabaseMetaData que contém informação sobre as tabelas do banco de dados, a gramática SQL que
ele suporta, suas “stored procedures”, as capacidades desta conexão, e assim por diante.
No exemplo do código anterior, o objeto con representa uma conexão com a fonte de dados
“meuBD” que pode ser utilizado para criar e executar comandos SQL.
9.1.3. Statement
Um objeto Statement é utilizado para passar comandos SQL ao sistema de banco de dados para
o mesmo seja executado.
Através de um objeto Connection, chama-se sobre ele o método createStatement() para obter
um objeto do tipo Statement:
Class.forName(“jdbc.odbc.JdbcOdbcDriver”); //carrega o driver
String url = “jdbc:odbc:meuBD”;
Connection con = DriverManager.getConnection(url, “userID”, “passwd”);
Statement stmt = con.createStatement
Uma vez criado o objeto Statement, os comandos SQL podem ser passados através dos
métodos:
66
Programação Orientada a Objeto com JAVA
9.1.4. ResultSet
A classe ResultSet provê acesso a uma tabela de dados através da execução de um objeto
Statement (executeQuery).
Um objeto ResultSet contém o resultado da execução de um comando SELECT. Em outras
palavras, contém as linhas que satisfazem às condições da consulta. Os dados armazenados em um
objeto de ResultSet é recuperado por um conjunto de métodos "get" que permitem acesso às várias
colunas da linha atual. O método de next() do objeto ResultSet é usado para mover à próxima linha.
A forma geral de um objeto ResultSet é uma tabela com títulos de coluna e os valores
correspondentes devolvidos por uma consulta. Por exemplo, se o comando SQL é SELECT a, b, c
FROM Table1, seu resultado poderá ter a forma seguinte:
a b c
---------- ------------ -----------
12345 Cupertino 2459723.495
83472 Redmond 1.0
83492 Boston 35069473.43
Os métodos para recuperação dos dados capturados pelo objeto ResultSet são:
Método Tipo de dados SQL92
getInt() integer
67
Programação Orientada a Objeto com JAVA
try{
//Estabelece o driver de conexão: jdbc-odbc
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//Realiza a conexão com o banco de dados
Connection con = DriverManager.getConnection (url, "", "");
//Cria o objeto Statement para execução de comandos SQL
Statement stmt = con.createStatement();
//Executa a query1 - INSERT
int resultado = stmt.executeUpdate(query1);
//Executa a query2 – INSERT
resultado = stmt.executeUpdate(query2);
//Executa a query3 – INSERT
resultado = stmt.executeUpdate(query3);
68
Programação Orientada a Objeto com JAVA
• altere o exemplo de forma que o usuário possa interagir com o programa; crie um menu e
implemente as operações para inserir, consultar, excluir e atualizar os registro da tabela produto.
69
Programação Orientada a Objeto com JAVA
Tabela CredorDevedor
Coluna Tipo Chave Extra
cod_CredorDevedor int(4) unsigned PRI auto_increment
nome char(40)
endereco char(40)
bairro char(30)
cidade char(30)
estado char(2)
telefone char(15)
70
Programação Orientada a Objeto com JAVA
Tabela Natureza
Coluna Tipo Chave Extra
cod_Natureza int(2) unsigned PRI auto_increment
desc_natureza char(60)
O SGBD utilizado para o manter o banco de dados será o MySQL. Para realizar a conexão com
o SGBD é necessário o driver mysql.jdbc.Driver, que permitirá acesso direto ao banco de dados.
10.1. A Classe BD
Para realizar o acesso ao banco de dados utilizaremos uma classe específica que se
responsabilizará em:
• Realizar a conexão e fechar a conexão com o banco de dados;
• Realizar consultas (SELECT) retornando um objeto ResultSet;
• Realizar atualizações (INSERT, UPDATE, DELETE).
• Monitorar erros que eventualmente possam ocorrer durante a execução das operações anteriores.
O código fonte é exibido no quadro a seguir. Analise-o para entender o seu funcionamento;
veja os comentários deixados para os métodos.
/*
* Created on 29/08/2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Adriano
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.sql.*;
71
Programação Orientada a Objeto com JAVA
72
Programação Orientada a Objeto com JAVA
return this.erro;
}
/* Método mensagem: retorna o valor do atributo mensagem
Retorno: Mensagem sobre um possível erro que possa ter ocorrido
durante a realização de uma operação
*/
public String mensagem(){
return this.msg;
}
}
/**
* @author Adriano
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.util.*;
import java.text.*;
public class Formata
{ /*Método: getDigitos
Parâmetro: uma String contendo um valor numérico
Retorno: uma String contendo somente os dígitos numéricos, todos os
demais caracteres são eliminados
*/
private static String getDigitos(String d){
//elimina todos os caracteres que não sejam dígitos numéricos
//da string passada como parâmetro
String res="";
int l=d.length();
if (!d.equals("null")){
for (int i=0; i<l; i++){
if(d.charAt(i)=='0')
res=res+d.charAt(i);
else if(d.charAt(i)=='1')
res=res+d.charAt(i);
else if(d.charAt(i)=='2')
res=res+d.charAt(i);
else if(d.charAt(i)=='3')
res=res+d.charAt(i);
else if(d.charAt(i)=='4')
res=res+d.charAt(i);
else if(d.charAt(i)=='5')
res=res+d.charAt(i);
else if(d.charAt(i)=='6')
73
Programação Orientada a Objeto com JAVA
res=res+d.charAt(i);
else if(d.charAt(i)=='7')
res=res+d.charAt(i);
else if(d.charAt(i)=='8')
res=res+d.charAt(i);
else if(d.charAt(i)=='9')
res=res+d.charAt(i);
}//for
}//if
return res;
}
/*Método: dataSQL
Parâmetro: uma String contendo uma data capturada do formulario
Retorno: uma String contendo uma data convertida para o formato aceito
pelo banco de dados
*/
public static String dataSQL(String d){
//converte a string capturada no formulario
// para um formato que o banco de dados aceite como data
String res=getDigitos(d);
if (res.equals(""))
res="null";
else {
res="'"+
res.substring(2,4)+"/"+
res.substring(0,2)+"/"+
res.substring(4,8)+
"'";
}
return res;
}
/*Método: dataSQL
Parâmetro: uma String contendo uma data capturada do banco de dados
Retorno: uma String contendo uma data convertida para o formato para
ser exibida no formulário
*/
public static String dataSTR(String d){
//converte a string capturada no banco de dados
//para ser colocada no formulário
String res=getDigitos(d);
if(!res.trim().equals("")){
res=res.substring(6,8)+"/"+
res.substring(4,6)+"/"+
res.substring(0,4);
}//if
return res;
}
/*Método: dataSQL2
Parâmetro: uma String contendo uma data capturada do formulario
Retorno: uma String contendo uma data convertida para o formato para
comparada com uma data armazenada no banco de dados
*/
public static String dataSQL2(String d){
//converte a data capturada no formulário para um
//formato que possa ser comparado com uma data do banco de dados
String res=getDigitos(d);
if(!res.trim().equals("")){
res="'"+res.substring(4,8)+"-"+
res.substring(2,4)+"-"+
res.substring(0,2)+"'";
}//if
74
Programação Orientada a Objeto com JAVA
return res;
}
/*Método: flutuante
Parâmetro: uma String contendo um valor de ponto flutante capturada do
formulário
Retorno: uma String contendo uma valor ponto flutuante para ser
armazenada no banco de dados (troca o a vírgula pelo ponto)
*/
public static String flutuante(String f){
String res="";
int l=f.length();
for (int i=0; i<l; i++){
if(f.charAt(i)=='0')
res=res+f.charAt(i);
else if(f.charAt(i)=='1')
res=res+f.charAt(i);
else if(f.charAt(i)=='2')
res=res+f.charAt(i);
else if(f.charAt(i)=='3')
res=res+f.charAt(i);
else if(f.charAt(i)=='4')
res=res+f.charAt(i);
else if(f.charAt(i)=='5')
res=res+f.charAt(i);
else if(f.charAt(i)=='6')
res=res+f.charAt(i);
else if(f.charAt(i)=='7')
res=res+f.charAt(i);
else if(f.charAt(i)=='8')
res=res+f.charAt(i);
else if(f.charAt(i)=='9')
res=res+f.charAt(i);
else if(f.charAt(i)==',')
res=res+".";
}//for
if (res.equals(""))
res="0";
return res;
}
/*Método: flutuante
Parâmetro: uma String contendo um valor monetário capturada do banco de
dados
Retorno: uma String contendo convertida para o formato moeda incluindo o
cifrão para ser exibida no formulário
*/
public static String moeda(String m){
//converte uma string capturada do banco de dados
//para o formato moeda para ser colocada no formulario
String res;
Locale local=new Locale("Pt", "Br");
NumberFormat nf;
DecimalFormat df=null;
if (m.equals(""))
m="0.00";
res=m;
nf=NumberFormat.getCurrencyInstance(local);
df=(DecimalFormat) nf;
return df.format(Double.parseDouble(res));
}
/*Método: flutuante
75
Programação Orientada a Objeto com JAVA
Menu
Natureza 76
Registrar
Área de Trabalho
Java Beans
Propriedades
77
Programação Orientada a Objeto com JAVA
78
Programação Orientada a Objeto com JAVA
Uma vez implementado a barra de menus, devemos implementar os formulários para ligá-los a
cada opção do menu.
JTextField
JLabel
JComboBox
JButton
Figura 28 – Formulário de Cadastro do Devedor Credor
Nomeie os componentes da seguinte forma:
• JTextField do código: tfCodigo
• JTextField do nome: tfNome
• JTextField do endereço: tfEndereco
• JTextField do bairro: tfBairro
• JTextField da cidade: tfCidade
• JTextField do telefone: tfTelefone
• JComboBox do estado: cbEstado
79
Programação Orientada a Objeto com JAVA
...
80
Programação Orientada a Objeto com JAVA
81
Programação Orientada a Objeto com JAVA
O botão Limpar quando acionado deve apagar todos os campos do formulário. Neste caso,
programaremos o método actionPerformed2.
Clique sobre o botão direito do mouse sobre o botão Limpar do formulário, um menu será
ativado: selecione Events-> actionPerformed; o código para o tratamento do evento será gerado
automaticamente. Complemente este código programando o trecho que aparece em negrito no quadro
a seguir.
private JButton getBtLimpar() {
if (btLimpar == null) {
btLimpar = new JButton();
btLimpar.setLocation(226, 197);
btLimpar.setSize(80, 24);
btLimpar.setText("Limpar");
btLimpar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-
//generated Event stub actionPerformed()
tfCodigo.setText("");
tfNome.setText("");
tfEndereco.setText("");
tfBairro.setText("");
tfTelefone.setText("");
cbEstado.setSelectedIndex(-1);
}
});
}
return btLimpar;
}
Para o componente JComboBox (cbEstado) o índice deve ser “setado” para –1 de forma que
nenhuma sigla seja exibida.
2
A diferença entre o actionPerformed e o mouseClicked é que no actionPerformed botão poderá ser acionado tanto
pelo mouse (clicando sobre o botão) como pressionando a “barra de espaços” do teclado estando o foco sobre o botão.
82
Programação Orientada a Objeto com JAVA
83
Programação Orientada a Objeto com JAVA
"Erro", JOptionPane.ERROR_MESSAGE);
}//catch
}//else
}
});
}
return tfCodigo;
}
Agora vamos programar o botão Salvar. Para tanto, clique o botão direito do mouse sobre o
respectivo botão no formulário e no menu selecione Events->actionPerformed; o código para o tratamento
do evento será gerado automaticamente. Complemente este código programando o trecho que aparece
em negrito no quadro a seguir. Lembrando que é necessário realizar a conexão com o banco de dados e
na seqüência uma consulta para verificar se o registro já se encontra cadastrado. Em caso afirmativo,
deverá ser realizada a atualização do endereço, bairro, cidade, estado e telefone (UPDATE), do
contrário um novo registro deverá ser inserido (INSERT).
private JButton getBtSalvar() {
if (btSalvar == null) {
btSalvar = new JButton();
btSalvar.setLocation(22, 197);
btSalvar.setSize(80, 24);
btSalvar.setText("Salvar");
btSalvar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event
// stub actionPerformed()
if (!bd.conectaBD())//realiza a conexão com o banco de dados
JOptionPane.showMessageDialog(null, bd.mensagem(),
"Erro", JOptionPane.ERROR_MESSAGE);
else{//consulta o registro / se existir exibir os dados
String codigo=tfCodigo.getText();
String nome=tfNome.getText();
String endereco=tfEndereco.getText();
String bairro=tfBairro.getText();
String cidade=tfCidade.getText();
String estado=String.valueOf(cbEstado.getSelectedItem());
String telefone=tfTelefone.getText();
String consulta="select * from CredorDevedor where " +
"cod_credordevedor="+tfCodigo.getText();
ResultSet r=bd.consulta(consulta);
try{
if(r.next()){//registro já existe então atualiza
String atualiza="update CredorDevedor set endereco='"+
endereco+"', "+" bairro='"+bairro+
"', cidade='" +cidade+"', "+" estado='"+
estado+"', telefone='"+telefone+"' where "+
" cod_credordevedor=" + tfCodigo.getText();
if (bd.atualiza(atualiza)){
tfCodigo.setText("");
tfNome.setText("");
tfEndereco.setText("");
tfBairro.setText("");
tfCidade.setText("");
cbEstado.setSelectedIndex(-1);
tfTelefone.setText("");
}else JOptionPane.showMessageDialog(null, bd.mensagem(),
"Erro", OptionPane.ERROR_MESSAGE);
84
Programação Orientada a Objeto com JAVA
Na seqüência a programação do botão Excluir deve ser gerada clicando o botão direito do
mouse sobre o respectivo botão e selecionando a opção Events->actionPerformed. Para o método que
realiza o tratamento do evento programe o código que está em negrito no quadro a seguir. Realize a
conexão com o banco de dados e execute o comando de exclusão. Após a operação ser realizada com
sucesso limpe o formulário. Caso contrário exiba uma mensagem de erro.
private JButton getBtExcluir() {
if (btExcluir == null) {
btExcluir = new JButton();
btExcluir.setLocation(124, 197);
btExcluir.setSize(80, 24);
btExcluir.setText("Excluir");
btExcluir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated
// Event stub actionPerformed()
String codigo=tfCodigo.getText();
if (!bd.conectaBD())//realiza a conexão com o banco de dados
JOptionPane.showMessageDialog(null, bd.mensagem(),
"Erro", JOptionPane.ERROR_MESSAGE);
else{//excluir o registro
String exclui="delete from CredorDevedor where "+
"cod_credordevedor="+codigo;
if(bd.atualiza(exclui)){
tfCodigo.setText("");
tfNome.setText("");
tfEndereco.setText("");
tfBairro.setText("");
tfCidade.setText("");
cbEstado.setSelectedIndex(-1);
tfTelefone.setText("");
}else JOptionPane.showMessageDialog(null, bd.mensagem(),
"Erro", JOptionPane.ERROR_MESSAGE);
}
}
});
}
return btExcluir;
85
Programação Orientada a Objeto com JAVA
O botão Sair deve ser programado para fechar o formulário em questão adicione o método
actionPerformed e inclua o código como exibido no quadro a seguir.
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub
// actionPerformed()
setVisible(false);
}
Botões para
abrir janelas
de consulta
86
Programação Orientada a Objeto com JAVA
87
Programação Orientada a Objeto com JAVA
Após montar o formulário, é necessário declarar como atributos da classe um objeto da classe
BD – para acessar o banco de dados, e um objeto JTextField – para manipular o campo código do
Credor/Devedor no formulário de “Registrar Contas” (veja o quadro a seguir).
public class ConsultaCredorDevedor extends JFrame {
Na seqüência, crie um método consultar (sugestão inclua no final da classe) que recebe como
parâmetro um objeto JTextField, instancia o objeto bd, e inicializa o atributo código. Este método que
será chamado pelo formulário “Registrar Contas” para iniciar a consulta (veja quadro a seguir).
88
Programação Orientada a Objeto com JAVA
consultaTabela();
}
});
}
...
O botão Selecionar deve capturar o código de uma linha de registro selecionada e colocá-lo no
formulário “Registrar Contas”. Programe o método ActionPerformed para este botão, conforme
exibido no quadro a seguir.
private JButton getBtSelecionar() {
if (btSelecionar == null) {
btSelecionar = new JButton();
btSelecionar.setLocation(36, 233);
btSelecionar.setSize(95, 24);
btSelecionar.setText("Selecionar");
btSelecionar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated
//Event stub actionPerformed()
//obtem a linha do registro selecionado
int linha=jTable.getSelectedRow();
//captura o valor da coluna ZERO da linha selecionada
// e exibe no componente JTextField do formulário “Registrar Contas”
89
Programação Orientada a Objeto com JAVA
codigo.setText(""+jTable.getValueAt(linha,0));
//fecha o formulário de consulta
setVisible(false);
}
});
}
return btSelecionar;
}
Sugestão para exercício: Implemente a janela de consulta para a Natureza dando lhe o nome
de ConsultaNatureza, basicamente a única diferença está na tabela do banco de dados que é
consultada e os campos que são manipulados. Pense na possibilidade de se criar uma janela de consulta
genérica.
Observe no código que o objeto JTextField referente ao código do Credor Devedor é passado
como parâmetro. Em se tratando de objetos, a passagem de parâmetro se comporta como se fosse por
referência, ou seja, todas alterações realizadas no parâmetro em questão se refletem no objeto ao qual
está referenciado.
Implemente a chamada da janela de consulta de Natureza seguindo os mesmos procedimentos.
90
Programação Orientada a Objeto com JAVA
91
Programação Orientada a Objeto com JAVA
92
Programação Orientada a Objeto com JAVA
93
Programação Orientada a Objeto com JAVA
Uma vez definido o layout do formulário programe a sua ligação com a respectiva opção do
menu no formulário principal (frmPrincipal). Agora experimente executa-lo. O formulário de consulta
deve ficar como exibido na figura 43.
94
Programação Orientada a Objeto com JAVA
private BD bd = null;
private JPanel jContentPane = null; // @jve:decl-index=0:visual-
//constraint="10,351"
private JTabbedPane jTabbedPane = null;
...
95
Programação Orientada a Objeto com JAVA
Para realizar esta programação estamos supondo que você já implementou a tela de consulta à
natureza e a chamou de “ConsultaNatureza”.
Vamos programar agora o botão para realizar a devida consulta (btConsultar). Novamente,
clique sobre o respectivo componente na janela Java Beans com o botão direito do mouse e selecione
actionPerformed no menu Events. Programe a chamada do método consulta (este método ainda deve
ser implementado) como exibido no quadro a seguir.
private JButton getBtCosultaNatureza() {
if (btCosultaNatureza == null) {
btCosultaNatureza = new JButton();
btCosultaNatureza.setLocation(new java.awt.Point(186,15));
btCosultaNatureza.setText("...");
btCosultaNatureza.setSize(new java.awt.Dimension(26,24));
btCosultaNatureza.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated
//Event stub actionPerformed()
this.consulta(1); //1 – indica consulta por natureza
}
});
}
return btCosultaNatureza;
}
O método consulta ao qual nos referenciamos no quadro anterior é responsável por montar,
executar e exibir o resultado da consulta em função do tipo da consulta (por natureza, por
credor/devedor ou por data). O parâmetro inteiro passado para o método é que determina qual dessas
consultas será realizada. O método em questão é exibido no quadro a seguir.
private void consulta (int tipo){
//tipo: 1 - consulta por natureza
// 2 - consulta por credor devedor
// 3 - consulta por data
String consultar=consultar="select c.nro_conta, c.data_venc, c.valor_devido, "
+" c.tipo, n.desc_natureza, cd.nome from conta as c, natureza as n, credordevedor as cd "
+" where c.cod_natureza=n.cod_natureza and c.cod_credordevedor=cd.cod_credordevedor and ";
String cabecalho[]={"Nro", "Data Venc", "Valor", "Tipo", "Natureza", "Credor/Devedor"};
int linhas=0;
int colunas=0;
//monta o restante da consulta em função de seu tipo
switch(tipo){
case 1:consultar=consultar+"c.cod_natureza="+tfCodNatureza.getText();
break;
case 2:consultar=consultar+"c.cod_CredorDevedor="+tfCodCredorDevedor.getText();
break;
case 3:consultar=consultar+"c.data_venc>="+Formata.dataSQL2(tfDataInicial.getText())+
" and c.data_venc<="+Formata.dataSQL2(tfDataFinal.getText());
}//switch
if (!bd.conectaBD()) //realiza a conexão com o banco de dados
JOptionPane.showMessageDialog(null, bd.mensagem(), "Erro", JOptionPane.ERROR_MESSAGE);
else{ //consulta o registro / se existir exibir os dados
ResultSet r=bd.consulta(consultar);
if (r!=null){
try{//TRY UM
if (r.next()){
r.last(); // vai para o último registro
linhas=r.getRow(); //obtem a posição do último registro
r.first(); //volta para o primeiro registro
colunas=r.getMetaData().getColumnCount(); //obtem nro de colunas da consulta
String tabela[][]=new String[linhas][colunas]; //cria matriz
int i=0;
do{
for(int j=1;j<=colunas;j++)//carrega a matriz com os dados da
//consulta
try{
//inclui os dados da consulta convertendo para um formato adequado
switch(j){
//converte a data
case 2: tabela[i][j-1]=Formata.dataSTR(r.getString(j)); break;
//converte valor monetário
case 3: tabela[i][j-1]=Formata.moeda(r.getString(j)); break;
96
Programação Orientada a Objeto com JAVA
Programe os demais consultas. Para a consulta por Credor Devedor programe a abertura da
janela de consulta Credor Devedor e o botão Consultar chamando o método consulta passando
parâmetro 2.
Para a consulta por Data programe o botão Consultar chamando o método consulta passando
o parâmetro 3.
97
Programação Orientada a Objeto com JAVA
Pacotes ou “Packages” é um recurso da linguagem Java que permite formar grupos de classes
relacionadas entre si de forma que elas ofereçam facilidades umas as outras. Estas classes ficam
acondicionadas numa pasta (ou dentro de uma hierarquia de pastas). Normalmente se colocam num
package classes relacionadas, construídas com um certo propósito. Sob certos aspectos os packages
reproduzem a idéia de libraries (bibliotecas) oferecidas por várias outras linguagens de programação.
Para facilitar o uso de classes existentes em diferentes pastas (construção e utilização de
packages) utiliza-se uma declaração especial para os packages, cuja sintaxe é:
import <nome do pacote>.<nome da classe>
Por exemplo:
import java.io.* // o sinal * determina que todas as classes do pacote io
//são importadas
import javax.swing.JoptionPane;
import com.mysql.jdbc.Driver
A declaração import determina que uma classe ou todas as classes (*) de um pacote estão sendo
importadas para serem utilizadas num programa. A separação por ponto(.) entre os termos indica a
hierarquia das onde as classes se encontram. Por exemplo: a classe Driver encontra-se empacotada
dentro de uma hierarquia de pastas como mostra a figura 44.
98
Programação Orientada a Objeto com JAVA
Para que os pacotes sejam encontrados pelo compilador da linguagem é necessário que a
variável de ambiente CLASSPATH referencie os caminhos onde os estes pacotes se localizam.
public class No {
99
Programação Orientada a Objeto com JAVA
Observe que o elemento da lista é do tipo Object, ou seja, pode assumir qualquer outro tipo de
objeto declarado pelo programador. Por definição todas as classes são subclasses da classe Object.
public class Pessoa {...} //ambas as declarações
public class Pessoa extends Object {...} //apresentam o mesmo efeito prático
100
Programação Orientada a Objeto com JAVA
A classe Principal é que fará o uso do pacote, portanto, nela é importado o pacote listas.
Observe que no momento em que é inserido um elemento na lista é passado como parâmetro um
objeto da classe Pessoa (ml.insere(new Pessoa("Ze", 25, "111111"));). Observe também
que o método insere programado na classe Lista possui como parâmetro um objeto da classe Object:
é perfeitamente possível realizar este tipo de atribuição, ou seja, um objeto Object pode receber um
objeto Pessoa. Aliás um objeto Object pode receber um objeto de qualquer outra classe.
Execute a aplicação em questão e veja o seu funcionamento.
//Classe Pessoa - Arquivo Pessoa.Java
public class Pessoa {//classe que representará o elemento do No
public String nome;
public int idade;
public String telefone;
//método construtor
public Pessoa(String n , int i, String f) {
nome=n;
idade=i;
telefone=f;
}
public String nome() {
return this.nome;
}
public int idade() {
return this.idade;
}
public String telefone() {
return telefone;
}
}//fim classe Pessoa
101
Programação Orientada a Objeto com JAVA
É preciso ficar atento a um detalhe no código: a primeira linha signficativa do arquivo contém
“package listas;”, isto quer dizer, que os arquivos executáveis pela JVM (arquivos .class) estarão
empacotados na pasta “agenda” . Veja a estrutura das pastas com os arquivos do pacote na figura 46.
Isto é fundamental para o funcionamento do arquivo executável jar.
• Main-Class: pacoteJar.Principal indica de onde está o método main(String[ ] args), que deverá
ser chamado pela JVM.
• Name: pacoteJar/Principal.class indica qual arquivo .class, será executado.
• Java-Bean: true indica a JVM que a opção Bean será ativada.
A corretude deste arquivo é fundamental para o correto funcionamento do seu arquivo
executável jar.
A figura 47 exibe a estrutura de pastas com seus respectivos arquivos.
102
Programação Orientada a Objeto com JAVA
Figura 47 –
Estrutura final das pastas com os arquivos
Na seqüência, passeremos à criação propriamente dita do arquivo executável jar. Para criarmos
o arquivo executável jar, é necessário abrir um console do DOS e ir até a pasta cursoJava e executar o
comando cuja sintaxe é exibido a seguir:
jar cfm <nome do arquivo>.jar manifest.txt <nome do pacote> *.*
103
Programação Orientada a Objeto com JAVA
Manifest-Version: 1.0
Created-By: 1.5.0 (Sun Microsystems Inc.)
Main-Class: listas.Principal
Java-Bean: True
Name: listas/Principal.class
104
Programação Orientada a Objeto com JAVA
• http://www.dca.fee.unicamp.br/courses/PooJava
• http://gee.cs.oswego.edu/dl/java/api
• http://java.sun.com/doc/programmer.html
• http://www.acme.com/java/software
• http://java.sun.com/java2/whatis/1996/storyofjava.html
• http://guj.com.br
• http://www.java2s.com
• CESTA, André Augusto, Tutorial: A Linguagem de Programação JAVA, Instituto de Computação
– Unicamp, Campinas, 1996 (disponível em
http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut.html, acessado em 10/10/2005)
• DAUM, Berthold; Professional Eclipse 3 for Java Developers, WROX
• DEITEL, Harvey M.; DEITEL, Paul J., Java: How to Program, 4.a Edição, Prentice Hall, 2001
• MECENAS, Ivan; Eclipe 3.0.1 – Programando com Visual Editor, Alta Books, Rio de Janeiro,
2005
105
Programação Orientada a Objeto com JAVA
Lista de Exercícios
Tomando por base o programa exemplo HelloWorld.java exibido a seguir, cometa erros e
observe como o compilador e o sistema de tempo de execução respondem aos erros cometidos. Tente
entender o significado das mensagens de erro.
public class HelloWorld {
public static void main (String args[]) {
System.out.println("Hello World!");
}
}
Tipos primitivos, controle de fluxo, entrada de dados via teclado, vetores, Strings
10. Desenvolva um programa que calcule a média aritmética e exiba o resultado para as seguintes notas:
nota 1 = 5.0, nota 2 = 3.5 e nota 3 = 9.5. Obs. crie as variáveis e faça as atribuições necessárias.
11. Desenvolva um programa que calcule e exiba a o preço de venda de um produto qualquer cujo
preço de custo é R$ 37,00 com uma percentagem para o vendedor de 12% e impostos de 26,95%,
sabendo que o preço de venda é dado pelo preço de fábrica, ao qual é adicionado o lucro do
vendedor e os impostos (ambos aplicados ao custo de fábrica).
12. Desenvolva um programa que leia através do teclado a idade e exiba a mensagem “Você é
emancipado!” caso a idade seja maior ou igual a 21, do contrário exiba “Você ainda não é
emancipado!”.
13. Desenvolva um programa que leia através do teclado o sexo (“m” ou “f”) e a altura, calcule e exiba
o seu peso ideal em função (atribuídos às respectivas variáveis), de acordo com as fórmulas:
• P/ homem – peso ideal = 72.7*.altura – 58
• P/ mulher – peso ideal = 62.1*altura – 44.7
14. Desenvolva um programa que exiba todos os números divisíveis por 3 e 4 entre 1 a 1000.
15. Desenvolva um programa que some todos os números divisíveis por 2, 5 e 7 ao mesmo tempo de 1
a 1000 e exiba o resultado.
106
Programação Orientada a Objeto com JAVA
16. Desenvolva um programa que inicialize um vetor de 10 números inteiros com seguintes números
{5, 7, 9, 11, 6, 4, 8, 16, 13, 1} e exiba os números localizados nas posições ímpares (lembre-se que
num vetor de 10 posições os índices são entre 0 e 9).
17. Desenvolva um programa que leia através do teclado um vetor de 10 valores inteiros e exiba a
soma de todos os seus elementos.
18. Desenvolva um programa que conte quantas vogais fazem parte da frase “Pos graduação em
desenvolvimento de aplicações web” e exiba este valor.
19. Desenvolva um programa que retire todas as vogais da frase “Programação Java com Eclipse” e
exiba-a novamente.
20. Desenvolva um programa que inverta a frase (as letras) do exercício anterior (primeira letra passa
ser a última, e assim sucessivamente) e exiba-a novamente.
21. Defina uma classe chamada Retangulo1. Esta classe deverá conter dois atributos (base, à qual será
atribuído o valor da base do retângulo, e a outra chamada altura, à qual será atribuída a altura do
retângulo) e três métodos:
• método construtor deve ser definido com dois parâmetros inteiros: o primeiro para receber o
valor da base e o segundo para receber o valor da altura, que devem inicializar os atributos do
objeto;
• método retornaBase deve retornar o valor da base;
• método retornaAltura deve retornar o valor da altura;
• método calculaArea deve retornar a área do retângulo, que é calculada multiplicando-se a base
pela altura.
• método calculaPerimetro deve retornar o perímetro do retângulo, que é calculado somando-
se o valor dos quatro lados do mesmo.
Defina uma segunda classe chamada Principal onde deverá ser implementado o método
main. Dentro deste método declare o objeto ret da classe Retangulo1 e crie-o atribuindo à base o
valor 5 e à altura o valor 3, por exemplo.
A saída do seu programa deverá ser:
A base do retangulo e 5.
A altura do retangulo e 3.
A area do retangulo e 15.
O perimetro do retangulo e 16.
22. Escreva uma segunda versão para o programa do exercício anterior acrescentando os métodos
exibeArea e exibePerimetro ambos sem retorno algum. Os comandos para a impressão do valor
da área do retângulo, bem como do valor do perímetro devem estar contidos nos respectivos
métodos. Altere a classe Principal para de forma que a saída gerada pela execução do programa
seja exatamente a mesma mostrada pelo exercício anterior evocando os novos métodos incluídos na
classe Retangulo.
23. Nesta terceira versão do exercício sobrecarregue o construtor da classe Retangulo (declare
novamente a mesma função) para que seja possível ao usuário fornecer os valores para a base e a
altura. Obs.: neste construtor não haverá parâmetros. A classe Principal deve ser alterada de forma
que no momento da criação do objeto o construtor a ser evocado seja exatamente o que não possui
parâmetros.
107
Programação Orientada a Objeto com JAVA
24. Nesta nova versão do exercício apenas reutilize a classe Retangulo do exercício anterior e na classe
Principal, declare dois objetos ret1 e ret2 da classe Retangulo; crie o objeto ret1 passando como
parâmetros os valores 6 e 4, respectivamente para a base e a altura; para ret2 crie o objeto sem
passar nenhum parâmetro (os valores deverão ser digitados pelo usuário). Exiba a área e o
perímetro de ret1 e ret2 utilizando os devidos métodos (exibeArea e exibePerimetro). Exiba o valor
da maior área e o valor do maior perímetro (utilize os métodos que retornam os respectivos valores
para cada objeto, compare-os e exiba o maior valor).
25. Defina uma classe chamada Media contendo dois atributos (soma e contador do tipo float) e três
métodos:
• método construtor deve inicializar os atributos com ZERO;
• método Acrescenta deve ser definido com um parâmetro do tipo float que deve somar este
valor ao atributo soma e incrementar o atributo contador;
• método MediaAtual deve retornar o valor da média atual (soma/contador);
• defina uma segunda classe chamada Principal onde deverá ser implementado o método main.
Dentro deste método declare o objeto m da classe Media e crie-o. Ative o método Acrescenta
sucessivas vezes passando como argumento os valores 3, 5, 10 e 8. Exiba o valor a média atual.
26. Implemente uma segunda versão para o exercício anterior alterando a classe Principal de forma a
permitir que o usuário possa fornecer os números para o cálculo do valor (defina um laço na
função main para permitir que o usuário decida quando finalizar a entrada dos números).
27. Implemente uma classe Conta que contenha o nome, o numero e o saldo. Estes valores deverão
ser informados pelo usuário no método construtor. Faça um método depositar e um método
retirar. O método depositar deverá receber como parâmetro o valor do depósito que deverá ser
acrescentado ao saldo. O método retirar deverá receber como parâmetro o valor da retirada e se o
saldo for suficiente o valor da retirada deverá ser subtraído e o método deve retornar true, do
contrário o método deve retornar false. O método consulta_saldo deverá retornar o valor do saldo.
Na classe Principal, implemente o método main declarando e criando o objeto cliente da
classe Conta, exiba o menu a seguir e programe as opções. Obs.: para as operações de depósito e
saque deverá ser solicitado o valor da operação antes de evocar o respectivo método.
CONTA CORRENTE
1 – Depósito
2 – Retirada
3 – Consulta Saldo
4 – Finalizar
28. Altere o exercício anterior incluindo o atributo card na classe Conta, sendo este objeto da classe
Cartao que contém como atributo a senha, os métodos
• construtor para cadastrar a senha (realizar a leitura 2 vezes da senha dentro da classe e comparar
se são idênticos);
• verifica_senha que realiza a leitura da senha, a compara com a senha armazenada e retorna
verdadeiro caso a senha seja igual ao valor lido, caso contrário exibe a mensagem “senha
incorreta” e retorna falso;
• altera_senha (que permite a alteração da senha – a nova senha deve ser digitada duas vezes e
comparada – somente após a leitura e a confirmação da senha atual).
108
Programação Orientada a Objeto com JAVA
29. Altere o exercício anterior incluindo os atributos bloqueado (do tipo boolean com valor inicial
false) e tentativas (do tipo int com valor inicial 0) na classe Cartao. O método verifica_senha deve
ser alterado para exibir a mensagem “cartão bloqueado” caso o atributo bloqueado seja true, caso
não esteja bloqueado permitir a digitação da senha, e se digitada erradamente incrementar o atributo
tentativa e que ao atingir o valor 3 deve atualizar o atributo bloqueado para true. A cada vez que a
senha for digitada corretamente o atributo tentativa deve ser “zerado”.
109
Programação Orientada a Objeto com JAVA
110
Programação Orientada a Objeto com JAVA
Na classe Principal, defina o método main declarando objeto p1 e p2 da classe Pessoa, instancie
p1 como PessoaJuridica, p2 como PessoaFisica, exiba o nome do contato da pessoa jurídica e a
cidade do pai da pessoa física.
Tratamento de Exceção
36. Implemente uma classe Principal onde dentro do método main seja daclarado um valor int e
realize a usa leitura digitando um caracter alfanumérico. Ocorrerá um erro em tempo de execução;
faça o tratamento para que a .
37. Implemente uma classe Principal onde dentro do método main haja uma laço onde seja lido dois
valores float e uma String (+, -, *, /) pelo teclado, realize a operação aritmética em função do
operador e verifique se o usuário deseja realizar outra operação. Em uma das operações realize a
divisão de um número por ZERO.
Considerando o exercício anterior, faça o tratamento de erro para a divisão por ZERO e exiba a
mensagem “divisor deve ser diferente de ZERO” caso a exceção aconteça.
111