Buscar

PC2 Cap2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

16 © ELFS 
Elementos de uma classe Java 
•  Um método é especial: construtor. Para que serve? 
O construtor é usado para construir objetos da classe. 
•  Por que é necessário criar objetos de uma classe? 
Para utilizar os recursos da classe. 
•  Quais são os recursos utilizáveis de uma classe? 
Seus métodos (parte pública da classe). 
− double altura 
− double peso 
+ Pessoa(double, double) 
+ double calcularIMC() 
Pessoa nome da classe 
campos 
métodos 
Pessoa p = new Pessoa(1.85,65.0); 
double d = p.calcularIMC(); 
System.out.println("IMC = " + d); 
17 © ELFS 
Recursos disponíveis em Java para construir métodos 
•  Declarações: linhas de código terminadas por ponto-e-vírgula usadas 
para estabelecer os tipos dos identificadores usados no programa. 
Exemplos: 
•  Instruções: linhas de código terminadas por ponto-e-vírgula usadas 
para estabelecer ações: comandos de atribuição ou chamadas de 
métodos. Exemplos: 
int i; 
int j = 10; 
Pessoa p; 
Circulo c = new Circulo(10.0); 
i = 0; 
valor = v1 + v2 + v3; 
p = new Pessoa(1.85,65.0); 
System.out.println("IMC = " + p.calcularIMC()); 
18 © ELFS 
•  Blocos: conjuntos de declarações e instruções delimitados por chaves. 
Exemplo: 
•  Estruturas de controle: controlam como as instruções de um bloco 
devem ser executadas. Exemplos: 
{ 
 int valor1,valor2; 
 valor1 = v1 + v2 + v3; 
 valor2 = a + b; 
} 
if (i < j) 
{ 
 i = j; 
} 
else 
{ 
 j = 0; 
} 
for (int i = 0; i < 10; i++) 
{ 
 k = k + Math.sqrt(i); 
} 
while (i < 5) 
{ 
 System.out.println(2*i); 
 i++; 
} 
19 © ELFS 
Tipos primitivos de dados 
•  Em Java existem 8 tipos primitivos separados em quatro categorias: 
•  Para cada tipo primitivo há uma classe correspondente no pacote 
java.lang. Por exemplo: Integer (para o tipo int), Double (para o tipo 
double). 
•  Essas classes fornecem métodos para processamento dos valores do 
tipo primitivo (por exemplo, para converter um texto em um valor do 
tipo int ou um valor do tipo int em um texto). 
Categoria Tipos primitivos 
Lógico boolean 
Textual char 
Inteiro byte, short, int, long 
Ponto flutuante double, float 
20 © ELFS 
O tipo boolean 
•  Dois valores apenas para o tipo boolean: true e false. 
•  Operadores lógicos e booleanos 
boolean b = false; 
boolean deNovo; 
deNovo = (x < 10); 
Operador Nome 
&& conjunção lógica 
& conjunção booleana 
|| disjunção lógica 
| disjunção booleana 
^ disjunção lógica exclusiva 
! negação lógica 
(x == 1) && (y >= 5) false 
(x == 5) & (y >= 1) false 
(x == 1) || (y >= 5) true 
(x == 1) | (y >= 5) true 
(x == 1) ^ (y <= 5) false 
! ( y >= 5 ) true 
Sejam: 
 int x = 1; 
 int y = 4; 
21 © ELFS 
A diferença entre operadores lógicos e booleanos 
•  Operadores && ou ||: a expressão lógica é avaliada somente até que 
a verdade ou falsidade seja detectada (avaliação em curto-circuito). 
•  Operadores & e |: a expressão lógica é avaliada por inteiro, o que 
pode provocar efeitos colaterais. Por exemplo: 
double x[] = {1,2,3,4,5}; 
int i; 
... 
if ((i < 5) & (x[i] > 1.5)) 
... 
if ((i < 5) && (x[i] > 1.5)) 
Aqui pode ocorrer um erro, se 
a expressão (i < 5) for false. 
Aqui não. 
22 © ELFS 
Outros operadores 
•  Operadores aritméticos 
•  Operadores de igualdade 
Precedência Operador Operação Exemplo Resultado 
1 + Adição 7 + 2 9 
1 - Subtração 7 - 2 5 
2 * Multiplicação 7 * 2 14 
2 / Divisão 7 / 2 3 (int) ou 3.5 (float) 
2 % Resto 7 % 2 1 
Operador Operação Exemplo Resultado 
== é igual a 7 == 2 falso 
!= não é igual a 7 != 2 verdadeiro 
Um erro muito comum é utilizar = como 
operador de igualdade. Lembrar que = é 
o operador de atribuição. 
23 © ELFS 
•  Operadores de incremento e de decremento 
•  Operadores relacionais 
Não pode haver 
espaço entre os 
símbolos dos 
operadores: 
== 
!= 
>= 
<= 
Operador Operação Exemplo Resultado 
> é maior que 7 > 2 verdadeiro 
< é menor que 7 < 2 falso 
>= é maior que ou igual a 7 >= 2 verdadeiro 
<= é menor que ou igual a 7 <= 2 falso 
Operador Nome Exemplo Significado 
++ pré-incremento ++x Incrementa x de 1 e então usa o novo 
valor de x na expressão onde x reside. 
++ pós-incremento x++ Usa o valor de x na expressão onde x 
reside e depois incrementa x de 1. 
-- pré-decremento --x Decrementa x de 1 e então usa o novo 
valor de x na expressão onde x reside. 
-- pós-decremento x-- Usa o valor de x na expressão onde x 
reside e depois decrementa x de 1. 
24 © ELFS 
O tipo char e a classe String 
•  Um valor do tipo char representa um único caractere (unicode de 16 
bits) e deve ser escrito entre apóstrofos. Por exemplo: 'a'. 
•  String não é um tipo primitivo e sim uma classe. Objetos dessa 
classe representam textos, ou seja, sequências de caracteres. Strings 
devem ser escritos entre aspas. Exemplo: "Linguagem Java". 
Exemplos: 
•  char x = 'c'; a letra c 
•  char nl = '\n'; caractere de 'nova linha' 
•  char fi = '\u03A6'; a letra Ф 
•  String sigla = "PC2"; 
•  String nome = "Programação\n de Computadores II"; 
25 © ELFS 
Os tipos inteiros (byte, short, int, long) 
•  int é o tipo padrão para os inteiros. 
•  Os números inteiros podem ser utilizados em três formatos: decimal, 
octal e hexadecimal. 
 Exemplos: 
Valor Notação Observação 
56 decimal Notação usual 
070 octal Iniciado por 0 (zero). Notar que: (70)8 = (56)10 
0x38 hexadecimal Iniciado por 0x (zero xis). Notar que: (38)16 = (56)10 
56L longo Terminado por L ou l (valor inteiro do tipo long) 
Tipo Bits Intervalo de valores 
byte 8 [-128, 127] 
short 16 [-32768, 32767] 
int 32 [-2147483648, 2147483647] 
long 64 [-9223372036854775808, 9223372036854775807] 
26 © ELFS 
Os tipos de ponto flutuante (float, double) 
•  double é o tipo padrão para números de ponto flutuante. 
•  Valores do tipo float exigem a presença da letra F (ou f) ao final. 
 Exemplos: 
Valor Observação 
2.34 Valor de ponto flutuante escrito na notação usual 
0.234E1 Valor de ponto flutuante com expoente positivo 
23.4E-1 Valor de ponto flutuante com expoente negativo 
2.34F Valor de ponto flutuante do tipo float 
2.34D Valor de ponto flutuante do tipo double 
2.34 Valor de ponto flutuante do tipo double 
Tipo Bits Intervalo de valores 
float 32 [-3.40292347E+38, 3.40292347E+38] 
double 64 [-1.79769313486231570E+308, 1.79769313486231570E+308 ] 
27 © ELFS 
Conversão de tipos 
•  Uma conversão ocorre ao se atribuir um valor de um tipo a uma 
variável de outro tipo. 
•  Se os tipos forem compatíveis, ou se a variável que recebe o valor for 
maior (em bits) do que o valor atribuído, a conversão é automática e 
feita no momento da atribuição. 
•  Do contrário, ou seja, se a variável que recebe o valor é menor (em 
bits) do que o valor atribuído, deve haver uma conversão explícita de 
tipo (cast) no momento da atribuição. 
Exemplos: 
int long float double byte 
char 
short 
long a = 77L; // OK 
int b = a; // Errado 
int c = (int)a; // OK, mas... 
short d = 1, e = 1, f = 1; 
d = (short)(e + f); // Por que? 
float g = 3.14; // Erro! Por que? 
Variáveis de referência (ponteiros) 
•  Em Java, uma variável pode representar um valor de um dos tipos 
primitivos ou um objeto de uma classe (nova ou da API). 
•  Uma variável que representa um objeto é conhecida como variável de 
referência (também chamada de ponteiro). 
Exemplo: 
28 © ELFS 
public class MinhaData 
{ 
 private int dia; 
 private int mes; 
 private int ano; 
 ... 
} Observe que d é uma variável 
do tipo MinhaData, ou seja, 
representa um objeto da 
classe MinhaData. Portanto, 
d é uma variável de 
referência (um ponteiro). 
publicclass Teste 
{ 
 MinhaData d; 
 d = new MinhaData(22,3,2013); 
 ... 
} 
29 © ELFS 
Construção e inicialização de objetos 
•  Variáveis (de tipos primitivos ou de referência) são criadas em uma 
área de memória da JVM conhecida como Stack. 
•  Objetos são criados em uma área de memória da JVM conhecida como 
Heap. A criação de um objeto (a ser apontado por uma variável de 
referência) requer a utilização do operador new. 
•  Uma chamada a new Xxx() desencadeia as seguintes ações: 
! Alocação de memória para a variável de referência em Stack e 
inicialização dessa variável com o valor padrão (null); 
! Execução do construtor para criar um objeto da classe, alocação de 
memória (no Heap) para o objeto criado e inicialização de seus 
campos com os valores padrão (0, null, etc). Caso o construtor 
tenha parâmetros, os valores dos parâmetros são usados para a 
inicialização dos campos do objeto criado. 
! Atribuição do endereço do objeto (no Heap) para a variável de 
referência (na Stack), ou seja, a variável de referência aponta para 
o objeto criado. 
30 © ELFS 
Exemplo: 
MinhaData d = new MinhaData(22,3,2013); 
Alocação de memória para a variável de referência na Stack e inicialização 
dessa variável (ponteiro) com o valor padrão (null). 
Heap Stack 
d null 
31 © ELFS 
Exemplo: 
Heap 
0 
0 
0 
dia 
mes 
ano 
Alocação de memória para o objeto no Heap e inicialização de seus atributos 
(campos) com os valores-padrão. Os valores-padrão para os atributos de uma 
classe (caso existam) são estabelecidos na própria classe. 
Stack 
d null 
MinhaData d = new MinhaData(22,3,2013); 
32 © ELFS 
Exemplo: 
Heap 
22 
3 
2013 
dia 
mes 
ano 
Em seguida, os parâmetros do construtor são usados para inicialização dos 
atributos (campos) do objeto criado. 
Stack 
d null 
MinhaData d = new MinhaData(22,3,2013); 
33 © ELFS 
Exemplo: 
Stack Heap 
d 22 
3 
2013 
dia 
mes 
ano 
Finalmente, o endereço do objeto criado (no Heap) é atribuído à variável de 
referência. Com isso, a variável de referencia passa a apontar para o objeto 
criado. 
0xF789 
MinhaData d = new MinhaData(22,3,2013); 
34 © ELFS 
Coleta de lixo 
•  Quando um ponteiro se perde (por exemplo, quando ele passa a 
apontar para outro objeto ou quando a ele é atribuído o valor null), o 
objeto para o qual apontava passa a ser um lixo (pois não haverá mais 
como acessar o objeto). 
•  A coleta de lixo é feita automaticamente pela JVM, ou seja, o 
programador não tem controle algum sobre esse processo. Em Java, 
portanto, não existem primitivas para alocação e desalocação de 
memória (como calloc e free, em C). 
•  O coletor de lixo é implementado como um processo que fica 
verificando constantemente se existe algum objeto que não é mais 
referenciado e, caso exista, libera a memória alocada a esse objeto. 
Stack 
Heap 
d 22 
3 
2013 
dia 
mes 
ano 
0xF789 
35 © ELFS 
Estruturas de Controle 
•  Para implementar os métodos de uma classe devemos usar a 
programação estruturada (vista em Programação de Computadores I). 
•  Existem três categorias de estruturas de controle: 
•  sequência 
•  seleção 
•  repetição 
... 
Sequência 
Dentro de um retângulo 
existe uma ação (atribuição 
ou chamada de método). 
 String s = JOptionPane.showInputDialog("s:"); 
 int n = Integer.parseInt(s); 
 int a = n + 1; 
 System.out.println("a = " + a); 
36 © ELFS 
V 
F V 
F 
break 
V 
F 
break 
V 
F 
break 
... 
if 
if-else 
switch 
V F 
Estruturas de Seleção 
Dentro de um losango existe uma 
comparação (expressão do tipo boolean). 
37 © ELFS 
Observe que: 
•  while executa uma ação zero ou mais vezes. 
•  do-while executa uma ação uma ou mais vezes. 
•  for é uma estrutura de repetição que deve ser usada quando se sabe 
exatamente quantas vezes alguma ação deve ser repetida (repetição 
com base no valor de um contador). 
V 
F 
while 
do-while 
for 
V 
F 
V 
F 
Estruturas de Repetição 
38 © ELFS 
Exemplos: 
•  A estrutura if 
•  A estrutura if-else 
if (expressão booleana) 
 bloco 
if (nota >= 7) 
{ 
 System.out.println("Aprovado"); 
} 
if (nota >= 7) 
{ 
 System.out.print("Aprovado "); 
 System.out.println("sem exame final"); 
} 
if (expressão booleana) 
 bloco1 
else 
 bloco2 
if (nota >= 7) 
{ 
 System.out.println("Aprovado"); 
} 
else 
{ 
 System.out.println("Exame final"); 
} 
39 © ELFS 
•  O operador ? corresponde a um if...else simples. 
•  A estrutura switch corresponde a uma seleção múltipla. 
String status = (nota >= 7 ? "Aprovado" : "Exame"); 
switch (expressão1) 
{ 
 case constante1: 
 comandos; 
 break; 
 case constante2: 
 comandos; 
 break; 
 default: 
 comandos; 
 break; 
} 
! 
A expressão1 deve corresponder a um 
valor do tipo: int, byte, short ou char. 
O caso default é opcional e será 
executado se nenhum dos casos 
anteriores o for. 
40 © ELFS 
•  A estrutura for 
•  A estrutura while 
•  A estrutura do-while 
for (exp1; exp2; exp3) 
 bloco 
while (exp) 
 bloco 
do 
 bloco 
while (exp); 
Atenção para o 
ponto-e-vírgula 
final. 
for (int i = 1; i < 10; i++) 
{ 
 System.out.println("i = " + i); 
} 
int i = 1; 
while (i < 10) 
{ 
 System.out.println("i = " + i); 
 i++; 
} 
int i = 1; 
do 
{ 
 System.out.println("i = " + i); 
 i++; 
} 
while (i < 10); 
41 © ELFS 
As instruções break e continue 
•  As instruções break e continue se aplicam apenas à estrutura de 
controle na qual estão contidas. 
•  A instrução break, quando executada em uma estrutura while, for, 
do...while ou switch, ocasiona a saída imediata dessa estrutura. A 
execução continua com a primeira instrução depois da estrutura. 
•  A instrução continue, quando executada em uma estrutura while, for 
ou do...while, pula as instruções restantes no corpo dessa estrutura e 
prossegue com a próxima iteração da repetição. Nas estruturas while e 
do...while, a condição de continuação da repetição é avaliada 
imediatamente depois da instrução continue ser executada. Na 
estrutura for, a expressão de incremento é executada, e então a 
condição de continuação é avaliada. 
42 © ELFS 
Escopo de variáveis 
•  Variáveis são declaradas dentro de uma classe. São, portanto, ou 
campos da classe ou variáveis de métodos da classe. 
•  Variáveis de métodos da classe são chamadas variáveis locais (também 
conhecidas como variáveis automáticas ou de pilha). 
•  Variáveis locais devem obrigatoriamente ser inicializadas antes de 
serem usadas pela primeira vez no método. 
•  Parâmetros de métodos (inclusive dos construtores) também são 
variáveis locais. Não é necessário inicializá-los pois eles são 
inicializados pelo código que faz a chamada ao método. 
•  As variáveis locais de um método são criadas cada vez que o método é 
chamado. Estas variáveis irão existir até que o método termine sua 
execução (quando, então, são destruídas). 
•  Portanto, variáveis locais têm o escopo do método, ou seja, têm 
existência apenas dentro do método. O mesmo nome de variável pode 
ser utilizado em métodos diferentes. 
43 © ELFS 
Campos e métodos estáticos 
•  Normalmente, os campos e métodos públicos de uma classe (lembrar 
que, em geral, os campos são privados) são dinâmicos, ou seja, devem 
ser acessados por meio de objetos da classe. 
•  Mas, uma classe pode declararcampos e métodos estáticos. Neste 
caso, o acesso a estes elementos da classe é feito pela própria classe, 
não havendo a necessidade de construir um objeto para isso. 
 Note que o acesso ao campo PI e ao método pow() é feito por meio da 
própria classe Math e não por um objeto da classe (não é possível criar 
objetos da classe Math). 
Temperatura t = new Temperatura(30); 
t.converterParaCelsius(); 
double area = Math.PI * Math.pow(r,2)); 
44 © ELFS 
Notar que os campos e métodos da classe Math são estáticos. 
Campos e (alguns) métodos da classe Math

Outros materiais