Uso de objetos Java e coleções

Propaganda
Uso de Orientação a
Objetos em Java
Objetos e Mensagens
Objetos em Java
Principais classes
Containers
1
Um pouco de história...
ν
Variáveis como elementos isolados
υ
ν
int dia, mes, ano;
Fácil compreensão, porém duas principais desvantagens:
υ
υ
Várias declarações:
Φ
int meuDiaNascimento, meuMesNascimento, meuAnoNascimento;
Φ
int seuDiaNascimento, seuMesNascimento, seuAnoNascimento;
Variáveis independentes, sem relação:
Φ
ν
Em nível conceitual, tudo faz parte de uma data.
Para isto, há os tipos agregados de dados (estruturados ou de
registro).
1
Tipos agregados de dados
ν
Exemplo Pascal:
Data = record
dia, mes, ano: integer;
end;
ν
Em Java:
public class Data {
int dia;
int mes;
int ano;
}
Data meuNascimento, seuNascimento;
υ Mais tarde, usa-se:
seuNascimento.dia = 26;
seuNascimento.mes = 11;
seuNascimento.ano = 1960;
1
Objetos e Classes
ν
Classe com seus atributos (Data com dia, mês e ano)
ν
Objeto é uma instância da classe (meuNascimento)
ν
Porém, ainda há que se definir métodos, pois como está
qualquer valor inteiro pode ser atribuído às variáveis membro
(atributos).
1
Criação de um objeto
ν
Declaração não cria objeto, diferentemente dos tipos primitivos
ν
Para criar efetivamente, deve-se instanciá-lo.
Data meuNascimento;
meuNascimento = new Data();
1
Criação de um objeto (continuação)
ν
O espaço real de memória alocado com new é o
objeto efetivamente.
1
Características dos Objetos
ν
ν
Os objetos não são acessados diretamente
υ
são acessados por meio de um manipulador (handle), através do
qual lhe são enviadas mensagens.
υ
Ex.: lulu = new Cachorro();
// lulu é o handle do novo objeto
Os objetos existem à parte do fluxo do programa
υ
estão todos na heap (alocados dinamicamente)
υ
não tem tempo de vida determinado pelo programador
υ
não tem escopo, na verdade, são todos visíveis a partir de um
manipulador que tem escopo e tempo de vida
υ
quando não existem mais referências para um objeto ele é
automaticamente retirado da memória (garbage collection)
1
Utilização de Objetos em Java
ν
Declaração do handle
Φ
υ
Ex.:
Φ
ν
tipo nomeHandle;
Date hoje;
Instanciação
υ
Associação do handle a um novo objeto
Φ
υ
nomeHandle = new ConstructorDaClasse();
Associação do handle a um objeto que já existe
Φ
nomeHandle = outroHandle;
1
Exemplo de uso de objetos
...
Date hoje;
hoje = new Date(); // cria uma instância da classe Data
// a data de hoje,
// sendo ‘hoje’ o handle deste objeto
Date aniv = new Date(1997, 5, 30); // construtor hipotético
Date aniv2;
aniv2 = aniv;
// aniv e aniv2 são handles para o
// mesmo objeto
if (hoje.after(aniv) { // envio da mensagem after,
// já passou do aniv
// com parâmetro, para o objeto
// hoje
}
1
Classes Básicas x Tipos Primitivos
ν
Variáveis (par: posição memória + valor)
int a = 10;
// a é um tipo primitivo,
// não pode receber mensagens, ex.: a.inc()
ν
Objetos
Integer b = new Integer(10); // b é um handle de objeto
int c = b.intValue();
ν
ν
Tipos primitivos ficam na stack (mundo do programa)
Objetos ficam na heap (mundo dos objetos)
1
Containers
Matrizes
ArrayList
HashMap
1
Matrizes
ν
Declaração
tipo[] nome;
// cria a variável, mas não aloca memória
nome = new tipo[tamanho]; // aloca memória
υ Obs.: A alocação de memória é feita em tempo de execução, logo, o
tamanho das matrizes pode ser calculado durante a execução do
programa.
ν
Exemplo
char[] m = new char[200];
ν
Inicialização
int[]
a = { 1, 2, 3, 4, 5};
int[][] b = { {1,2,3} {4,5,6} };
1
Exemplo: matrizes
// declaração de duas matrizes
int[] vetInt1 = { 1, 3, 5, 7, 9, 11 };
int[] vetInt2 = new int[vetInt1.length * 2];
// loop de inicialização
for( int i=0; i < vetInt1.length; i++) {
vetInt2[i*2] = vetInt1[i];
vetInt2[i*2+1] = vetInt1[i] + 1;
}
// loop de impressão
for( int i=0; i < vetInt2.length; i++)
System.out.println(vetInt2[i]);
1
A classe ArrayList
ν
ν
ν
ArrayList é um array que pode
mudar de tamanho depois de
sua criação (+- lista
dinamicamente encadeada)
Assim como no array, os
objetos são recuperados pela
sua posição
Principais métodos
υ add(Objeto)
υ get(posição)
υ remove(Objeto)
υ int size()
υ int indexOf(Objeto)
import java.util.*;
...
ArrayList valores =
new ArrayList();
valores.add (“uma casa”);
valores.add (“está limpa”);
for (int i=0; i <
valores.size(); i++) {
System.out.println(
valores.get(i));
}
Collections.sort(valores);
// Exerc: repetir a impressão
1
A classe HashMap
ν
É um container que armazena os objetos na forma de tabelas
Hash.
Φ
Φ
Rápido acesso para consulta (não é uma estrutura seqüencial)
Os objetos são recuperados por meio de uma chave de acesso
• Para cada objeto há uma chave de entrada na tabela (método
hashValue determina o ponto de entrada - a classe Object implementa
este método, que pode ser sobre-escrito)
Φ
ν
Os objetos não tem uma ordem
Principais métodos
Φ
Φ
Φ
Φ
Φ
Object put(ObjetoChave, Objeto)
Object get(ObjetoChave)
boolean containsValue(Objeto)
Object remove(ObjectoChave)
int size()
1
ExemploHash
HashMap dados = new HashMap();
...
do {
cod = teclado.readLine();
if (! cod.equalsIgnoreCase("fim")) {
nome = teclado.readLine();
dados.put(cod,nome);
}
} while (! cod.equalsIgnoreCase("fim"));
do {
cod = teclado.readLine();
nome = (String)dados.get(cod);
if (nome != null)
System.out.println(nome);
} while (! cod.equalsIgnoreCase("fim"));
1
Exercícios
ν
Ler dois arrays de 10 números reais (A e B) e
Φ
Φ
Φ
ν
ν
calcular S = (A[1] * B[10]) + (A[2] * B[9]) + ...
calcular C, sendo C[i] = A[i] / B[i], e imprimi-lo invertido
imprimir os números pares de A (considerando a parte inteira dos
números)
Fazer um programa que leia várias linhas (até ser digitado fim)
e as imprima na ordem inversa da digitação
Fazer um programa que leia o número da conta corrente de
clientes e seus nomes. Depois, para cada número digitado,
imprima o nome do correntista.
1
Resumo
ν
ν
ν
ν
ν
Integer a = new Integer(“10”)
int b = a.intValue() + 2;
String x StringBuffer
String[] vs = new String[10]
vs[3] = “teste”
ArrayList al = new
ArrayList()
Float f = (Float)al.get(2)
Iterator i = al.iterator()
i.next(); i.next()
Float f = (Float) i.next();
ν
ν
ν
Quando usar matriz, ArrayList ou
HashMap?
Existem outros containers no
pacote java?
Pode-se definir novos containers
baseados nos existentes?
1
Download