Fundamentos
Rio de Janeiro
Escola Superior de Redes
2013
Java Fundamentos
Java Fundamentos
Sumrio
Lgica de Programao ............................................................................................1
Conceito de Algoritmo .............................................................................2
Mtodo para a Construo de Algoritmos ................................................2
Instrues..................................................................................................4
Histrico da linguagem de programao Java .........................................................9
Caractersticas da Linguagem ................................................................12
Similaridade com C, C++ ...................................................................12
Compilao .........................................................................................12
Portabilidade .......................................................................................12
Orientao a Objetos ..........................................................................13
Segurana ...........................................................................................13
Concorrncia ......................................................................................13
Eficincia ............................................................................................14
Suporte para Programao de Sistemas Distribudos .........................14
Fundamentos de Programao em Java .................................................................15
O que Java? ..........................................................................................15
Recursos da Linguagem Java .................................................................16
Mquina Virtual Java .........................................................................16
Coleta de Lixo ....................................................................................17
Segurana de Cdigo ..........................................................................17
Comparao de Java com outras Linguagens.....................................18
Formato geral de um programa Java ......................................................18
Primeiro Programa .................................................................................19
Alguns cuidados ao escrever e executar programas Java .......................20
Comentrios............................................................................................21
Variveis .................................................................................................24
Tipos de Dados .......................................................................................24
Inteiros ................................................................................................25
Ponto Flutuante...................................................................................25
Tipo Caractere, char ...........................................................................26
Tipo boolean .......................................................................................26
Atribuies e Inicializaes................................................................26
Converses entre Tipos Numricos ....................................................27
Constantes ..............................................................................................28
Operadores..............................................................................................28
Tipo String ..............................................................................................30
Concatenao......................................................................................30
Substrings ...............................................................................................31
Tamanho .............................................................................................31
Teste de Igualdade ..............................................................................31
Manipulando dados em Java ..................................................................32
Exerccios de Fixao 4 Variveis ......................................................33
Atividade 2 Variveis e manipulao de dados (Complementar) .......34
Controle de Fluxo ...................................................................................................35
Java Fundamentos
i
Construtores........................................................................................69
Blocos de Inicializao .......................................................................70
Mtodos e Atributos static ......................................................................70
Pacotes ....................................................................................................74
Usando pacotes ...................................................................................75
Adicionando uma classe em um pacote .............................................76
Herana ...................................................................................................77
Hierarquia de Heranas ......................................................................79
Evitar Herana ....................................................................................80
Polimorfismo ..........................................................................................81
Classes Abstratas ....................................................................................83
Mtodos Abstratos ..................................................................................83
Ligao ...................................................................................................84
Classe Class ............................................................................................84
Reflexo..............................................................................................85
Anlise de Recursos das Classes ........................................................86
Anlise de Objetos em Tempo de Execuo ..........................................86
Superclasse abstrata ............................................................................86
Interfaces ............................................................................................87
Propriedades .......................................................................................90
Classes Internas ......................................................................................90
Collections..............................................................................................................95
Exerccio de nivelamento 9 Collections ..............................................95
Definio ................................................................................................95
Interface Collection ................................................................................95
O que o Java Collections Framework? ................................................95
Benefcios do Java Collections Framework ...........................................96
Listas ......................................................................................................97
Conjuntos................................................................................................98
Mapas ...................................................................................................100
Exerccio de Fixao 11 Collections .................................................101
Bibliografia ..........................................................................................................103
Java Fundamentos
iii
Java Fundamentos
iv
1
Lgica de Programao
Exerccio de nivelamento 1 Lgica de Programao
O que voc entende por lgica de programao?
Voc poderia descrever a sequncia de passos necessrios para realizar a troca de um pneu
furado de um carro?
A lgica de programao uma tcnica desenvolvida para auxiliar as pessoas que desejam
trabalhar com desenvolvimento de programas e sistemas. Ela permite definir e encadear
pensamentos numa sequncia lgica de passos necessrios para o desenvolvimento de uma
soluo computacional para atingir um determinado objetivo ou soluo de um problema
(FARRER, 1999).
O resultado da sequncia lgica de passos necessrios para o desenvolvimento de uma
soluo computacional servir de base para a escrita de programas que sero
implementados utilizando-se uma linguagem de programao. Por sua vez, os programas
sero armazenados nos computadores, equipamentos responsveis por receber, manipular e
armazenar dados, tendo como principal atividade o processamento de dados.
Quando queremos escrever um software para realizar qualquer tipo de processamento de
dados, vamos escrever um programa ou vrios programas interligados, mas para que o
Java Fundamentos
1
computador consiga compreender e executar esse programa ele deve estar escrito em uma
linguagem entendida pelo computador e pelo desenvolvedor de software, o que chamamos
de linguagem de programao.
As etapas para o desenvolvimento de um programa sa o: Ana lise, onde o enunciado do
problema sera estudado para a definia o dos dados de entrada, do processamento e dos
dados de sada; Algoritmo, onde ferramentas do tipo descria o narrativa, fluxograma ou
portugue s estruturado sa o utilizadas para descrever o problema com suas soluo es; e
Codificaa o, onde o algoritmo e transformado em co digos da linguagem de programaa o
escolhida para se trabalhar (ASCENCIO,
).
Conceito de Algoritmo
A seguir sero apresentados alguns conceitos de algoritmos.
Algoritmo uma sequncia de passos que visam atingir um objetivo bem definido
(Forbellone, 1999).
Algoritmo a descrio de uma sequncia de passos que deve ser seguida para a
realizao de uma tarefa (Ascncio, 1999).
Algoritmo uma sequncia finita de instrues ou operaes cuja execuo, em tempo
finito, resolve um problema computacional, qualquer que seja sua instncia (Salvetti,
2001).
Algoritmos so regras formais para obteno de um resultado ou da soluo de um
problema, englobando frmulas de expresses aritmticas (Manzano, 1997).
Ao um acontecimento que, a partir de um estado inicial, aps um perodo de tempo
finito, produz um estado final previsvel e bem definido. Portanto, um algoritmo a
descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso finita
de aes (Farrer, 1999).
Java Fundamentos
2
Produto final: algoritmo concludo e testado, pronto para ser traduzido em programa de
computador.
Java Fundamentos
3
Instrues
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas
definidas para a realizao ou emprego de algo. Em informtica, instruo a informao
que indica a um computador uma ao elementar a executar (GUIMARES, 1994) (FARRER,
1999) (ASCENCIO, 2005).
Convm ressaltar que uma ao isolada no permite realizar o processo por completo, sendo
necessrio um conjunto de instrues colocadas em ordem sequencial lgica para
implementar uma soluo computacional adequada para um determinado problema.
Por exemplo, se quisermos trocar o pneu de um carro, precisaremos colocar em prtica uma
srie de instrues: parar o carro, desligar o motor, pegar o pneu reserva, macaco e chave de
rodas, etc...
evidente que essas instrues tm que ser executadas em uma ordem adequada, ou seja,
no se pode tirar o pneu furado sem antes erguer o carro com o macaco, por exemplo. Dessa
maneira, uma instruo tomada em separado no tem muito sentido, ficando claro que, para
obtermos um determinado resultado, precisamos colocar em prtica um conjunto de
instrues numa ordem lgica correta.
Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego
de algo. Em informtica, o que indica a um computador uma ao elementar a executar.
Java Fundamentos
4
Turno
M ou V
M ou V
Java Fundamentos
5
Salrio inicial
Auxlio alimentao
At R$ 300,00
5% do salrio inicial
Mostre o cdigo, nmero de horas trabalhadas, valor da hora trabalhada, salrio inicial,
auxlio alimentao e o salrio final (salrio inicial + auxlio alimentao).
ALGORITMO
DECLARE cont, codigo, nht, valor, sal_min, sal_inicial, aux, sal_final NUMRICO
DECLARE turno, categoria LITERAL
sal_min 150
PARA cont 1 AT 10 FAA
INICIO
LEIA codigo, nht, turno, categoria
ENQUANTO (turno z M) E (turno z V) E (turno zN) FAA
INICIO
LEIA turno
FIM
ENQUANTO (categoria z G) E (categoria z O) FAA
INICIO
LEIA categoria
FIM
SE categoria = G
Java Fundamentos
6
ENTO INICIO
SE turno = N
ENTO valor 18% * sal_min
SENO valor 15% * sal_min
FIM
SENO INICIO
SE turno = N
ENTO valor 13% * sal_min
SENO valor 10% * sal_min
FIM
sal_inicial nht * valor
SE sal_inicial <= 300
ENTO aux 20% * sal_inicial
SENO SE sal_inicial < 600
ENTO aux 15% * sal_inicial
SENO aux 5% * sal_inicial
sal_final sal_inicial + aux
ESCREVA codigo, nht, valor, sal_inicial, aux, sal_final
FIM
FIM_ALGORITMO
Uma empresa contratou 15 funcionrios temporrios. De acordo com o valor das vendas
mensais, os funcionrios adquirem pontos que determinaro seus salrios ao final de cada
ms. Sabe-se que estes funcionrios trabalharo nos meses de novembro a janeiro do ano
subsequente. Faa um programa que:
a. Leia as pontuaes nos trs meses de cada funcionrio;
b. Calcule e mostre a pontuao geral de cada funcionrio nos trs meses;
c. Calcule e mostre a mdia das pontuaes de cada funcionrio nos trs meses;
d. Determine e mostre a maior pontuao atingida entre todos os funcionrios nos trs meses.
Java Fundamentos
7
Java Fundamentos
8
2
Histrico da linguagem de programao Java
A linguagem Java comeou em 1991, quando um grupo de engenheiros da Sun, liderados por
Patrick Naughton, Sun Fellow e James Gosling, quiseram projetar uma pequena linguagem de
programao que pudesse ser usada em equipamentos de consumo como caixas de
comutao de TV a cabo. Com esses dispositivos no tinham uma grande capacidade de
processamento ou memria, a linguagem tinha de ser pequena para gerar um cdigo bem
limitado em tamanho. Alm disso, como fabricantes diferentes podiam escolher CPUs
diferentes, era importante no ficar preso a uma nica arquitetura. O projeto recebeu o nome
de Green (HORSTMANN, 2003).
Java. O Internet Explorer tem capacidade Java e o Windows contm uma mquina virtual
Java. (Note-se, porm que a Microsoft no suporta a verso mais recente da linguagem Java, e
que sua implementao difere do Java padro).
A Sun lanou a primeira verso da linguagem Java no incio de 1996. Ela foi seguida pelo Java
1.02 alguns meses depois. As pessoas rapidamente perceberam que o Java 1.02 no seria
usado no desenvolvimento de aplicativos srios. Certamente algum poderia usar o Java 1.02
para fazer um applet de texto nervoso (que move o texto ao acaso na tela). Mas no era
possvel sequer imprimir em Java 1.02! Para ser franco, o Java 1.02 no estava pronto para o
horrio nobre.
Java Fundamentos
11
Caractersticas da Linguagem
Similaridade com C, C++
Java tem a aparncia de C ou de C++, embora a filosofia da linguagem seja diferente. Por este
motivo estaremos frequentemente fazendo comparaes alguma destas linguagens. O
programador em qualquer uma delas, ou em uma linguagem orientada a objetos, se sentir
mais a vontade e se tornar um bom programador Java em menos tempo.
Tambm possui caractersticas herdadas de muitas outras linguagens de programao:
Objective-C, Smalltalk, Eiffel, Modula-3 etc. Muitas das caractersticas desta linguagem no
so totalmente novas. Java uma unio de tecnologias testadas por vrios centros de
pesquisa e desenvolvimento de software.
Compilao
Um programa em Java compilado para o chamado bytecode, que prximo s instrues de
mquina, mas no de uma mquina real. O bytecode um cdigo de uma mquina virtual
idealizada pelos criadores da linguagem. Por isso Java pode ser mais rpida do que se fosse
simplesmente interpretada.
Alm disso, existem compiladores de cdigo nativo para Java (Asymetrix, Symantec, IBM etc).
H tambm outra forma de compilao, just-in-time (JIT). Esses compiladores trabalham
compilando os bytecodes em cdigo nativo uma vez, guardando o resultado e utilizando nas
outras chamadas.
Portabilidade
Java foi criada para ser portvel. O bytecode gerado pelo compilador para a sua aplicao
especfica pode ser transportado entre plataformas distintas que suportam Java (Solaris 2.3 ,
Windows, Mac/Os etc). No necessrio recompilar um programa para que ele rode numa
Java Fundamentos
12
mquina e sistema diferentes, ao contrrio do que acontece, por exemplo, com programas
escritos em C e outras linguagens.
Esta portabilidade importante para a criao de aplicaes para a heterognea Internet.
Muitos dos programas aqui apresentados foram escritos e compilados numa plataforma
Windows 98 e rodaram perfeitamente quando simplesmente copiados para uma
plataforma Linux. Em Java um inteiro, por exemplo, tem sempre 32 bits, independentemente
da arquitetura. O prprio compilador Java escrito em Java, de modo que ele portvel para
qualquer sistema que possua o interpretador de bytecodes. Um exemplo de programa escrito
em Java o browser Hot Java.
Orientao a Objetos
A portabilidade uma das caractersticas que se inclui nos objetivos almejados por uma
linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relao ao
grupo atual de linguagens orientadas a objetos.
Java suporta herana, mas no herana mltipla. A ausncia de herana mltipla pode ser
compensada pelo uso de herana e interfaces, onde uma classe herda o comportamento de
sua superclasse alm de oferecer uma implementao para uma ou mais interfaces.
Java tambm permite a criao de classes abstratas. Outra caracterstica importante em
linguagens orientadas a objetos a segurana. Dada a sua importncia o tpico foi
considerado separadamente.
Segurana
A presena de coleta automtica de lixo (garbage collection), evita erros comuns que os
programadores cometem quando so obrigados a gerenciar diretamente a memria (C , C++,
Pascal). A eliminao do uso de ponteiros, em favor do uso de vetores, objetos e outras
estruturas substitutivas, traz benefcios em termos de segurana. O programador proibido
de obter acesso memria que no pertence ao seu programa, alm de no ter chances de
cometer erros comuns tais como reference aliasing e uso indevido de aritmtica de ponteiros.
Estas medidas so particularmente teis quando pensarmos em aplicaes comerciais
desenvolvidas para a internet.
Ser strongly typed tambm uma vantagem em termos de segurana, que est aliada a
eliminao de converses implcitas de tipos de C++.
A presena de mecanismos de tratamento de excees torna as aplicaes mais robustas, no
permitindo que elas abortem, mesmo quando rodando sob condies anormais. O
tratamento de excees ser til na segunda parte na modelagem de situaes tais como
falhas de transmisso e formatos incompatveis de arquivos.
Concorrncia
A linguagem permite a criao de maneira fcil, de vrios threads de execuo. Este tpico
ser til quando voc estudar animaes, e particularmente poderoso nos ambientes em
Java Fundamentos
13
que aplicaes Java so suportadas, ambientes estes que geralmente podem mapear os
threads da linguagem em processamento paralelo real.
Eficincia
Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espao,
pouca memria. muito mais eficiente que grande parte das linguagens de scripting
existentes, embora seja muitas vezes mais lenta que C, o que no um marco definitivo. Com
a evoluo da linguagem, existem geradores de bytecodes cada vez mais otimizados que
levam as marcas de performance da linguagem mais prximas das de C++ e C. Alm disso, um
dia Java permite a possibilidade de gerar cdigo executvel de uma particular arquitetura on
the fly, tudo a partir do bytecode. So os compiladores JIT vistos acima que chegam a acelerar
10 a 20 vezes a execuo de um programa.
Java Fundamentos
14
3
Fundamentos de Programao em Java
Exerccio de nivelamento 2 Fundamentos de Programao em
Java
O que voc entende por linguagem de programao?
O que Java?
Java resulta da busca por uma linguagem de programao que englobe todas as
caractersticas da linguagem C++, com a segurana de uma linguagem como SmallTalk.
Java vista com uma linguagem de programao, um ambiente de desenvolvimento e um
ambiente de aplicativos conforme ilustrao da figura 01.
Existem duas grandes categorias de programas Java, os aplicativos, que rodam
independentemente de um navegador e os applets, que dependem de um navegador para ser
executado.
Java Fundamentos
15
Java Fundamentos
16
Coleta de Lixo
A coleta de lixo realizada automaticamente atravs de uma thread de segundo plano sendo
executada no sistema operacional atravs da JVM especfica desta plataforma de hardware.
Nela os endereos de memria com referncia 0 (zero) so removidos. Esta remoo ocorre
durante o tempo de vida do programa em execuo e tem como objetivo eliminar o
vazamento de endereos de memria.
Segurana de Cdigo
A segurana de cdigo em Java e obtida atravs do processo de compilao e de verificao e
execuo de bytecodes.
A compilao tem como produto final um bytecode, independente de plataforma. A
verificao e execuo de bytecodes so feitas por interpretadores em tempo de execuo.
Este processo realiza trs tarefas:
Carregar o cdigo: executado pelo utilitrio de carga de classe.
Verificar o cdigo: executado pelo verificador de bytecode.
Executar o cdigo: executado pelo interpretador de tempo de execuo.
Java Fundamentos
17
Java Fundamentos
18
Primeiro Programa
Segue um programa simples em Java:
public class PrimeiroExemplo {
public static void main(String[] args) {
System.out.println(Meu primeiro Programa em Java!!!);
}
}
A primeira coisa a ser observada que Java case sensitive, isto , diferencia entre caracteres
maisculos e minsculos.
Analisando o programa acima, a palavra chave public chamada modificador de acesso.
Esses modificadores controlam o que outras partes do programa podem usar desse cdigo. A
outra palavra chave class diz que tudo est dentro de uma classe, como tudo em Java, e essa
classe tm o nome de PrimeiroPrograma. Existe uma conveno para que os nomes das
classes comecem sempre com letra maiscula.
necessrio que o nome do arquivo tenha o mesmo nome da classe pblica, nesse caso
PrimeiroPrograma.java. Novamente no se pode trocar letras maisculas por
minsculas.
Java Fundamentos
19
Esse o erro de compilao mais comum. Lembre de que uma linha de comando em Java
dever terminar com o ponto e vrgula ;. Repare que o compilador explcito em dizer que
a linha 3 esta com problemas. Outros erros de compilao podem ocorrer se voc escrever de
forma equivocada alguma palavra chave (que indicam comandos da linguagem), se esquecer
de abrir e fechar chaves {}, dentre outros.
Durante a execuo, outros erros podem aparecer:
- Se voc declarar a classe Exemplo (primeira letra maiscula), compil-la e depois tentar
us-la como e minsculo (java exemplo), o Java te avisa:
Exception in thread "main" java.lang.NoClassDefFoundError:
Exemplo (wrong name: exemplo)
- Se tentar acessar uma classe no diretrio ou classpath errado, ou se o nome estiver errado,
ocorrer o seguinte erro:
Exception in thread "main" java.lang.NoClassDefFoundError: Exemplo
- Se esquecer de colocar static ou o argumento String[] args no mtodo main:
Exception in thread "main" java.lang.NoSuchMethodError: main
- Se no colocar o mtodo main como public:
Class Exemplo doesnt have a main method.
Comentrios
Os comentrios podem ser ou de uma linha (//) ou de vrias linhas (/* e */). Por exemplo:
// imprime na tela comentrio de uma linha
System.out.printl(Hello World!!!);
/* Aqui sera impresso uma linha de texto na
tela: Hello World!!!
*/
System.out.printl(Hello World!!!);
Existe ainda um terceiro tipo de comentrio, utilizado para documentao automtica do
programa em desenvolvimento pela ferramenta javadoc do Java. Neste caso, devemos
utilizar /** para comear e */ para terminar os textos que sero utilizados no processo de
criao dos arquivos de documentao do programa em desenvolvimento.
Os comentrios devem estar localizados imediatamente antes da definio da classe ou
membro comentado. Cada comentrio pode conter uma descrio textual sobre a classe ou
membro, possivelmente incluindo tags HTML, e diretrizes para javadoc. As diretrizes para
javadoc so sempre precedidas por @, como em:
@see nomeClasseOuMembro: gera na documentao um link para a classe ou membro
especificado, precedido pela frase "See also ".
Java Fundamentos
21
Java Fundamentos
22
Java Fundamentos
23
Variveis
Exerccios de nivelamento 3 Variveis
Voc sabe como o computador armazena informaes na memria?
Em Java necessria a declarao de variveis para que possa us-las. Eis alguns exemplos:
byte b;
int umaVariavelInteira;
long umaVariavelLong;
char ch;
Deve-se prestar ateno ao ponto e vrgula no final das declaraes, porque so comandos
completos em Java.
Regras para nomeao de variveis:
Sequncia de letras e dgitos;
Letras: A Z, a z, _ e qualquer caractere Unicode que denote uma
letra em um idioma, por exemplo, em Alemo pode-se usar nos nomes de variveis,
ou P em grego. Apesar de em portugus se poder usar as vogais acentuadas ou cedilha,
no aconselhvel, caso se abra o programa em outro sistema operacional, que pode
gerar algum tipo de confuso;
Dgitos: 0 9 e qualquer caractere Unicode que denote um dgito em uma linguagem;
O comprimento do nome das variveis essencialmente ilimitado;
No se pode utilizar uma palavra reservada (como if, switch, etc).
Tipos de Dados
Java fortemente tipada, o que significa que cada varivel precisa ter seu tipo declarado para
que possa ser usada. H oito tipos primitivos. Seis numricos (4 inteiros e 2 de ponto
flutuante), um o tipo char usado para caracteres no formato Unicode, e o outro boolean
para valores verdadeiro ou falso. No existe nenhum tipo de dados equivalente ao Variant,
que armazena qualquer tipo de dados bsicos. Outros tipos mais elaborados, como String,
no so tipos bsicos e so objetos em Java.
Java Fundamentos
24
Inteiros
So nmeros sem parte fracionria. Veja a tabela a seguir:
Tipo
Armazenamento
Intervalo
Byte
8 bits 1 byte
-128 a 127
short
16 bits 2 bytes
-32.768 a 32.767
Int
32 bits 4 bytes
-2.147.483.648 a 2.147.483.687
Long
64 bits 8 bytes
-9.223.372.036.854.775.808L a 9.223.372.036.854.775.807L
A parte mais interessante dos tipos em Java que eles no dependem de plataforma, isto ,
um valor int sempre ter 4 bytes, seja em Windows, seja em SPARC.
Ponto Flutuante
Os nmeros de ponto flutuante denotam nmeros com partes fracionrias. H dois tipos:
Tipo
Armazenamento
Intervalo
Float
32 bits 4 byte
Aproximadamente r 3.40282347E+38F
(6-7 dgitos decimais significativos)
Double
64 bits 8 bytes
Aproximadamente r
1.79769313486231570E+308
(15 dgitos significativos)
Esses nmeros seguem o formato IEEE 754. O tipo float chamado de preciso simples. E
o double de preciso dupla.
Java Fundamentos
25
Nome
Valor Unicode
\b
Backspace
\u0008
\t
Tabulao
\u0009
\n
Linefeed
\u000A
\r
Carriage return
\u000D
Aspas duplas
\u0022
\u0027
\\
Barra invertida
\u005c
\b
Backspace
\u0008
Em Java, valores do tipo char no so nmeros, ento sua converso necessita uma
converso explcita de tipos.
Tipo boolean
O tipo lgico boolean tem dois valores: falso (false) e verdadeiro (true). utilizado em
testes lgicos.
Atribuies e Inicializaes
Depois da declarao deve-se inicializar as variveis. No se deve ter variveis no
inicializadas, e o compilador geralmente avisa quando uma varivel no foi inicializada.
Java Fundamentos
26
Uma inicializao pode ser feita ou na hora da declarao ou depois, usando-se o nome da
varivel seguido do sinal de igual (=) e depois seguido do valor da inicializao. Por exemplo:
int teste;
char ch;
long i = 0;
teste = 10;
ch = S;
Outro ponto importante que se pode declarar variveis em qualquer lugar no cdigo, mas
cada varivel (identificada por seu nome) somente uma vez em cada trecho.
Java Fundamentos
27
Constantes
Para se definir uma constante em Java, usa-se a palavra chave final:
public class UsaConstantes {
public static void main(String[] args) {
final double CM_POR_SOL = 2.54;
double largPapel = 8.5;
double altPapel = 11;
System.out.println(Tamanho papel em cm: +
largPapel * CM_POR_SOL + por +
altPapel * CM_POR_SOL);
}
}
A palavra chave final significa que a varivel s pode receber valor uma vez, e fica definido
para sempre. costume dar nomes totalmente em maisculas para constantes.
O mais comum em Java declarar uma constante e fazer com que ela fique disponvel para
vrios mtodos dentro de uma classe. So geralmente chamadas de constantes de classe.
Pode-se defini-las atravs das palavras-chave static final.
public UsaConstante2 {
public static final double G = 9.81;
public static void main(String[] args) {
System.out.println(G + metros por Segundo ao quadrado.);
}
}
Operadores
Segue uma tabela com os operadores aritmticos:
Operador
Significado
Exemplo
Soma
x = 5 + 10;
+=
x += 10; // x = x + 1
Incremento de 1, aps
x++; // x = x + 1
Incremento de 1, antes
++x; // x = x + 1
Subtrao
x = 5 10;
-=
x -= 10; // x = x 10
Decremento de 1, aps
x--;. // x = x 1
Decremento de 1, antes
--x;. // x = x 1
Multiplicao
x = 5 * 10;
++
-*
Java Fundamentos
28
Operador
Significado
Exemplo
*=
x *= 10; // x = x * 10
Diviso, inteira
x = 5 / 10;
x = 5.0 / 10.5;
/=
x /= 10; // x = x / 10
Resto da diviso
x = 5 % 10;
%=
x %= 10; // x = x % 10
Significado
Exemplo
==
Igual
if (x == 10) ...
!=
Diferente
if (x != 10) ...
>
Maior
>=
Maior ou igual
<
Menor
<=
Menor ou igual
&&
E lgico
||
Ou lgico
No lgico
?:
Condicional ternrio
x = (y==10) ? 0 : 1; // se
y==10, x recebe 0, seno
recebe 1
Significado
Exemplo
&
E bit a bit
x = y & 32;
&=
Java Fundamentos
29
Operador
Significado
Exemplo
Ou bit a bit
x = y | 32;
|=
x |= 32; // x = x | 32
Ou exclusivo (XOR)
x = y ^ 32;
^=
x ^= 32; // x = x ^ 32
x = ~y;
>>
>>=
x >>= 3; // x = x >> 3
<<
<<=
x <<= 3; // x = x << 3
>>>
x = y >>> 3;
>>>=
x = >>>= 3; // x = x >>> 3
Tipo String
Strings so sequncias de caracteres, como ola. O Java no possui um tipo nativo para o
tratamento de strings, ao invs, possui uma classe pr-definida, chamada String. Cada string
entre aspas uma instncia da classe String.
String e = ;
// string vazia
String ola = Ola;
Concatenao
A linguagem Java permite que o sinal de + seja o operador para concatenao de strings.
String cur = Curso;
String j = Java;
String curso = cur + j;
O resultado do trecho acima a atribuio de CursoJava para a varivel curso. Perceba
que nada inserido nessa concatenao, por isso que no h nenhum espao no resultado.
Java Fundamentos
30
Ao concatenar uma string com um valor que no uma string, este convertido para string
automaticamente:
String censura = 18 + anos;
Substrings
Para se extrair uma substring de uma string, usa-se o mtodo substring da classe
String:
String saudacao = Bem-vindo;
String s = saudacao.substring(0, 3);
Esse cdigo cria uma string (s) que possui os caracteres Bem. No comando substring
acima, o primeiro parmetro o primeiro caractere a ser copiado (o primeiro caractere de
uma string est na posio 0) e o segundo parmetro o ndice do primeiro caractere que
no se quer copiar. No exemplo, o caractere na posio 3 o -.
Para se retornar somente um caractere da string usa-se:
String saudacao = Bem-vindo;
char c = saudacao.charAt(2);
Que retornar o caractere 'm'.
Tamanho
O mtodo length retorna o tamanho de uma string.
String saudacao = ola;
int n = saudacao.length();
// retorna 3
Teste de Igualdade
Para testar a igualdade de duas strings, usa-se o mtodo equals. Por exemplo:
s.equals(t)
Retorna true se as strings s e t forem iguais e false caso contrrio. Outra construo
vlida :
Ola.equals(comando)
Para testar se as strings so idnticas, sem levar em conta a diferenciao entre maisculas e
minsculas usa-se:
Ola.equalsIgnoreCase(ola)
No use o operador == para teste de igualdade, pois ele s compara se duas strings esto no
mesmo local. E claro, se elas estiverem no mesmo local so idnticas.
Pode-se usar tambm o mtodo compareTo:
Java Fundamentos
31
if (saudacao.comparesTo(Ola) == 0) ...
Java Fundamentos
32
Java Fundamentos
33
Java Fundamentos
34
4
Controle de Fluxo
Exerccio de nivelamento 4 Controle de Fluxo
Voc poderia fazer uma breve descrio de como toma decises para solucionar problemas
do seu dia a dia?
Como voc imagina que os computadores tomam decises para solucionar nossos problemas
do dia a dia?
Cite alguns problemas de que voc necessita do auxlio do computador para solucionar.
{
int k;
int n;
// erro!!! Variveis com mesmo nome
}
}
Expresso Lgica
Formada por operadores lgicos e operandos que so relaes entre constantes e/ou
variveis ou ainda outras expresses lgicas. Alguma ao durante a execuo do programa
pode estar sujeita a uma condio. Esta condio representada por uma expresso lgica.
Java Fundamentos
36
Operadores Lgicos
Conectores que tambm so operadores em expresses lgicas.
Tabela Verdade
Representao do resultado lgico da conexo de 2 ou mais relaes em uma mesma
expresso lgica.
Java Fundamentos
37
Estruturas de Deciso
Uma estrutura condicional empregada quando a ao a ser executada (sequncia de
comandos) depender de uma condio.
Estas condies representam expresses lgicas que so satisfeitas ou no. Uma
estrutura condicional tambm conhecida como estrutura de desvio.
Tambm chamadas de estruturas condicionais, os comandos de seleo permitem executar
instrues ou blocos de comandos tendo como base o resultado expresses lgicas
realizadas durante a execuo de um programa.
Comando if
O mais trivial das estruturas condicionais o if. Ele testa uma determinada condio e
executa o bloco de comandos indicado se o resultado da anlise de uma condicao for true.
O comando if possui a seguinte sintaxe:
if (expresso)
comando;
if (expresso) {
comando_1;
...
comando_n;
}
Para incluir mais de um comando na instruo if preciso utilizar a marcao de bloco
comandos, demarcando por chaves o incio e fim das instrues a serem executadas caso o
resultado da anlise de uma condio for verdadeira (true).
O else um complemento opcional para a instruo if. Se utilizado, o comando ser
executado se o resultado da analise de uma condio retornar o valor false. Suas duas
sintaxes so:
if (expresso)
comando_1;
else
comando_2;
ou:
if (expresso)
comando;
else {
comando;
...
comando;
}
Java Fundamentos
38
Comando switch
O comando switch atua de maneira semelhante a uma srie de comandos if na mesma
expresso. Frequentemente o programador pode querer comparar uma varivel com
diversos valores, e executar um cdigo diferente a depender de qual valor igual ao da
varivel. Quando isso for necessrio, deve-se usar o comando switch. O exemplo seguinte
mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma
srie de ifs e o segundo utiliza switch:
if (i == 0)
System.out.print("i igual a zero");
else if (i == 1)
System.out.print("i igual a um");
else if (i == 2)
System.out.print("i igual a dois");
switch (i) {
case 0:
System.out.print("i
break;
case 1:
System.out.print("i
break;
case 2:
System.out.print("i
break;
default:
System.out.print("i
break;
}
igual a zero");
igual a um");
igual a dois");
diferente de tudo");
A clusula default serve para tratar valores que no esto em nenhum case. opcional.
Java Fundamentos
39
Operao
Se a opo digitada for invlida, mostrar uma mensagem de erro e terminar a execuo do
programa. Lembre-se que na operao 4 o segundo nmero deve ser diferente de zero.
3. Uma empresa decide dar um aumento de 30% aos funcionrios com salrios inferiores a
R$ 500,00. Crie uma classe executvel Java que receba o salrio do funcionrio e mostre o
valor do salrio reajustado ou uma mensagem caso o funcionrio no tenha direito ao
aumento.
Java Fundamentos
40
Estruturas de Repetio
Exerccio de nivelamento 5 Estruturas de Repetio
Ns j vimos que necessitamos de variveis para armazenar valores para possibilitar
processamento de dados e impresso de resultados? Imagine que voc tenha que
desenvolver um programa para ler e imprimir notas de 5000 alunos. Que ideia voc
apresentaria para solucionar este problema com os recursos que voc aprendeu at agora?
Definio
Estruturas de repetio so estruturas que repetem um bloco de instrues at que uma
condio de parada especificada seja satisfeita. No Java, trabalharemos com as seguintes
estruturas:
while
do while
for
Comando while
O while o comando de repetio (lao) mais simples. Ele testa uma condio lgica e
executa um comando, ou um bloco de comandos, at que a condio testada seja falsa.
Sintaxe:
while (<expressao>)
<comando>;
while (<expressao>) {
comando_1;
...
comando_n;
}
A expresso s testada a cada vez que o bloco de instrues termina, alm do teste inicial.
Se o valor da expresso passar a ser false no meio do bloco de instrues, a execuo segue
at o final do bloco. Se no teste inicial a condio for avaliada como false, o bloco de
comandos no ser executado.
Java Fundamentos
41
Comando for
O tipo de lao mais complexo o for. Para os que programam em C, C++, a assimilao do
funcionamento do for natural. Mas para aqueles que esto acostumados a linguagens como
Pascal, h uma grande mudana para o uso do for. As duas sintaxes permitidas so:
for (<inicializacao>; <condicao>; <incremento>)
comando;
for (<inicializacao>; <condicao>; <incremento>) {
comando_1;
...
comando_n;
}
As trs expresses que ficam entre parnteses tm as seguintes finalidades:
Inicializao: Comando ou sequncia de comandos a serem realizados antes do inicio do
lao. Serve para inicializar variveis;
Condio: Expresso booleana que define se os comandos que esto dentro do lao
sero executados ou no. Enquanto a expresso for verdadeira (valor diferente de zero)
os comandos sero executados;
Incremento: Comando executado ao final de cada execuo do lao.
Java Fundamentos
42
Quebra de fluxo
Os comandos de quebra de fluxo servem para sair dos laos incondicionalmente, ou para
executar o prximo passo.
Comando Break
O comando break pode ser utilizado em laos do, for e while, alm do uso j visto no
comando switch. Ao encontrar um break dentro de um desses laos, o interpretador Java
para imediatamente a execuo do lao, seguindo normalmente o fluxo do cdigo:
while (x > 0) {
...
if (x == 20) {
System.out.println("erro! x = 20");
break;
}
...
}
No trecho de cdigo acima, o lao while tem uma condio para seu trmino normal (x <=
0), mas foi utilizado o break para o caso de um trmino no previsto no incio do lao.
Assim o interpretador seguir para o comando seguinte ao lao.
Existe outra modalidade de break que o break rotulado. Eles so usados quando se
necessita sair de blocos aninhados e no se quer inserir um monte de condies de sada, em
cada um dos nveis dos laos. Por exemplo:
int n;
ler_dados:
while (...) {
for (...) {
n = Console.readInt(...);
if (n < 0)
// nunca deveria ocorrer
Java Fundamentos
43
break ler_dados;
...
}
}
// verifica se a entrada de dados foi bem sucedida
if (n<0) {
// situao invlida
}
else {
// entrada de dados normal
}
Comando continue
O comando continue tambm deve ser utilizado no interior de laos, e funciona de
maneira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta
para o incio dele, executando a prxima iterao. Vejamos o exemplo:
for (i = 0; i < 100; i++) {
if (i % 2)
continue;
System.out.println(i);
}
O exemplo acima uma maneira ineficiente de imprimir os nmeros pares entre 0 e 99. O
que o lao faz testar se o resto da diviso entre o nmero e 2 0. Se for diferente de zero
(valor lgico true) o interpretador encontrar um continue, que faz com que os
comandos seguintes do interior do lao sejam ignorados, seguindo para a prxima iterao.
Pode-se usar o comando continue dentro de laos for, while e do...while.
Comando return
O comando return usado para sair do mtodo corrente, e tambm para retornar valores
de mtodos que tm retorno. Exemplo:
return ++cont;
return;
Java Fundamentos
44
Java Fundamentos
45
3. Uma prefeitura abriu uma linha de crdito para seus funcionrios. O valor mximo da
prestao no poder ultrapassar 25% do salrio bruto. Faa uma classe executvel que
dados o valor do salrio bruto e o valor da prestao, informe se o emprstimo pode ou no
ser concedido.
4. Faa uma classe executvel que dados os limites de um intervalo [a; b], informe a soma de
todos os nmeros naturais neste intervalo. Exemplo: [4, 7] => 4+5+6+7=22.
Java Fundamentos
46
5
Arrays
Estrutura de dados que armazena um nmero fixo de elementos do mesmo tipo.
Vetor ou Matriz.
Uni e Multidimencional.
Definio
Um array uma varivel composta homognea uni ou multidimensional formada por uma
sequncia de valores, todas do mesmo tipo, com o mesmo identificador (mesmo nome) e
alocadas sequencialmente na memria. Uma vez que os valores so alocados
sequencialmente e tem o mesmo nome, a forma utilizada para acess-los e atravs de um
ndice, que referencia a localizao de um valor dentro da estrutura onde ele est
armazenado.
Arrays so objetos em Java que possibilitam o armazenamento de dados primitivos. Arrays
servem para manipular uma grande quantidade de dados sem que se precise declarar vrias
variveis do mesmo tipo.
Java Fundamentos
47
Utilizao de Arrays
Devemos seguir 3 passos durante a escrita de um programa Java:
Declarao diz ao compilador o nome do array e o tipo de elemento que ser
armazenado.
Construo Quando o array construdo, seus elementos so automaticamente
inicializados para os valores padro.
Posies de vetores numricos 0 (zero)
Posies de vetores booleanos false
Posies de vetores de objetos null
Inicializao durante a construo ou utilizar cdigo Java para faz-la.
Um array uma estrutura de dados que armazena um conjunto de valores de mesmo tipo.
Voc acessa cada valor individual atravs de um ndice inteiro. Por exemplo, se x um array
de inteiros, ento x[i] o i-simo inteiro no array.
Java Fundamentos
49
Uma vez que voc crie um array, voc no poder mudar seu tamanho, embora voc possa,
claro, mudar um elemento especfico do array.
Java Fundamentos
50
Cpia de Arrays
Pode-se copiar uma varivel de array em outra, fazendo com que as duas variveis faam
referncia ao mesmo array.
int [] luckyNumbers = smallPrimes;
Nesse exemplo os dois arrays iro acessar os mesmos elementos. Caso se queira realmente
copiar os elementos de um para o outro, fazendo com que os elementos sejam duplicados,
usa-se o mtodo arraycopy da classe System. A sintaxe :
System.arraycopy(de, indiceDe, para, indicePara, contagem);
Arrays Multidimensionais
Arrays multidimensionais, ou matrizes, para simplificar, so fceis de declarar:
int[][] Tabuleiro;
Uma vez inicializada:
Tabuleiro = new int[8][8];
Pode-se utilizar cada um dos elementos da seguinte forma:
Tabuleiro[3][2] = 10;
Nota-se que a sintaxe e manipulao dos elementos muito similar usada em outras
linguagens de programao. Mas um aspecto deve ser visto com calma. Os arrays
multidimensionais so implementados com arrays de arrays.
No exemplo acima, Tabuleiro na verdade um array com 8 elementos, cada um desses
elementos sendo um array de oito elementos inteiros.
A expresso Tabuleiro[3] se refere ao subarray de ndice 3, e Tabuleiro[3][2] se
refere ao elemento (int) de ndice 2 desse subarray.
Para inicializar uma matriz na declarao, usa-se como no exemplo:
Java Fundamentos
51
Voc acredita que arrays facilitam o desenvolvimento de programas que manipulam grandes
volumes de dados? Justifique sua resposta.
Atividade 1 Arrays
1. Faa uma classe executvel que dado um conjunto de 20 elementos numricos, informe a
soma de todos os nmeros pares.
2. Faa uma classe executvel que dado um conjunto com a idade de 50 pessoas, informe a
percentual em cada faixa etria: de 0 a 15 anos, de 16 a 30 anos, de 31 a 45 anos, de 46 a 60
anos e mais que 60 anos.
3. Faa uma classe executvel que receba por meio da linha de comando do programa
(prompt) um nmero natural (de 1 a 10) e informe a sua tabuada.
Java Fundamentos
52
6
Classes Especializadas
Exerccio de nivelamento 7 Classes Especializadas
Listar padres de formatao de informaes que voc consegue identificar no seu dia a dia?
Voc conhece padres de formatao que so diferentes entre continentes ou pases?
Wrappers de Objetos
Ocasionalmente necessrio converter um tipo bsico como int, para um objeto. Todos os
tipos bsicos tm correspondentes de classe. Por exemplo, existe um correspondente da
classe Integer para o tipo bsico int. Esses tipos de classes so normalmente chamadas
de wrappers de objeto. As classes wrapper tm nomes bvios: Integer, Long, Float,
Double, Short, Byte, Character, Void e Boolean. As seis primeiras herdam do
wrapper comum Number. As classes wrapper so final. Portanto, voc no pode sobrepor
o mtodo toString em Integer, para exibir nmeros usando algarismos romanos, por
exemplo. Voc tambm no pode alterar os valores que armazena no wrapper de objeto
(HORSTMANN, 2003).
Frequentemente, voc ver os wrappers de nmero por outro motivo. Os projetistas da
linguagem Java acharam os wrappers um lugar conveniente para colocar certos mtodos
bsicos, como aqueles para converter strings de dgitos para nmeros.
Para converter uma string em um inteiro, voc precisa usar a instruo a seguir:
int x = Integer.parseInt(s);
Java Fundamentos
53
Classe wrapper
Byte
Byte
byte ou String
Short
Short
short ou String
Int
Integer
int ou String
Long
Long
long ou String
Float
Float
Double
Double
double ou String
Char
Character
char
Boolean
Boolean
boolean ou String
Outro uso importante dos wrappers ser um lugar interessante para agrupar
funcionalidades referentes ao tipo bsico que ele empacota, como alguns tipos de converses
suportados pela linguagem Java.
de modo a manter dentro de 0,9 segundo UTC de UT1, que uma verso de UT com
determinadas correes aplicadas. H outra hora e sistemas de datas, bem como, por
exemplo, a escala de tempo utilizado pelo sistema de posicionamento por satlite (GPS), que
sincronizada para UTC, mas no est ajustada para os segundos bissextos.
Em todos os mtodos da classe Date que aceitar ou voltar ano, ms, dia, hora, minuto,
segundo e os valores, as representaes seguintes so utilizados:
Um ano y representado pelo nmero inteiro y - 1900.
Um ms representado por um nmero inteiro de 0 a 11; 0 de Janeiro, 1 de Fevereiro,
e assim por diante, assim 11 de Dezembro.
A data (dia do ms) representada por um inteiro de 1 a 31.
Uma hora representada por um nmero inteiro de 0 a 23. Assim, a hora a partir de
meia-noite s 01:00 horas 0, e na hora do meio-dia s 01:00 de 12 horas.
Um minuto representado por um inteiro de 0 a 59.
Um segundo representado por um inteiro de 0 a 61; os valores 60 e 61 ocorrem apenas
durante segundos bissextos e mesmo assim apenas em implementaes Java que
efetivamente controlam segundos intercalados corretamente.
DateFormat
DateFormat uma classe abstrata para formatao de data/hora. Subclasses de formatao
de data/hora, como SimpleDateFormat, permite a formatao (de data para texto), anlise
(de texto para data), dentre outras funcionalidades. A data representada como um objeto
Date ou como os milissegundos desde 1 de Janeiro de 1970, 00:00:00 GMT.
DateFormat fornece mtodos de classe para a obteno de muitos formatadores padro de
data/hora com base no padro ou uma localidade especfica e uma srie de estilos de
formatao. Os estilos de formatao incluem FULL, LONG, MEDIUM e SHORT.
DateFormat ajuda a formatar e analisar as datas para qualquer localidade. Seu cdigo pode
ser completamente independente das convenes de localizao de meses, dias da semana,
ou at mesmo o formato do calendrio: lunar versus solar.
Para formatar uma data para a localidade atual, use um dos mtodos de fbrica estticos:
myString = DateFormat.getDateInstance().format(myDate).;
Se voc estiver formatando vrias datas, o mais eficiente para obter o formato e us-lo vrias
vezes para que o sistema no tenha que buscar as informaes sobre o idioma local e
convenes do pas vrias vezes.
DateFormat df = DateFormat.getDateInstance();
for (int i = 0; i < a.length; i++) {
output.println (df.format(myDate [i]) + ";");
Java Fundamentos
55
}
Utilize a chamada para o mtodo getDataInstance para formatar uma data para uma
localidade diferente.
DateFormat df = DateFormat.getDateInstance (DateFormat.LONG, Locale.FRANCE);
Voc pode usar um DateFormat para converter uma string em data tambm.
myDate = df.parse (myString);
Use getDateInstance para obter o formato da data para uma determinada localidade. Existem
outros mtodos disponveis que podem ser utilizados. Por exemplo, use getTimeInstance
para obter o formato de tempo de um determinado pas. Use getDateTimeInstance para
obter um formato de data e hora. Voc pode passar em opes diferentes para estes mtodos
de fbrica para controlar o comprimento do resultado; de curto a mdio e longo para FULL. O
resultado exato depende da localidade, mas em geral:
SHORT completamente numrica, como 12.13.52 ou 15:30
MEDIUM mais longo, como 12 de janeiro de 1952
LONG mais longo, como 12 janeiro de 1952 ou 03:30:32
FULL mais completo, como tera-feira, 12 de abril, 1952 AD ou 03:30:42 PST.
Calendar
Calendar uma classe abstrata de base para a converso entre um objeto Date e um conjunto
de campos inteiros, tais como ano, ms, dia, hora, e assim por diante. Um objeto Date
representa um momento especfico no tempo com preciso de milissegundos.
Subclasses de Calendar interpretam uma data de acordo com as regras de um sistema de
calendrio especfico. A plataforma Java fornece uma subclasse concreta de Calendar:
GregorianCalendar. Subclasses futuras poderiam representar os vrios tipos de calendrios
lunares em uso em muitas regies do mundo.
A classe Calendar utiliza o mtodo getInstance(), para obter um objeto. O mtodo
getInstance() de Calendar retorna um objeto Calendar com campos inicializados com a data e
hora atual:
Calendar agora = Calendar.getInstance();
Um objeto Calendar pode produzir todos os valores de um instante na linha do tempo em
sesu campos, necessrios para implementar a formatao de data e hora para um
determinado idioma e estilo de calendrio, como, por exemplo, japons-gregoriano, japons
tradicional. Calendar define o intervalo de valores devolvidos por certos campos, bem como
o seu significado. Por exemplo, o primeiro ms do ano tem o valor para o campo MONTH
igual a janeiro para todos os calendrios.
Java Fundamentos
56
NumberFormat
NumberFormat a classe base abstrata para todos os formatos de nmero. Essa classe
fornece a interface para formatao e anlise de nmeros. NumberFormat tambm fornece
mtodos para determinar quais locais tm formatos de nmeros.
NumberFormat ajuda a formatar e analisar os nmeros para qualquer localidade (Locale).
Seu cdigo pode ser completamente independente das convenes Locale para pontos
decimais, milhares-separadores, ou at mesmo para a particularidade do uso de dgitos
decimais, ou se o formato do nmero esta na base decimal.
Para formatar um nmero para o Locale atual, use um dos mtodos de classe:
myString = NumberFormat.getInstance().format(myNumber);
Para formatar um nmero para uma localidade diferente, especific-lo na chamada para
getInstance.
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
Voc tambm pode usar um NumberFormat para analisar nmeros:
myNumber = nf.parse(myString);
Use getInstance ou getNumberInstance para obter o formato do nmero normal. Use
getIntegerInstance para obter um formato de nmero inteiro. Use getCurrencyInstance para
obter o formato de nmero de moeda. E usar getPercentInstance para obter um formato para
apresentar porcentagens. Com getPercentInstance, por exemplo, a fraco 0,53 ser
mostrada como 53%.
DecimalFormat
DecimalFormat uma subclasse concreta de NumberFormat utilizada para formatar
nmeros com casas decimais. Ela tem uma variedade de caractersticas projetadas para
tornar possvel a analise e formatao de nmeros em qualquer localidade (Locale),
incluindo suporte para o idioma rabe e dgitos snscritos (lngua antiga utilizada na ndia).
Ele tambm suporta diferentes tipos de nmeros, incluindo inteiros (123), de ponto fixo
nmeros (123,4), notao cientfica (1.23E4), porcentagens (12%), e quantidade monetria
(R$ 123).
Para obter um NumberFormat para uma localidade especfica, incluindo a localidade padro
definida no sistema operaiconal, chame um dos mtodos da classe NumberFormat, tal como
getInstance(). Em geral, no chame os construtores DecimalFormat diretamente, j que os
mtodos de NumberFormat pode retornar outras subclasses de DecimalFormat.
Um DecimalFormat compreende um padro e um conjunto de smbolos. O padro pode ser
definido diretamente utilizando o mtodo applyPattern(), ou indirectamente, utilizando os
mtodos de API. Os smbolos so armazenados em um objeto DecimalFormatSymbols.
Java Fundamentos
57
Significado
Dgito
Sinal de menos
Separador de agrupamento
\u2030
'
Math
A classe Math contm uma variedade de funes matemticas que voc pode precisar
ocasionalmente, dependendo do tipo de programao que realize.
Para extrair a raiz quadrada de um nmero, voc usa o mtodo sqrt:
double x = 4;
double y = Math.sqrt(x);
System.out.println(y); // imprime 2.0
A linguagem de programao Java no tem nenhum operador para elevar uma quantidade a
uma potncia: voc deve usar o mtodo pow da classe Math. A instruo
double y = Math.pow(x, a);
Configura y como sendo x elevado potncia a (xa). O mtodo pow tem parmetros que so
de tipo double e tambm retorna um valor double.
A classe Math fornece as funes trigonomtricas normais: Math.sin, Math.cos, Math.tan,
Math.atan, Math.atan2 e a funo exponencial e sua inversa, o logartmo natural: Math.exp,
Math.log. Finalmente, existem duas constantes: Math.PI e Math.E
Java Fundamentos
58
4. Faa uma classe executvel que dado a data de vencimento de uma fatura (dia, ms, ano)
que j venceu (fatura em atraso) e seu valor, informe o nmero de dias em atraso,
considerando a data atual para pagamento, e tambm o novo valor a pagar, considerando
0,5% de juros por dia de atraso.
5. Para evitar erros de digitao de sequncias de nmeros de importncia fundamental,
como a matrcula de um aluno, o CPF, o nmero de conta bancria, etc., geralmente se
adiciona ao nmero um dgito verificador. Por exemplo, o nmero de matrcula 811057
usado como 8110573, onde 3 o dgito verificador, calculado da seguinte maneira:
a. Cada algarismo do nmero multiplicado por um peso comeando de 2 e crescendo
de 1, da direita para a esquerda: 8 x 7 , 1 x 6 , 1 x 5 , 0 x 4 , 5 x 3 , 7 x 2
b. Somam-se as parcelas obtidas: 56 + 6 + 5 + 0 + 15 + 14 = 96
c. Calcula-se o resto da diviso desta soma por 11: 96 / 11 d resto 8 (96 = 8 x 11 + 8)
d. Subtrai-se de 11 o resto obtido: 11 8 = 3
e. Se o valor encontrado for 10 ou 11, o dgito verificador ser 0; nos outros casos, o
dgito verificador o prprio valor encontrado.
Faa uma classe executvel que leia uma string representando o nmero seguido de seu
respectivo dgito verificador e informe se o nmero est correto.
Java Fundamentos
60
7
Classes e Objetos
Exerccio de nivelamento 8 Classes e Objetos
Voc poderia fazer uma breve descrio sobre o que voc entende por objetos do mundo
real? Cite alguns objetos que voc consegue identificar dentro da sala de treinamento.
Java Fundamentos
61
Java Fundamentos
62
Classe
Utilizada para definir novos tipos de dados.
uma abstrao de um conjunto de objetos do mundo real.
Possui um conjunto de atributos (caractersticas) e mtodos (funcionalidades).
Libera o usurio da necessidade de como a classe foi implementada.
Basta conhecimento dos mtodos disponveis para acess-la (funcionalidades).
Sua utilizao atravs da instncia de objetos.
Objetos sero manipulados pelos processos da aplicao a ser desenvolvida
(interface).
Java Fundamentos
63
Quando se cria um objeto a partir de uma classe, diz-se que foi criada uma instncia da
classe. Exemplo:
CursoJava curso = new CursoJava();
Como visto, tudo em Java est dentro de classes. Ento, existem disponveis vrias classes em
Java para realizar diversas tarefas, como por exemplo, formatao de nmeros para o
usurio. Mas mesmo assim, quando se est desenvolvendo um sistema, o programador deve
desenvolver suas prprias classes, particulares, para realizar as tarefas prprias da aplicao
que est desenvolvendo.
Outro recurso da POO poder criar classes atravs de outras. Isso chamado Herana, e em
Java diz-se que uma classe estende a outra, quando ela herda seus dados e mtodos. Todas as
classes em Java estendem a classe bsica Object. Inicialmente a classe nova contm todos
os mtodos e atributos da classe bsica, e pode-se escolher por manter ou modificar esses
objetos, e adicionar outros novos.
Objetos
Como foi dito anteriormente, classes so tipos, e no podem ser atribudas a variveis.
Variveis do tipo de uma classe so chamadas de objetos, e devem ser criadas utilizando o
operador new, seguindo o exemplo abaixo:
variavel = new nome_da_classe;
Por exemplo:
CursoJava curso = new CursoJava();
Onde curso uma varivel, uma instncia, um objeto da classe CursoJava.
Para se trabalhar em POO, deve-se saber identificar trs caractersticas-chave dos objetos:
Qual o comportamento do objeto?
Informaes de como ele num determinado momento.
Qual o estado do objeto?
Java Fundamentos
64
Cada objeto nico, representa uma informao do mundo real num determinado
momento.
Qual a identidade do objeto?
Revelada pelas mensagens que ele aceita.
Autoreferncia a um objeto
Em certas ocasies necessrio que se faa uma referncia ao objeto no qual o mtodo est
sendo executado, como um todo, para isso existe o this. Por exemplo:
System.out.println(this);
Java Fundamentos
65
Atributos
Tem um nome, um tipo e um contedo.
Mesmas regras de formao de nome de varivel.
Tipo pode ser primitivo ou uma classe.
Mtodos
Mtodos so as aes que um objeto prov como interface para o sistema. E no s isso, mas
tambm aes internas, no visveis para outros objetos. Basicamente so funes, com
argumentos, retorno e visibilidade. A visibilidade pode ser public, private ou
protected.
Figura 7.5 Aes que um objeto prov como interface para um sistema.
Um detalhe importante que sempre, os atributos de uma classe, podem ser manipulados
atravs de um mtodo dela, obviamente, sejam privados ou pblicos.
Os mtodos pblicos definem a interface da classe, as aes que ela pode executar. Os
mtodos privados fazem operaes internas, que no devem estar disponveis para os outros
objetos. Por exemplo:
public class Evento {
private int Id;
private ItemEvento Item;
public int getId() {
return Id;
}
private boolean dataValidaItem(Date d) {
Java Fundamentos
67
...
}
public void alterarDataItem(Date d) {
if (dataValidaItem(d))
...
}
}
O mtodo privado dataValidaItem serve como validao interna e quando a classe foi
projetada no se tinha a inteno de torn-lo visvel para os outros objetos, portanto, foi
implementado como private.
Getters e Setters
Modificadores (setters): alteram o estado do objeto.
Seletores (getters): leem o estado de um objeto.
Como j vimos, o ideal que sejam implementados mtodos para disponibilizar acesso aos
valores de atributos dos objetos instanciados na aplicao em desenvolvimento. Uma pratica
bastante comum adotada a criao de mtodos de acesso, que possuem o prefixo get, e os
mtodos modificadores, que possuem o prefixo set. Estes mtodos nos possibilitam a
manuteno de acesso aos atributos privados, encapsulando-os e dando ao programador a
flexibilidade de acessar ou alterar valores de acordo com a necessidade da aplicao em
desenvolvimento.
Por exemplo, podemos definir o mtodos de acesso getNome() e o mtodo modificador
setNome(String n) para a classe Pessoa. Estes mtodos sero utilizados pelo programador
sempre que este necessitar consultar ou atualizar o valor do atributo nome de um objetivo
instanciado da classe Pessoa.
Sobrecarga
Em Java pode-se ter vrios mtodos com o mesmo nome. Isso chamado sobrecarga.
Java Fundamentos
68
Mas cada um dos mtodos tem uma assinatura, que o que os difere uns dos outros, junto
com seu nome. Sua assinatura os parmetros que ele espera receber. Por exemplo:
public class Evento {
private int Id;
private ItemEvento Item;
public int getId() {
return Id;
}
public void alterarDataItem(Date d) {
...
}
public void alterarDataItem(int dia, int mes, int ano) {
...
}
}
No exemplo acima, para alterar a data do item do evento ou pode-se chamar
alterarDataItem passando como parmetro um objeto de data ou o dia, ms e ano,
separadamente, da data.
Construtores
Mtodos especiais so utilizados para inicializao de objetos recm instanciados.
Devem possuir o mesmo nome da classe, sendo executados sempre que o operador
new( ) acionado na aplicao (interface).
Podem existir mais de um mtodo construtor por classe:
As assinaturas dos mtodos os diferenciam.
Ser executado o construtor que possuir os argumentos na mesma ordem da
assinatura do mtodo.
Construtores so mtodos especiais que servem para fazer a inicializao de um objeto
recm instanciado. Esses mtodos so chamados toda vez que um objeto novo construdo,
isto , atravs do operador new. Seu nome o mesmo que o nome da classe. Por exemplo:
class Cliente {
public Cliente (String n) {
nome = n;
}
...
}
Onde public Cliente um construtor da classe Cliente.
Cliente c = new Cliente(Microsoft);
Java Fundamentos
69
Essa linha criar um objeto da classe Cliente e inicialmente chamar o construtor que
recebe um a String como parmetro.
Existe sempre um construtor padro que no recebe parmetro nenhum. Deve-se lembrar
que os construtores tambm permitem sobrecarga.
Blocos de Inicializao
So trechos arbitrrios de cdigos para fazer a inicializao de um objeto recm instanciado.
Esses mtodos so chamados toda vez que um objeto novo construdo. Por exemplo:
class Cliente {
public Cliente (String n) {
nome = n;
}
{
// bloco de inicializao
numConta = Conta.getNovoNumero();
}
...
}
Esse mecanismo no comum e no necessrio. Geralmente no mais claro do que
colocar a inicializao dentro de um construtor. Entretanto, para a inicializao de variveis
estticas, um bloco esttico pode ser til, como ser visto mais adiante.
Java Fundamentos
71
int lado1
int lado2
int lado3
<getters...>, <setters...>
Triangulo (int l1, int l2, int l3)
// Propriedade: cada lado de um tringulo menor do que a soma dos outros dois lados
boolean ehEscaleno()
Java Fundamentos
72
Pacotes
Utilizados para o agrupamento de classes.
Bibliotecas padro Java: java.util, java.net.
Podem ser organizados em estruturas hierrquicas: subdiretrios.
A linguagem Java permite agrupar classes em uma coleo chamada pacote. Os pacotes so
convenientes para organizar seu trabalho e para separ-lo das bibliotecas de cdigo
fornecidas por outros programadores.
A biblioteca Java padro distribuda em vrios pacotes, incluindo java.lang, java.util,
java.net etc. Os pacotes Java padro so exemplos de pacotes hierrquicos. Assim como voc
tem subdiretrios aninhados em seu disco rgido, tambm pode organizar pacotes usando
nveis de aninhamento. Todos os pacotes Java padro esto dentro das hierarquias de pacote
java e javax.
O principal motivo para se usar pacotes a garantia da exclusividade dos nomes de classe.
Suponha que dois programadores tenham a brilhante ideia de fornecer uma classe
Empregado. Desde que ambos coloquem suas classes em pacotes diferentes, no haver
conflito. Na verdade, para garantir absolutamente um nome de pacote exclusivo, a Sun
recomenda que voc use o nome de domnio na Internet de sua empresa (que se sabe que
exclusivo), escrito ao inverso. Ento, voc usa subpacotes para diferentes projetos. Por
exemplo, cursojava.com um exemplo de domnio na internet. Escrito na ordem inversa, ele
se transforma no pacote com.cursojava. Esse pacote pode ento ser ainda subdividido em
subpacotes, como com.cursojava.exemplo.pacotes.
O nico objetivo do aninhamento de pacotes para gerenciar nomes exclusivos. Do ponto de
vista do compilador, no existe absolutamente nenhum relacionamento entre pacotes
aninhados. Por exemplo, os pacotes java.util e java.util.jar no tm nenhuma relao entre si.
Cada um deles tem sua prpria coleo de classes independente.
Java Fundamentos
74
Usando pacotes
Classes que pertencem ao pacote devero ter no incio do arquivo referncia ao mesmo:
package <nome_do_pacote>
Para utiliz-las:
Referncia ao pacote (<nome_do_pacote>.*)
Referncia direta a classe (<nome_do_pacote>.<nome_da_classe).
Uma classe pode usar todas as classes de seu prprio pacote e todas as classes pblicas de
outros pacotes.
Voc pode acessar as classes pblicas de outro pacote, de duas maneiras. A primeira
simplesmente adicionar o nome do pacote completo na frente de todo nome de classe. Por
exemplo:
java.util.Date today = new java.util.Date();
Obviamente, isso maante. A estratgia mais simples e comum usar a palavra-chave
import. O objetivo da instruo import simplesmente fornecer um atalho para voc fazer
referncia s classes do pacote. Quando voc usa import, no precisa mais fornecer s classes
seus nomes completos.
Voc pode importar uma classe especfica ou o pacote inteiro. Voc coloca instrues import
no incio de seus arquivos-fonte (mas abaixo de todas as instrues package). Por exemplo,
voc pode importar todas as classes do pacote java.util com a instruo:
import java.util.*;
Ento, voc pode usar
Date today = new Date();
Sem um prefixo de pacote. Voc tambm pode importar uma classe especfica dentro de um
pacote.
import java.util.Date;
Importar todas as classes de um pacote mais simples. Isso no tem nenhum efeito negativo
sobre o tamanho do cdigo; portanto, geralmente no h razo para no usar.
Entretanto, note que voc pode usar apenas a notao * para importar um pacote. Voc no
pode usar import java.* ou import java.*.* para importar todos os pacotes com o prefixo java.
Ateno: Voc s pode importar classes e no objetos. Por exemplo, voc nunca importaria
System.out.
Na maioria das vezes, voc importa apenas os pacotes que precisa, sem se preocupar muito
com eles. A nica vez em que voc precisa prestar ateno nos pacotes quando tem um
conflito de nome. Por exemplo, os pacotes java.util e java.sql tm uma classe Date. Suponha
que voc escreva um programa que importa os dois pacotes.
Java Fundamentos
75
import java.util.*;
import java.sql.*;
Se agora voc usar a classe Date, ento receber um erro de tempo de compilao:
Date today; // ERRO--java.util.Date ou java.sql.Date?
O compilador no consegue descobrir qual classe Date voc deseja. Voc pode resolver esse
problema adicionando uma instruo import especfica:
import java.util.*;
import java.sql.*;
import java.util.Date;
E se voc realmente precisar das duas classes Date? Ento, precisar usar o nome completo
do pacote, com cada nome de classe.
java.util.Date deadline = new java.util.Date();
java.sql.Date today = new java.sql.Date();
Localizar classes em pacotes uma atividade do compilador. Os cdigos de byte nos arquivos
de classe sempre usam nomes de pacote completos para fazer referncia a outras classes.
Em Java, voc pode evitar completamente o mecanismo import, nomeando todos os pacotes
explicitamente, como em java.util.Date.
A nica vantagem da instruo import a convenincia. Voc pode se referir a uma classe
por um nome mais curto do que o nome de pacote completo. Por exemplo, aps uma
instruo import java.util.* (ou import java.util.Date), voc pode se referir classe
java.util.Date simplesmente como Date.
Java Fundamentos
76
Herana
Construo de novas classes atravs da especializao de classes pr-existentes.
Mecanismo que possibilita a uma classe usar atributos e mtodos definidos em outra
classe.
Para qu? Evitar cpia de longos trechos de cdigo e realizao de pequenas
alteraes.
Reduo geral no tamanho do cdigo.
Construo de bibliotecas de classe com grande capacidade de reuso.
Java Fundamentos
77
Java Fundamentos
78
Hierarquia de Heranas
A herana no est limitada a um nvel somente. Pode-se, por exemplo, fazer com que uma
classe chamada Executivo derive da classe Gerente. Pode-se tambm fazer uma classe
Secretario e outra Programador derivarem de Empregado. Ficaramos com a seguinte
configurao:
Java Fundamentos
79
Evitar Herana
Para evitar herana em alguma classe, deve-se usar o modificador final na sua declarao:
final class Executivo {
}
Faz com que no se possa definir nenhuma subclasse de Executivo. Se o modificador
final for usado em um mtodo da classe, este tambm no poder ser sobreposto nas
subclasses. Todos os mtodos de uma classe final so tambm final.
Atividade 3 Herana
1. Defina a classe Funcionrio, contendo os atributos nome, RG e total vendas em R$. Crie o
mtodo construtor padro e os mtodos seletores e modificadores para cada um de seus
atributos.
2. Defina a classe Vendedor, contendo o atributo valor comisso. Esta classe subclasse da
classe Funcionrio e dever implementar o mtodo construtor padro e os mtodos
seletores e modificadores para cada um de seus atributos. Implemente um mtodo que
calcule e retorno o valor da comisso do vendedor, sendo que o valor da comisso de 5%
sobre o valor total das vendas.
3. Defina a classe Gerente, contendo o atributo valor comisso. Esta classe subclasse da
classe Funcionrio e dever implementar o mtodo construtor padro e os mtodos
seletores e modificadores para cada um de seus atributos. Implemente um mtodo que
calcule e retorno o valor da comisso do gerente, sendo que o valor da comisso de 7,5%
sobre o valor total das vendas.
4. Desenvolva uma classe executvel que instancie um objeto da classe Vendedor e depois
calcule e escreva o valor da comisso a qual ele ter direito a receber.
Java Fundamentos
80
5. Desenvolva uma classe executvel que instancie um objeto da classe Gerente e depois
calcule e escreva o valor da comisso a qual ele ter direito a receber.
Polimorfismo
Mtodos com mesmo nome, porm assinaturas diferentes (os parmetros so diferentes
na quantidade e/ou tipo).
a capacidade de descobrir, na hierarquia de classes (herana), qual mtodo usar para
uma determinada chamada.
Mtodo invocado procurado em toda a hierarquia (atual e superior).
Todos os mtodos possuem a mesma assinatura, mas encontram-se em lugares
diferentes na hierarquia.
a capacidade do Java de descobrir, na hierarquia de herana, qual mtodo usar para uma
determinada chamada. Diferentemente da sobrecarga, todos esses mtodos possuem a
mesma assinatura, mas se encontram em lugares diferentes na hierarquia. Por exemplo, ao
se chamar a funo getSalario, na classe Gerente, o Java percebe que essa classe no
possui esse mtodo, ento procura nas superclasse para ver se o encontra. Se encontrado,
executa-o, seno um erro gerado.
Outro exemplo de polimorfismo o visto abaixo:
abstract public class Poligono {
abstract public void desenhar();
}
public class Retangulo extends Poligono{
public void desenhar() { .... }
}
public class Icosaedro extends Poligono{
public void desenhar() { .... }
}
Poligono[100] v;
// array heterogneo ...
v[15] = new Retangulo();
v[16] = new Icosaedro();
v[15].desenhar();
// Retangulo.desenhar()
No exemplo acima, a chamada do mtodo desenhar, faz com que seja chamado o mtodo da
classe Retangulo, apesar de ser um Poligono a estar armazenado ali.
Quando no se usa polimorfismo deve-se fazer:
Se funcionario = Gerente
Gerente.aumentarSalarioGerente();
Se funcionario = Programador
Java Fundamentos
81
Programador = aumentarSalarioProgramador();
Atividade 4 Polimorfismo
1. Defina a classe Empregado, contendo os atributos nome e salrio. Crie o mtodo
construtor padro e os mtodos seletores e modificadores para cada um de seus atributos.
Implemente o mtodo aumentarSalario() que aplique e retorne 5% de aumento no salrio.
2. Defina a classe Programador. Esta classe subclasse da classe Empregado. Implemente o
mtodo aumentarSalario() que aplique e retorne 10% de aumento no salrio.
3. Defina a classe Gerente. Esta classe subclasse da classe Empregado. Implemente o
mtodo aumentarSalario() que aplique e retorne 15% de aumento no salrio.
4. Desenvolva uma classe executvel que instancie um objeto de cada uma das classes
implementada nos exerccios de 1 a 3 e depois o escreva o nome e o salrio que tero direito
a receber.
Java Fundamentos
82
Classes Abstratas
Uma classe abstrata no pode ser instanciada
Classe que permite instncia dita concreta.
Definio da classe abstrata com o uso do modificador abstract.
Ao subir na hierarquia de classes, estas vo se tornando mais genricas. Chega um ponto que
elas so to genricas que acabam se tornando somente um modelo de como devem ser
implementadas.
Suponha um sistema de gerenciamento de mensagens por voz, fax ou texto. Criamos ento as
classes VoxMessage, FaxMessage e TextMessage. Como o sistema ter que manter e
manipular uma mistura desses trs tipos de mensagens, ento cria-se um classes me
comum a todas as demais, chamada Message.
Mas quando se manda reproduzir uma mensagem, atravs da classe me Message, no se
sabe o que reproduzir, ou voz, ou fax ou texto. Ento se usa a palavra reservada abstract
para dizer que esse mtodo no pode ser definido nessa classe, mas sim em uma subclasse.
Um detalhe que se uma classe possui um ou mais mtodos abstratos, ento ela mesma tem
que ser abstrata:
public abstract class Message {
public abstract void play();
}
Mtodos Abstratos
Existem situaes em que necessrio que a implementao de mtodos seja realizada
nas subclasses, e no na superclasse.
Uso do modificador abstract junto ao mtodo.
O mtodo abstrato no possui bloco de cdigo (fora implementao na subclasse).
O mtodo abstrato no permite que a classe seja instanciada ( redundante definir
classe abstrata se contm mtodo abstrato).
Subclasses s podem ser instanciadas se implementarem todos os mtodos abstratos.
Alm dos mtodos abstratos, as classes abstratas podem ter mtodos e atributos concretos.
Por exemplo, a classe Message pode armazenar o remetente da mensagem postal e ter um
mtodo concreto que retorne o nome do remetente:
public abstract class Message {
private String sender;
public Message(String s) {
sender = s;
}
public abstract void play();
public String getSender() {
Java Fundamentos
83
return sender;
}
}
No possvel criar objetos a partir de classes abstratas. Ou seja, se uma classe declarada
abstrata, ento nenhum objeto dessa classe pode ser criado. Ser necessrio ampliar essa
classe a fim de criar uma instncia da classe. Observe que ainda assim podem-se criar
variveis objeto de uma classe abstrata, embora essas variveis tenham de fazer referncia a
um objeto de uma subclasse no abstrata. Por exemplo:
Message msg = new VoiceMessage(greeting.au);
Aqui msg uma varivel do tipo abstrato Message que faz referncia a uma instncia da
subclasse no abstrata VoiceMessage.
Ligao
Dependendo das caractersticas da linguagem e do tipo de polimorfismo suportado por ela, a
implementao do polimorfismo pode exigir facilidades proporcionadas pela ligao
dinmica. De um modo geral, uma ligao (binding) uma associao, possivelmente entre
um atributo e uma entidade ou entre uma operao e um smbolo. Uma ligao dita esttica
se ocorre em tempo de compilao ou de interligao (linking) e no mais modificada
durante toda a execuo do programa. A ligao dinmica feita em tempo de execuo ou
pode ser alterada no decorrer da execuo do programa.
Com a ligao dinmica, a ligao do operador a uma particular operao pode ser feita em
tempo de execuo, isto , o cdigo compilado para um tipo abstrato de dados pode ser
usado para diferentes tipos de dados, aumentando consideravelmente sua reusabilidade.
Entretanto, o uso de ligao dinmica compromete a eficincia de implementao.
Por default, Java faz ligao dinmica (late binding) dos mtodos das classes. Para que um
mtodo seja implementado com ligao esttica (early binding) deve-se torn-la final. Devese ter em mente que isso no mais permitir que um mtodo seja sobrescrito.
Classe Class
Descreve as classes e suas propriedades:
getClass().getName()
getClass().getPackage()
getClass().isInstance(Object obj)
A classe Class serve para fazer identificao de tipos em tempo de execuo. Essa
informao acompanha a classe qual o objeto pertence e usada pela linguagem para
selecionar os mtodos corretos a executar em tempo de execuo.
Essas informaes esto acessveis para o programador atravs do mtodo getClass da
classe Object, que retorna uma instncia de Class.
Empregado e;
Java Fundamentos
84
...
Class c1 = e.getClass();
Provavelmente o mtodo mais usado da classe Class o getName, que retorna o nome da
classe.
System.out.println(e.getClass().getName());
Pode-se obter um objeto Class tambm atravs de uma string contendo o nome da classe:
String className = Gerente;
Class c1 = Class.forName(className);
Outra maneira usar o atributo .class de um tipo qualquer em Java:
Class c1 = Gerente.class;
Class c2 = int.class;
Class c3 = Double[].class;
Pode-se tambm criar uma nova instncia de uma classe a qualquer momento:
e.getClass().newInstance();
Cria uma nova instncia da mesma classe que e, e chama o construtor padro, aquele sem
parmetros.
No exemplo abaixo, consegue-se criar uma instncia de uma classe tendo o seu nome numa
string:
String s = Gerente;
Object m = Class.forName(s).newInstance();
Caso se queira chamar outro construtor que no o padro, deve-se usar o mtodo
newInstance da classe Constructor, que ser visto na sesso sobre reflexo.
Reflexo
A classe Class fornece um conjunto de ferramentas muito rico e elaborado para escrever
programas que manipulam cdigo dinamicamente em Java. Isso importante quando se
deseja manipular recursos de classes, em tempo de execuo.
Um programa que consegue analisar recursos de classes dinamicamente chamado
reflexivo. O pacote que d essa funcionalidade o java.lang.reflect.
Pode-se usar reflexo para:
Analisar os recursos das classes em tempo de execuo;
Inspecionar objetos em tempo de execuo, por exemplo, escrever um nico mtodo
toString para todas as classes;
Implementar cdigo genrico para tratamento de arrays;
Java Fundamentos
85
Aproveitar os objetos Method que funcionam exatamente como ponteiros para funes
em C++.
Superclasse abstrata
Suponha o exemplo tpico de modelar classes de ordenamento genrico. Vamos inicialmente
implementar um algoritmo de ordenao, e uma classe abstrata Sortable, contento o
mtodo nico compareTo, que determina se um objeto ordenvel menor, igual ou maior
que o outro.
abstract class Sortable {
public abstract int compareTo(Sortable b);
}
class ArrayAlg {
public static void shellSort(Sortable[] a) {
int n = a.length;
int incr = n/2;
while (incr >= 1) {
for (int i=incr; i<n; i++) {
Sortable temp = a[i];
int j=i;
while (j>=incr && temp.compareTo(a[j-incr]) <0) {
a[j] = a[j incr];
Java Fundamentos
86
J -= incr;
}
a[j] = temp;
}
incr /= 2;
}
}
}
Essa rotina pode ser usada em qualquer classe que estende Sortable, sobrepondo o
mtodo compareTo. Isso porque cada classe ter sua maneira de comparar elementos, que
ser definida nela, e como a classe de ordenao usa Sortable, no final o mtodo compareTo
que ser usado o sobreposto.
Por exemplo:
class Empregado extends Sortable {
...
public int compareTo(Sortable b) {
Empregado eb = (Empregado) b;
if (salrio < eb.salrio) return 1;
if (salrio > eb.salrio) return 1;
return 0;
}
}
Perceba que na classe acima, o mtodo certo de comparao foi implementado.
Interfaces
Java estendeu o conceito de interfaces a um nvel ainda mais flexvel.
Ao modelar um sistema, o desenvolvedor pode pensar apenas nas interfaces de seus
objetos (ou seja, na funo de cada um deles, e no seu relacionamento com os outros),
criando assim uma camada extra de abstrao.
O uso de interfaces faz com que voc pense em objetos e no relacionamento entre eles,
construindo assim a planta do sistema de forma consistente e clara.
Na linguagem de programao Java, uma interface no uma classe, mas um conjunto de
requisitos para classes que queiram se adequar interface.
Normalmente, o fornecedor de algum servio diz: se sua classe obedecer a uma interface em
particular, ento executarei o servio. Vamos ver um exemplo concreto. O mtodo sort da
classe Arrays promete ordenar um array de objetos, mas sob uma condio: os objetos
devem pertencer s classes que implementam a interface Comparable.
Aqui est como a interface Comparable:
Java Fundamentos
87
Java Fundamentos
88
return 0;
}
Na declarao da interface, o mtodo compareTo no foi declarado como public, porque
todos os mtodos em uma interface so automaticamente pblicos. Entretanto, ao
implementar a interface, voc deve declarar o mtodo como public. Caso contrrio, o
compilador vai supor que o mtodo tem visibilidade de pacote, o padro para uma classe.
Ento, o compilador reclama que voc est tentando fornecer um privilgio de acesso mais
fraco.
Java Fundamentos
89
Propriedades
Embora as interfaces no sejam instanciadas com new, pode-se ter uma varivel da interface:
Comparable x = new Empregado(...);
Empregado y = new Empregado();
if (x.compareTo(y) < 0)
Pode-se tambm usar instanceof para saber se uma classe implementa uma interface:
if (anObject instanceof Comparable) { ...}
Tambm possvel estender uma interface para criar outra, permitindo cadeias mltiplas de
interfaces:
public interface Moveable {
public void move(double x, double y);
}
public interface Powered extends Moveable {
public String PowerSource();
}
No se pode colocar campos de instncia numa interface, mas pode-se colocar constantes:
public interface Powered extends Moveable {
public String PowerSource();
public static final int SPEED_LIMIT = 95;
}
Classes podem implementar interfaces mltiplas:
class Tile extends Rectangle implements Cloneable, Comparable
Nota: Cloneable uma interface para implementar o mtodo clone(), que faz uma cpia
bit a bit dos objetos da classe.
Classes Internas
Definio de uma classe dentro da outra (nested class): membro da classe externa.
Razes para uso:
uma forma de agrupar logicamente classes que so utilizadas em um nico lugar.
Aumenta o grau de encapsulamento.
Classes internas so classes definidas dentro de classes. H quatro motivos para seu uso:
Um objeto de uma classe interna pode acessar a implementao do objeto que a criou
incluindo dados que seriam, de outra forma, privados;
As classes internas podem ser invisveis para outras classes do mesmo pacote;
As classes internas annimas so prticas quando se quer definir callbacks em tempo de
execuo;
Java Fundamentos
90
class UmaClasse {
...
private class InnerClass {
...
}
...
}
Pode-se criar classes internas dentro de mtodos, e tambm criar classes annimas. Classes
internas no so um conceito comum e Java as implementa como classes diferentes,
inserindo mtodos acessadores classe que contm a classe interna.
Qualquer classe declarada dentro do corpo de outra classe ou interface conhecido como
uma classe aninhada. Se a classe aninhada no tem um nome, ento ela considerada uma
classe annima. Se a classe aninhada tem um nome, ento no annima. Se a classe
aninhada tem um nome e no declarada dentro de um mtodo, construtor ou qualquer
bloco, ento ela uma classe membro. Se uma classe membro no for decladrada como
esttica, ento ela uma classe interna. Se uma classe no estiver aninhada, ento uma
classe de nvel superior.
Para voc, os recursos de POO facilitam a organizao, proteo e acesso aos recursos de
uma aplicao Java em desenvolvimento?
Java Fundamentos
92
IMC
Faixa de risco
Abaixo de 20
Abaixo do peso
A partir de 20 at 25
Normal
Acima de 25 at 30
Excesso de peso
Acima de 30 at 35
Obesidade
Acima de 35
Obesidade mrbida
Java Fundamentos
93
d. Desenvolva uma interface para instanciar um objeto de cada uma das classes
implementadas e que imprima uma frase composta por todos os valores de seus atributos
prprios e herdados. A classe de interface dever estar no pacote viso (viso).
Java Fundamentos
94
8
Collections
Exerccio de nivelamento 9 Collections
Pesquise na internet o conceito de framework e diga como voc acha que este pode auxiliar
no desenvolvimento de programas Java.
Definio
Collections, s vezes chamado de containner, simplesmente um objeto que agrupa vrios
elementos em uma nica estrutura. Collections so usados para armazenar, recuperar,
manipular e comunicar dados agregados. Normalmente, eles representam itens de dados que
formam um grupo natural, como uma mo de poker (uma coleo de cartas), uma pasta de
correio (uma coleo de cartas), ou uma lista telefnica (um mapeamento de nomes para
nmeros de telefone).
Interface Collection
a raiz da hierarquia Collection.
Representa um grupo de objetos conhecidos.
Contm o denominador comum do que todas as colees implementam.
Usada para passagem de colees.
Como parmetros e para manipulao genrica de grupos de dados
possui mtodos para acessar, buscar e remover elementos.
Implementaes so de suas subinterfaces.
Listas
Acesso posicional:
Manipula elementos baseado na sua posio numrica na lista (ndice).
Pesquisa:
Pesquisa por um objeto especfico na lista e retorna a sua posio numrica.
Iterao:
Herda a semntica Iterator para tomar vantagem da natureza sequencial da lista.
Um primeiro recurso que a API de Collections traz so as listas. Uma lista uma coleo
que permite elementos duplicados e mantm uma ordenao especfica entre os elementos.
Em outras palavras, voc tem a garantia de que, quando percorrer a lista, os elementos sero
encontrados em uma ordem pr-determinada, definida na hora da insero dos mesmos. Ela
resolve todos os problemas que levantamos em relao ao array (busca, remoo, tamanho
"infinito",...). Esse cdigo j est pronto!
A API de Collections traz a interface java.util.List, que especifica o que uma classe
deve ser capaz de fazer para ser uma lista. H diversas implementaes disponveis, cada
uma com uma forma diferente de representar uma lista.
Java Fundamentos
97
Conjuntos
Coleo que no tem elementos duplicados.
Podem ser mantidos ordenados (SortedSet) ou no.
Modela a abstrao matemtica para conjuntos.
Contm os mesmos mtodos de Colletion, com a restrio de que no podem ser
repetidos.
Java Fundamentos
98
Um conjunto (Set) funciona de forma anloga aos conjuntos da matemtica, ele uma
coleo que no permite elementos duplicados.
Outra caracterstica fundamental dele o fato de que a ordem em que os elementos so
armazenados pode no ser a ordem na qual eles foram inseridos no conjunto. A interface no
define como deve ser este comportamento. Tal ordem varia de implementao para
implementao.
Java Fundamentos
99
Iterator<String> i = nomes.iterator();
while(i.hasNext())
System.out.println(i.next());
}
O uso de um Set pode parecer desvantajoso, j que ele no armazena a ordem, e no aceita
elementos repetidos. No h mtodos que trabalham com ndices, como o get(int) que as
listas possuem. A grande vantagem do Set que existem implementaes, como a HashSet,
que possui uma performance incomparvel com as Lists quando usado para pesquisa
(mtodo contains por exemplo).
Mapas
Um mapa armazena pares (chave, valor) chamados de itens.
Chaves e valores podem ser de qualquer tipo.
As chaves armazenadas nos mapas podem estar ordenadas ou no.
A chave utilizada para achar o elemento de forma rpida, utilizando estruturas especi
ais.
No existem chaves duplicadas em um mapa.
Tambm so conhecidos como dicionrios.
Muitas vezes queremos buscar rapidamente um objeto dado alguma informao sobre ele.
Um exemplo seria, dada a placa do carro, obter todos os dados do carro. Poderamos utilizar
uma lista para isso e percorrer todos os seus elementos, mas isso pode ser pssimo para a
performance, mesmo para listas no muito grandes. Aqui entra o mapa.
Um mapa composto por um conjunto de associaes entre um objeto chave a um objeto
valor. java.util.Map um mapa, pois possvel us-lo para mapear uma chave a um
valor, por exemplo: mapeie chave "empresa" o valor "Nome da Empresa", ou ento mapeie
chave "rua" ao valor "Endereo da Empresa". Semelhante a associaes de palavras que
podemos fazer em um dicionrio.
O mtodo put(Object, Object) da interface Map recebe a chave e o valor de uma nova
associao. Para saber o que est associado a um determinado objeto-chave, passa-se esse
objeto no mtodo get(Object). Sem dvida essas so as duas operaes principais e mais
frequentes realizadas sobre um mapa.
public static void main(String[] args) {
HashMap<String, String> nomes = new HashMap<String, String>();
nomes.put("joao", "Joo da Silva");
nomes.put("jose", "Jos Matos");
nomes.put("maria", "Maria das Dores");
nomes.put("bianca", "Bianca Patrcia");
System.out.println("Nmero de elementos: "+nomes.size());
Java Fundamentos
100
Java Fundamentos
101
Atividade 1 Collections
1. Desenvolva uma aplicao Java que gere e armazene todos os nmeros inteiros entre 1 e
1000 randomicamente e depois ordene os nmeros gerados em ordem crescente e em
ordem decrescente, utilizando um ArrayList e implementando interfaces Compareble.
2. Crie uma classe Conta Bancria contendo os atributos nmero da conta, nome cliente e
saldo atual. Implemente construtores, getters e setters. Desenvolva aplicaes Java que
apresente as seguintes funcionalidades:
a. 1 Incluir (solicitao dos dados de uma conta bancria em um ArrayList);
b. 2 Listar (objetos armazenados no ArrayList) em ordem alfabtica;
c. 3 Listar (objetos armazenados no ArrayList) em ordem decrescente de saldo atual;
d. 4 Pesquisar e mostrar informaes de um determinado cliente atravs do nmero da
conta ou seu nome, utilizando colees (HashMap);
b.
c.
d.
Java Fundamentos
102
Bibliografia
ASCNCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Vaneruchi de.
Fundamentos de Programao de Computadores: algortmos, pascal, e c/c++. So Paulo:
Prentice-Hall, 2002.
DEITEL. Java Como Programar. 6a. ed. So Paulo: Pearson Prentice Hall, 2005.
FARRER, Harry, [Et. Al.]. Algoritmos Estruturados: programao estruturada de
computadores. 3 d. Rio de Janeiro: LTC, 1999.
FORBELLONE, A. L. V.; EBERSPCHER, H. F. Lgica de Programao. So Paulo: Pearson
Education/ Makron Books, 1999.
GUIMARES, ngelo de Moura. Algoritmos e Estruturas de Dados. Rio de Janeiro: LTC,
1994.
HORSTMANN, Cay. CORNELL, Gary. Core Java 2 Fundamentals. The Sun Microsystems
Press Java Series. Vol. I. 2003.
JUNIOR, Peter Jandl. Java Guia do Programador. So Paulo: Novatec, 2007.
MANZANO, J. A. N. G. Algoritmos. So Paulo: rica, 1997.
ORACLE. The Java Tutorials. Disponvel em: http://docs.oracle.com/javase/tutorial/.
Acessado em: 29 jan. 2013.
SIERRA, Kathy; BATES, Bert. Certificao Sun Para Programador Java 6 Guia de Estudo.
So Paulo: Rio de Janeiro, 2008.
SALVETTI, D. D.; BARBOSA, L. M. Algoritmos. So Paulo: Makron Books, 2001.
Java Fundamentos
103