You are on page 1of 287

i580 Java Programming

Java Programming

Um curso Infnet utilizando a metodologia NETLEARN.


-1-

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-1-

i580 Java Programming

NETLEARN ONE

-2-

NETLEARN ONE : O mtodo NETLEARN ONE foi desenvolvido pelo Infnet para que os alunos obtivessem um grau de entendimento e reteno das tecnologias ensinadas muito superior aos cursos tradicionais. Sua criao teve por base uma longa experincia no ensino de TI (Tecnologia da Informao) e um profundo estudo das necessidades e dificuldades dos alunos em sala. O mtodo no somente permite uma melhor compreenso das aulas, mas um aproveitamento superior dos conhecimentos adquiridos quando aplicados em ambientes reais de produo. Seguindo a risca as instrues de seus professores, profissionais dos mais competentes, voc vai tirar proveito total do mais eficaz mtodo de ensino-aprendizagem de tecnologias intranet/Internet disponvel hoje. O mtodo NETLEARN patenteado pelo Infnet e sua utilizao sem autorizao escrita e explcita do Infnet constitui crime previsto em lei.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-2-

i580 Java Programming

Observao Importante:
O mtodo NETLEARN visa trazer o melhor para os alunos. E ns sabemos que para se ter o melhor preciso que se tenha flexibilidade. Cada assunto tem suas caractersticas especficas. Cada curso tem suas necessidades. Por isso, nem sempre todos os mdulos do NETLEARN estaro presentes em todos os cursos.

-3-

NETLEARN: O objetivo primordial do Infnet que voc efetivamente aprenda. A utilizao da metodologia NETLEARN facilita o processo de aprendizado e aumenta a reteno do conhecimento. Entretanto, nem todas as etapas da metodologia so benficas para todos os tipos de cursos ou assuntos. A generalizao excessiva no traz benefcios para os alunos. Por isso, o Infnet no vai deixar de oferecer o melhor para voc por falta de flexibilidade.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-3-

i580 Java Programming

A Apostila
Sua apostila dividida em 2 partes:
Slides na parte de cima de cada pgina. Anotaes na parte de baixo.

Slides:
So os slides que o professor vai utilizar durante o curso.

Anotaes:
Informaes complementares, zoom no cdigo de programas e espao para voc escrever.

-4-

Slides: Os slides de sua apostila so os mesmos usados pelo professor durante o curso. Voc poder acompanhar todas as aulas atravs deles e estudar a matria posteriormente com este material. Anotaes: Abaixo dos slides, h um espao chamado de anotaes. Ele tem vrios propsitos: Conter informaes complementares ao contedo do slide, muitas vezes evitando que voc precise anotar tudo o que o professor diz em aula. Servir de referncia em tpicos mais extensos, permitindo que voc se aprofunde na matria aps o trmino do curso. Repetir o cdigo de programas, imagens e telas capturadas que ficaram muito pequeninas no slide, facilitando sua leitura e o acompanhamento das aulas. Ser um espao para voc escrever suas prprias observaes e perguntas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-4-

i580 Java Programming

Apresentaes
Professor:
Nome. E-mail. Experincia.

Alunos:
Nome. Experincia em Desenvolvimento de Sistemas. Expectativas.

-5-

Professores e colegas: Os seus professores so profissionais de comprovada experincia prtica nas tecnologias que sero ensinadas durante o curso. Voc deve ficar totalmente vontade para tirar suas dvidas. Durante o horrio de aula o professor estar a seu inteiro dispor para esclarecer quaisquer tpicos relacionados ao contedo do curso e a compartilhar sua experincia com todos os alunos. Ao final do curso voc ser responsvel por uma avaliao do professor. O Infnet lhe agradeceria se voc estivesse atento s principais caractersticas de seus professores: Disponibilidade, dedicao, ateno, cordialidade, conhecimento da matria, didtica, etc. Os seus colegas de classe so tambm uma importante fonte de conhecimento. Muitos alunos que se conhecem nos cursos do Instituto Infnet tornam-se amigos (e at scios!) e ajudam-se mutuamente nas dvidas que surgem com o uso das tecnologias aprendidas. Anotando o e-mail de seus colegas, voc poder no futuro manter bons relacionamentos.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-5-

i580 Java Programming

Informaes teis
Horrios.
Programe-se para chegar 10 minutos antes do incio da aula. O intervalo de 15 minutos.

Computadores, Mquinas Virtuais e Rede. Backup dos Exerccios.


Faa sempre backup dos exerccios em pendrive ou via webmail.

SAE Sistema de Apoio ao Ensino.


http://sae.infnet.edu.br

-6-

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-6-

i580 Java Programming

Objetivos do Curso
Apresentar e consolidar as estruturas sintticas da Linguagem Java. Concretizar os conceitos de Orientao a Objetos atravs da implementao de cdigos em Java. Permitir ao programador entender e utilizar as principais bibliotecas da Linguagem Java.

-7-

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-7-

i580 Java Programming

O Curso
UA 1 Fundamentos UA 2 Orientao a Objetos UA 3 Tratamento de Erros UA 4 Classes teis UA 5 Desenho de Telas UA 6 Estruturas de Dados Referncias 12 88 151 166 208 246 285
-8-

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-8-

i580 Java Programming

Pblico Alvo
Estudantes e profissionais que visam projetos de desenvolvimento de software orientados a objetos baseados na Linguagem Java. Profissionais de desenvolvimento de software interessados em se atualizar na Plataforma Java.

-9-

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

-9-

i580 Java Programming

Pr-requisitos
Conhecimentos Bsicos de Programao e Desenvolvimento de Software. Conhecimentos Bsicos sobre Modelagem de Dados e Bancos de Dados. Conhecimentos de Operao do Windows:
Conhecimento das principais funcionalidades do Windows e seus aplicativos. Conhecimento de operao do sistema de arquivos. Conhecimento de instalao de softwares.

- 10 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 10 -

i580 Java Programming

Atividades
O curso tem dois tipos de atividades:
Exerccios cujo objetivo fixar os conceitos aprendidos no tpico. Laboratrios que servem como complementao do aprendizado.

Para um melhor aproveitamento do curso imprescindvel a leitura do material impresso e o estudo dos gabaritos das atividades.

- 11 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 11 -

i580 Java Programming

1 - Fundamentos
Unidade de Aprendizado

- 12 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 12 -

i580 Java Programming

1 Fundamentos
Voc aprender: Introduo Linguagem Java. Variveis e Tipos de Dados. Mtodos. Operadores e Controle de Fluxo. Arrays.

- 13 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 13 -

i580 Java Programming

1.1 Introduo Linguagem Java


Bloco de Construo do Aprendizado

- 14 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 14 -

i580 Java Programming

1.1 Introduo Linguagem Java


Voc aprender: Viso Geral. Edies de Java. Mquina Virtual Java. Compilao e Execuo. Primeiro Programa. Biblioteca de Classes. Documentao. Pacotes. A Instruo import.
- 15 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 15 -

i580 Java Programming

Viso Geral
Orientada a objeto:
Modificar a regra.

Interpretada e independente de plataforma


JVM com JIT - Just in Time Compilers.

Multithreaded:
Executa, por natureza, vrios trechos de cdigo ao mesmo tempo.

Robusta e segura:
Fortemente tipada, sem acesso direto a endereos de memria evitando erros de acesso e perda de ponteiros, applets sem acesso a disco etc.

Dinmica e distribuda:
Alteraes feitas apenas nas classes pertinentes sem a necessidade de recompilao de todo o sistema.
- 16 -

A linguagem Java utiliza o paradigma de programao orientada a objetos, que facilita o trabalho do programador, pois ele consegue ver o programa em termos reais do dia-a-dia. Um objeto uma entidade que possui caractersticas (atributos) e aes associadas (mtodos). Quase tudo dentro de Java, exceo dos tipos de dados primitivos, so implementados como objetos. E mesmo estes podem ser convertidos para objetos em determinadas situaes. Java independente de plataforma, ou seja, os programas no esto restritos a um nico ambiente operacional ou mquina especfica. Assim, alcana-se uma portabilidade que poucas linguagens oferecem. Isso s possvel graas ao conceito da mquina virtual Java (JVM) que interpreta o programa e mapeia o cdigo para as instrues correspondentes na plataforma de execuo. Esse mecanismo de interpretao foi muito criticado pelos opositores da linguagem que argumentavam tornar os programas em Java mais lentos do que seus similares em C. Entretanto ele foi muito melhorado com o advento dos compiladores Just in Time (JIT Compilers), que fazem vrias otimizaes e traduzem algumas instrues para cdigo nativo. Programas em Java so multithreaded por natureza. O suporte nativo, fazendo com que partes do programa possam ser executados de forma concorrente com outras. Quem controla esse mecanismo a mquina virtual Java em conjunto com o sistema operacional. Classes podem ser carregadas dinamicamente, ou seja, durante a execuo do programa. Classes e objetos podem residir em mquinas diferentes com a utilizao de um mecanismo denominado RMI.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 16 -

i580 Java Programming

Edies de Java
JRE - Java Runtime Edition:
o prprio interpretador Java, o mnimo necessrio para executar programas em Java. Browsers instalam apenas o JRE.

Java SE - Java Standard Edition:


Tambm conhecido como JDK - Java Development Kit. composto pelo JRE, ferramentas de desenvolvimento e compilador.

Java EE - Java Enterprise Edition:


Complemento ao JDK que instala um conjunto de bibliotecas necessrias para suportar Servlets, JSP, Enterprise Beans e outras.

Java ME - Java Micro Edition:


Simplificao da linguagem usada para desenvolvimento de aplicaes para celulares, palmtops e hand-helds.

Documentao:
Fornecido separadamente. Existem verses prprias para cada especializao do JDK.
- 17 -

Existem tambm, dentro de cada verso, especializaes do JDK (Java Development Kit). Todas elas esto disponveis para download na pgina oficial do Java na Sun (http://www.java.sun.com). JRE a verso para o usurio, possui apenas as bibliotecas e ferramentas necessrias para executar um programa Java. O Java SE significa Java Standard Edition. o conjunto padro de bibliotecas e ferramentas. O Java EE significa Java Enterprise Edition, uma plataforma completa para desenvolvimento e execuo de aplicativos para WEB e distribudos. Engloba Servlets, JavaServer Pages, JavaServer Faces, Expression Language e Enterprise Beans. A Java ME (Java Micro Edition) a verso especfica para desenvolver e executar programas para dispositivos mveis como celulares e hand-helds. A documentao pode ser baixada do site do Sun ou consultada online. No site oficial existem muitos recursos para o aprendizado como artigos, tutoriais, sistemas completos de exemplo e instrues para certificao.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 17 -

i580 Java Programming

Mquina Virtual Java (JVM)


o ambiente onde os programas em Java so executados. Responsvel pela importante caracterstica de portabilidade de Java.
Cdigo compilado (bytecode) pode ser executado em outras plataformas.

Vem junto com o JDK e em alguns browsers para execuo de applets.

- 18 -

A Mquina Virtual Java (JVM) uma mquina genrica simulada via software em uma mquina real. Ela possui seu prprio conjunto de instrues, registradores, pilha de execuo, rea de memria e heap. Dessa forma, h uma diminuio no tempo de desenvolvimento dos programas. A JVM foi especificada pela Sun de forma que os programas fossem portveis de uma plataforma para outra, sem que houvesse a necessidade de reescrever ou recompilar o cdigo fonte. Logo, sua especificao no est atrelada a nenhuma plataforma de hardware especfica. Hoje j existem verses da mquina virtual Java para a maioria das plataformas de hardware. A JVM funciona da seguinte forma: 1 O cdigo fonte escrito pelo programador compilado para um formato conhecido por bytecodes, que representa as instrues de mquina para a JVM, e possuem um padro especificado pela Sun. Esses bytecodes so compactos e eficientes; 2 No momento da execuo, os bytecodes so carregados pela JVM e executados de forma interpretada. Os bytecodes so sempre os mesmos, o que muda a JVM, especfica para cada plataforma.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 18 -

i580 Java Programming

Primeiro Programa
Comentrios: // - uma nica linha. /* ...*/ - vrias linhas /** .... */ javadoc Nome da classe, tambm define o nome do arquivo.java Mtodo main( ). Ponto de entrada no sistema

1 2 3 4 5 6

// Isso um programa exemplo public class PrimeiroPrograma { public static void main (String args[]) { System.out.println(Oi mundo!); } }

{ } - chaves delimitam um bloco de comando.

Case sensitive = difere maisculas e minsculas

; - ponto-e-vrgula obrigatrio ao final de cada instruo.

Todo cdigo Java tem que estar dentro de uma classe


- 19 -

O programa acima um exemplo de uma aplicao simples feita em Java (a famosa Hello World, no h quem no conhea). Na linha 1 aparece um exemplo de comentrio de linha. Tudo o que vem a direita da // desconsiderado pelo compilador. H trs tipos de comentrio: o de linha, o comentrio de bloco, indicado por /* ... */, que pode se estender por vrias linhas, e o comentrio de documentao, indicado por /** ... */. O comentrio de documentao semelhante ao de bloco, s que ele reconhecido pela ferramenta javadoc, que vem dento do JDK e usado para gerar documentao de forma automtica. Na linha 2 comea a declarao da classe PrimeiroPrograma. Classe o elemento fundamental da linguagem Java. Em Java, praticamente tudo (com exceo dos tipos primitivos) definido dentro de classes. O fim da declarao da classe se encontra na linha 6. Toda classe aps o seu nome (no caso PrimeiroPrograma) deve conter um bloco delimitado pelas chaves. Tudo o que estiver dentro das chaves ser considerado como parte integrante da classe. Da linha 3 a linha 5 existe a declarao de um mtodo, que o equivalente em Java a funes e procedimentos das outras linguagens. Nesse caso o nome do mtodo main e os trs elementos antes do seu nome indicam a visibilidade do mtodo (public), o tipo do mtodo (static) e o tipo de resultado que o mtodo retorna (void). O que est a direita entre parnteses so as informaes que o mtodo recebe, ou seja, os parmetros. O mtodo main o ponto de entrada para a aplicao. Isso significa que o primeiro mtodo a ser procurado pela JVM ser o mtodo main. Na linha 4 est o comando que imprime uma mensagem na sada padro. Repare que toda instruo em Java deve terminar com ponto e vrgula. Uma instruo em Java pode ser dividida em vrias linhas se necessrio. Tambm podem ser includos espaos e tabulaes de modo a melhorar a compreenso do cdigo-fonte.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 19 -

i580 Java Programming

Primeiro Programa
Na linha de comando, para compilar e executar o programa temos que fazer: c:\[diretrio]>javac PrimeiroPrograma.java
Gera o arquivo .class com os bytecodes. obrigatria a colocao da extenso.

c:\[diretrio]>java PrimeiroPrograma
Chama a JVM para executar o arquivo PrimeiroPrograma.class. No deve ser colocada a extenso.

- 20 -

Para compilar a classe utilizado o programa javac, que vem com o JDK. O compilador recebe como argumento o nome da classe (ou classes) a ser compilada. Repare que o nome do arquivo .java igual ao nome da classe. Isso no ocorre por acaso. obrigatrio que o nome do arquivo .java seja igual ao da classe pblica que ele contm. Levam-se em conta letras maisculas e minsculas. Ao final da compilao ser gerado um arquivo de nome PrimeiroPrograma.class. Esse arquivo contm os bytecodes que so interpretados pela mquina virtual Java. Para executar a mquina virtual e carregar a aplicao em memria, basta executar o programa java.exe (ou javaw.exe) e passar o nome do arquivo .class como parmetro.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 20 -

i580 Java Programming

Exerccio
Crie um projeto e uma classe com o cdigo do primeiro programa. Exiba uma mensagem na tela (mude a mensagem original). Execute a classe gerada.

- 21 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 21 -

i580 Java Programming

Biblioteca de Classes
Programas Java so formados por partes chamadas classes. As classes so agrupadas em pacotes. Classes so formadas por mtodos que realizam tarefas e retornam informaes aps seu trmino. Programadores devem tirar proveito das ricas colees de classe existentes nas bibliotecas da plataforma Java.

API = Application Programming Interface


- 22 -

A plataforma Java possui bibliotecas de classes, denominadas Java Application Programming Interface ou simplesmente Java API. Estas classes oferecem diversas funcionalidades teis, tais como: funes matemticas, converses de valores, entrada e sada de dados, leitura e gravao de arquivos, tratamento de XML, comunicao em rede, formatao de datas e nmeros, manipulao de conjuntos de dados. As bibliotecas bsicas so parte integrante tanto da edio Java Standard Edition (Java SE) quanto da Java Runtime Edition (JRE) e no precisam ser baixadas em separado. As classes destas bibliotecas so utilizadas tanto no momento da compilao quanto na execuo. Em Java no existe o conceito de link-edio, portanto as bibliotecas devem estar disponveis na mquina do usurio no momento da execuo. Para indicar o local das bibliotecas Java (e outras bibliotecas de terceiros) tanto para a compilao quanto para a execuo deve ser criada a varivel de ambiente CLASSPATH. Assim, se as bibliotecas java esto em c:\java\lib e uma biblioteca externa denominada bancomoney.jar est na pasta c:\banco\lib, a varivel classpath teria o seguinte contedo: CLASSPATH=c:\java\lib;c:\banco\lib\bancomoney.jar;. O . utilizado para indicar que bibliotecas e classes que estejam na pasta da aplicao tambm devem ser consideradas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 22 -

i580 Java Programming

Documentao

Crie um atalho para a documentao no seu browser


- 23 -

A documentao do Java est disponvel para download e tambm online. Ela tem o formato apresentado na figura acima mas tambm pode ser encontrada em outros formatos no oficiais, como pdf, word e arquivo de help do Windows (.chm). A documentao deve ser escolhida de acordo com a verso e edio da plataforma Java. O site da documentao da Sun (http://java.sun.com/reference/api/) possui as seguintes documentaes: Standard Edition. Enterprise Edition. Micro Edition. Javacard. Java Web Services. XML. Outras tecnologias.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 23 -

i580 Java Programming

Pacotes
Pacote um diretrio no sistema de arquivos que contm classes que so logicamente relacionadas. Para indicar que uma classe pertence a determinado pacote, ela deve ser colocada na pasta adequada e o comando package deve indicar o nome desta pasta. Este comando nico e deve ser o primeiro do arquivo:
package nome_do_pacote;

Nomes de pacotes so escritos em letras minsculas


- 24 -

As classes em Java so organizadas em pastas ou pacotes. Estes pacotes servem para indicar tanto a localizao fsica da classe quanto seu nome dentro do sistema. O package tem seu nome usado pelo ambiente de execuo Java para gerenciar a unicidade dos identificadores declarados em um programa, atravs do mecanismo conhecido como namespace. Portanto uma classe baixada pela rede no fica no mesmo espao de memria que uma classe que tenha sido desenvolvida pelo programador. Namespace um pedao da memria que alocada pelo Java para o gerenciamento de objetos, que sero organizados dependendo da fonte do cdigo. Os nomes dos pacotes so hierrquicos e separados por pontos. comum que sejam usados letras minsculas. Os identificadores devem ser nicos em um determinado namespace, ou seja, em um mesmo pacote no podem existir classes com nomes iguais. Se a classe no declara a instruo package, a classe pertence ao package default (ou seja, um package sem nome).

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 24 -

i580 Java Programming

Alguns pacotes de classes de Java


java.lang - Java Language (no precisa de import). javax.swing Biblioteca Swing. java.awt- Abstract Windowing Toolkit. java.text Text. java.sql - Database Connectivity.

Classes so agrupadas em Pacotes


- 25 -

Alguns pacotes da edio Java SE: java.applet java.awt java.beans java.io java.lang java.math java.net java.nio java.rmi java.security java.sql java.text java.util javax.accessibility javax.activation javax.activity javax.annotation javax.crypto javax.imageio javax.jws javax.lang.model javax.management

javax.naming javax.net javax.print javax.rmi javax.script javax.security.auth javax.security.cert javax.security.sasl javax.sound.midi javax.sql javax.swing javax.tools javax.transaction javax.xml org.ietf.jgss org.omg.CORBA org.omg.CosNaming org.omg.Dynamic org.omg.DynamicAny org.omg.IOP org.omg.Messaging org.omg.PortableInterceptor org.omg.PortableServer org.omg.SendingContext org.omg.stub.java.rmi org.w3c.dom org.xml.sax

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 25 -

i580 Java Programming

Exerccio
Crie uma classe com o cdigo abaixo e faa os testes de execuo.
1 2 3 4 5 6 7 8 9 // Programa exemplo public class Exemplo02 { public static void main (String args[]) { System.out.println("Antes da mensagem"); javax.swing.JOptionPane.showMessageDialog(null, Viva Java!", "exerccio Java",1); System.out.println("Depois da mensagem"); } }

Observe que as linhas 5 e 6 so partes da mesma instruo


- 26 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 26 -

i580 Java Programming

Instruo import
Para usar classes definidas em outros packages usa-se a instruo import. Ela vem antes da declarao da classe e depois da declarao package.
import nome_do_pacote[.subpacote].nome da classe; OU import nome_do_pacote[.subpacote].*;

- 27 -

A declarao import diz ao compilador onde encontrar as classes que esto definidos em outras packages. Exemplos: import com.infnet.model.ContaCorrente; import infnet.cursos.*; Na primeira linha do exemplo, a instruo import est identificando apenas uma classe (ContaCorrente) que ser trazida para o namespace. Na segunda linha todas as classes definidas no package infnet.cursos esto acessveis. O primeiro formato o preferido pois melhora o desempenho da compilao, j que o compilador no precisa ficar procurando as classes necessrios nos pacotes utilizados. Quando uma classe utilizada com seu nome completo, este nome denominado nome qualificado: javax.swing.JOptionPane.showMessageDialog(...); Para evitar que existam pacotes com nomes iguais, existe uma forte sugesto para a nomenclatura de pacotes: todo pacote deve comear com o nome do domnio invertido. Assim, se o sistema possuir uma classe Cliente dentro de um pacote chamado model, o nome de acordo com a conveno seria: com.infnet.model

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 27 -

i580 Java Programming

Classes de Outros Pacotes


Sem o import:
public class DesenhaPontos2{ public static void main(String args[]) { ... javax.swing.JTextArea areaDeTexto = new javax.swing.JTextArea(200,150); strNum = javax.swing.JOptionPane.showInputDialog("Entre com o nmero de pontos: ");

Com import da classe:


import javax.swing.JOptionPane; //importa apenas a classe indicada public class DesenhaPontos2{ ... javax.swing.JTextArea areaDeTexto = new javax.swing.JTextArea(200,150); strNum = JOptionPane.showInputDialog("Entre com o nmero de pontos: ");

Com import do pacote:


import javax.swing.*; //importa todas as classes do pacote mas NO os pacotes dentro do pacote public class DesenhaPontos2{ ... JTextArea areaDeTexto = new JTextArea(200,150); strNum = JOptionPane.showInputDialog("Entre com o nmero de pontos: "); - 28 -

Para utilizar classes e mtodos de outros pacotes existem quatro formas. Neste tpico sero apresentadas trs maneiras, a quarta ser vista adiante. O uso do import no obrigatrio mas se for necessrio utilizar uma classe de outro pacote ento esta classe dever ter o nome qualificado em todos os lugares do cdigo: com.infnet.model.ContaCorrente cc = new com.infnet.model.ContaCorrente(); Caso seja usado o import de classe, apenas a classe referenciada no import pode ser usada sem o nome qualificado. As demais classes do pacote devem ser usadas com o nome qualificado: import com.infnet.model.ContaCorrente; ... ContaCorrente cc = new ContaCorrente(); com.infnet.model.Cliente cliente = new com.infnet.model.Cliente(); Se o import for usado para referenciar todas as classes de um pacote (com o *), quaisquer classes deste pacote podem ser usadas sem o nome qualificado: import com.infnet.model.*; ... ContaCorrente cc = new ContaCorrente(); Cliente cliente = new Cliente(); As classes que esto no mesmo pacote no precisam utilizar a instruo import. Caso existam duas classes com mesmo nome em pacotes diferentes e estas classes sejam utilizadas no mesmo programa, pelo menos uma delas dever sempre ser utilizada com o nome qualificado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 28 -

i580 Java Programming

Exerccio
Altere o programa Exemplo02 da pgina 24, de forma que este faa uso do import para as classes externas. Procure na documentao que mtodo da classe JOptionPane poderia ser usado para obter a mensagem a ser exibida (no preciso implement-lo agora, apenas anote aqui a resposta).

- 29 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 29 -

i580 Java Programming

1.2 Variveis e Tipos de Dados


Bloco de Construo do Aprendizado

- 30 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 30 -

i580 Java Programming

1.2 Variveis e Tipos de Dados


Voc aprender: Literais. Identificadores. Tipos Primitivos. Variveis. Type Cast. Atributos.

- 31 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 31 -

i580 Java Programming

Literais
Literais inteiros
Formato implcito (int) Formato explcito (long) Formato octal Formato Hexadecimal Formato implcito (double) Formato explcito (double) Formato explcito (float) Formato cientfico (double) Formato cientfico (float) 7, 3, 1970 6000000000L, 16000000l 04, 037, 07 0xA9, 0X58, 0x20 2.0952 2.17d, 2.3D 1.75f, 2.10F 7.2e-11, -18.911E21 1.12E3f, 7.9e-8F

Literais de ponto flutuante

Literais so os dados
- 32 -

Literais so as constantes escritas dentro de um programa Java e tambm so conhecidas como programao Hard Coded. Outro tipos de literais: Literais de caractere Formato implcito Formato em octal Formato de caracteres de escape Formato unicode Literais string Formato padro Literais lgicos Verdadeiro Falso

: F', +', 3' : '\25', '\33' : '\n', '\t', '\r', '\f', '\\' : '\u00A9', '\u0090'

: S sei que nada sei"

: true : false

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 32 -

i580 Java Programming

Identificadores
Usados para identificar variveis, constantes, classes e mtodos. Regras de formao de identificadores. Algumas convenes estabelecidas.

- 33 -

Varivel um espao de memria usado para armazenar informaes de um determinado formato. Para que se possa usar uma varivel, deve ser atribudo mesma um nome que a identifique de modo nico. O nome da varivel (ou mtodo, classe, etc.) chamado de identificador, que possui regras de formao prprias. 1 O identificador deve iniciar ou por uma letra, ou por caractere sublinhado (_) ou pelo smbolo do cifro ($). 2 Os outros caracteres, alm dos listados no item 1, tambm podem ser dgitos. 3 Caracteres como espaos, tabulaes, @, #, !, %, &, *, (, ), -, +, =, \, |, etc., no podem fazer parte do identificador. 4 H distino entre maisculas e minsculas. 5 No h limite de comprimento para o identificador. 6 possvel mas no desejvel, a utilizao de caracteres especiais, como por exemplo, caracteres com acento. 7 No podem ser usadas as palavras reservadas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 33 -

i580 Java Programming

Identificadores
Comea com letras ou _(sublinhado). $ vlido mas deve ser evitado. Pode conter dgitos no meio ou no final. H distino entre maisculas e minsculas. Podem ser usados caracteres acentuados. No podem ser usadas palavras reservadas.

Procure utilizar nomes sugestivos para identificadores


- 34 -

Nas regras estabelecidas acima, as palavras reservadas so citadas. Essas palavras so parte integrante da linguagem Java e s podem ser usadas apenas dentro de um contexto especfico. As palavras reservadas so: abstract assert*** boolean break byte case extends final finally float * No usado ** Adicionado na verso 1.2 *** Adicionado na verso 1.4 **** Adicionado na verso 5.0 continue default do double else enum**** int interface long native for goto* if implements import instanceof short static strictfp** super new package private protected public return try void volatile while switch synchronized this throw throws transient char class const* catch

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 34 -

i580 Java Programming

Identificadores
Mtodos e variveis:
Palavras simples - tudo em minsculo. Palavras compostas - Comea com minscula e a inicial das outras palavras em maiscula.

Constantes:
Tudo em maisculo. Palavras compostas separadas com _ (sublinhado).

Classes:
Palavras simples - Comea com maiscula. Palavras compostas Comea com maiscula e a inicial das outras palavras em maiscula.

Arquivos:
Mesmas convenes das classes.
- 35 -

A linguagem Java utiliza duas convenes para os nomes de identificadores: PascalCase e CamelCase. Em ambas as convenes, identificadores compostos por mais de uma palavra no tem separao explcita, mas a primeira letra de cada palavra subseqente inicia em maiscula. Na conveno PascalCase todo identificador inicia com a primeira letra em maiscula. utilizada para nomes de classes, enumeraes e arquivos. Na conveno CamelCase os identificadores comeam sempre em minscula. usada para nomes de variveis, mtodos e rtulos. Nomes de constantes seguem uma regra diferente: todos os caracteres so escritos em maisculo e palavras so separadas pelo caractere sublinhado (_). A linguagem Java no usa o conjunto de caracteres ASCII, mas um conjunto mais abrangente, denominado Unicode. Ele um padro internacional para representar qualquer caractere de qualquer lngua escrita no mundo utilizando 16 bits (mais informaes podem ser obtidas no site www.unicode.org).

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 35 -

i580 Java Programming

Tipos Primitivos
byte short int long float double char boolean (8 bits) (16 bits) (32 bits) (64 bits) (32 bits) (64 bits) (16 bits) (JVM)

Numricos sem casa decimal

Numricos com casa decimal Caracter da tabela unicode true/false

- 36 -

Cada varivel pode armazenar um tipo de dados nico. Existem em Java oito tipos de dados divididos em quatro categorias. Esses so os nicos elementos na linguagem que no so objetos e so chamados de tipos primitivos. O tamanho dos tipos de dados independente de plataforma, ou seja, no se altera qualquer que seja o computador que esteja sendo usando. A nica exceo o tipo boolean que depende da JVM onde o programa executado. Normalmente o tamanho de 1 bit mas a especificao da Sun no garante que este valor ser o mesmo para todas as plataformas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 36 -

i580 Java Programming

Tipos Primitivos
Inteiros byte, short, int e long. A diferena entre eles est no intervalo de valores que cada um pode suportar:
byte menor = 10; // 1 byte short pequeno = 456; // 2 bytes int normal = 10252; // 4 bytes long muitoGrande = 6263732239L; // 8 bytes

- 37 -

Variveis desses tipos so usadas para armazenar nmeros inteiros com sinais (positivos ou negativos). A diferena entre elas est no intervalo de valores que cada uma pode suportar. byte short int long 8 bits 16 bits 32 bits 64 bits -128 a 127 -32768 a 32767 -2147483648 a 2147483647 -9223372036854775808 a 9223372036854775807

Qualquer valor literal inteiro , por default, do tipo int em Java. Portanto, 1, -8765, 10000 so literais do tipo int. Para definir um literal do tipo long, por exemplo, devemos colocar um L (ou um l, apesar de no ser recomendvel por confundir-se com o dgito 1) depois do valor. Com isso, 999L, 1L e -67L so literais do tipo long. Se o valor for muito grande (por exemplo, 4000000000) deve ser colocado um L ao final do literal para indicar que ele do tipo long. No h como especificar um literal do tipo byte ou short.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 37 -

i580 Java Programming

Tipos Primitivos
Ponto flutuante float e double
float - preciso simples (7 dgitos) que utiliza 32 bits de armazenamento. Tornam-se imprecisas para valores muito grandes ou muito pequenos. teis quando precisamos de um valor fracional sem grande necessidade de preciso. double - preciso dupla (15 dgitos) que utiliza 64 bits de armazenamento. float numeroReal = 10.9f;// 4 bytes double numero = 6745.9E13;// 8 bytes
- 38 -

As variveis do tipo ponto flutuante podem armazenar nmeros reais. Logo, 9507.98 e -0.00006 so nmeros vlidos para esses tipos de dados. Veja a diferena entre as duas possibilidades na tabela a seguir (ambos positivos ou negativos): float double 32 bits 64 bits -3.4x1038 a 3.4x1038 -1.7x10308 a 1.7x10308

Qualquer valor literal real , por default, do tipo double. Para definir um literal do tipo float deve ser colocado um F (ou f) depois do valor. Porm, diferentemente do que acontece nos inteiros, pode ser indicado o tipo padro com o uso de uma letra (D ou d). Seguem abaixo exemplos de nmeros de ponto flutuante: 3.1415 3.1415f 6.02E23D (o D opcional) 127.987E+200F Observao: Todas as definies e operaes para os valores de ponto flutuante, em Java, seguem a especificao IEEE 754.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 38 -

i580 Java Programming

Tipos Primitivos
Textual char - 16 bits - 2 bytes.
char meuCaractere = L; char meuCharUnicode = \u0058;

A contra barra indica uma seqncia de escape.

Escape significa desligar / desativar


- 39 -

O tipo char pode armazenar um caractere simples na representao Unicode de 16 bits sem sinal (2 bytes). O tipo char literal deve ser delimitado por aspas simples (' '): char meuCaractere = 'L'; Como normalmente um editor de texto ASCII usado para editar os programas fonte, no possvel utilizar todos os caracteres Unicode disponveis. Para que se possa usar todo o conjunto de caracteres existentes, deve ser utilizada uma seqncia de escape. Uma seqncia de escape permite que um caractere seja especificado pelo seu cdigo. O que indica uma seqncia de escape uma contra barra. Se for seguida do caractere u e de quatros dgitos hexadecimais, representar o caractere por meio do seu cdigo Unicode. Portanto, o caractere X em Unicode pode ser representado assim: char meuCharUnicode = '\u0058'; Para representar o caractere de copyright , usa-se: char copyright = \u00A9;

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 39 -

i580 Java Programming

Tipos Primitivos
\b \t \f \n \r \ \ \\ backspace tab form feed line feed carriage return aspas simples aspas duplas contrabarra

- 40 -

Nota: Uma seqncia de caracteres delimitada por aspas duplas () chamada de string. Em uma string, para especificar o caractere contra barra, o caractere apstrofe e o caractere aspas tambm usada uma seqncia de escape para exib-los. Logo, para mostrar a frase: E como disse o poeta em 1940: ... preciso viver com os homens, preciso no assassin-los. Deve ser escrito: System.out.println(E como disse o poeta em 1940: \... preciso viver com os homens, preciso no assassin-los.\); Tambm possvel realizar operaes aritmticas com variveis do tipo char: meuCaractere = meuCaractere + 1; meuCaractere foi inicializado com o valor 'L' no exemplo anterior. Ao final da instruo acima, meuCaractere ter o valor M.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 40 -

i580 Java Programming

Tipos Primitivos
Lgico boolean.
boolean status = true; boolean continuar = false;

Os literais do tipo boolean so escritos em letra minscula.

- 41 -

Os valores lgicos so representados pelo tipo de dados boolean, que pode receber dois valores literais apenas: true ou false (verdadeiro ou falso). A declarao de uma varivel lgica e sua inicializao feita da seguinte maneira: boolean status = true; // sempre em letra minscula

Caso a varivel no seja inicializada e ela esteja declarada fora de mtodos (um atributo) ela ser inicializada automaticamente com o literal false. As variveis lgicas no podem ser convertidas diretamente para qualquer outro tipo de dados. Nisso, Java diferente de C e C++ que permitem que valores numricos possam ser usados em variveis lgicas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 41 -

i580 Java Programming

Variveis
Java uma linguagem fortemente tipada Toda varivel deve ser declarada explicitamente antes de seu uso.
int populacaoMundial; char opcao; float cotacaoDolar, preco; boolean status = true; double produtoInternoBruto;

- 42 -

Cada varivel pode armazenar um nico tipo de dado. Toda varivel possui: identificador, tipo de dado, valor e tamanho (definido pelo tipo). Toda varivel em Java deve ser explicitamente declarada antes de sua utilizao. A declarao de uma varivel de um tipo primitivo consiste do tipo, seguido do identificador da mesma, terminando com um ponto e vrgula:
<tipo primitivo>< identificador > [ ,< identificador2, ... > ][ = valor inicial ] ;

Variveis possuem um escopo que determina em que locais do cdigo-fonte elas podem ser visualizadas. Se a varivel for declarada fora de um mtodo ela receber um valor padro (default). As variveis podem ser inicializadas no momento da declarao ou aps a declarao. int numeroDias; numeroDias = 15; int numeroDias = 15, cont, f = 5;

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 42 -

i580 Java Programming

Valor e Referncia
Em Java existem dois tipos de variveis:
Valor: variveis de tipos primitivos. Referncia: variveis de classes apontam para objetos em memria.

int qtde = 150;

Cliente cli = new Cliente();

qtde

cli

objeto

- 43 -

Em Java existem dois tipos de variveis com relao ao seu armazenamento em memria: Valor: variveis por valor so as variveis criadas a partir de um tipo primitivo. A rea de memria alocada para elas contm o valor destas variveis. Os exemplos a seguir mostram variveis de valor cuja rea de memria possui o contedo: char conceito = A; int gols = 28; float preo = 1.75; Referncia: variveis criadas a partir de classes e vetores. Neste caso a rea de memria no possui o contedo (objeto) mas o endereo de memria onde o contedo est alocado. Caso se atribua uma referncia para outra do mesmo tipo, o objeto no copiado, apenas a referncia. Os exemplos a seguir so variveis de referncia que possuem o endereo do contedo (objeto): String comentrio = O material muito bem escrito, no possui erros...; Livro livro = new Livro(); ContaCorrente cc = new ContaCorrente();

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 43 -

i580 Java Programming

Type Cast
Java no opera quando um tipo no cabe no outro. necessrio fazer um ajuste explcito:
public class TiposPrimitivos{ public static void main(String args[]) { int a = 5, b = 2; int c; c = a / b; System.out.println("c = " + c); double d; d = a / b; System.out.println("d = " + d); double e; e = (double) a / b; System.out.println("e = " + e); } }
- 44 -

c=2 d = 2.0 e = 2.5

Em algumas situaes, Java ir converter um literal ou o resultado de uma expresso para um tipo mais abrangente. Valores do tipo byte, char e short podem ser convertidos para int, e um valor do tipo int pode ser convertido para um do tipo long. Um valor do tipo int pode ser convertido para um do tipo float, mas pode haver perda de informao j que um inteiro mais significativo que um float. Um valor do tipo float pode ser convertido para double: double numero = 3.14F; O problema que Java no faz a converso de um numero ou de uma expresso para um tipo menos abrangente (conhecido por downcasting). O motivo que essa converso poderia resultar em perda de informao. Logo, a instruo abaixo gera um erro em tempo de compilao: byte b = 34000;// ERRO!!! O compilador verifica que o literal no cabe no espao destinado a uma varivel do tipo byte. Outro caso muito comum mostrado a seguir: int x = 4646L;// ERRO!!! Apesar do valor 4646 caber dentro do intervalo aceito pelo tipo int, o literal foi definido como sendo do tipo long. O exemplo da figura acima mostra um caso bem comum: a diviso de valores inteiros na qual se espera um resultado double (ou float). Para que o valor seja calculado corretamente necessrio fazer uma converso explcita: pelo menos um dos valores int deve ser convertido para double.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 44 -

i580 Java Programming

Type Cast
long grande = 890L;// 64 bits int pequeno = (int) grande; //truncou? char letra = (char) 87; //letra W

Sempre que possvel feito o ajuste implcito. Alguns ajustes implcitos permitidos:
byte > short > int > long > float > double

S possvel o cast para tipos compatveis


- 45 -

Caso seja necessrio efetuar o downcasting necessrio fazer uma coero explcita entre os tipos das variveis. Desta forma o compilador aceita a atribuio. A coero explcita feita colocando-se o nome do tipo primitivo entre parnteses antes do valor a ser convertido, que tambm pode vir entre parnteses. long grande = 890L; int pequeno = (int) (grande); char letra = (char) 87; // A varivel letra recebe a W A coero explcita extremamente importante para a plataforma Java. Adiante ser estudado herana, polimorfismo e programao para interface. Em todos estes tpicos necessrio utilizar converso explcita em determinadas situaes. Dependendo dos tipos envolvidos, a coero pode causar resultados imprevisveis ou indesejveis.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 45 -

i580 Java Programming

Exerccio
Crie um programa chamado Exemplo03. Declare uma varivel no mtodo main do tipo String. Utilize o mtodo de JOptionPane que obtm dados do usurio (que voc descobriu no exerccio anterior). Obtenha o nome do usurio e o armazene na varivel declarada. Exiba o nome do usurio em um dilogo use JOptionPane novamente. Responda: possvel fazer um cast da varivel com o nome do usurio para char ou boolean? Por-qu?
- 46 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 46 -

i580 Java Programming

1.3 Mtodos
Bloco de Construo do Aprendizado

- 47 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 47 -

i580 Java Programming

1.3 Mtodos
Voc aprender: Estrutura de um Mtodo. Escopo de Variveis. Visibilidade.

- 48 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 48 -

i580 Java Programming

Estrutura de um Mtodo
Mtodos tm a seguinte estrutura genrica:
<visibilidade> <static> <tipo_retorno> <nome_metodo> (<parmetros>) { //corpo ou escopo do mtodo. Fica entre chaves { }. }

<visibilidade> - public, private, <package>, protected; <static> - com a palavra static ou sem ela; <tipo_retorno> - void, tipo primitivo ou classe; <nome_mtodo> - valem as convenes; <parmetros> - lista de variveis a serem preenchidas na chamada do mtodo.

- 49 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 49 -

i580 Java Programming

Estrutura de um Mtodo
Mtodos retornam no mximo um valor. Se [tipo_retorno] no for void, o corpo do mtodo tem que ter um return. Um mtodo no pode ser definido dentro de outro mtodo. Mtodos devem ter sua funo bem definida para promover a reutilizao de cdigo. Mtodos no devem ter muitas linhas de cdigo, nem muitas variveis. Teste SEMPRE os parmetros recebidos antes de executar o cdigo do mtodo.
- 50 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 50 -

i580 Java Programming

Chamadas a Mtodos
Dentro da definio da prpria classe:
nomeDoMetodo();

Mtodos de classe so estticos:


int x = Integer.parseInt(12345); double d = Math.random();

Mtodos de instncia so dinmicos:


ContaCorrente cc = new ContaCorrente(); cc.consultarSaldo(); Cliente cli = new Cliente(); cli.getNome();
- 51 -

Mtodos podem ser invocados de diversas maneiras em Java. Os modificadores de <visibilidade> e os tipos <static/no_static> definiro como eles podero ser chamados. Por exemplo, no slide acima para chamar nomeDoMetodo(...) o mtodo dentro da classe poderia ter qualquer <visibilidade>. Mtodos de classe como o caso de Math.random() tem visibilidade pblica e so do tipo static. Mtodos de instncia de classe so mtodos que podem ser invocados apenas a partir dos objetos instanciados pela classe. Por exemplo, a partir da classe Aluno podem ser criados os objetos aluno1, aluno2. Cada objeto criado uma instncia da classe e o mtodo de instncia pode ser invocado com a sintaxe: nome_da_instnciaponto-nome_do_metodo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 51 -

i580 Java Programming

Visibilidade
Modificadores private <package> * protected public Mesma classe x x x x x x x x x x Mesmo package Subclasses Qualquer lugar

Os modificadores funcionam para qualquer tipo de identificador vari variveis, m mtodos, classes etc.
- 52 -

Os modificadores de acesso permitem que o Java controle como sero usadas as variveis e os mtodos. O quadro acima vale para mtodos e variveis e mostra em que locais podem ser visualizados os elementos de acordo com o especificador utilizado. Existem quatro modificadores de acesso: private, package, protected e public. A visibilidade private usada para restringir o acesso aos elementos apenas pela classe que os contm. O especificador conhecido como default ou package no tem uma palavra definida e utilizado quando no for definida uma visibilidade. Ele indica que outras classes do mesmo pacote podem acessar o elemento. O acesso protected permite que a prpria classe, subclasses e outras classes do mesmo pacote possam acessar o elemento. E finalmente o indicador public permite que quaisquer classes acessem o elemento. Um arquivo fonte s podemos ter uma classe pblica mas nada impede que existam vrias outras classes com visibilidade default.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 52 -

i580 Java Programming

Exerccio
Crie uma classe TestaMetodos que contenha os seguintes cabealhos de mtodos:
Mtodo pblico e dinmico para calcular a soma de dois nmeros reais. Mtodo privado e esttico que inverta a ordem dos caracteres de uma frase. Mtodo de pacote que verifique se um servidor est ativo ou no. Mtodo pblico e esttico que verifique se um CNPJ vlido.
No para implementar somente o cabe cabealho do m mtodo necess necessrio. Coloque return nos m mtodos que retornam resultados.
- 53 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 53 -

i580 Java Programming

1.4 Operadores e Controle de Fluxo


Bloco de Construo do Aprendizado

- 54 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 54 -

i580 Java Programming

1.4 Operadores e Controle de Fluxo


Voc aprender: Operadores. Estruturas de Controle de Fluxo.

- 55 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 55 -

i580 Java Programming

Operador de atribuio
Atribuio ( = ). A expresso da direita atribuda varivel que est esquerda:
x = 110; Y = x + 12;

Pode ser utilizado de forma encadeada:


x = y = z = 55;

A atribuio a ltima coisa a ser feita em uma expresso


- 56 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 56 -

i580 Java Programming

Operadores Aritmticos
Requerem dois operandos. Operaes aritmticas bsicas. Funcionam com variveis e literais.
int x, y, z; x y z x y = = = = = 229 + 23; 73 9; 72 * 6; y / z; x % z; // // // // // adio subtrao multiplicao diviso resto da diviso

- 57 -

Os operadores aritmticos funcionam com operandos numricos e o resultado da operao tambm numrico. As operaes aritmticas entre nmeros seguem as regras de converso implcita listadas abaixo: 1 se um dos operandos do tipo double, o outro convertido para double. 2 se um dos operandos do tipo float, o outro convertido para float. 3 se um dos operandos do tipo long, o outro convertido para long. 4 se no acontecer nenhum dos casos acima, ambos so convertidos para int. Repare que, diferentemente de outras linguagens, os operadores de diviso e de resto da diviso podem ser utilizados tambm com nmeros reais. Por exemplo: a = 3.2 % 1.5; //a recebe 0.2 Outras operaes matemtica esto disponveis na classe Math.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 57 -

i580 Java Programming

Operadores Aritmticos
O operador ++ incrementa de 1. O operador -- decrementa de 1. Duas formas de utilizao: pr-fixada e ps-fixada.
int x, y; x = 2; y = x++; // ps-fixado => x = 3 e y = 2 x = 2; y = ++x; // pr-fixado => x = 3 e y = 3 Esses operadores mandam na expresso so os primeiros a serem avaliados
- 58 -

Estes dois operadores so usados para somar ou diminuir um de uma varivel. Veja o exemplo a seguir: x = 10; --x; // O valor de x igual a 9. // Poderia ter sido usado x = x - 1; Estes operadores podem ser utilizados de duas formas: pr-fixada e ps-fixada. Na notao pr-fixada, a varivel incrementada antes de ser realizada a operao de atribuio. No exemplo abaixo: int y, x = 10; y = ++x; A varivel y recebe o valor 11, j que antes da operao de atribuio a varivel x incrementada de 1. J na notao ps-fixada a varivel incrementada depois da operao de atribuio. Assim, teramos: int y, x = 10; y = x++; Nesse caso, a varivel y recebe o valor 10 para que em seguida a varivel x seja incrementada de 1 e termine com o valor 11.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 58 -

i580 Java Programming

Operadores Relacionais
Os operadores relacionais sempre retornam um valor do tipo boolean:
> >= < <= == != Maior que Maior ou igual a Menor que Menor ou igual a Igual a Diferente de

No confunda igualdade com atribuio


- 59 -

So utilizados para comparar valores entre duas variveis ou expresses, retornando um valor lgico. Lembre-se que no h converso automtica de int para boolean. int a = 8, b = 5; boolean status; status = (a >= b);// A varivel status recebe o valor true status = (a == b);// A varivel status recebe o valor false muito comum a confuso entre o operador de atribuio e o operador de igualdade. Preste ateno na diferena entre eles.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 59 -

i580 Java Programming

Operadores Lgicos
Os operadores lgicos mais usados so:
&& E || Ou ! No

Estes operadores so chamados de curtos pois avaliam apenas o que for necessrio para retornar um resultado. Existem operadores longos que avaliam toda a expresso:
& | ^ E (longo) Ou (longo) Ou exclusivo
- 60 -

Variveis lgicas e expresses que retornam um valor lgico podem ser combinadas utilizando os operadores listados no quadro no slide. Como exemplo, considere trs variveis lgicas e as expresses abaixo:
status3 = status1 && status2;// status3 ter o valor true se e // somente se status1 e status2 forem verdadeiras status3 = status1 || status2;// status3 ter o valor true se // pelo menos uma das variveis for verdadeira status3 = status1 ^ status2;// status3 ter o valor true se // uma e apenas uma das variveis for verdadeira status3 = !status1; // status3 ter o valor true se status1 for false // status3 ter o valor false se status1 for true

Os operadores && e || so chamados de operadores lgicos curtos porque a expresso do lado direito do operador s ser avaliada se no for possvel, na avaliao da expresso do lado esquerdo, determinar o resultado final da operao. No primeiro exemplo, se status1 for falsa, status2 no avaliada, j que o resultado s poder ser falso. Se for necessria a avaliao de todas as expresses, independente do resultado, deve-se usar os operadores lgicos longos & e |.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 60 -

i580 Java Programming

Operadores Lgicos
if(x > y & y < z)
V F testa testa

if(x > y && y < z)


V F testa no testa

if(x > y | y < z)


V F testa testa V F

if(x > y || y < z)


V F F V
- 61 -

no testa testa

if(x > y ^ y < z)

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 61 -

i580 Java Programming

Operadores Compostos
O operador de atribuio pode ser combinado com qualquer operador binrio. Estes operadores no tornam o programa mais rpido, apenas facilitam a sua construo.
x = 110; x += 12; // igual a x = x + 12 x /= 4; // igual a x = x / 4

- 62 -

Java nos permite combinar o operador de atribuio com qualquer um dos operadores binrios (que usam dois argumentos). Operador += -= *= /= %= &= |= ^= Operao Adio-Atribuio Subtrao-Atribuio Multiplicao-Atribuio Diviso-Atribuio Mdulo-Atribuio E-Atribuio Ou-Atribuio Ou Exclusivo-Atribuio

int a = 8, b = 5; a += b;// Igual a a = a + b; a *= b;// Igual a a = a * b; b -= 4;// Igual a b = b 4;

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 62 -

i580 Java Programming

Ordem de Precedncia dos Operadores


Ordem 1 2 3 4 5 6 7 8 9 10 11 Operador ++ -- + - ~ !(tipo) * / % + < > <= >= instanceof == != ^ | && || ?: = += -= *= /= Associatividade D para E E para D E para D E para D E para D E para D E para D E para D E para D D para E D para E

Parnteses podem ser usados para alterar a precedncia


- 63 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 63 -

i580 Java Programming

if...else
Executa um grupo de comandos, dependendo do valor de uma condio. Caso haja uma instruo, as chaves podem ser omitidas (mas no devem).
if (condio) comandos [else comandos] if (condio) instruo ou bloco de instrues cercados por chaves [else if (condio-n) instruo ou bloco de instrues cercados por chaves] [else instruo ou bloco de instrues cercados por chaves]

- 64 -

Possibilita a execuo de partes diferentes do programa baseada no resultado de uma expresso booleana. if (expresso booleana) { instruo ou bloco } else { instruo ou bloco } Lembre-se que toda instruo deve terminar com ponto e vrgula e que todo bloco deve estar entre chaves. Se a expresso booleana for verdadeira, o cdigo que segue (corpo do if) executado. Se a expresso for falsa, existem duas alternativas: a) se no existir a clusula else, o corpo do if no executado; b) se existir a clusula else, o cdigo que a segue (corpo do else) executado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 64 -

i580 Java Programming

if...else
if (salario >= 1000 && salario < 2500) IR = salario * 0.1; else if (salario < 5000) IR = salario * 0.2; else IR = salario * 0.25;

- 65 -

Pode-se colocar uma instruo if dentro da outra caso haja a necessidade. Essa construo conhecida como if aninhados. if (salario >= 1000) && (salario < 2500) IR = salario * 0.1; else if (salario < 5000) IR = salario * 0.2; else IR = salario * 0.25; A utilizao de declaraes if aninhadas no de recomendvel porque pode tornar o programa de difcil manuteno, caso o aninhamento seja muito profundo. Alm disso, um erro comum esquecer que a clusula else sempre se refere ao if mais prximo (a endentao no influi nisso).

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 65 -

i580 Java Programming

if...else
if (salario >= 1000 && salario < 2500){ IR = salario * 0.1; } else if (salario < 5000) { IR = salario * 0.2; } else } IR = salario * 0.25; }

No fica melhor se colocarmos as chaves?


- 66 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 66 -

i580 Java Programming

Operador Ternrio
Alternativa para o comando if...else O resultado deste operador o retorno de um valor de qualquer tipo.
expresso lgica ? retorno se true : retorno se false

int total = salario < 1000 ? salario : salario IR;

Evite aninhar operadores ternrios


- 67 -

Uma alternativa instruo if...else a utilizao do operador ternrio. A sua sintaxe de utilizao mostrada a seguir: expresso booleana ? expresso 1 : expresso 2 Caso a expresso booleana retorne um valor verdadeiro a expresso 1 executada. Se ela retornar um valor falso, a expresso 2 a que vai ser executada. int total = salario < 1000 ? salario : salario IR; No exemplo acima, se a varivel salario for menor que 1000, varivel total atribudo o valor de salario. J se a varivel salario for maior ou igual a 1000, a varivel total recebe o valor de salario menos o valor da varivel IR. Este operador substitui a construo if...else em situaes onde um valor deve ser retornado. Evite o aninhamento de operadores condicionais j que ele pode tornar o cdigo difcil de ler.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 67 -

i580 Java Programming

switch
Executa um determinado grupo de comandos, dependendo do valor de uma expresso.
switch (expresso_teste) { [case expresso constante 1: comandos] [default expresso constante n: comandos] }

expresso_teste tipicamente :
byte, short, int ou char.

- 68 -

Uma outra alternativa instruo if...else a instruo switch. Ela usada quando deve ser selecionada uma ao dentro de um nmero de possibilidades. switch (expresso inteira) { case expresso constante 1 : instruo ou bloco [ break; ] case expresso constante 2 : instruo ou bloco [ break; ] ... [ default: instruo ou bloco break; ] }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 68 -

i580 Java Programming

switch
switch (diaSemana) { case 1: System.out.println(Hoje segunda-feira); break; case 2: System.out.println(Hoje tera-feira); break; ... case 7: System.out.println(Hoje domingo); break; default: System.out.println(Opo invlida!!!); break; }

- 69 -

A ordem em que as clusulas aparecem importante, visto que a comparao feita obedecendo-a. Por causa disso, a clusula opcional default deve aparecer no final do comando. O comando break finaliza o switch e deve ser utilizado ao final de cada clusula case. Se isto no for feito, o fluxo de execuo continuar dentro do switch at que um break seja encontrado ou o seu final seja alcanado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 69 -

i580 Java Programming

switch
switch (diaSemana) { case 1: case 2: case 3: case 4: case 5: System.out.println(Hoje dia de trabalho!!); break; case 6: case 7: System.out.println(Hoje fim de semana!!!); break; default: System.out.println(Opo invlida!!!); break; }
- 70 -

O comando break o que interrompe a execuo das instrues dentro do comando switch, desviando o fluxo de execuo para a primeira instruo aps a chave de fechamento do bloco. Ele no um comando obrigatrio, mas a sua ausncia pode criar alguns efeitos interessantes. Nesse caso, se a varivel diaSemana tiver um valor entre 1 e 5, a mensagem Hoje dia de trabalho... exibida. Se o valor for 6 ou 7, a mensagem a ser exibida Hoje fim de semana.... Qualquer outro valor mostrar a mensagem de erro da clusula default.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 70 -

i580 Java Programming

while
Executa uma srie de comandos enquanto uma condio for verdadeira.
while (condio) { comandos }

O teste ocorre antes do loop


- 71 -

Em certos momentos h a necessidade de que uma determinada seqncia de instrues seja executada repetidamente. Para isso, Java nos fornece instrues que possibilitam a execuo repetida de um numero determinado de instrues. So as chamadas estruturas de repetio, laos ou loops. A mais simples das estrutura de repetio a instruo while, que possui a sintaxe a seguir: while (expresso booleana) instruo ou bloco Enquanto a expresso lgica for verdadeira, a instruo ou bloco ser executado repetidamente at que a expresso seja falsa, quando ento o fluxo de execuo passa para a primeira instruo aps o while. i = 1; while (i <= 10) { System.out.println(i); i++; } Um erro muito freqente em casos como o do exemplo acima esquecer de atualizar a varivel de controle (no caso a varivel i). Como a expresso lgica calculada antes que o corpo do while seja executado, se ela retornar um valor falso na primeira vez em que for calculada no haver execuo do corpo do lao. Outro caso que pode acontecer a situao em que a expresso booleana nunca se torna falsa, o que gera o chamado loop infinito. Portanto, face ao exposto, a instruo ou bloco que compe o while pode ser repetida 1, 2, ..., infinitas vezes, ou at mesmo nenhuma vez.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 71 -

i580 Java Programming

do...while
Repete um bloco de comandos enquanto uma condio for verdadeira.
do{ instruo ou bloco de instrues; }while (condio);

O teste ocorre aps o primeiro loop


- 72 -

Essa estrutura de repetio similar instruo while, com a diferena de que nesta a expresso lgica processada aps a execuo da instruo ou do bloco de instrues, o que garante que o corpo do do...while ser executado pelo menos uma vez. O corpo da instruo ser executado enquanto a expresso lgica for falsa. i = 1; do { System.out.println(i); i++; } while (i <= 10);

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 72 -

i580 Java Programming

for
Repete um grupo de comandos um nmero especfico de vezes.
for (inicializao; condio de trmino; passo){ instruo ou bloco de instrues }

inicializao declara-se uma varivel de controle do loop. condio de trmino uma expresso lgica envolvendo a varivel de controle e o valor final desta. passo expresso de incremento ou decremento envolvendo a varivel de controle.

- 73 -

Essa estrutura de repetio deve ser utilizada sempre que soubermos quantas vezes um determinado bloco de comandos deve ser executado, alm das condies de inicializao e finalizao. for ( inicializao ; condio de trmino ; passo ) instruo ou bloco Repare que as sees so sempre separadas por ponto e vrgula. A seo de inicializao executada sempre que se entra no lao e apenas uma vez. Nesta seo onde fazemos, se for necessrio, a declarao de variveis a serem utilizadas dentro do lao. Essas variveis s sero visveis enquanto o lao estiver sendo executado, sendo descartadas ao final. Podem ser escritas vrias declaraes separadas por vrgulas. A condio de trmino indica quando o loop deve terminar. Enquanto esta condio for verdadeira, o loop continua, quando ela for falsa o loop termina. O passo normalmente utilizado para a soma ou subtrao de valores utilizando os operadores unrios ++ e --. executada sempre que uma iterao do loop termina e antes da avaliao da condio de trmino. O comando for pode ser usado para outras situaes alm de uma contagem, como por exemplo: a leitura de linhas de um arquivo texto. Existe outra sintaxe para o comando for que ser vista no captulo sobre colees.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 73 -

i580 Java Programming

for
public class Tabuada { public static void main(String args[]) { for (int i = 1; i <=10 ; i++) { System.out.println(Tabuada do " + i); for (int j = 2; j <= 9; j++) System.out.println(i + * j + = + (i*j)); } } }

- 74 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 74 -

i580 Java Programming

break
Sai de um loop ou switch incondicionalmente:
1 for (int i = 1; i <= limite; i++) { 2 fatorial = 1; 3 for (int j = 2; j <= i; j++) { 4 fatorial *= j; 5 if (fatorial == 120) 6 break;// vai para linha 8 7 } 8 System.out.println(i + "! " + fatorial); 9 } 10 System.out.println(O fatorial 11 + fatorial);
- 75 -

A instruo break tambm pode ser utilizada em laos para encerrar as iteraes antes da condio de trmino ter se tornado verdadeira. O fluxo da execuo ento desviado para a primeira instruo aps o lao.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 75 -

i580 Java Programming

Laboratrio
Exerccios mpares devem ser digitados e testados como esto. Esses exemplos serviro como base. Exerccios Pares so os exerccios propostos que devero ser elaborados a partir dos exemplos anteriores. Os exerccios que no forem feitos em sala devem ser feitos em casa.

Os enunciados esto no http://sae.infnet.edu.br


- 76 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 76 -

i580 Java Programming

1.5 Arrays
Bloco de Construo do Aprendizado

- 77 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 77 -

i580 Java Programming

1.5 Arrays
Voc aprender: Arrays. Declarao. Criao. Inicializao.

- 78 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 78 -

i580 Java Programming

Arrays (vetores)
Caractersticas principais:
Tamanho fixo. Todos os elementos possuem o mesmo tipo de dados e so acessados com o mesmo identificador. Cada elemento possui um ndice. Cada posio (ndice) s pode guardar um valor. Todo objeto armazenado em um array deve ser inicializado antes de ser utilizado.

- 79 -

Muitas das vezes necessrio manipular vrias variveis de um mesmo tipo. Seja para guardar todas as notas de um aluno ao longo de sua vida escolar ou todos os salrios de cada funcionrio de uma determinada empresa, preciso uma quantidade enorme de variveis para armazenar toda essa informao. Sem os vetores este processo de criao e manipulao de variveis seria tedioso e sujeito a erros. Os arrays so estruturas de dados homogneas baseadas em algum dos tipos fundamentais do Java (tipos primitivos e classes). Algumas das caractersticas mais importantes do array esto listadas a seguir: S podem ser includos elementos de um mesmo tipo, que determinado no momento da declarao do array. O tamanho do array fixado no momento de sua criao e no pode mais ser alterado. Para acessar um dos elementos necessrio informar em que posio ele se encontra, ou seja, qual o seu ndice. Cada uma das posies (ndices) do array s pode guardar um nico dado. Os elementos de um array so inicializados automaticamente aps a sua criao.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 79 -

i580 Java Programming

Declarao de arrays
Declarao de arrays:
tipo [] nome_do_array; tipo nome_do_array [];
String [] args; float notas[]; double [] salario; String nome, documento[]; //s documento array String [] time, titulo; // time e titulo so arrays

O posicionamento do par de colchetes normalmente logo aps o tipo String [ ]


- 80 -

Na declarao criada uma varivel que ser uma referncia para o array. A declarao feita de duas formas: tipo [] nome_do_array; tipo nome_do_array []; Exemplos: String [] args; float notas[]; double [] salario; String nome, documento[], endereco; //(I) String[] time, titulo; // (II) Ateno nas duas ltimas linhas do exemplo. Na linha (I) as variveis nome e endereo no so arrays. Apenas a varivel identificada pelo nome documento um array. O que define isso a posio dos colchetes. Na linha (II) time e titulo so arrays de strings, j que os colchetes esto prximos do tipo e valem para todas as variveis declaradas nessa linha de comando.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 80 -

i580 Java Programming

Criao de arrays
Uma vez declarados faz-se a criao do array em memria com o operador new seguido do tipo e do tamanho:
//arrays tem o primeiro ndice igual a zero. Na instruo //abaixo os elementos do vetor sero: notas[0]...notas[3] notas = new float[4]; salario = new double[1000]; int numeroTimes = 64; time = new String[numeroTimes]; int qualquer = umMetodo();//mtodo umMetodo() retorna um int titulo = new String[qualquer]; float f[] = new float[4]; //declarao e criao feitas na mesma linha

new refere-se alocao de memria


- 81 -

Aps a declarao de uma varivel de referncia para o array ele deve ser criado com a utilizao do comando new. Todo array em Java comea com o ndice 0. Pelos exemplos percebe-se que o tamanho deve ser um nmero inteiro, no necessariamente um nmero constante. Pode ser uma expresso calculada em tempo de execuo. Preste ateno no exemplo a seguir. Ele mostra uma criao de array invlida. int numero; float notas[numero]; Aqui ocorrer um erro de compilao porque numero no est inicializado, no sendo possvel portanto, definir o tamanho do array. int numero = 4; float notas[numero]; O erro da instruo acima que foram feitas ao mesmo tempo declarao e criao do array. A maneira correta seria: int numero = 4; float notas[]; notas = new float [numero]; ou, abreviadamente: int numero = 4; float notas[] = new float[numero];

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 81 -

i580 Java Programming

Inicializao de arrays
Para arrays de tipos primitivos essa fase no obrigatria. Para arrays de objetos necessria a inicializao antes da utilizao dos objetos. Enquanto no forem inicializados seus valores sero null. Duas maneiras de se inicializar:
Inicializao dos elementos individualmente. Usar inicializadores de array.

- 82 -

O ltimo passo antes do uso de um array a sua inicializao. Se o array composto por um dos tipos primitivos, a inicializao opcional. O Java automaticamente inicializa os elementos com os valores default do tipo primitivo. char \u0000 byte, short, int, long 0 boolean false float, double 0.0

Caso se queira inicializar os elementos de um array com outros valores que no os valores default, podem ser usadas duas formas. A primeira atravs da atribuio individual: notas[0] notas[1] notas[2] notas[3] = = = = 10; 8.5; 4; 7;

Outra forma atravs de inicializadores de array. float[] notas = {10, 8.5f, 4, 7}; Com os inicializadores de array foram feitos os trs passos (declarao, criao e inicializao) em uma linha apenas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 82 -

i580 Java Programming


demonstrao

Inicializao de arrays
public class TestaArray{ public static void main(String args[]){ int numeros[] = new int[4]; System.out.println("numeros[2] = " + numeros[2]); float[] notas = {10, 8.5f, 4, 7}; System.out.println("\nnotas[2] = " + notas[2]); String cores[] = new String[10]; System.out.println("\ncores[3] = " + cores[3]); cores[0] = new String("Amarelo"); cores[1] = "Verde"; for (int i = 2 ; i < cores.length; i++){ cores[i] = new String(); } for (int i = 0 ; i < cores.length; i++){ System.out.println("cores[" + i + "] = " + cores[i]); } } }

numeros[2] = 0 notas[2] = 4.0 cores[3] = null cores[0] = Amarelo cores[1] = Verde cores[2] = cores[3] = cores[4] = cores[5] = cores[6] = cores[7] = cores[8] = cores[9] =
- 83 -

No caso de um array composto por objetos a inicializao se torna obrigatria. Na verdade, o array no armazena os objetos em si, mas referncias a esses objetos, de modo que, ao final da fase de criao do array, cada um dos elementos apontam para null. final int numeroTimes = 64; String[] time; time = new String[numeroTimes]; Ao final dessas instrues, temos que o array time possui 64 elementos cujo contedo igual a null. Para comear a utiliz-lo deve-se inicializar cada um dos elementos: time[0] = new String(Amarelo); time[1] = new String(Vermelho); Ou inicializ-los de uma vez s: for (int i = 0; i < time.length; i++) { time[i] = new String(); } time[0] = Amarelo; time[1] = Vermelho; Todo array tem uma propriedade chamada length que retorna o nmero de elementos do array. Utilize sempre essa propriedade para evitar um erro comum em outras linguagens que tentar acessar um elemento usando um ndice inexistente.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 83 -

i580 Java Programming

Matrizes
Matriz um array bidimensional com o mesmo nmero de colunas para cada linha.
public class TestaMatriz{ public static void main(String args[]){ String cores[][] = new String[10][2];

cores[0][0] = Vermelho cores[0][1] = #ff0000 cores[1][0] = Verde cores[0][0] = "Vermelho"; cores[1][1] = #00ff00 cores[0][1] = "#ff0000"; cores[2][0] = null cores[1][0] = "Verde"; cores[1][1] = "#00ff00"; cores[2][1] = null for (int i = 0 ; i < 10; i++){ cores[3][0] = null for (int j = 0 ; j < 2 ; j++){ System.out.println("cores[" + i + "]" cores[3][1] = null cores[4][0] = null + "[" + j + "] = " + cores[i][j]); cores[4][1] = null } } ...

} }

Dica: O primeiro n nmero representa os registros registros e o segundo n nmero representa os campos campos
- 84 -

Arrays multidimensionais em Java so na realidade arrays de arrays. Valem as mesmas regras que foram explicadas para um array unidimensional. Cada elemento deve ser inicializado se ele for referncia a objeto. Caso seja um tipo primitivo essa inicializao opcional.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 84 -

i580 Java Programming

Banco Money
Na inicializao do Banco Money devem ser criadas as contas em um array de contas e as taxas mensais de juros em um array de double. As contas so inseridas no array de contas:
ContaCorrente contas[] = new ContaCorrente[10];

Os valores mensais de juros:


double tabelaDeJuros[] = new double[12];
- 85 -

O sistema do Banco Money possui uma classe Agncia que contm as contas correntes e uma tabela de juros. No construtor (mtodo de inicializao da classe) estes dois vetores so preenchidos: public class Agencia { private ContaCorrente contas[] = new ContaCorrente[10]; private double juros[] = new double[12]; public Agencia() { // Inicializao do vetor de contas contas[0] = new ContaCorrente(1, "Beethoven" , contas[1] = new ContaCorrente(2, "Arquimedes", contas[2] = new ContaCorrente(3, "Van Gogh" , contas[3] = new ContaCorrente(4, "Newton" , contas[4] = new ContaCorrente(5, "dArc" , contas[5] = new ContaCorrente(6, "Plato" , contas[6] = new ContaCorrente(7, "Minsk" , contas[7] = new ContaCorrente(8, "Blake" , contas[8] = new ContaCorrente(9, "Vader" , contas[9] = new ContaCorrente(10, "Poeta" , // Inicializao do vetor de juros juros[0] = 14.25; juros[1] = 12.85; juros[2] = 11.25; juros[3] = 10.35; juros[4] = 10.35; juros[5] = 9.05; } }

"dcima" , 100.0); "eureka" , 200.0); "orelha" , 300.0); "cabea" , 400.0); "gua" , 500.0); "morcego", 600.0); "gentil" , 700.0); "normal" , 800.0); "luz" , 900.0); "raimundo", 10.0);

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 85 -

i580 Java Programming

Laboratrio
Exerccios mpares devem ser digitados e testados como esto. Esses exemplos serviro como base. Exerccios Pares so os exerccios propostos que devero ser elaborados a partir dos exemplos anteriores. Os exerccios que no forem feitos em sala devem ser feitos em casa.

Os enunciados esto no http://sae.infnet.edu.br


- 86 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 86 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 87 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 87 -

i580 Java Programming

2 Orientao a Objetos
Unidade de Aprendizado

- 88 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 88 -

i580 Java Programming

2 Orientao a Objetos
Voc aprender: Fundamentos. Herana. Conceitos Avanados.

- 89 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 89 -

i580 Java Programming

2.1 - Fundamentos
Bloco de Construo do Aprendizado

- 90 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 90 -

i580 Java Programming

2.1 - Fundamentos
Voc aprender: Classes. Objetos. Encapsulamento. Propriedades. Mtodos. Sobrecarga de Mtodos. Construtores. Referncia this.
- 91 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 91 -

i580 Java Programming

Classes
Classe a descrio de uma entidade existente no domnio do problema. Possui dados e mtodos que representam o estado e o comportamento da entidade. Define a forma e a funcionalidade de futuros objetos

- 92 -

Classe a descrio de alguma entidade ou tipo complexo existente no domnio do problema. Fazendo uma analogia com a construo civil, uma classe o projeto de um edifcio, ou seja, as instrues necessrias para construir um objeto. Uma classe pode representar o papel de uma pessoa em um sistema, um objeto, um fato, uma coisa, uma tela, um evento etc. Uma classe projetada pelo analista de sistemas e implementada pelo programador.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 92 -

i580 Java Programming

Classes
Conceito de Classe:
As plantas da casa representam a classe. a partir da classe que se constri um objeto na memria. a definio da forma e funcionalidade de alguma coisa.

Responsabilidades da Classe:
o que a classe sabe e o que ela faz. O que a classe sabe so as propriedades ou seus atributos. O que a classe faz so os seus mtodos ou funes.
- 93 -

As plantas da casa, desenhadas pelo arquiteto, representam a idia de uma classe. a partir das plantas que se constri a casa. a partir da classe que se constri um objeto na memria. A classe o gabarito, a definio da forma e da funcionalidade. A forma representada pelas propriedades e a funcionalidade pelos mtodos. Quando uma classe modelada, existe a preocupao de documentar as suas responsabilidades: o que a classe sabe (propriedades ou atributos) e o que a classe faz (mtodos ou funes). As casas criadas tm propriedades parecidas (quantidade de cmodos, andares) mas cada uma tem caractersticas prprias, o endereo, por exemplo ser diferente para cada uma. A fachada de uma azul e outra colocou pastilhas verdes. As caractersticas em comum so da estrutura, fazendo a analogia com sistemas, a classe forma objetos com a mesma estrutura, mas cada um ter peculiaridades prprias.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 93 -

i580 Java Programming

Classes
Tipos de Classes
Classes de Fronteira:
Botes, Checkboxes, Acesso a outros sistemas. Webservices. Cliente, Pedido, Item de Pedido, Produto etc. Data, Conexo com Banco de Dados, Gerenciador de Impresso, Leitura e Gravao de Arquivos.
- 94 -

Classes de Negcio:

Classes de Controle:

Em um sistema computacional as classes podem assumir trs tipos: Classes de interface: so as classes que formam uma tela grfica ou um dilogo com o usurio. Botes, listas, checkboxes, scrollbars so exemplos de classes de tela. Classes de negcio: definem entidades do domnio de alguma atividade mercantil. Um sistema de controle de vendas tem como classes de negcio Cliente, Pedidos, Item de Pedido, Produto etc. Classes de controle: todas as classes de controle tem o papel de gerenciadores de alguma coisa externa a ela. Uma classe Data uma classe de controle porque lida com um agente externo: o tempo. Em um sistema possvel encontrar diversas classes de controle, como por exemplo Conexo com Banco de Dados, Gerenciador de Impresso, Leitura e Gravao de Arquivos etc.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 94 -

i580 Java Programming

Banco Money
O Banco Money possui um mdulo online para que os clientes possam acessar suas contas correntes. Uma das entidades deste exemplo a conta corrente:

ContaCorrente uma classe de Entidade


- 95 -

A classe conta corrente pode ser implementada da seguinte maneira em Java. Repare que esta classe representa apenas a descrio de uma conta corrente. No exemplo abaixo ainda no existe nenhum objeto criado: public class ContaCorrente { private int nmero; private String titular; private double saldo; private String senha; public void sacar(double valor) { saldo -= valor; } public void depositar(double valor) { saldo += valor; } public double consultarSaldo() { return saldo; } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 95 -

i580 Java Programming

Objetos
Objeto o conjunto de dados e mtodos criado a partir da descrio feita pela classe. Um objeto ocupa seu prprio lugar na memria e no interfere com outros objetos. A criao de um objeto tambm chamada de instanciao.

- 96 -

Objetos de software so semelhantes a objetos do mundo real, pois ambos possuem caractersticas e comportamento. Objetos de software so elementos concretos criados a partir de uma classe (descrio). Eles possuem uma identidade e um lugar na memria. Cada objeto possui sua prpria cpia dos atributos e no interfere com os atributos de outros objetos. Objeto sinnimo de instncia e a operao de criar um objeto tambm conhecida como instanciao. Continuando a analogia com a construo civil, a classe o projeto do edifcio, o objeto o prprio edifcio e a JVM o mestre de obras, que constri o edifcio (objeto) a partir dos planos (classe).

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 96 -

i580 Java Programming

Operador new
O operador new aloca espao, cria um objeto da classe e retorna o seu endereo de memria (sua referncia).
ContaCorrente cc;//Declarao da varivel cc do tipo ContaCorrente cc = new ContaCorrente();//A referncia atribuda a cc

ContaCorrente cc = new ContaCorrente();//dois passo em uma linha

As duas verses so equivalentes


- 97 -

Para trabalhar com um objeto, necessrio cri-lo. Esta criao envolve dois passos. O primeiro passo a criao de uma varivel: ContaCorrente cc; Para criar uma varivel necessrio especificar o seu tipo seguido do seu nome. No exemplo acima, foi criada uma varivel chamada cc do tipo ContaCorrente. Esta varivel no o objeto, apenas uma referncia para um futuro objeto. A criao do objeto propriamente dito feita com a utilizao do operador new: cc = new ContaCorrente(); Os dois passos podem ser feitos de uma s vez: ContaCorrente = new ContaCorrente();

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 97 -

i580 Java Programming

Encapsulamento
Encapsulamento:
Manter dentro da classe seus mtodos e propriedades. Facilita a manuteno.

Ocultamento:
Esconder como os objetos funcionam internamente e o que eles sabem atrs de uma interface. Atravs dos modificadores de visibilidade temos como obter o encapsulamento e o ocultamento. Regra bsica: variveis de instncia private e mtodos de acesso public.

- 98 -

No cdigo abaixo, todos os atributos foram declarados como private, ou seja, apenas a classe poder alter-los diretamente. Mas e se for necessrio alterar ou recuperar os atributos desta classe? Devem ser criados mtodos de acesso, ou seja, mtodos que alterem ou recuperem o valor de determinado atributo (como o mtodo consultarSaldo por exemplo). Esta abordagem torna a manuteno do cdigo mais simples e eficiente. public class ContaCorrente { private int numero; private String titular; private double saldo; private String senha; public void sacar(double valor) { saldo -= valor; } public void depositar(double valor) { saldo += valor; } public double consultarSaldo() } { return saldo; }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 98 -

i580 Java Programming

Encapsulamento
A Classe um mdulo, contendo dados (propriedades) e operaes (mtodos). O objeto referenciado como um mdulo nico.
public class Data { ... } public class UsaData { public static void main(String [] args) { Data hoje = new Data(); ... Data ontem = new Data(); ... } }

- 99 -

O Encapsulamento um dos recursos mais importantes da Orientao a Objetos. Atravs desse conceito concebemos uma Classe como um mdulo contendo dados e operaes em um nico local. Sempre que precisamos lidar com um objeto, o referenciamos como um mdulo nico. O Encapsulamento um conceito que significa proteger dados internos da classe, tornando-os disponveis apenas atravs de mtodos. Esse recurso importante se desejarmos garantir que os dados internos da classe s sero alterados sob determinadas condies. Uma Conta-Corrente, por exemplo, s deve alterar o seu saldo dentro de limites pr-estabelecidos pelo banco. O Ocultamento de dados implementado atravs da Visibilidade mais restrita - protegida ou privada.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 99 -

i580 Java Programming

Encapsulamento
public class Funcionario { protected int matricula; protected String nome; protected String departamento; ... public int getMatricula() { return matricula; } Propriedades

Mtodos

public void setMatricula(int novaMatricula) { matricula = novaMatricula; } ... }

- 100 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 100 -

i580 Java Programming

Propriedade
As propriedades so os dados que guardam as caractersticas e o estado dos objetos criados a partir da classe. o que a classe sabe.

Qual o problema de declarar as propriedades como public public?


- 101 -

As propriedades ou atributos so os dados que guardam as caractersticas e o estado dos objetos criados a partir da classe. o que a classe sabe. Uma casa, como qualquer outra casa, tem uma aparncia externa. A casa pode estar pintada de azul, amarelo, verde, etc. A classe pode ter uma propriedade que se refere a sua aparncia externa, j que cada objeto tem uma informao diferente. Um outro exemplo de um relgio digital. Os circuitos internos do relgio calculam o tempo ciclicamente e o exibe em um mostrador. Podemos dizer que o relgio tem as propriedades hora e minuto atualizadas ciclicamente.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 101 -

i580 Java Programming

Propriedade
As propriedades guardam valores para atributos de uma classe de objetos. Em geral, as propriedades so de tipos primitivos, porm podem ser de tipos complexos, dependendo do relacionamento entre as classes envolvidas. Por exemplo, Fornecedor uma classe que se relaciona com Produto e por esse motivo possvel que tenha uma propriedade que represente os produtos que ele fornece.

- 102 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 102 -

i580 Java Programming

Propriedades de Instncia
Propriedades de Instncia so aquelas declaradas dentro da definio da classe e que todo objeto da classe possui um prprio. So dinmicas.
public class Empregado { private int idade; private boolean permiteEscrita; private String nome; ... } Observe que foi colocado private private para proteger as propriedades
- 103 -

As variveis de instncia so inicializadas pelo Java se no fizermos uma inicializao especfica. No caso de variveis de tipos primitivos temos que os nmeros so inicializados com zero, os lgicos com false e os caracteres com \u0000. No caso de referncias para objetos, temos que elas so inicializados com um valor igual a null, que indica que a referncia no aponta para nenhum objeto especfico. Lembre-se de que null uma palavra reservada e pode ser utilizada com o operador de igualdade para verificarmos se um objeto est inicializado ou no. if (emp == null) // inicializo o objeto? emp = new Empregado(); No necessrio que faamos uma referncia igual a null para liberar a memria. O sistema de coleta de lixo do Java controla isso para ns. Podemos atribuir uma referncia a outra normalmente. Nesse caso, as duas passam a apontar para o mesmo objeto.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 103 -

i580 Java Programming

Propriedades de Classe
Propriedades de classe so aquelas que so compartilhadas por todas as instncias da classe. So estticas.
public class Empregado { private int idade; private String nome; private static double ultimaMatricula = 8; }

- 104 -

Uma varivel de classe ao usarmos o modificador static na declarao da mesma. public class Empregado { private int idade; private String nome; private static double ultimaMatricula = 8; ... } As variveis de classe so inicializadas no momento em que a classe carregada pela JVM para uso na primeira vez. No faa a inicializao dentro de um construtor visto que no preciso que um objeto exista para que a varivel de classe possa ser utilizada. Os valores de inicializao das variveis de classe so idnticos aos das variveis de instncia, caso no seja fornecido um valor especfico, como no caso do exemplo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 104 -

i580 Java Programming

Mtodo
O termo mtodo representa as funcionalidades inerentes classe. o que a classe faz.
public class Data { private int dia; private int ms; private int ano; public void mudaDia(int novoDia) { if(novoDia >= 1 && novoDia <=31) { dia = novoDia; } } ... }
- 105 -

O termo mtodo representa as funcionalidades inerentes classe. Esse termo usado porque essas funcionalidades esto, na maioria das vezes, ligadas s propriedades da classe. o que a classe faz. No exemplo do relgio, os nmeros do mostrador tm uma lgica. Para alterar o mostrador no podemos simplesmente exibir um nmero qualquer. Existe um mtodo para fazer isso. No caso da cor da casa tambm. Se ns desejamos representar uma alterao na cor da casa, devemos utilizar um mtodo que pinte a casa e altere a sua cor.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 105 -

i580 Java Programming

Mtodos de Instncia
Mtodos de Instncia so aqueles declarados dentro da definio da classe e que todo objeto possui individualmente. So dinmicos.
public class Empregado {... public void defineIdade(int campo) { idade = campo; } public int retornaIdade() { return idade; } }
- 106 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 106 -

i580 Java Programming

Mtodos de Classe
Mtodo de Classe o mtodo que compartilhado por todas as instncias e dispensa a criao do objeto. So estticos.
public class Empregado { ... public static void defineUltMatr(double valor) { ultimaMatricula = valor; } }

Empregado.defineUltMatr(50);
- 107 -

Usamos mtodos de classe para acessar variveis de classe e para fazer bibliotecas de mtodos que executem funes genricas. Um exemplo a classe Math que disponibiliza uma srie de mtodos de classe que executam funes matemticas. Outro exemplo de mtodo de classe o mtodo main(). Para chamarmos um mtodo de classe devemos usar o nome da classe e a notao ponto como no exemplo abaixo: public class Empregado { private int idade; private String nome; private static double ultimaMatricula= 8; ... public static void defineUltMatr(double valor) { ultimaMatricula = valor; } } Empregado.defineUltMatr(50); Podemos ter sobrecarga de mtodos de classe, do mesmo jeito que nos mtodos de instncia.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 107 -

i580 Java Programming

Sintaxe dos Mtodos


O programador v os mtodos sob dois aspectos:
Declarao: quando o programador deseja criar um mtodo para implementar alguma operao. Utilizao: quando o programador conhece a sintaxe de um mtodo e deseja us-lo nos seus programas.
Lembre-se das bibliotecas de classes da UA 1.

- 108 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 108 -

i580 Java Programming

Mtodos Set e Get


Utilizados para atribuir ou retornar os valores dos atributos da classe. Garantem o formato de retorno e validam valores inseridos. So padro na programao orientada a objetos.
public class ContaCorrente { private int numero; private String titular; public void setNumero(int valor){ numero = (valor<0)? 0 : valor; } public int getNumero(){ return numero; } public void setTitular(String valor){ ... } public String getTitular(){ ... } }

- 109 -

Existe uma conveno para nomear os mtodos de acesso: mtodos que retornam atributos comeam com get (ou is para boolean) e mtodos que alteram atributos comeam com a palavra set. Esta nomenclatura importante pois existem ferramentas e tecnologias que utilizam estes nomes para a execuo de determinadas tarefas. Por exemplo, servlets se comunicam com pginas JSP usando get e set, atributos de tags so especificados com mtodo set etc. A princpio a utilizao destes mtodos simples pode parecer perda de espao e desempenho. Entretanto deve-se lembrar do objetivo principal da sua existncia: oferecer acesso a atributos que esto protegidos de acesso externo. Ou seja, mantendo-se a premissa de que os atributos no podem ser acessados diretamente, os mtodos de acesso so a nica soluo possvel. Alm disso, o uso de mtodos de acesso traz conseqncias positivas: organizao do cdigo e facilidade de manuteno. Supondo que o banco j esteja funcionando e que uma alterao seja solicitada: o nome do titular deve ser recuperado sempre no formato Sobrenome, nome. Usando ocultamento esta alterao fica muito fcil pois existe a certeza de que o nome do titular recuperado sempre a partir do mtodo getTitular. Assim, basta inverter o nome dentro deste mtodo que todas as outras classes que a utilizam passaro a funcionar de acordo com a nova regra.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 109 -

i580 Java Programming

Sobrecarga de Mtodos
Ocorre quando existe mais de um mtodo com o mesmo nome em uma classe. Para que isso seja possvel os mtodos devem ter assinaturas diferentes . Assinatura - formada pelo nome do mtodo, junto com o nmero e os tipos dos parmetros. O tipo de retorno no considerado.
- 110 -

A Assinatura de um Mtodo formada pelo nome do mtodo, junto com a quantidade e os tipos dos argumentos (parmetros) do mtodo (no levado em considerao o tipo de retorno dos mtodos). Existem muitas classes em Java que fazem uso da sobrecarga de mtodos. O exemplo abaixo possui trs mtodos com o mesmo nome: public class Empregado { ... public void defineCampo(int valor){ idade = valor; } public void defineCampo(String valor){ nome = valor; } public int defineCampo(int valor1, String valor2){ idade = valor1; nome = valor2; } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 110 -

i580 Java Programming

Sobrecarga de mtodos
public void defineCampo(int valor){ idade = valor; } public void defineCampo(String valor){ nome = valor; } public int defineCampo(int valor1, String valor2){ idade = valor1; nome = valor2; }

//Exemplo de chamada de mtodo sobrecarregado ... emp.defineCampo(32); emp.defineCampo(Maria); emp.defineCampo(40, Roberto); ... emp.defineCampo(12f); // Erro!!!!
- 111 -

Na hora da chamada de um dos mtodos, o compilador Java escolhe o mtodo correto baseado nos parmetros fornecidos. Se no encontra um mtodo compatvel com os argumentos, depois de tentar as converses de tipo possveis, ele acusa o erro. ... emp.defineCampo(32); emp.defineCampo(Maria); ... emp.defineCampo(12f); // Erro!!!!

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 111 -

i580 Java Programming

Construtores
So mtodos especiais que as classes possuem e que servem para executar inicializaes. Devem obrigatoriamente ter o mesmo nome que a classe a qual pertencem e no possuem tipo de retorno. Usam o conceito de sobrecarga de mtodo. Toda classe Java tem pelo menos um construtor (construtor default).
Basta criar um construtor qualquer para que o construtor default que Java atribui classe deixe de existir
- 112 -

Quando um objeto criado, as variveis de instncias so inicializadas pelo Java, caso no seja fornecida uma inicializao explcita como no exemplo abaixo: public class Empregado { private int idade = 10; private String nome = null; ... } Isso resolve o problema no caso de uma inicializao simples. Mas e no caso de uma inicializao mais elaborada, mais complexa, onde necessrio chamar funes, executar clculos complexos, realizar um conjunto de tarefas? Nesta situao so usados mtodos especiais chamados de construtores. Toda classe Java possui um construtor. Se por acaso um construtor no for definido explicitamente, ser criado um construtor sem parmetros, denominado construtor padro ou default.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 112 -

i580 Java Programming

Construtores
public class ContaCorrente { public ContaCorrente(int novoNmero, String novoTitular) { nmero = novoNmero; titular = novoTitular; senha = ""; saldo = 0.0; } public ContaCorrente(int novoNmero, String novoTitular, double novoSaldo) { nmero = novoNmero; titular = novoTitular; saldo = novoSaldo; senha = ""; } }

Os construtores de ContaCorrente se diferenciam pelos parmetros


- 113 -

Geralmente os construtores so declarados com visibilidade pblica, pois a criao de objetos normalmente realizada fora da classe. Entretanto, outros modificadores podem ser utilizados conforme a necessidade. No exemplo acima, existem dois construtores para a classe, um com dois argumentos e um com trs argumentos. Foi usada a sobrecarga de mtodos para facilitar a programao. Cada construtor define uma maneira diferente de se construir um objeto. Assim, a partir do exemplo acima, existem duas maneiras de construir objetos da classe ContaCorrente: ContaCorrente cc1 = new ContaCorrente(1, Matheus Bodoque); ContaCorrente cc2 = new ContaCorrente(2, Marialva Edilena, 200.0); Como foram criados construtores para a classe, o construtor padro no ser criado automaticamente. Portanto o comando abaixo causar um erro de compilao: ContaCorrente cc3 = new ContaCorrente();

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 113 -

i580 Java Programming

Referncia this
Palavra implcita de todos os mtodos de instncia. Refere-se ao objeto atual sobre o qual o mtodo foi chamado. Obrigatrio quando:
o nome da varivel for igual ao nome de um argumento formal passado pelo mtodo de instncia. for necessrio passar uma referncia ao objeto atual como parmetro para outro mtodo.

Tambm usado para chamar um construtor da prpria classe.

- 114 -

Todos os mtodos de instncia possuem uma palavra implcita chamada this, e que pode ser usado dentro de qualquer mtodo. Ele se refere ao objeto atual sobre o qual o mtodo foi chamado. Ele ser necessrio nos casos abaixo: Quando o nome da varivel de instncia igual ao nome de um argumento formal passado pelo mtodo de instncia, como no exemplo:
public ContaCorrente(int nmero, String titular, String senha, double saldo) { this.nmero = nmero; this.titular = titular; this.saldo = saldo; this.senha = senha; }

Nesse caso, a referncia this foi usada para a distino entre a varivel de instncia e o parmetro formal. Quando for necessrio passar uma referncia ao objeto atual como parmetro para outro mtodo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 114 -

i580 Java Programming

Chamando Outros Construtores


Para chamar outro construtor da mesma classe deve-se usar a palavra this. Esta operao s vlida dentro de construtores, ou seja, no possvel chamar um construtor de dentro de outro mtodo. A chamada ao construtor deve ser o primeiro comando.

- 115 -

Cdigo comum pode ser compartilhado entre os construtores de uma classe atravs da sintaxe this(), como mostrado a seguir:
public ContaCorrente(int nmero, String titular, String senha, double saldo) { this.nmero = nmero; this.titular = titular; this.saldo = saldo; this.senha = senha; } public ContaCorrente(int nmero, String titular) { this(nmero, titular, "", 0.0); }

Aqui, o segundo construtor executa o cdigo que est no primeiro construtor. Essa construo evita que cdigo seja duplicado desnecessariamente entre os construtores e assegura que, qualquer alterao que seja feita no primeiro construtor, seja automaticamente realizada nos construtores que a chamam. O detalhe que deve ser observado que a chamada a this() deve ser feita obrigatoriamente na primeira linha do construtor e que os argumentos que porventura sejam passados correspondam aos argumentos de um construtor existente na classe. Alm disso, s possvel usar o this desta forma dentro de construtores.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 115 -

i580 Java Programming

Laboratrio
Empresa CultBook - site de comrcio de livros. Objetivos Bsicos:
Construir a estrutura do sistema atravs dos pacotes controller.console, model e view.console. Implementar as classes Cliente e Endereco no pacote model de acordo com o diagrama de classes de negcio.
Crie os mtodos Get e Set. Crie os construtores (se precisar, crie sobrecargas).

Implementar um classe de testes que crie objetos das classes de negcio, inicialize-os e mostre seus dados.

- 116 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 116 -

i580 Java Programming

2.2 Herana
Bloco de Construo do Aprendizado

- 117 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 117 -

i580 Java Programming

2.2 - Herana
Voc aprender: Classe Object. Herana. Referncia super. Anotaes. Sobrescrita de mtodos.

- 118 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 118 -

i580 Java Programming

A classe Object
A classe Object a superclasse de todas as classes do Java e definida em java.lang. Esta herana implcita, no precisa ser especificada no cdigo. Toda classe herda os mtodos definidos pela classe Object. O mtodo toString, por exemplo, chamado sempre que uma converso para String for necessria.
- 119 -

A herana em Java especificada pela palavra reservada extends. Se ela no for usada, a superclasse implicitamente Object definida em java.lang. Isto feito porque a classe Object fornece uma srie de mtodos e atributos que asseguram o bom funcionamento de todo e qualquer objeto criado dentro da linguagem, j que todas as classes so derivadas da mesma.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 119 -

i580 Java Programming

Herana
a possibilidade de se criar classes a partir de outras j existentes. As classes derivadas contm todos os atributos e mtodos da classe base. Para criar uma classe a partir de outra usa-se a palavra reservada extends
class SuperClasse {} class SubClasse extends SuperClasse {}

- 120 -

A herana uma das razes do surgimento e uma das principais vantagens da orientao a objetos. Ela torna possvel a reutilizao de cdigo de maneira eficiente e possibilita a diminuio do tempo de criao e de manuteno de programas complexos. Por meio da herana possvel criar hierarquias de classes. A linguagem Java possui algumas classes genricas como ponto de partida para a criao de classes mais especficas e com maior funcionalidade. Esse esquema chamado de hierarquia de classes ou rvore de derivao. A classe ContaEspecial herda todas as caractersticas (mtodos e atributos) da classe ContaCorrente. Por sua vez, as classe Professor e Aluno herdam todas as caractersticas da classe Pessoa. Assim, uma ContaEspecial uma ContaCorrente da mesma forma que Professor e Aluno so Pessoas. Construtores no so herdados e no existe herana mltipla em Java.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 120 -

i580 Java Programming

Banco Money
O Banco Money precisa controlar dois tipos de contas: Conta Corrente e Conta Especial A Conta Especial uma Conta Corrente mas possui um limite adicional.

- 121 -

A nova classe (ContaEspecial) possui um atributo a mais denominado limite. Este atributo indica o valor que a conta pode ficar negativa e tem impacto sobre a operao de saque. Abaixo os trechos relevantes de ambas as classes: public class ContaCorrente { private int nmero; private String titular; private double saldo; private String senha; private static double CPMF = 0.38; } public class ContaEspecial extends ContaCorrente { private double limite; }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 121 -

i580 Java Programming

Criao de Objetos
Um objeto criado a partir de uma subclasse possuir todos os atributos tanto da subclasse quanto da superclasse. Portanto, a criao do objeto ce:
ContaEspecial ce = new ContaEspecial();

Ficaria assim na memria:

- 122 -

Considerando-se a hierarquia ContaCorrente-ContaEspecial, a criao de um objeto da classe ContaEspecial feita da seguinte forma: ContaEspecial ce = new ContaEspecial(); Este comando cria um objeto em memria que contm todos os atributos e mtodos de ContaEspecial, ContaCorrente e Object. claro que todos os mtodos de ContaCorrente e Object tambm estaro disponveis para este objeto.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 122 -

i580 Java Programming

Hierarquia de Construtores
O comando:
ContaEspecial ce = new ContaEspecial();

Chama o construtor padro da classe. O construtor da classe por sua vez, chama o construtor padro da superclasse e assim sucessivamente at alcanar o construtor padro da classe Object.

- 123 -

Quando um objeto de uma classe derivada criada, uma srie de passos so tomados pelo ambiente de execuo Java. A primeira coisa que se deve saber que nenhum construtor herdado. Ou seja, a classe possui apenas os construtores que definidos explicitamente ou, caso contrrio, o construtor padro fornecido pela linguagem, que no faz nada e no recebe argumentos. Ento, no caso do exemplo, a classe ContaEspecial possui apenas o construtor padro e pode ser usada para criar um objeto da seguinte forma: ContaEspecial ce = new ContaEspecial(); Ao executar a instruo o Java faz o seguinte: chamado para execuo o construtor sem argumentos que no faz nada (construtor padro) da classe pai. E isso vai sendo feito at que seja alcanada a classe Object, que tambm ter seu construtor executado. chamado o construtor que est definido na instruo e que ir inicializar os atributos especficos da classe e modificar, se essa for inteno, aqueles atributos que foram herdados. Logo, no exemplo acima, antes de ser executado o construtor ContaEspecial(), so executados os construtores, na seguinte ordem: Object(), ContaCorrente() e ContaEspecial(). Caso no exista algum dos construtores, um erro gerado em tempo de compilao.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 123 -

i580 Java Programming

Hierarquia de Construtores

- 124 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 124 -

i580 Java Programming

Hierarquia de Construtores

Esse comportamento automtico na linguagem Java


- 125 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 125 -

i580 Java Programming

Referncia super
Usada para referenciar a superclasse. super() se refere, dentro de um construtor, ao construtor existente na superclasse. Deve ser a primeira linha do construtor. Se no houver uma instruo super() ou this() explcita em um construtor, Java coloca uma chamada super() implcita.
- 126 -

A palavra reservada super pode ser utilizada quando a classe possuir uma superclasse. O primeiro uso para realizar a chamada ao construtor da superclasse. Neste caso ela deve ser a primeira linha do construtor e receber os parmetros de acordo com os parmetros especificados em algum construtor da superclasse. Se no for chamado nenhum construtor da superclasse ento o construtor chamado a partir da chamada a super(). Se este construtor no existir na superclasse, um erro de compilao ser gerado. O exemplo abaixo mostra a chamada correta de um construtor da superclasse ContaCorrente a partir do construtor da classe ContaEspecial: public class ContaEspecial extends ContaCorrente { private double limite; public ContaEspecial(int nmero, String titular, String senha, double saldo, double limite) super(nmero, titular, senha, saldo); this.limite = limite; } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 126 -

i580 Java Programming

Sobrescrita de Mtodos
Consiste em definir, em alguma subclasse, um mtodo com a mesma assinatura (mesmo nome e mesmos argumentos) e mesmo tipo de retorno de uma superclasse. Se for necessrio chamar o mtodo sobrescrito da superclasse pode ser usada a palavra super: super.mtodo(); A partir da verso 5 sugere-se a utilizao da anotao @Override antes do mtodo sobrescrito.
- 127 -

A subclasse herda os mtodos e atributos de sua superclasse. Se for necessrio usar um mtodo a partir de um objeto criado, basta cham-lo normalmente. Portanto, depois da criao do objeto ce: ContaEspecial ce = new ContaEspecial(); Os mtodos depositar e consultarSaldo podem ser chamados diretamente: ce.depositar(750); System.out.println(ce.consultarSaldo()); Esses mtodos tm seu funcionamento igual ao da superclasse. Entretanto, se houver necessidade de um funcionamento diferente ao do oferecido pelo mtodo da superclasse o mtodo dever ser reescrito na subclasse. Para reescrever um mtodo para cri-lo na subclasse com a mesma assinatura e mesmo tipo de retorno. A partir da verso 5 do Java, deve-se colocar a anotao @Override antes da definio do mtodo. Para chamar o mtodo da superclasse dentro do mtodo reescrito deve-se usar a palavra reservada super sucedida do nome do mtodo original. Um mtodo muito interessante de se reescrever o toString. Este mtodo pode retornar uma representao em String do referido objeto em formato prprio, XML, HTML, etc.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 127 -

i580 Java Programming

Banco Money
O mtodo sacar deve ser reescrito na classe ContaEspecial, pois o limite deve ser considerado na verificao do saldo:

- 128 -

A classe ContaEspecial herda os membros de ContaCorrente mas existe um mtodo da superclasse que deve ser reescrito: sacar. O saque em uma ContaEspecial diferente pois o correntista pode sacar mais dinheiro do que tem. Portanto, este mtodo deve ser reescrito na subclasse: public class ContaEspecial extends ContaCorrente { private double limite; @Override public void sacar(double valor) { if (valor <= limite + getSaldo()) super.sacar(valor); } ... } Repare que o mtodo possui a mesma assinatura e retorno do mtodo definido na superclasse ContaCorrente. Em sua implementao utilizado o atributo limite diretamente mas o atributo saldo acessado a partir de seu mtodo getSaldo. Isto necessrio pois o atributo saldo definido na superclasse como private. Caso a condio seja verdadeira, o mtodo sacar da superclasse chamado. Ou seja, foi reaproveitado o cdigo existente na superclasse ContaCorrente.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 128 -

i580 Java Programming

Exerccio
Criar classes de entidade para o diagrama abaixo:

Criar uma classe de teste FolhaPagamento que instancie um funcionrio e um vendedor e execute o mtodo calcularSalario.
- 129 -

Instrues: 1. A matrcula, nome, cargo e salrio so propriedades inicializadas por um construtor da classe Funcionario. 2. calcularSalario um mtodo que exibe informaes (System.out.println(...)), conforme o exemplo abaixo: Matrcula Nome Cargo. Salrio Bruto (propriedade salrio). Salrio Lquido (descontar o IRPF, conforme a regra). 3. A classe Vendedor deve sobrescrever calcularSalario de forma a considerar a comisso. 4. A classe Vendedor deve ter um construtor que inicialize a comisso e o total de vendas do ms. Regra fictcia (simplificada) do IRPF (Imposto de Renda de Pessoa Fsica): Salrio at R$1.000,00 = insento. De R$1.000,00 a R$3.000,00 = 15% de imposto. Acima de R$3.000,00 = 20% de imposto.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 129 -

i580 Java Programming

2.3 Conceitos Avanados


Bloco de Construo do Aprendizado

- 130 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 130 -

i580 Java Programming

2.3 - Conceitos Avanados


Voc aprender: Polimorfismo. Operador instanceof. Modificador final. Classes Abstratas. Interfaces.

- 131 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 131 -

i580 Java Programming

Polimorfismo
Polimorfismo a capacidade de decidir em tempo de execuo qual mtodo deve ser chamado. Para que o polimorfismo seja possvel so necessrios:
Uma hierarquia de classes onde existam mtodos sobrescritos = Herana. A possibilidade de se criar um objeto de uma subclasse e coloc-lo em uma referncia de uma superclasse.

Facilita o desenvolvimento de sistemas pois evita a necessidade de se sabe em tempo de compilao qual objeto deve ser chamado.
- 132 -

Polimorfismo uma caracterstica da orientao a objetos na qual a chamada a um mtodo pode executar mtodos diferentes em momentos diferentes. A existncia de uma hierarquia de classes onde existam mtodos sobrescritos imprescindvel para o polimorfismo. Alm disso a linguagem deve permitir que um objeto de uma subclasse possa ser atribudo a uma referncia de uma superclasse. Assim, dada a hierarquia de pessoa, aluno e professor vista anterioremente, possvel criar objetos da seguinte maneira: Pessoa pessoa1 = new Aluno(); Pessoa pessoa2 = new Professor(); Isto possvel pois aluno uma pessoa e professor tambm uma pessoa. O polimorfismo ocorre quando feita uma chamada a um mtodo sobrescrito a partir de uma referncia a uma superclasse. Assim, supondo que as classes Pessoa, Aluno e Professor possuam o mtodo mostrar, as chamadas abaixo so possveis: pessoa1.mostrar(); pessoa2.mostrar(); Nestes casos os mtodos chamados so os mtodos dos respectivos objetos criados anteriormente. Na primeira linha chamado o mtodo mostrar da classe Aluno e na segunda, da classe Professor. O mtodo mostrar da classe Pessoa no chamado neste exemplo. Ele serviu apenas para o compilador aceitar o cdigo como vlido.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 132 -

i580 Java Programming

Polimorfismo
Sobrecarga e sobrescrita so exemplos de usos do polimorfismo. O Polimorfismo pode ser verificado tambm em classes diferentes, que no tm nada a ver uma com a outra. O Polimorfismo para valer o obtido a partir da sobrescrita de mtodos. Vamos ver um exemplo de uso do Polimorfismo atravs do mtodo toString.

- 133 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 133 -

i580 Java Programming

Sobrescrevemos o mtodo toString toStringherdado de Object nas duas classes


- 134 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 134 -

i580 Java Programming

Polimorfismo

O m mtodo toString toString existe nos trs objetos por heran herana, mas na hora de executar cada objeto roda o seu, independente do tipo da referncia
- 135 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 135 -

i580 Java Programming

Banco Money
A classe Agncia contm todas as contas de uma determinada agncia. Ela tem os mtodos:
inserirConta que recebe uma conta como parmetro calcularTotal que calcula o valor total de dinheiro que deve ser disponibilizado para os clientes

- 136 -

A classe Agencia uma fbrica de objetos do tipo ContaCorrente mas deve armazenar objetos de qualquer subclasse desta. O mtodo inserirConta insere uma conta na posio adequada: public void inserirConta (ContaCorrente conta) { contas[qtde++] = conta; } O mtodo calcularTotal varre todo o vetor de contas e retorna o valor total de dinheiro que deve ser disponibilizado caso todos os clientes do banco resolvam retirar seus saldos ao mesmo tempo: public double calcularTotal() { double total = 0; for (int i = 0; i < qtde; i++) total += contas[i].consultarSaldo(); return total; }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 136 -

i580 Java Programming

Polimorfismo
Passagem de Parmetros: mtodo inserirConta recebe uma conta (ContaCorrente) como parmetro. A passagem de uma ContaEspecial como parmetro aceita:

- 137 -

O mtodo inserirConta insere uma conta dentro do vetor e pode ser usado para inserir objetos tanto de ContaCorrente quanto de ContaEspecial: ContaCorrente cc = new ContaCorrente(1,J", 123", 100); ContaEspecial ce = new ContaEspecial(2,B", 1",10, 500); inserirConta(cc); inserirConta(ce); A extensibilidade do sistema facilitada pois qualquer classe nova pode ser criada dentro da hierarquia sem que o mtodo inserirConta precise ser alterado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 137 -

i580 Java Programming

Polimorfismo
Vetor de referncia: o mtodo calcularTotal deve passar por todas as contas da agncia e recuperar o saldo de cada uma. Exemplo (vetor contendo duas contas: uma ContaCorrente e uma ContaEspecial):

- 138 -

O vetor de contas correntes do tipo ContaCorrente mas pode receber objetos de qualquer subclasse. Na chamada a algum mtodo de um item do vetor, o mtodo do objeto correto invocado: public double calcularTotal() { double total = 0; for (int i = 0; i < qtde; i++) total += contas[i].consultarSaldo(); return total; }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 138 -

i580 Java Programming

Operador instanceof
Retorna um valor lgico indicando se o objeto uma instncia de uma determinada classe.
if (contas[i] instanceof ContaEspecial) { ContaEspecial ce = (ContaEspecial) contas[i]; total += ce.getLimite(); }

- 139 -

O operador instanceof serve para verificar se um objeto pertence a uma determinada instncia. usado principalmente em situaes nas quais necessrio chamar um mtodo especfico de um objeto de uma subclasse. No exemplo do Banco Money, a classe Agncia possui um vetor de contas correntes. Se for necessrio verificar se alguma destas contas uma ContaEspecial, o operador usado. Em seguida feito um type cast e o mtodo especfico (getLimite) chamado. Desta forma evitam-se erros em tempo de execuo por problemas de type cast. if (contas[i] instanceof ContaEspecial) { ContaEspecial ce = (ContaEspecial) contas[i]; total += ce.getLimite(); } A chamada ao mtodo tambm poderia ter sido feita em apenas uma linha: total += ((ContaEspecial)contas[i]).getLimite();

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 139 -

i580 Java Programming

Modificador final
Uma propriedade final uma constante. Um mtodo final no pode ser sobrescrito. Uma classe final no pode ter subclasses.
public double final PI = 3.1415f; public final boolean verificarSenha(String senha) { ... } public final class String { ... }

- 140 -

O modificador final pode ser utilizado tanto com variveis quanto com mtodos e classes. Uma varivel marcada com a palavra reservada final no permite que o seu valor seja alterado aps a primeira atribuio. Ou seja, a varivel passa a ser uma constante. public final double PI = 3.1415f; Variveis do tipo final devem ser inicializadas na declarao ou em algum construtor. Um mtodo marcado como final significa que ele no pode ser sobrescrito por nenhuma classe filha. Com isso, garantida a otimizao na execuo (j que a JVM no precisar resolver o mtodo em tempo de execuo) e segurana. public final boolean verificaSenha(String senha) { ... } Uma classe marcada como final no pode ter nenhuma filha, no pode ser estendida ( folha na rvore de derivao). Faa isso com critrio, sempre com base no seu projeto. public final class String { ... }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 140 -

i580 Java Programming

Classes Abstratas
uma classe da qual no se pode criar objetos. Para indicar que uma classe abstrata, deve ser usada a palavra reservada abstract.

- 141 -

Em certas situaes podem surgir durante a anlise e projeto de um sistema, superclasses que contm caractersticas de vrias subclasses mas que no devem ser instanciadas, seja porque esto incompletas, seja porque esta instanciao no faz sentido naquele contexto. Por exemplo, considerando-se a hierarquia Pessoa, Professor e Aluno de uma universidade vista anteriormente. No faz sentido para este sistema a instanciao de um objeto da classe Pessoa. Apenas alunos e professores tem significado completo para o sistema da universidade. Assim, a classe Pessoa pode ser declarada como abstrata: public abstract class Pessoa { private String nome; public String getNome() { return nome; } ... } Uma classe abstrata pode ter mtodos implementados, como o caso da classe acima.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 141 -

i580 Java Programming

Classes Abstratas
Deseja-se impedir a criao de instncias da classe Funcionario sem perder as vantagens da programao Orientada a Objetos. A classe Funcionario declarada como abstrata.

- 142 -

A classe Funcionario existe com o nico, mas no menos importante, propsito de modelar perfeitamente o nosso problema, para que sejam aproveitadas de forma completa, todas as vantagens oferecidas pelo paradigma de programao orientada a objetos.Assim, a classe Funcionario uma candidata forte a se tornar uma classe abstrata. Uma classe ou um mtodo considerado abstrato atravs da utilizao da palavra chave abstract: public abstract class Funcionario { String matricula; String nome; String cargo; Date dataAdmissao; Date dataDemissao; } As subclasses de Funcionario no precisam ter suas definies alteradas. Funcionario f = new Funcionario(); Agora a instruo acima retorna um erro em tempo de compilao j que no se pode instanciar objetos de classes abstratas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 142 -

i580 Java Programming

Mtodos Abstratos
um mtodo existente em uma classe abstrata que no possui implementao. Deve ser obrigatoriamente implementado pelas classes filhas concretas. A existncia de um mtodo abstrato obriga que a classe seja abstrata.

- 143 -

O mtodo abstrato no possui corpo, s o cabealho (tambm conhecido por assinatura do mtodo). No lugar das chaves deve ser colocado um ponto e vrgula indicando que a declarao do mtodo abstrato est terminada. Qualquer subclasse no-abstrata criada a partir da classe Funcionrio deve implementar o seu mtodo abstrato calcularSalario. Se houver alguma subclasse que no faa esta implementao, ela tambm deve ser declarada como abstrata. A nova definio da classe Funcionario possui mtodos no-abstratos (demitir) e um mtodo abstrato (calcularSalario): public abstract class Funcionario { ... public void demitir() { ... } public abstract double calcularSalario(); }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 143 -

i580 Java Programming

Criao de Interfaces
similar a uma classe abstrata, com a diferena que no possui nenhum mtodo concreto ou variveis de instncias. Possui apenas mtodos abstratos. Visa a padronizao de grupos de classes que possam ser reconhecidas por funcionalidades comuns.
public interface Despertador { public void ajustaHora(...); public void ajustaDespertador(...); public void paraDespertador(); }
- 144 -

A interface descreve um aspecto do comportamento que vrias classes podem precisar possuir. A linguagem Java possui vrias interfaces e que estaro sendo utilizadas com mais detalhes daqui para a frente. Usamos a palavra reservada interface ao invs de classe. A interface semelhante mas no uma classe. Tambm no precisamos colocar para os mtodos public abstract porque, por estarem declarados em uma interface, eles j so considerados como tal. Mesmo caso para as variveis que so public static final. Podemos colocar esses modificadores em ambos os casos, mas no faria a menor diferena.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 144 -

i580 Java Programming

Implementao de Interfaces
Uma classe pode implementar quantas interfaces precisar alm de estender uma classe. Para isso fornea a lista de nomes de interface separados por vrgulas depois da palavra-chave implements
public class Celular extends Telefone implements Despertador { ... public void acertarHora(...) { ... } public void acertarDespertador(...) { ... } public void pararDespertador() { ... } }
- 145 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 145 -

i580 Java Programming

instanceof para Interfaces


Podemos usar o operador instanceof para saber se uma classe implementa uma determinada interface.
Nokia6600 nokia = new Nokia6600(); ... if(nokia instanceof Telefone) ... //true ou false? if(nokia instanceof Celular) ... //true ou false? if(nokia instanceof Despertador) ... //true ou false?

- 146 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 146 -

i580 Java Programming

Polimorfismo com Interfaces


Nokia6600 nokia = new Nokia6600(); Casio123 casio = new Casio123(); BrastempAx microondas = new BrastempAx(); ... this.desligarDespertador(nokia); this.desligarDespertador(casio); this.desligarDespertador(microondas); ... public void desligarDespertador(Despertador d) { d.pararDespertador(); }

- 147 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 147 -

i580 Java Programming

Polimorfismo com Interfaces


Despertador [] aparelhos = new Despertador[3]; ... Nokia6600 nokia = new Nokia6600(); Casio123 casio = new Casio123(); BrastempAx microondas = new BrastempAx(); ... aparelhos[0] = nokia; aparelhos[1] = casio; aparelhos[2] = microondas;

Que mtodos podemos usar nos objetos do array?


- 148 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 148 -

i580 Java Programming

Exerccio
Altere o exerccio anterior de forma a implementar o seguinte diagrama:

- 149 -

Instrues: 1. Crie a classe Mensalista como subclasse de Funcionario. 2. Copie o mtodo calcularSalario de Funcionario para Mensalista. 3. Altere o mtodo calcularSalario de Funcionario de forma a torn-lo abstrato. Voc ver que ser necessrio tornar a classe abstrata tambm. 4. Altere a classe Vendedor de forma a torn-lo subclasse de Mensalista. 5. Crie um mtodo esttico rodaFolha em FolhaPagamento que receba um array de Funcionario. 6. No mtodo main, crie um array de Funcionario com 2 exemplos: um Mensalista e um Vendedor. Chame o rodaFolha com esse array e veja o que ocorre. 7. Crie a classe Horista com a lgica de um funcionrio que trabalhou X horas neste ms. 8. Altere FolhaPagamento para testar a classe Horista, incluindo um horista no array de funcionrios.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 149 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 150 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 150 -

i580 Java Programming

3 Tratamento de Erros
Unidade de Aprendizado

- 151 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 151 -

i580 Java Programming

3 Tratamento de Erros
Voc aprender: Excees.

- 152 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 152 -

i580 Java Programming

3.1 Excees
Bloco de Construo do Aprendizado

- 153 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 153 -

i580 Java Programming

3.1 Excees
Voc aprender: O que Exceo? Hierarquia de Excees. Instrues de Tratamento de Erros. Lanamento de Excees. Criao de Excees.

- 154 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 154 -

i580 Java Programming

O que Exceo?
um evento que indica uma condio anormal que ocorreu dentro de um mtodo. Vantagens do tratamento de excees em Java
No possvel ignorar a exceo: o tratamento obrigatrio. Separa o cdigo de tratamento de erro da lgica do programa.

- 155 -

A exceo um evento que ocorre durante a execuo do nosso programa que indica que algo de anormal aconteceu. Devemos tratar as excees para que o nosso programa transmita confiabilidade para o usurio final. Em Java, erro e exceo so coisas distintas (tem relao, mas so distintas, tecnicamente falando). Um erro na verdade um tipo de exceo. As vantagens do tratamento de excees implementadas no Java so enormes. Primeiro, uma vez ocorrida uma exceo, o seu tratamento deve ser feito de forma obrigatria, o que no garantido nas linguagens tradicionais. A exceo enviada diretamente para o manipulador de erro apropriado, sem que precisemos nos preocupar com pilha de chamadas, etc. Segundo, diferentemente do que ocorre na programao estruturada, o cdigo de tratamento de exceo fica separado da lgica implementada pelo seu programa. Evita-se com isso duas coisas: aquele monte de variveis representando condies de erro que devem ser tratados e a difcil manuteno, j que o cdigo est todo misturado. Se um erro no foi previsto e acontece, o seu tratamento nas linguagens tradicionais faz com que tenhamos que alterar vrias linhas de cdigo. Em Java, o que precisamos fazer acrescentar o cdigo necessrio para o tratamento, sem ter alterar o que j estava escrito e funcionando.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 155 -

i580 Java Programming

O que Exceo?
Quando acontece um evento anormal criado um objeto representando a exceo. Mtodos que podem lanar excees so definidos com a palavra-chave throws. Um mtodo lana(throw) uma exceo conforme uma condio testada. Qualquer cdigo que possa dar erro colocado dentro de um bloco try. Um manipulador captura (catch) a exceo e d o tratamento necessrio.
- 156 -

Quando ocorre uma exceo dentro de um programa feito em Java, automaticamente gerado um objeto do tipo da exceo ocorrida (lembre-se de que tudo em Java, exceto os tipos primitivos, so objetos). Esse objeto contm algumas informaes bsicas como tipo, ponto onde a exceo ocorreu, onde ser capturada, descrio do erro e outras informaes. Esse objeto passado para o sistema de runtime da JVM que vai procurar em todos os mtodos da pilha de chamadas em questo algum que trate a exceo. Encontrando um mtodo que trate a exceo ocorrida, a JVM passa a exceo ao manipulador, que d o tratamento adequado. A esse processo dado o nome de captura da exceo. E se no houver ningum que trate a exceo? Simplesmente o programa aborta e a mquina virtual mostra uma mensagem informativa padro para a exceo ocorrida. O interpretador Java no trava. De fato o interpretador captura qualquer exceo no tratada pelo programa. Em outras linguagens, travamento do programa pode significar travamento do sistema operacional.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 156 -

i580 Java Programming

O que Exceo?
class Alfa main try { Beta b = new Beta(); b.metodo1(); } catch(MinhaExcecao e) { } class Beta metodo1 throws MinhaExcecao class Gama

Essa e a instrucao para propagar

metodo2 throws MinhaExcecao

Gama g = new Gama(); g.metodo2();

if(condio) { throw new MinhaExcecao(); }

Aqui a excecao e disparada try e catch sao instrucoes normalmente usadas na classe que faz interface com o usuario.

try e catch fazem o tratamento da excecao

Tratar ou Propagar a Exceo?


- 157 -

Propagar a exceo significa colocar a declarao throws no cabealho do mtodo indicando que exceo deve ser propagada. Propagar envolve deixar passar a exceo. s vezes o mtodo precisa propagar a exceo porque ele no o responsvel pelo problema ocorrido. Tratar a exceo significa colocar try...catch no cdigo de forma a proteger os mtodos que possam vir a disparar excees. Geralmente o tratamento feito na classe mais prxima da interface com o usurio.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 157 -

i580 Java Programming

Hierarquia de Excees

- 158 -

Todas as condies de erro so derivadas da classe Throwable. No devemos us-la em nossos programas, mas sim a hierarquia de classes de Exception quando estivermos definindo ou capturando excees. nesta classe que esto definidos os mtodos getMessage(), que retorna uma mensagem descrevendo detalhes do problema ocorrido, e printStackTrace(), que exibe a pilha de execuo indicando onde aconteceu o problema. A classe Error indica todos erros que so irrecuperveis e que, provavelmente, abortaro a execuo do programa. Esses erros podem ser de linkagem do programa (LinkageError), erro na mquina virtual (VirtualMachineError), etc. No devemos nos preocupar com esses erros em nossos programas, j que no poderemos dar um tratamento adequado. Estes devem ser percebidos durante o processo de testes. A classe Exception dividida em dois grandes grupos: O primeiro engloba todas as classes que esto na hierarquia de RuntimeException e so conhecidos por Unchecked Exceptions. Essas excees indicam problemas relacionados a erros de programao. No devemos fazer o tratamento dessas excees, pois o ideal acertar o cdigo do programa. So exemplos de excees desse tipo a ArithmeticException, a IllegalArgumentException, NullPointerException, IndexOutOfBoundsException e muitas outras. O segundo grupo engloba todas as classes que no so subclasses de RuntimeException - so chamadas de CheckedExceptions. Essas excees devem ser capturadas e tratadas em algum lugar do nosso programa sob pena de no conseguirmos compilar o mesmo. Indicam problemas que podem ocorrer independentemente de termos feito um programa logicamente correto. So exemplos desse grupo a IOException, a SQLException, etc.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 158 -

i580 Java Programming

Instrues de Tratamento de Erros

- 159 -

A primeira forma de tratamento de excees fazendo uso da instruo try...catch...finally. Caso tenhamos instrues que possam lanar algum tipo de exceo, devemos coloc-las dentro do bloco try e fazer o tratamento de erro dos possveis casos dentro dos vrios blocos catch que podemos ter. um bloco catch para cada exceo. A avaliao dos blocos catch feita na ordem em que eles aparecem (no nosso exemplo, o programa testa primeiro se a exceo do tipo AlgumaException. Se no for, ele testa se do tipo OutraException. Caso a exceo lanada seja do tipo especificado em um dos blocos catch, apenas esse o bloco ser executado para que o programa possa seguir o fluxo de execuo normal. A ordem dos blocos catch importante. No podemos colocar uma superclasse antes de uma subclasse. Isto porque indicaria uma situao absurda onde teramos um tratamento de erro que nunca seria alcanado, j que a superclasse no deixaria o teste ser feito. Felizmente, essas coisas so indicadas em tempo de compilao. Opcionalmente, podemos ter um bloco finally que onde devemos colocar todas as instrues que devem ser executadas, independentes da ocorrncia ou no de uma exceo. H dois casos em que um bloco finally no executado, total ou parcialmente. Primeiro quando h uma chamada a System.exit(), fazendo com que o programa seja encerrado abruptamente. O outro caso quando ocorre uma exceo dentro do prprio bloco finally.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 159 -

i580 Java Programming

Lanamento de Excees
Para lanar uma exceo usamos o comando throw. O programador cria um objeto exceo com new e o nome da classe Exception ou uma de duas subclasses. A exceo pode ser uma classe que j exista em Java ou pode ser criada pelo programador.
throw new Exception();//Genrico .... throw new ArrayIndexOutOfBoundsException();//Classe existente ... throw new ExcecaoDesejada();//Classe criada pelo programador

- 160 -

De acordo com o negcio que estamos implementando podemos ter situaes em que condies de erro devem ser geradas sob nosso controle. Vejamos, por exemplo, o caso ilustrado no cdigo abaixo. Se nosso programa tivesse um array cujo ndice mximo fosse determinado por uma constante. Nele fazemos o teste para saber se o ndice negativo ou maior que o valor da constante. Se for, temos uma condio de erro a ser sinalizada pelo lanamento de uma exceo. Isso conseguido usando a instruo throw (no confundir com a throws que deve ser usada no cabealho do mtodo). Repare que devemos criar um objeto do tipo da exceo lanada. Isso porque a instruo try...catch...finally espera um objeto para fazer os testes dentro das clusulas catch. Podemos lanar qualquer exceo, desde que seu nome esteja na lista throws do mtodo.

public int validaIndiceArray(int indice) throws ArrayIndexOutOfBoundsException { if (indice < 0) || (indice > Empresa.MAXIMO_CLIENTES) throw new ArrayIndexOutOfBoundsException(); }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 160 -

i580 Java Programming

Mtodos que podem lanar excees


Coloque throws na declarao do mtodo. A exceo passa para o mtodo que chamou. Podemos listar quantas excees quisermos na clusula throws bastando separar os nomes das classes por vrgula.
public boolean abreArquivoConfiguracao () throws IOException, ExcecaoDesejada { // cdigo que pode lanar IOException throw new IOException(); ... throw new EcecaoDesejada(); }

- 161 -

Em certos casos no vamos querer fazer o tratamento das excees usando a instruo try...catch...finally. Passaremos a exceo para o cdigo que chamou o nosso mtodo. Fazemos isso atravs da instruo throws que deve listar as excees que nosso cdigo lana para o mtodo que o chamou em uma lista separada por vrgulas. Para entender o exemplo mostrado no slide, suponha que temos um programa que usa arquivos de configurao que devem ser abertos antes do incio de alguma rotina especfica. Para isso foi criado o mtodo abreArquivoConfiguracao que trata o nosso arquivo, fazendo tarefas como validao, verificao de autorizao do usurio, etc. Na sua implementao, ele faz uso de mtodos que lanam IOException. Como temos a inteno de fazer com que nosso mtodo seja aplicado de forma genrica, no queremos fazer o tratamento de erro dentro dele, mas deixar a cargo de quem est usando-o, dando flexibilidade para escolher como vai ser exibida a mensagem, em que dispositivos de sada, se vai gerar um registro em um arquivo de log etc. Logo, no cabealho do mtodo indicamos que ele lana IOException. Por ser uma checked exception, todos que usarem nosso mtodo sero obrigados a fornecer um tratamento, ou lanar para outro mtodo que o tenha chamado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 161 -

i580 Java Programming

Criao de Excees
possvel criar suas prprias classes de excees. Geralmente agrega-se ao nome da classe a palavra Exception. Estenda a classe Exception ou uma de suas subclasses.
//MinhaException em ltima instncia uma Unchecked Exceptions public class MinhaExcecao extends ArithmeticException { ... }
//SenhaInvalidaException uma Checked Exceptions public class SenhaInvalidaException extends Exception { public SenhaInvalidaException(String mensagem) { super(mensagem); } }
- 162 -

Podemos criar nossas prprias excees usando o esquema de herana. Basta estender a classe Exception. Dessa forma, a nossa exceo ser do tipo checked exception tendo que ser tratada de forma obrigatria. A vantagem de criarmos nossas prprias excees que podemos tratar as condies de erro melhor e de forma personalizada. Por outro lado, importante no criar um conjunto muito extenso de excees, pois vamos comprometer a simplicidade dos nossos sistemas.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 162 -

i580 Java Programming

Criao de Excees
Passo 2: Use suas classes em seus mtodos para sinalizar que houve uma condio anormal.
public void conectaBD(String senha) throws SenhaInvalidaException, IOException{ try { // tenta se conectar com o banco usando a senha // informada pelo usurio if (!senha.equals(Java)) throw new SenhaInvalidaException(Senha invlida); ... } catch (IOException) { ... } }

- 163 -

O exemplo mostra o lanamento de vrias excees pelo mtodo usando a instruo throws e o lanamento da nossa exceo que foi criada no slide anterior.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 163 -

i580 Java Programming

Exerccio
Implemente as classes do diagrama abaixo conforme as instrues.

- 164 -

Instrues: 1. Criar as classes, conforme o diagrama. 2. Criar o mtodo toString nas duas classes, retornando os contedos das propriedades. Ex de uma ContaEspecial: 123 Machado de Assis saldo: 1200.0 limite: 500.0 3. Criar a implementao dos mtodos depositar e sacar considerando as seguintes regras: No possvel sacar mais do que o saldo permita - ContaCorrente. No possvel sacar mais do que o saldo + limite permita - ContaEspecial. No possvel depositar e sacar valores negativos. 4. Nos casos das regras serem violadas, disparar excees do tipo Exception. 5. Criar uma classe TestaConta para testar o funcionamento de uma ContaCorrente e uma ContaEspecial.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 164 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 165 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 165 -

i580 Java Programming

4 Classes teis
Unidade de Aprendizado

- 166 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 166 -

i580 Java Programming

4 Classes teis
Voc aprender: Manipulao de Strings. Nmeros e Wrappers. Internacionalizao. Formatao de Dados. Processamento de Arquivos.

- 167 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 167 -

i580 Java Programming

4.1 Manipulao de Strings


Bloco de Construo do Aprendizado

- 168 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 168 -

i580 Java Programming

4.1 Manipulao de Strings


Voc aprender: String. StringBuffer.

- 169 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 169 -

i580 Java Programming

Classe String
Uma string uma seqncia de caracteres. A classe String usada para representar strings em Java. So objetos somente de leitura, ou seja, no podem ter seu valor modificado aps a criao.

- 170 -

String um tipo de dados utilizado para armazenar uma seqncia de caracteres. As strings em Java so objetos e no apenas um vetor de caracteres. So implementadas pela classe String, disponvel no package java.lang. Cada string definida um objeto dessa classe e portanto, possui diversos mtodos que podem ser chamados para realizar operaes sobre strings. Objetos desta classe so tratados de forma especial pelo Java. Por exemplo, no necessrio criar explicitamente um objeto com new e pode ser utilizado o operador + para concatenao. Tambm possvel concatenar uma string com qualquer tipo bsico ou objeto da linguagem. O compilador ir gerar o cdigo necessrio para converter o tipo bsico (ou objeto) em uma string para realizar a concatenao. Um detalhe muito importante sobre esta classe que seus objetos so somente para leitura ou imutveis. Ou seja, aps a sua criao eles no podem mais ser alterados. Apenas os objetos so imutveis, as variveis de referncia continuam funcionando da maneira usual.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 170 -

i580 Java Programming

Criando objetos String


Algumas formas de criao.
String autor = Joo Ubaldo Ribeiro; //forma simplificada

//Concatenao de objetos String String autor = Joo + Ubaldo + Ribeiro;

//Forma comum de criao de objetos usando o operador new. String autor = new String(Joo Ubaldo Ribeiro);

- 171 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 171 -

i580 Java Programming

Mtodos da Classe String


int String String String String String length (); concat (String); replace (char, char); toLowerCase (); toUpperCase (); trim ();

char charAt (int); char [] toCharArray ();

- 172 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 172 -

i580 Java Programming

Mtodos da Classe String


String int int boolean int boolean boolean substring (int, int) indexOf (String); lastIndexOf (String); equals (String) compareTo (String); startsWith (String); endsWith (String);

boolean matches(String); String[] split(String);

- 173 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 173 -

i580 Java Programming

Mtodo substring()
Pode receber um ou dois parmetros inteiros e retorna um subconjunto da String original:
String url = "http://www.infnet.com.br/curso/javaprogramming1/index.htm"; String dominio, teste; dominio = url.substring(7,24);//objeto - ponto - nome_metodo - (parmetros) System.out.println("Dominio = " + dominio); teste = url.substring(25); System.out.println("teste = " + teste);

Dominio = www.infnet.com.br teste = curso/javaprogramming1/index.htm Press any key to continue . . .

Este um exemplo prtico de um mtodo sobrecarregado.

- 174 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 174 -

i580 Java Programming

Mtodo toString()
Todos os objetos herdam o mtodo toString() de Object que pode ser sobrescrito.
public class Cliente { ... public String toString() { return nome + + email; } }

Qualquer referncia adicionada a um String invoca o mtodo toString() do objeto.


System.out.println("url = " + url.toString()); System.out.println("url = " + url);//Exatamente o mesmo que a linha anterior

- 175 -

Todo e qualquer objeto em Java pode ser exibido como uma string. Para tal, usado o mtodo toString(), que definido na classe Object, e pode ser sobrescrito pela classe que voc est implementando. O mtodo println() chama toString() automaticamente. Caso no seja fornecida uma verso especfica de toString() para um determinado objeto, em virtude do mecanismo de herana, esse objeto ter uma representao como string. Ser exibido o nome da classe da qual o determinado objeto uma instncia e um nmero hexadecimal representando a posio de memria do objeto.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 175 -

i580 Java Programming

Mtodo equals()
O mtodo equals() herdado de Object e sobrescrito em String. Para fazer comparaes sem considerar o caso, usa-se equalsIgnoreCase()
String url = "http://www.infnet.com.br/curso/javaprogramming1/index.htm"; String dominio; dominio = url.substring(7,24); if (dominio.equals("www.infnet.com.br")) System.out.println("Site de educacao em TI."); else System.out.println("Outro site.");

- 176 -

Os mtodos de comparao equals e equalsIgnoreCase verificam se duas strings so iguais, retornando true em caso positivo e false caso contrrio. O mtodo equals considera a diferena entre minsculas e maisculas mas para o mtodo equalsIgnoreCase tal diferena no existe. O que exibido quando o cdigo abaixo executado? public class TestaEquals { public static void main(String[] args) { String x = "abc"; String y = new String("abc"); String z = "abc"; if(x == y) if(x.equals(y)) if(x == z) if(x.equals(z)) } } System.out.println("x == y"); System.out.println("x.equals(y)"); System.out.println("x == z"); System.out.println("x.equals(z)");

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 176 -

i580 Java Programming

Mtodo valueOf()
Mtodo valueOf() converte qualquer varivel de tipo primitivo em um String.

String cargaHoraria = String.valueOf(40); String preo = String.valueOf(5.2);

- 177 -

H uma verso de String.valueOf() para cada tipo primitivo. Quando um primitivo concatenado com uma String, ele automaticamente convertido para uma String atravs de uma chamada a String.valueOf(). H uma verso de System.valueOf() para cada tipo primitivo, alm de existir para o tipo Object e para vetores de caracteres. Fazer uma converso de qualquer valor para uma String usando os referidos mtodos semelhante a uma concatenao com uma string vazia, por exemplo: String cargaHoraria = + 40;

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 177 -

i580 Java Programming

Classe StringBuffer
Representa uma seqncia mutvel de caracteres Unicode. Por ser mutvel, a candidata natural quando uma srie de concatenaes se faz necessria. No tem relao alguma com a classe String.
//Mtodo para ler um string do final para o incio public String reverter(String s) { StringBuffer sb = new StringBuffer(); for (int i = s.length() 1; i >= 0; i--) sb.append(s.charAt(i)); return sb.toString(); }
- 178 -

A classe StringBuffer representa strings que podem ser modificadas em tempo de execuo. Adicionar caracteres a uma String ou concatenar repetidas vezes uma srie de Strings uma operao que consome muita memria, visto que a cada nova concatenao criado um novo objeto em memria pelo Java. Logo, a classe StringBuffer a candidata natural para casos em que uma srie de concatenaes deve ser feita de forma repetida. Com isso, ganha-se em performance, como no caso do exemplo mostrado no slide. Repare no exemplo que no fazemos nenhuma atribuio direta de objetos da classe String a referncias do tipo StringBuffer e vice-versa. Isso porque eles no possuem nenhuma relao de herana entre eles. So classes completamente distintas. A classe StringBuffer est definida no pacote java.lang. O cdigo completo do slide:

public class TestaStringBuffer{ public static void main(String args[]){ String url = "http://www.infnet.com.br/curso/javaprogramming1/index.htm"; System.out.println("url = " + reverter(url)); } public static String reverter(String s) { StringBuffer sb = new StringBuffer(); for (int i = s.length() - 1; i >= 0; i--) sb.append(s.charAt(i)); return sb.toString(); } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 178 -

i580 Java Programming public class TestaConcatenacoes { public static void main(String[] args) { testaString(); testaStringBuffer(); } private static void testaString() { long ini = System.currentTimeMillis(); String s = new String(); for (int i = 0; i < 20000; i++) { s += i; } long fim = System.currentTimeMillis(); long dif = fim - ini; System.out.println("String: " + dif + " millis"); } private static void testaStringBuffer() { long ini = System.currentTimeMillis(); StringBuffer s = new StringBuffer(); for (int i = 0; i < 20000; i++) { s.append(i); } long fim = System.currentTimeMillis(); long dif = fim - ini; System.out.println("StringBuffer: " + dif + " millis"); } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 179 -

i580 Java Programming

Mtodos de StringBuffer
StringBuffer append (...); StringBuffer insert (int pos, ...); char void charAt(int pos); setCharAt (int pos, char Ch);

StringBuffer delete(int ini,int fim); StringBuffer reverse();

- 180 -

Objetos do tipo StringBuffer podem ser alterados. Os mtodos abaixo no fazem cpias do objeto para executar suas operaes, eles operam sobre o objeto que est chamando o mtodo. StringBuffer append(..) concatena uma varivel ao objeto atual. StringBuffer insert (int pos, ) insere um valor dentro do objeto na posio especificada. char charAt(int indice) Retorna o caracter que se encontra na posio indice, semelhante ao mtodo homnimo da classe String. void setCharAt(int pos, char c) altera o caracter indicado pela posio pos. StringBuffer delete (int inicio, int fim) deleta os caracters indicados por inicio e fim. StringBuffer reverse() inverte os caracteres do objeto.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 180 -

i580 Java Programming

4.2 Nmeros e Wrappers


Bloco de Construo do Aprendizado

- 181 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 181 -

i580 Java Programming

4.2 Nmeros e Wrappers


Voc aprender: Classe Math. Wrappers.

- 182 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 182 -

i580 Java Programming

Classe Math
Definida no pacote java.lang. Nenhum objeto dessa classe pode ser criado pois seu construtor privado. Todos os seus mtodos so estticos e por isso acessamos com o nome da classe. No pode ser estendida por herana. Possui duas constantes para clculos.

- 183 -

Esta uma boa classe para a reviso de alguns conceitos. Com a classe Math no se tem inteno de criar instncias de objetos e sim usar seus mtodos para fazer clculos matemticos. Sendo assim seu mtodo construtor possui uma palavra reservada chamada private. Os mtodos da classe Math como no sero acessados por instncias de objetos (j que no podem ser criadas) possuem uma palavra reservada chamada static. A classe Math no aceita que se crie classes filhas a partir dela. Para garantir que isso no vai ocorrer, ela possui uma palavra reservada em sua declarao chamada final. Este tipo de classe denominada de classe utilitria, cujo objetivo fornecer uma coleo de servios, ou seja mtodos teis que no precisam armazenar em objetos da classe os resultados de seus processamentos.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 183 -

i580 Java Programming

Classe Math
ceil(), floor(), round(). abs(), min(), max(). sin(), cos(), tan(), asin(), acos(), atan(), toDegrees(), toRadians(). log(), exp(). sqrt(), pow(), random(). Constantes PI, E

- 184 -

Existem duas constantes: PI que representa o nmero PI e E que representa o nmero neperiano, ou constante de Nper.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 184 -

i580 Java Programming


demonstrao

Classe Math
//Sorteando um numero entre 50 e 80 double valSorteado = Math.random(); int resultado = 50 + (int) (valSorteado*30); System.out.println("Sorteio entre 50 e 80: " + resultado ); //Maior entre dois nmeros int maior; maior = Math.max(resultado,65); System.out.println("Entre 65 e " + resultado + " o maior valor eh " + maior); //rea de um crculo de raio 5 double area = Math.PI * Math.pow(5,2); System.out.println("Area de um circulo de raio 5 eh " + area); Sorteio entre 50 e 80: 64 Entre 65 e 64 o maior valor eh 65 Area de um circulo de raio 5 eh 78.53981633974483 Area de um circulo de raio 5 eh 78,54 Press any key to continue . . .
- 185 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 185 -

i580 Java Programming

Classes Wrapper
Permite a utilizao de tipos primitivos como objetos.
boolean byte char short int long float double Boolean Byte Character Short Integer Long Float Double
- 186 -

As classes Wrapper so teis para tratar tipos primitivos como objetos. Existem estruturas, principalmente as do pacote java.util (que sero tratadas daqui a pouco) que s aceitam objetos. Usando essas classes podemos armazenar tipos primitivos tambm. Alm disso, elas possuem mtodos de converso relacionadas ao tipo como parseInt() (classe Integer), parseFloat() (classe Float) e assim por diante. nas classes Wrapper que esto definidas constantes relacionadas aos tipos primitivos e que servem para tornar o nosso programa melhor estruturado. Exemplos dessas constantes so MAX_VALUE e MIN_VALUE, que retornam, respectivamente, o valor mximo e mnimo do tipo primitivo especfico. As classes Wrapper representam objetos imutveis, ou seja, uma vez inicializado um objeto de uma clase wrapper, no h mais como alterar o seu valor. Essas classes esto declaradas no pacote java.lang.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 186 -

i580 Java Programming

Exerccio
Dado um arquivo-texto com contedo semelhante ao exemplo, responda:
Que mtodo de String deve ser usado para retirar as aspas (substituir por vazio)? Que mtodo de String deve ser usado para separar as linhas (separar por \n)? Que mtodo de String deve ser usado para separar os campos?

- 187 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 187 -

i580 Java Programming

4.3 Internacionalizao
Bloco de Construo do Aprendizado

- 188 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 188 -

i580 Java Programming

4.3 Internacionalizao
Voc aprender: Formatao de Nmeros. Date. Calendar. Formatao de Datas. Locale.

- 189 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 189 -

i580 Java Programming

Formatao de Nmeros
Para formatar nmeros deve-se utilizar as classes NumberFormat ou DecimalFormat. A classe NumberFormat possui mtodos para retornar os formatos pr-definidos de valores numricos, monetrios e percentuais. A classe DecimalFormat possibilita a customizao da formatao.

- 190 -

A formatao de nmeros bastante comum e necessria em diversos tipos de aplicao. Para formatar um nmero qualquer necessrio utilizar uma das classes: NumberFormat e DecimalFormat. A classe NumberFormat pode ser utilizada quando a formatao utilizar formatos-padro: monetrio, numrico e porcentagem. NumberFormat obj = NumberFormat.getCurrencyInstance(); A classe DecimalFormat permite que se construam novos tipos de formatos diferentes a partir de determinados smbolos. DecimalFormat obj = new DecimalFormat($0,000.000"); Em ambos os casos, a forma de se formatar a mesma: aps a criao dos objetos o mtodo format deve ser chamado. Este mtodo recebe como parmetro o valor que ser formatado e retorna uma string formatada.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 190 -

i580 Java Programming

Uso de NumberFormat
Obter uma instncia da classe para o tipo de formatao desejada, utilizando os mtodos estticos.
getCurrencyInstance();//Dinheiro getNumberInstance();//Nmero getPercentInstance();//Percentual

Formatar o valor desejado com o mtodo format.

- 191 -

A classe NumberFormat abstrata e fornece a interface para a formatao e converso de nmeros. NumberFormat getCurrencyInstance ( ); - retorna uma instncia para a formatao de valores monetrios. NumberFormat getNumberInstance ( ); - retorna uma instncia para a formatao de nmeros comuns. NumberFormat getPercentInstance ( ); - retorna uma instncia para a formataao de valores percentuais. String format(...); - formata o valor passado como parmetro de acordo com a maneira pela qual o objeto foi criado. Number parse(String); - converte a string em um nmero. Caso encontre alguma coisa que no seja nmero, pra a converso e retorna o resultado encontrado. NumberFormat f = NumberFormat.getCurrencyInstance(); double valor = 55008.537; System.out.println("Sem formatao: " + valor); System.out.println("Formatado: " + f.format(valor));

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 191 -

i580 Java Programming

Locale
Classe que representa uma regio e um idioma. Muito usada em mtodos de formatao. Para criar um Locale diferente basta passar as siglas referentes regio e ao idioma ou usar uma das constantes disponveis. O Locale padro o configurado no SO. Para alterar utilize: Locale.setDefault(novo_locale);
- 192 -

Um objeto desta classe representa uma regio e um idioma. utilizada principalmente em classes de formatao e de manipulao de fusos horrios. Para utilizar um locale, deve-se usar a respectiva constante. Caso no exista uma constante deve-se criar um objeto que recebe duas strings como parmetro: idioma e regio. Exemplo de um locale que representa o Brasil: Locale local = new Locale(pt, br); Para saber todos os locales disponveis, basta chamar o mtodo esttico da classe Locale: getAvailableLocales() que retorna uma lista de locales. Quando um locale no definido, as configuraes do sistema operacional so usadas. Caso se queira forar um determinado locale, independente da configurao pode ser usado o mtodo esttico setDefault: Locale.setDefault(Locale.FRANCE); No momento da formatao de um nmero pode ser indicado um locale especfico para o formatador: NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 192 -

i580 Java Programming

Date
A classe Date obtm a data do sistema ou cria uma data especfica no tempo (data/hora). Vrios mtodos obsoletos (@Deprecated). Mtodos que ainda podem ser usados:
Date() Date(long) after, before, clone, compareTo, equals, hashCode getTime, setTime, toString
- 193 -

A classe Date (definida em java.util.Date) representa uma data em milisegundos. Embora muitos de seus mtodos estejam obsoletos, muitos de seus mtodos ainda so bastante utilizados: Date() construtor para criao de uma data contendo a data atual do sistema operacional. Date(long) construtor para a criao de uma data, cujo contedo deve ser especificado em milisegundos e passado como parmetro. after, before verificam se uma data vem antes ou depois de outra. clone, equals, hashCode mtodos sobrecarregados de Object. compareTo compara dois objetos getTime, setTime retorna ou alterar uma determinada hora em milisegundos. toString retorna a string que representa a data em formato cannico. Alm disso, muitos mtodos de outras classes pedem como parmetro objetos da classe Date System.out.prinltn(new Date());

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 193 -

i580 Java Programming

Calendar
A classe Calendar e sua subclasse GregorianCalendar so utilizadas para a manipulao de datas. O mtodo principal o get(elemento). O elemento indica o que deve ser recuperado (YEAR, MONTH, DAY, etc.). Para criar datas especficas usa-se o mtodo set.

- 194 -

As classes que devem ser utilizadas para criar e recuperar datas so Calendar e sua subclasse GregorianCalendar(). Elas possuem datas que possibiltam a fcil criao de datas com ou sem sua hora respectiva. A criao de datas feita com o mtodo set e a recuperao de valores especficos com o mtodo get e a respectiva constante sendo passada como parmetro. O exemplo abaixo mostra a criao de uma data, a mudana de seu dia, ms e ano para 9 de outubro de 2000 e a recuperao de diversas informaes teis. Calendar data = new GregorianCalendar();

data.set(2000, 10, 9); System.out.println(data.get(Calendar.MONTH)); System.out.println(data.get(Calendar.DAY_OF_WEEK)); System.out.println(data.get(Calendar.DAY_OF_MONTH)); System.out.println(data.get(Calendar.DAY_OF_YEAR));

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 194 -

i580 Java Programming

Manipulao de Datas
A classe DateFormat e sua subclasse SimpleDateFormat so usadas para a formatao de datas. Podem ser criadas instncias com data e com data e hora:
DateFormat df = DateFormat.getDateInstance(); DateFormat df = DateFormat.getDateTimeInstance();

Podem ser passados como parmetros o Locale desejado e o tipo de formatao: SHORT, MEDIUM, LONG, FULL.
- 195 -

A forma padro de se mostrar uma data denominada forma cannica: Thu Mar 08 17:57:28 GMT+00:00 2007 Para formatar uma data em um formato diferente devem ser utilizadas as classes DateFormat (para formatos padro) e SimpleDateFormat (para formatos customizados). A classe DateFormat possui os mtodos getDateInstance, getTimeInstance e getDateTimeInstance para formatar, respectivamente datas, horas e datas-horas. Existem quatro tipos possveis de formatao que so dependentes do idioma e regio selecionados: SHORT, MEDIUM, LONG e FULL. Exemplo de formatao de uma data com o formato FULL: DateFormat df = DateFormat.getDateInstance(DateFormat.FULL); Calendar data = new GregorianCalendar(); data.set(2000, 10, 9); System.out.println(df.format(data.getTime())); Resultado da execuo do trecho de cdigo acima: Quinta-feira, 9 de Novembro de 2000

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 195 -

i580 Java Programming

Manipulao de Datas
Uma boa idia seria criar uma classe utilitria que permitisse fazer vrias operaes com datas e tempo. Analise o cdigo abaixo e utilize-o como base para construir as suas prprias solues.

- 196 -

import java.util.Date; public class Data { public static final long DIA = 1000*60*60*24; public static Date somaDias(Date data, int dias) { Date retorno = null; if(data != null && dias > 0) { long tempo = data.getTime(); tempo += dias * DIA; retorno = new Date(tempo); } return retorno; } public static Date somaMeses(Date data, int meses) { Date retorno = null; if(data != null && meses > 0) { retorno = data; int mes = retorno.getMonth(); mes += meses; retorno.setMonth(mes); } return retorno; } }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 196 -

i580 Java Programming

Exerccio
Criar um programa que use o mtodo getAvaliableLocales da Classe Locale para exibir uma lista com as seguintes informaes das regies:
Nome do Pas. Nome do Idioma. Nmero Formatado. Moeda Formatada. Data Completa Formatada.

Utilize a documentao da classe Locale


- 197 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 197 -

i580 Java Programming

4.4 Processamento de Arquivos


Bloco de Construo do Aprendizado

- 198 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 198 -

i580 Java Programming

4.4 Processamento de Arquivos


Voc aprender: IO API. Classes Abstratas. Classes de Arquivos. Classes Especializadas.

- 199 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 199 -

i580 Java Programming

Streams
Streams so canais de comunicao entre um programa e uma fonte de dados - fluxos. As fontes de dados podem ser: arquivos, trechos de memria e conexes de rede. Em Java no importa qual seja a fonte, todo o tratamento de dados igual. Fontes das quais lemos dados so fluxos de entrada e aquelas nas quais gravamos dados so fluxos de sada.
- 200 -

Streams so seqncias de bytes que viajam atravs de um canal de comunicao, ou seja, uma stream um fluxo de bytes. A transferncia de dados em Java feita atravs de streams. Esta transferncia pode ser entre o disco e a memria, entre um computador e outro ou mesmo entre partes diferentes da memria. Com o uso de streams define-se uma maneira padronizada de realizar estas movimentaes de dados independente do meio utilizado. Portanto a responsabilidade do computador est em mover os bytes enquanto ao programador caber a tarefa de dar significado aos bytes. Em Java so definidos dois tipos de tratamento de streams: orientados por bytes ou caracteres. O primeiro tipo implementado pelas classes derivadas de InputStream e OutputStream. No segundo mtodo as superclasses so Reader e Writer. Existem subclasses para cada uma destas hierarquias que tratam de tarefas de leitura e escrita mais especficas, tais como: comunicao entre threads (Piped), movimentao entre vetores(ByteArray), concatenao de duas ou mais streams (Sequence), transferncia de dados em formatos definidos (Data), comunicao com buffers (Buffered), contagem de linhas transferidas (LineNumber) e retorno de comunicao (Pushback). O nome da subclasse composto da sua especialidade seguido do tipo de transferncia. Por exemplo, a classe que faz a leitura de arquivos do disco chama-se FileInputStream.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 200 -

i580 Java Programming

Streams
Em Java existem dezenas de classes que representam fluxos de entrada e sada. Estas classes so divididas em 3 grupos:
Classes BaseAbstratas, subdivididas em classes de acesso binrio e texto. Classes de Acesso Fsico. Classes de Acesso Lgico.

Todas as classes de stream esto definidas no pacote java.io.


- 201 -

Em Java existem dezenas de classes que representam fluxos de entrada e sada. Estas classes so divididas em 3 grupos: Classes Base Abstratas, subdivididas em classes de acesso binrio e texto. Classes de Acesso Fsico: que representam algum meio de armazenamento como aquivo em disco, em memria, etc. Classes de Acesso Lgico: tambm conhecidas como filtros, so responsveis por executar determinadas converses nos fluxos. Todas as classes de stream esto definidas no pacote java.io.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 201 -

i580 Java Programming

Classes Base Abstratas


As classes base abstratas definem um padro de acesso(E/S) a dados. Podem acessar caracteres ou bytes. Acesso a texto (formato UNICODE):
Reader, leitura de dados. Writer, gravao de dados.

Acesso a bytes:
InputStream, leitura de dados. OutputStream, gravao de dados.
- 202 -

As classes abstratas InputStream, OutputStream, Reader e Writer definem os seguintes mtodos genricos para transferncia: leitura, escrita, posicionamento e quantidade de dados disponveis. Leitura e gravao de bytes. Utilizadas quando o contedo tem algum significado especfico para o programador. Por exemplo, 8 bytes lidos do arquivo podem significar 2 valores inteiros ou um valor longo. InputStream read available close skip OutputStream write flush close Leitura e gravao de caracteres. Geralmente utilizados para internacionalizao, ou seja, possibilita que o contedo seja tratado da mesma forma, independente do idioma utilizado, j que em alguns pases o alfabeto composto de centenas de smbolos. Reader read close ready Writer write flush close

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 202 -

i580 Java Programming

Classes de Acesso Fsico


As classes de acesso fsico definem formas de manipulao de dados diretamente da fonte de dados. A leitura de dados de um arquivo pode ser feita com as classes FileInputStream ou FileReader. Para gravar dados em um arquivo usamos FileOutpuStream e FileWriter.

- 203 -

Apesar da grande quantidade de subclasses especializadas existentes, o uso de streams em Java segue sempre o mesmo padro: 1. Criar uma stream 2. Manipular os dados da stream (ler ou gravar dependendo do tipo) 3. Fechar a stream. Exemplo Genrico: <Classe-Stream> objeto = new <Classe-Stream>(<parmetros>); <qtde-lida> = objeto.read(<parmetros>); ou <qtde-escrita> = objeto.write(<parmetros>); objeto.close(); Outra caracterstica potente do uso de streams em Java a possibilidade de criao uma stream a partir de outra. Ou seja, possvel unir as capacidades das diversas subclasses. Por exemplo, possvel fazer a comunicao entre threads com as classes Piped utilizando-se um buffer auxiliar atravs das classes Buffered.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 203 -

i580 Java Programming

Classes de Acesso Fsico


Ao criar um objeto de qualquer uma destas classes, ser aberto o arquivo passado como parmetro. Para ler dados temos o comando read(). Para gravar dados usamos o write(). Para fechar um arquivo usamos o close(). Estes comandos podem gerar excees derivadas de IOException.
- 204 -

Exemplo de cdigo para ler um arquivo-texto:

private static void leArquivo() { try { FileInputStream fis = new FileInputStream("lorem_ipsum.txt"); byte[] texto = new byte[fis.available()]; fis.read(texto); fis.close(); System.out.println(new String(texto)); } catch (Exception e) { }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 204 -

i580 Java Programming

Classe File
Usamos a classe File para:
Representar um arquivo ou diretrio. Criar um arquivo ou diretrio. Verificar os atributos de um arquivo ou diretrio. Renomear um arquivo ou diretrio. Remover um arquivo ou diretrio. Recuperar informaes diversas sobre um arquivo ou diretrio.
- 205 -

A classe File fornece uma srie de mtodos teis para tratamento de arquivo e recuperao de suas informaes. O exemplo abaixo mostra diversas informaes sobre um arquivo texto: private static void testaFile() { File file = new File("arquivos.properties"); System.out.println("Path: " + file.getAbsolutePath()); System.out.println("Ler? " + file.canRead()); System.out.println("Gravar? " + file.canWrite()); System.out.println("Num.Bytes :" + file.length()); }

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 205 -

i580 Java Programming

Exerccio
Criar um programa para ler o arquivo uf.csv e exibir as siglas e os nomes dos estados do Brasil.
Ler o arquivo para a memria. Retirar as aspas. Separar as linhas (terminadas por \n). Separar os campos.

O arquivo est no http://sae.infnet.edu.br


- 206 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 206 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 207 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 207 -

i580 Java Programming

5 Desenho de Telas
Unidade de Aprendizado

- 208 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 208 -

i580 Java Programming

5 Desenho de Telas
Voc aprender: Bibliotecas Grficas. Tratamento de Eventos.

- 209 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 209 -

i580 Java Programming

5.1 Bibliotecas Grficas


Bloco de Construo do Aprendizado

- 210 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 210 -

i580 Java Programming

5.1 Bibliotecas Grficas


Voc aprender: Java Foundation Classes. Abstract Window Toolkit. Aplicao X Applet. Ciclo de Desenvolvimento. Component. Container. Gerenciadores de Layout.

- 211 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 211 -

i580 Java Programming

Java Foundation Classes


Sun Microsystems colocou as tecnologias da Netscape, IBM e Lighthouse Design (atualmente parte da Sun) sob o mesmo contexto com o objetivo de criar um conjunto de componentes grficos que se integrem ao JDK. O produto dessa iniciativa uma coleo de APIs denominada de JFC - Java Foundation Classes.

- 212 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 212 -

i580 Java Programming

Java Foundation Classes


JFC composta por 5 APIs:
AWT so os componentes mais bsicos que existem no JDK desde a verso 1.0 e tm como principal caracterstica o acesso direto aos componentes no sistema operacional. Swing conjunto de componentes basedados na tecnologia Internet Foundation Classes da Netscape. Java 2D API grfica baseada na tecnologia licenciada da IBM/Taligent. Accessibility contribui com recursos direcionados para usurios com necessidades especiais. Drag and Drop conjunto de ferramentas para implementar essa funcionalidade de forma padro nas diversas plataforma.
- 213 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 213 -

i580 Java Programming

java.awt.*
Abstract Window Toolkit
Biblioteca 'Abstrata' para Desenho de Telas.

Contm todas as classes para criao de interfaces grficas e para o desenho de grficos e imagens.

- 214 -

A biblioteca AWT (Abstract Window Toolkit) contm componentes e classes que so utilizados para o desenvolvimento de interfaces grficas para usurios (GUI Graphical User Interface). Independente da plataforma em que ser executada, a interface que aparecer em uma ser semelhante a que aparecer em outra. A biblioteca AWT est no package java.awt.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 214 -

i580 Java Programming

java.awt.*
Cada componente AWT utiliza cdigo nativo para aparecer na tela. Quando um programa roda no Windows os botes que aparecem so botes do Windows. Quando a mesma aplicao roda no Macintosh ou UNIX os botes que aparecem so os do sistema operacional nativo.

AWT simples e eficiente


- 215 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 215 -

i580 Java Programming

Ciclo de Desenvolvimento
Existem trs passos que precisam ser seguidos para criar uma aplicao grfica ou applet:
Monte a tela com os componentes grficos sendo agrupados e exibidos dentro de containeres. Defina os mtodos que vo tratar os eventos gerados pela interao do usurio com a tela. Exiba a tela.

- 216 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 216 -

i580 Java Programming

Component
Todo componente subclasse da classe Component. Um 'component' um objeto grfico que pode interagir com o usurio. A classe Container define componentes que podem conter outros componentes.

- 217 -

Component uma classe abstrata que implementa MenuComponent e que serve de base para criao de todo e qualquer componente grfico dentro da AWT. A classe Container uma subclasse abstrata de Component e so importantes para que organizemos os componentes grficos na tela.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 217 -

i580 Java Programming

Component

- 218 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 218 -

i580 Java Programming

Container
Window janela 'flutuante', pois no se incorpora a outro container. Frame a 'janela' que conhecemos, com borda, ttulo e cones de minimizar e maximizar. Dialog a mesma coisa que o Frame, porm no permite o redimensionamento.

- 219 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 219 -

i580 Java Programming

Container
Panel um elemento de agrupamento. Serve para distribuir melhor os componentes grficos, criando reas na tela a fim de facilitar o desenho. Applet um 'painel' que se integra a uma pgina HTML.

- 220 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 220 -

i580 Java Programming

Container
Adicionam-se componentes aos containeres atravs do mtodo add. Como os 'paineis' so componentes, podemos adicionar paineis em outros paineis.
Panel p = new Panel(); Button b = new Button(OK); p.add(b);

- 221 -

A classe Window utilizada para criar janelas nativas flutuantes e no depende de outros containeres. Ela possui duas subclasses: Dialog e Frame. A classe Frame cria janelas com uma barra de ttulo e redimensionvel, podendo conter menus. A classe Dialog no pode ser redimensionada e no pode conter menus. Um Frame deve ser tornado visvel atravs do mtodo setVisible(true) e seu tamanho definido usando setSize(larg, alt) obrigatoriamente antes de ser exibido na tela. A classe Panel deve ser utilizada dentro de um outro Container.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 221 -

i580 Java Programming

Gerenciadores de Layout
Controlam como os componentes so organizados dentro de um container (posio e tamanho). Todo container tem um gerenciador de layout default.
Window BorderLayout. Panel - FlowLayout.

Para alterar o gerenciador de layout use o mtodo setLayout da classe Container.


Usa-se um objeto annimo, pois os gerenciadores de layout no podem ser utilizados em dois containeres diferentes.
- 222 -

Os gerenciadores de layout so responsveis pela exibio de componentes dentro de containeres, fornecendo capacidades bsicas de layout que so mais fceis de utilizar do que determinar a posio e o tamanho exatos de cada componente GUI. Isto permite ao programador concentrar-se na aparncia e comportamento bsicos da aplicao e deixar os gerenciadores de layout processar a maioria dos detalhes de layout. Todo container tem um gerenciador de layout default e que pode ser substitudo usando o mtodo setLayout() do container.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 222 -

i580 Java Programming

FlowLayout

- 223 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 223 -

i580 Java Programming

BorderLayout

- 224 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 224 -

i580 Java Programming

GridLayout

- 225 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 225 -

i580 Java Programming

JExplorer
Vamos ver os gerenciadores em ao:
Criaremos uma classe chamada JExplorer que tem por objetivo exibir o contedo de diretrios e arquivos. A tela tem as seguintes caractersticas:
TextField no norte. List e TextArea no centro (dentro de um Panel usando GridLayout 2X1). As outras reas esto vazias.

- 226 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 226 -

i580 Java Programming

JExplorer
Os objetos txtDir, lstDir e txtTexto so declarados como variveis da classe.
Isso necessrio para que possamos usar esses objetos em outros mtodos.

Observe o uso de um painel no centro do BorderLayout para podermos colocar a lista e a rea de texto, fazendo com que fiquem do mesmo tamanho.
O Panel usa GridLayout.
- 227 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 227 -

i580 Java Programming

TelaCadastro
Imagine uma tela com trs paineis:
West painel que exibe os labels. Center painel que exibe os campos de texto. South painel que exibe os botes de ao.

- 228 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 228 -

i580 Java Programming

- 229 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 229 -

i580 Java Programming

Observaes
As telas ainda no dispem de eventos. O mtodo setSize pode ser substitudo pelo mtodo pack, desde que se saiba o tamanho dos objetos da tela. A melhor maneira de desenhar telas atravs de um editor grfico. O desenho 'na mo' deve ser usado quando se deseja automatizar tarefas.
Utilize um editor grfico para construir suas telas
- 230 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 230 -

i580 Java Programming

Exerccio
Vamos investigar as telas JExplorer e TelaCadastro.

Os arquivos esto no http://sae.infnet.edu.br


- 231 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 231 -

i580 Java Programming

5.2 - Tratamento de Eventos


Bloco de Construo do Aprendizado

- 232 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 232 -

i580 Java Programming

5.2 Tratamento de Eventos


Voc aprender: Definies. Mtodo getSource(). Modelo de Delegao de Eventos. Criando Objetos listener. Registro do listener. Objetos GUI e seus Eventos

- 233 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 233 -

i580 Java Programming

Definies
Eventos so objetos gerados que descrevem algo que ocorreu. Fonte de evento algum objeto ou componente que gera um objeto evento. Listener ou ouvinte de evento um objeto que fica esperando ser avisado da ocorrncia de um evento. Handler ou manipulador de evento um mtodo que trata de um evento especfico.
- 234 -

Existem vrios tipos de eventos diferentes para descrever as diferentes categorias de ao do usurio.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 234 -

i580 Java Programming

Definies
As GUIs so baseadas em eventos como mover o mouse, clicar um boto, etc. Quando ocorre uma iterao, um evento enviado ao programa. As informaes do evento so armazenadas num objeto de uma classe que estende AWTEvent.

- 235 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 235 -

i580 Java Programming

Mtodo getSource()
Por herana de EventObject, todo objeto evento possui o mtodo getSource() que retorna o objeto em cima do qual o evento ocorreu.
public void actionPerformed(ActionEvent e) { if (e.getSource() == sairButton){ ... else if (e.getSource() == deslocarButton){ ...

- 236 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 236 -

i580 Java Programming

Modelo de Delegao de Eventos


O processamento do evento delegado a um objeto particular no programa.

- 237 -

O modelo de delegao surgiu no JDK 1.1. Vejamos como ele funciona: 1 Fase de registro: Um listener (ouvinte) registrado junto a um objeto gerador de um evento (fonte de evento). O listener escuta por um ou mais tipos de eventos. Um listener implementa a interface EventListener. Eventos gerados por componentes que no possuem listeners registrados so ignorados. 2 Fase de Notificao: Ocorrido o evento, o listener registrado notificado e o objeto evento gerado passado para o mesmo. No listener podem haver vrios mtodos tratadores de evento. Atravs de um ID de evento o objeto listener E o mtodo tratador, so escolhidos corretamente por Java. 3 Fase de Execuo do Manipulador: Recebido o objeto evento e a notificao de ocorrncia, o listener chama o manipulador especfico e o executa.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 237 -

i580 Java Programming

Criando Objetos listener


Cada tipo de evento possui uma interface listener correspondente.
ActionsEvent tratados por ActionListener. MouseEvent tratados por MouseListener.

O objeto que implementa uma interface listener torna-se um listener para aquela categoria de eventos. O componente GUI fonte do evento decide o tipo de ouvinte para o qual o evento deve ser despachado e o mtodo a chamar.
Quando ocorre um MouseEvent, o evento despachado para MouseListener.
- 238 -

A maioria das classes que representam eventos esto dentro do package java.awt.event. Para cada categoria de eventos existe uma interface que contm os mtodos que podem ser chamados quando um evento particular ocorrer. Categoria Ao Item Ajuste Texto Mov. Mouse Focus Container Tecla Interface ActionListener ItemListener AdjustmentListener TextListener MouseMotionListener FocusListener ContainerListener KeyListener Mtodos tratadores de evento actionPerformed(ActionEvent) itemStateChanged(ItemEvent) adjustmentValueChanged (AdjustmentEvent) textValueChanged(TextEvent) mouseDragged(MouseEvent) mouseMoved(MouseEvent) focusGained(FocusEvent) focusLost(FocusEvent) componentAdded(ContainerEvent) componentRemoved(ContainerEvent) keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 238 -

i580 Java Programming

Criando Objetos listener


//definio da interface ActionListener s possui um mtodo public interface ActionListener { void actionPerformed(ActionEvent e) { } //definio de classe ouvinte de eventos ActionListener private class MinhaClasseListener implements ActionListener{ //mtodo tratador de eventos actionPerformed public void actionPerformed(ActionEvent e){ // cdigo para manipular o evento if (e.getSource() == sairButton){ //definio de classe ouvinte de eventos ItemListener private class CheckBoxHandler implements ItemListener { //mtodo tratador/manipulador de eventos itemStateChanged public void itemStateChanged( ItemEvent e ) {...
- 239 -

Categoria Componente

Mouse

Janela

Mtodos componentMoved(ComponentEvent) componentHidden(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) MouseListener mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent) WindowListener windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent)

Interface ComponentListener

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 239 -

i580 Java Programming

Registro do listener
Cada tipo de evento possui um mtodo add...Listener correspondente que usado para registrar um objeto ouvinte (listener).
MinhaClasseListener meuListener = new MinhaClasseListener(); //registro de evento: especifica o tipo e o objeto ouvinte botao.addActionListener(meuListener); // Aps o registro, o objeto que meuListener referencia //estar ouvindo eventos, isto , ser notificado quando //um evento ocorrer. italic = new JCheckBox( "Italico" ); ... c.add( italic ); CheckBoxHandler cbh = new CheckBoxHandler(); italic.addItemListener( cbh );
- 240 -

Dependendo do tipo de evento que pode ser gerado pelo componente, ele possuir o mtodo addXXXListener() correspondente para que listeners possam ser registrados.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 240 -

i580 Java Programming

Objetos GUI e seus Eventos


Tipo A A C C F It K M M T W c d m n o m e o M x in t j p t c y u t x x x x x x x x x x x x x x x x x x x x x x x x
- 241 -

Button Canvas Checkbox CheckboxMenuIt. Choice Component Container

x x

x x x

x x x

x x x

Button Boto grfico Canvas Painel usado para desenho Checkbox Componente que permite ao usurio selecionar um item CheckboxMenuItem Checkbox dentro de um menu Choice Combobox Component Pai de todos os componentes AWT, exceto menus Container Pai de todos os componentes que podem conter outros

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 241 -

i580 Java Programming

Objetos GUI e seus Eventos


Tipo A A C C F It K M M T W c dj m n o m e o M x in t p t c y u t x x x x x x x x x x x x x x x x x
- 242 -

Dialog Frame Label List MenuItem Panel Scrollbar

x x x x x

x x x

x x x x x x x x

x x

x x x

Dialog Cria dilogos modais Frame Representa uma janela Label Componente que mostra uma string que no pode ser alterada pelo usurio List Contm um conjunto dinmico de itens MenuItem Item dentro de um menu Panel Container bsico usado para criar layouts complexos Scrollbar Permite que o usurio selecione um valor a partir de um intervalo de valores

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 242 -

i580 Java Programming

Objetos GUI e seus Eventos


Tipo A A C C F It K M M T W c dj m n o m e o M x in t p t c y u t x x x x x x x x x x x x x x x x x x x x x x x x x x

ScrollPane TextArea TextField Window

- 243 -

ScrollPane Classe Container que implementa scroll horizontal e/ou vertical automtico para um componente filho. TextArea Componente que permite ao usurio entrar com um bloco de texto. TextField Componente que permite ao usurio entrar com um linha de texto. Window Classe base de todas as janelas

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 243 -

i580 Java Programming

Exerccio
Implementar os eventos do JExplorer.
O usurio digita um nome de diretrio no TextField e d enter (ActionListener). O sistema preenche a lista com os arquivos contidos no diretrio. O usurio clica uma vez em um item da lista (ItemListener). O sistema abre o arquivo e o exibe no TextArea.

- 244 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 244 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 245 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 245 -

i580 Java Programming

6 Estruturas de Dados
Unidade de Aprendizado

- 246 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 246 -

i580 Java Programming

6 Estruturas de Dados
Voc aprender: Colees. Persistncia em Bancos de Dados.

- 247 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 247 -

i580 Java Programming

6.1 Colees
Bloco de Construo do Aprendizado

- 248 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 248 -

i580 Java Programming

6.1 Colees
Voc aprender: Framework de Colees. Interfaces. Classes. Generics. For Each.

- 249 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 249 -

i580 Java Programming

Framework de Colees
Coleo um objeto que contm mltiplos elementos. Tambm chamada de container. Nas verses anteriores ao Java 2, existiam alguns recursos para agrupar objetos:
array, Vector, Hashtable, Enumeration

Apesar de j existirem estes recursos, eles no estavam integrados.


- 250 -

Uma coleo um recipiente de objetos usado para armazenar, recuperar e manipular mltiplos elementos. Em verses anteriores o Java j fornecia recursos bsicas para manipulao de conjuntos como: array, Vector, Hashtable, Stack, BitSet e Enumeration. Estes recursos funcionavam em separado, no fazendo parte de um Framework ou arquitetura comum. Por este motivo a tarefa de migrar de um para outro (principalmente Vector e Hashtable) no era uma tarefa muito fcil. Estes elementos foram integrados ao framework de colees do Java 2, mantendo seus mtodos antigos e ganhando os mtodos novos.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 250 -

i580 Java Programming

Framework de Colees
Arquitetura unificada para manipulao de colees:
Interface: representao abstrata de uma coleo, permitindo que colees seja usadas independente dos detalhes de sua implementao. Implementao: implementao das interfaces, so as estruturas de dados reutilizveis. Algoritmos: mtodos que executam tarefas teis, como classificao e busca. Permitem a reutilizao da funcionalidade.
- 251 -

O framework de colees uma arquitetura unificada para manipulao de colees e pode ser dividida em trs partes bsicas. Interface: representao abstrata de uma coleo, permitindo que colees seja usadas independente dos detalhes de sua implementao. Este formato essencial para certos tipos de aplicao como por exemplo aplicaes distribudas onde o cliente no deve ou no pode conhecer os detalhes de implementao de uma determinada coleo mas mesmo assim precisa utiliz-la para efetuar o seu processamento. Implementao: o conjunto de classes que implementam as interfaces. Cada classe possui uma caracterstica prpria como por exemplo: acesso indexado, proibio de elementos duplicados, ordenao de elementos, etc. Algoritmos: mtodos que executam tarefas teis, como classificao e busca. Permitem a reutilizao da funcionalidade entre os vrios tipos de colees pois so polimrficos. Entre as classes que possuem este tipo de mtodos destacam-se Collections e Arrays. Utilizar um Framework ao invs de classes isoladas traz as seguintes vantagens: Reduz o esforo de programao Aumenta a qualidade e velocidade do programa Permite compatibilidade entre diferentes APIs Reduz o esforo de se aprender novas APIs. Reduz o esforo de se projetar novas APIs Incentiva a reusabilidade com o uso de polimorfismo A utilizao de framework no novidade, a linguagem C++ possui a STL (Standard Template Library)

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 251 -

i580 Java Programming

Interfaces
Interfaces que formam a base do Framework:

- 252 -

A base do framework so suas interfaces. Elas definem os mtodos genricos necessrios para a criao de novas classes e/ou utilizao das classes existentes. As interfaces base do framework de colees so: Collection, Set, List, SortedSet, Map, SortedMap, Iterator, ListIterator, Comparable, Comparator. Collection a base de todo o framework. Ela define um conjunto de mtodos bsicos para uso com qualquer tipo de coleo. Set no permite valores duplicados. SortedSet ordena seus valores. List representa uma lista encadeada comum. Map contm chaves associadas a valores, a partir de uma chave pode-se encontrar o valor correspondente. SortedMap mantm seus elementos ordenados.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 252 -

i580 Java Programming

Interface Collection
a interface base da hierarquia, a mais genrica de todas. No existe classe que implemente diretamente esta interface. Todas as classes implementam interfaces que herdam desta. Ela utilizada principalmente para passar colees quando for necessria mxima generalizao.
- 253 -

Operaes Bsicas: size() isEmpty() contains(...) add() remove(...) iterator() Converses: toArray() toArray(...) Operaes de Volume containsAll(...) addAll(...) retainAll(...) removeAll(...) clear()

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 253 -

i580 Java Programming

Interface Set
Esta interface uma Collection que no pode ter elementos duplicados. Ela herda todos os mtodos de Collection e no possui nenhum mtodo adicional. Duas classes Java de colees implementam esta Interface: HashSet e TreeSet. Usa-se a primeira quando desempenho nas leituras for importante e a segunda para manuteno de dados (insero e alterao).
- 254 -

O exemplo abaixo mostra a ordenao de um conjunto de strings: Set<String> lista = new TreeSet(); lista.add("Maria"); lista.add("Ana"); lista.add("Pedro"); lista.add("Joo"); for (String pessoa: lista) System.out.println(pessoa); Set<Produto> produtos = new TreeSet(); produtos.add(new Produto("Incidente em Antares", 25, 100 )); produtos.add(new Produto("Os Ratos", 20, 20)); produtos.add(new Produto("Auto da Compadecida", 15, 200 )); for (Produto produto: produtos) System.out.println(produto);

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 254 -

i580 Java Programming

Interface List
uma Collection que contm elementos indexados e tambm conhecida como seqncia. Pode conter elementos duplicados. Possui alguns mtodos adicionais com relao a Collection: acesso posicional, busca, iterao e operaes em sublistas.

- 255 -

Alm dos mtodos de Collection, temos: Object get(int ndice) Object set(int ndice, Object o) void add(int ndice, Object o) Object remove(int ndice) boolean addAll(int ndice, Collection c) int indexOf(Object o) int lastIndexOf(Object o) ListIterator listIterator(int ndice) ListIterator listIterator() List subList(int from, int to) Duas classes de colees implementam a interface List: LinkedList e ArrayList. A primeira representa uma lista duplamente encadeada, a segunda um array dinmico. Um ArrayList muito mais rpido pois no precisa alocar novo n para cada elemento e tem acesso constante a qualquer elemento. Um LinkedList deve ser usado quando for freqente a iterao, adio ou deleo de elementos do interior da lista

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 255 -

i580 Java Programming

Classe ArrayList
Representa um vetor dinmico. Esta a implementao mais eficiente de uma lista e semelhante a classe Vector com a diferena que ela no funciona adequadamente quando compartilhada por vrios processos. Caso seja necessria o compartilhamento use Vector.

- 256 -

List<String> lista = new ArrayList<String>(); lista.add("Ea de Queiroz"); lista.add("Guimares Rosa"); // Java 1.4 e inferior System.out.println(); for (int i = 0; i < lista.size(); i++) System.out.println(lista.get(i)); // Java 5 e superior System.out.println(); for (String autor: lista) System.out.println(autor); // Existe Machado de Assis? System.out.println(); int pos = lista.indexOf("Machado de Assis"); System.out.println(pos); // Existe Ea de Queiroz? System.out.println(); pos = lista.indexOf("Ea de Queiroz"); System.out.println(pos);

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 256 -

i580 Java Programming

Classe Hashtable
Conjunto de elementos que mapeia chaves para valores. Mltiplos elementos com a mesma chave so permitidos, neste caso a busca seqencial. No Java 2 esta classe foi reimplementada como Map.

- 257 -

Mtodos mais importantes: Insero de Elementos put(...), putAll(...) Recuperao de Elementos get(...), elements(), values(...), entrySet() Recuperao de chaves keys(), keySet() Remoo de Elementos remove(...) Pesquisa contains(...), containsValue(...), contaisKey(...)

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 257 -

i580 Java Programming

Generics
Todas as colees devem ser declaradas e inicializadas com a indicao do tipo de objeto que ser armazenado nelas. Para isso, colocamos uma tag na declarao da coleo e tambm junto ao construtor da classe.
ArrayList<Aluno> alunos = new ArrayList<Aluno>();

Essa instruo leva a vrios benefcios:


Segurana de tipos bem definidos. Alocao otimizada de memria. Uso do For Each,
- 258 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 258 -

i580 Java Programming

For Each
possvel implementar iteraes a fim de obter os elementos de uma coleo atravs da estrutura de controle for.
ArrayList<Aluno> alunos = new ArrayList<Aluno>(); ... for(Aluno aluno : alunos) { System.out.println(aluno.getNome()); }

A cada iterao cada elemento da lista ser atribudo varivel de controle.


- 259 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 259 -

i580 Java Programming

6.2 Persistncia em Bancos de Dados


Bloco de Construo do Aprendizado

- 260 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 260 -

i580 Java Programming

6.2 Persistncia em Bancos de Dados


Voc aprender: O que JDBC? Conexo com BD. SQL Exception. Interface Statement. Interface PreparedStatement. Interface ResultSet. Fechando as Conexes.

- 261 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 261 -

i580 Java Programming

O Que JDBC?
Conjunto de classes e interfaces independentes de fabricante para conexo a bancos de dados. composto pelo pacote java.sql. Utiliza um driver para conectar a aplicao a um ou mais servidores de BD, executa consultas SQL e opera os resultados.

- 262 -

JDBC significa Java Database Conectivity. um conjunto de classes e interfaces escritos em Java que tornam possvel escrever aplicaes que acessem bancos de dados. semelhante a tecnologia ODBC da Microsoft. Utilizando um driver JDBC voc pode se conectar a um ou mais servidores de banco de dados de forma a executar comandos SQL e trabalhar com os resultados retornados, se for o caso. O driver JDBC implementado como uma API de baixo nvel de modo que todo fornecedor de banco de dados possa implementar uma verso especfica para o seu produto que seja mais amigvel de se trabalhar e at mais poderosa (no que tange ao produto especfico). Essa API est includa no package java.sql, que faz parte do JDK a partir da verso 1.1.7.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 262 -

i580 Java Programming

O Que JDBC?

JDBC uma abstrao do banco de dados


- 263 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 263 -

i580 Java Programming

O Que JDBC?
Carga do driver na memria. Criao da conexo usando o DriverManager. Uso da conexo para acessar o banco de dados:
Create = criar registros no banco de dados. Retrieve = obter registros do banco de dados. Update = atualizar resgistros no banco de dados. Delete = excluir registros do banco de dados.

- 264 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 264 -

i580 Java Programming

Conexo com BD
O driver uma classe que aponta para uma biblioteca de classes pares das interfaces definidas no JDBC. Essas bibliotecas so distribudas em arquivos JAR, permitindo que sejam utilizadas nas nossas aplicaes. O arquivo JAR precisa ser colocado no CLASSPATH da aplicao.
- 265 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 265 -

i580 Java Programming

Conexo com BD
Utilizaremos o driver JDBC-ODBC Bridge que j se encontra na instalao do JDK. Precisamos carregar o driver na memria para que o DriverManager possa reconhecer e criar a conexo.
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

ou
DriverManager.registerDriver (new JdbcOdbcDriver());

e ento
Connection con = DriverManager.getConnection(url, "user", "pwd");

A primeira opo prefervel por causa da string que pode ser passada como parmetro
- 266 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 266 -

i580 Java Programming

Conexo com BD
url = Uniform Resource Locator string que identifica o protocolo de comunicao com o banco de dados. jdbc:<subprotocolo>:<subnome> String url = jdbc:odbc:NorthwindDSN; user = nome do usurio do banco de dados. pwd = senha do usurio do banco de dados.
Esses parmetros devem ser obtidos via arquivo de properties
- 267 -

O JDBC usa uma URL (Uniform Resource Locator) para identificar a conexo ao banco de dados. O JDBC URL uma estrutura bastante flexvel, permitindo que o desenvolvedor do driver especifique o que deve ser includo na URL. Cada URL ir ser diferente para cada banco de dados. A sintaxe genrica descrita abaixo: jdbc o protocolo utilizado e todas as URLs iniciaro com esse protocolo. <subprotocolo> o nome do driver ou do mecanismo de conexo ao banco de dados. Os desenvolvedores de driver registram seus subprotocolos com a Sun JavaSoft para assegurar que esse nome seja nico. <subnome> identifca efetivamente o banco de dados. passada um String que de implementao dos desenvolvedores de driver.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 267 -

i580 Java Programming

Interface Connection
Representa uma conexo com um banco de dados. A informao sobre a conexo pode ser obtida usando o mtodo getMetaData. usada para criar comandos SQL a serem enviadas para o banco de dados. Oferece suporte a transaes.

- 268 -

A interface Connection representa uma conexo com um banco de dados. Atravs de um objeto do tipo Connection podemos criar comandos SQL que sero enviadas para o banco de dados (ser visto no prximo bloco de construo do aprendizado). Podemos retornar informao acerca de uma conexo usando o mtodo getMetaData(). Esse mtodo retorna um objeto do tipo DatabaseMetaData com os dados necessrios. Uma nova conexo est sempre no modo auto-commit, significando que, quando uma instruo SQL for executada, o mtodo commit() ser chamado automaticamente. Usando o mtodo setAutoCommit() passando false como parmetro inabilitamos o modo auto-commit fazendo com que seja obrigatria uma chamada ou ao mtodo commit() ou ao mtodo rollback() para validar ou desfazer as instrues constantes da transao. H tambm suporte a nveis de isolamento de transao (mtodo setTransactionIsolation()). O suporte a transaes depende do banco de dados utilizado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 268 -

i580 Java Programming

SQLException
Classe do pacote java.sql e do tipo Checked Exception. Mtodos importantes:
getMessage = String descrevendo o erro getErrorCode = Cdigo especfico do BD getSQLState = Instruo SQL que deu erro

- 269 -

Quando estamos usando JDBC todos os mtodos que fazem acesso base de dados lanam a exceo SQLException. Ela do tipo checked exception. A exceo contm uma srie de mtodos que nos auxiliam no tratamento de erros. Os mais importantes so: getMessage() Retorna um String descrevendo o erro ocorrido; getErrorCode() Retorna um cdigo especfico do banco de dados que est sendo utilizado; getSQLState() Retorna a instruo SQL que deu erro.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 269 -

i580 Java Programming

Interface Statement
Envia comandos SQL para o banco de dados. Necessita de uma conexo ativa.
Statement consulta = conexao.createStatement();

O objeto Statement existe mas ainda no possui nenhum comando SQL associado. S aceita comandos SQL simples, sem parmetros.

- 270 -

Um objeto Statement envia comandos SQL para o banco de dados. Necessita, para ser criado, de uma conexo ativa para que possamos executar o mtodo createStatement() da conexo desejada. Repare que Statement uma interface e que a criao do objeto feita na chamada do mtodo createStatement(). A coisa feita dessa forma de modo que a implementao fique a cargo do fornecedores de bancos de dados. Aps a execuo de createStatement temos um objeto Statement que no possui nenhuma consulta associada. Logo, ainda no podemos utiliz-lo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 270 -

i580 Java Programming

Interface Statement
Mtodo executeQuery usado para consultas que retornam resultados.
String sql = select * from livros; ResultSet rs = consulta.executeQuery(sql);

O resultado da consulta vem em um objeto do tipo ResultSet.

- 271 -

Para consultas que podem retornar registros como resultado (caso de uma instruo SELECT) utiliza-se o mtodo executeQuery() do objeto Statement para envi-la ao banco de dados. O resultado dessa consulta vem dentro de um objeto ResultSet, que ser estudado no prximo bloco de construo do aprendizado. Caso j tenha sido feita uma outra consulta no objeto Statement, o objeto ResultSet anterior ser fechado.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 271 -

i580 Java Programming

Interface Statement
Mtodo executeUpdate usado para consultas DML, INSERT, UPDATE e DELETE e comandos DDL.
String sql = delete from vendas; int totalApagados = consulta.executeUpdate();

O resultado da consulta retorna um int cujo valor o nmero de linhas afetadas.


DML = Data Modeling Language DDL = Data Definition Language
- 272 -

Para executar comandos SQL que atualizem (UPDATE), insiram (INSERT), apaguem (DELETE) ou criem objetos no banco de dados (comandos DDL como CREATE TABLE), usamos o mtodo executeUpdate() do objeto Statement. O mtodo retorna um nmero inteiro que pode ser igual ao nmero de linhas afetadas (no caso de comandos UPDATE, INSERT ou DELETE) ou igual a 0 para declaraes DDL que no alteram nenhum registro.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 272 -

i580 Java Programming

Interface Statement
Mtodo execute usado quando a consulta retorna um ResultSet, ou um indicador de linhas afetadas.
String SQL = ...; boolean ehConsulta = consulta.execute(SQL);

Retorna true se o resultado um ResultSet, false se um int.

- 273 -

Geralmente, o mtodo execute() do objeto Statement mais utilizado quando no sabemos, em tempo de compilao, qual ser o comando SQL executado. Os mltiplos resultados, apesar de no serem comuns, podem acontecer. O mtodo execute() retorna um valor booleano que indica o tipo de resultado, e por conseguinte, qual o tratamento que devemos dar. Se o retorno for igual a true, significa que h um objeto do tipo ResultSet disponvel. Para recuperar esse objeto, usamos o mtodo getResultSet() do objeto Statement. Caso o valor de retorno seja false, indica que a consulta retornou o nmero de linhas afetadas e que temos que utilizar o mtodo getUpdateCount() do objeto Statement para recuper-lo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 273 -

i580 Java Programming

Interface PreparedStatement
Trabalha com declaraes SQL pr-compiladas. subclasse de Statement. Usado para declaraes que sero executadas mais de uma vez, alterando apenas valores da consulta.
PreparedStatement ps = conexao.prepareStatement(update livros set preco = ? where cod_livro = ?);
- 274 -

PreparedStatement mais eficiente do que Statement porque ele compilado uma nica vez, no momento da preparao do objeto (exemplo do slide). Os parmetros so passados cada vez que a consulta vai ser executada, sendo cada um deles indicados por um sinal de interrogao (vide novamente o exemplo do slide).

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 274 -

i580 Java Programming

Interface PreparedStatement
Depois de preparada devemos passar os valores para cada um dos parmetros.
ps.setDouble(1, 35.00); ps.setString(2, 08037-9383);

E em seguida executamos a consulta usando um dos mtodos abaixo:


ps.executeQuery(); ps.executeUpdate();
- 275 -

Existem vrios mtodos setXXX para fornecer os valores a cada uma das variveis da nossa PreparedStatement, sendo XXX substituda pelo tipo da varivel em questo. Repare tambm que o ndice comea a contar da posio 1 e no da posio zero como nos arrays e outras estruturas existentes em Java. Se fecharmos um PreparedStatement deveremos prepar-lo de novo antes de utiliz-lo.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 275 -

i580 Java Programming

Interface ResultSet
Armazena os resultados das consultas realizadas. Mantm um cursor apontando para o registro de dados atual. Com o mtodo next podemos andar pelo conjunto resultado linha a linha. Utilizamos os mtodos get... para recuperar os valores.
- 276 -

H duas verses dos mtodos getXXX() que recuperam os valores: uma em que se especificam as colunas por nmeros, iniciando no nmero 1, e outra em que se especificam as colunas pelos seus nomes. Nesse caso no feita distino entre letras maisculas e minsculas. O mtodo findColumn() retorna o nmero de uma coluna dado o seu nome.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 276 -

i580 Java Programming

Interface ResultSet

... while (rs.next()) { String cod_livro = rs.getString(CODIGO); String nome_livro = rs.getString(NOME); double preco = rs.getDouble(PRECO); ... }

- 277 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 277 -

i580 Java Programming

Fechando as Conexes
Aps o uso, devemos fechar todos os objetos ResultSet e Statement a fim de limpar a memria e liberar cursores do banco de dados.
... rs.close(); consulta.close(); conexao.close() ...

importante fechar as conexes para no saturar o banco de dados


- 278 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 278 -

i580 Java Programming

Data Transfer Objects

DTOs representam estruturas de dados


- 279 -

Data Transfer Objects so objetos que representam os dados necessrios para uma determinada tarefa. Ao invs de executar diversas chamadas para recuperar dados, feita uma nica chamada que retorna todos os dados de uma vez. O principal objetivo deste padro melhorar o desempenho (em termos de trfego de rede) da aplicao. Uma conseqncia interessante de sua utilizao a melhor organizao do sistema, j que mais fcil entender um cdigo que utiliza um objeto do que outro que faz inmeras chamadas, buscando vrios dados separados. DTOs no precisam necessariamente possuir todos os dados de uma classe de negcio correspondente.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 279 -

i580 Java Programming

Exemplo: Banco Money

- 280 -

Na figura acima a classe ClienteDTO utilizada no momento do depsito para retornar as primeiras quinze letras do nome do titular de uma determinada conta. Como este o nico dado do cliente necessrio para a tarefa, os demais no so includos no DTO. A classe ContaCorrenteDTO usada para as operaes de depsito, saque e consulta ao saldo e possui os atributos necessrios para a execuo desta atividade.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 280 -

i580 Java Programming

Data Access Object

DAOs encapsulam o acesso ao banco de dados


- 281 -

Atravs deste padro de projeto, possvel separar a interface de um recurso de sistema da estratgia de acesso interna usada para acessar o recurso. O objetivo ter independncia na escolha do banco de dados a ser usado e na representao dos dados. Fornece uma API de operaes sobre o recurso que simplesmente sabe como se carregar a partir de um armazenamento persistente baseada em alguma informao (chave primria, o nome de um arquivo, etc.), sabe como se armazenar, etc. Esse padro d maior flexibilidade no deployment da aplicao pois possvel configurar os dados em tempo de execuo, voltado para um banco de dados em particular, j que no h uma amarrao em um vendedor ou tipo de banco de dados especfico. Outra vantagem desse padro a possibilidade de passar para um ambiente diferente (EJB, Hibernate, etc) visto que os objetos DAO encapsulam a lgica de persistncia do negcio.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 281 -

i580 Java Programming

Banco Money

Que tal padronizar os m mtodos dos DAOs usando uma interface?


- 282 -

Na figura acima a classe ContaCorrenteDAO implementa o acesso aos dados atravs de vrios mtodos de busca, insero, remoo e atualizao de dados. Estes mtodos utilizam duas classes: Conexao: classe que efetua a conexo com o Banco de Dados. Representa o pacote de persistncia da figura da pgina anterior. Existem muitas maneiras de controlar conexes abertas mas neste exemplo cada mtodo abre uma conexo (com uma solicitao a classe Conexao), executa suas tarefas, fecha a conexo e retorna. ContaCorrente: a classe que representa o Data Object da figura da pgina anterior. usada pelo DAO de diversas maneiras: os mtodos de busca instanciam objetos desta classe e os utilizam como retorno. Os mtodos inserir, atualizar e remover recebem objetos desta classe como parmetros com o objetivo de extrair os dados e executar os comandos SQL adequados. A classe ContaCorrenteDAO usada por classes de controle. Por exemplo, a classe Principal (do diagrama MVC) pode chamar o mtodo atualizar de ContaCorrenteDAO em resposta a uma operao de saque confirmada pelo cliente.

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 282 -

i580 Java Programming

Exerccio
Implementar a TelaCadastro criando as seguintes classes:
FabricaDeConexoes (tem um mtodo esttico obter que retorna uma Connection). Contato (DTO). ContatoDAO.

Implemente os mtodos inserir e listar na classe ContatoDAO.

- 283 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 283 -

i580 Java Programming

O que j aprendemos?
UA 1 Fundamentos. UA 2 Orientao a Objetos. UA 3 Tratamento de Erros. UA 4 Classes teis. UA 5 Desenho de Telas. UA 6 Estruturas de Dados.

- 284 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 284 -

i580 Java Programming

Referncias
Unidade de Aprendizado

- 285 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 285 -

i580 Java Programming

Livros
Use a Cabea: Java Programming Java: Como Programar (Deitel & Deitel) Core Java, volumes 1 e 2 SCJP: Certificao Sun para Programador Java 5 Guia de Estudo

- 286 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 286 -

i580 Java Programming

Sites
Pgina do curso: www.infnet.com/moodle Tutorial Sun sobre Java: http://java.sun.com/docs/books/tutorial/index.html Java Ranch: http://www.javaranch.com Grupo de usurios Java: http://www.guj.com.br Portal Java: http://www.portaljava.com.br

- 287 -

TODOS OS DIREITOS SO RESERVADOS PELO INSTITUTO DE FORMAO INTERNET verso 1

- 287 -

You might also like